Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
John McEleney
/
mailutils
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
Commit
6e68061b
...
6e68061b7f2281fe58e8c79144e456629f2abed4
authored
2005-02-23 14:42:20 +0000
by
Sergey Poznyakoff
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Script for synchronizing with gnulib
1 parent
814d040e
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
356 additions
and
0 deletions
scripts/gnulib-sync
scripts/gnulib-sync
0 → 100755
View file @
6e68061
#! /bin/sh
# Copyright (C) 2005 Free Software Foundation, Inc.
#
# GNU Mailutils is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2, or (at
# your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc.
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
LC_ALL
=
C
export
LC_ALL
CVSFILES
=
cvsfiles.
$$
CHANGELOG
=
changelog.
$$
usage
()
{
cat
<<-EOF
usage: $0 GNULIB-DIR
$0 synchronizes mailutils library with gnulib.
GNULIB-DIR is the directory where gnulib sources reside. The program
reads file gnulib.modules, populates the mailutils tree with the
necessary files from GNULIB-DIR and updates Makefile.am-s.
Options:
--verbose Display every operation
--dry-run Do not do anything, just print what would have been done
--help Display this help list
EOF
}
error
()
{
echo
$*
>&2
echo
"Try
$0
--help for more information"
>&2
exit
1
}
DRY_RUN
=
VERBOSE
=
while
[
$#
-ne 0
]
do
case
$1
in
--help
)
usage
exit
0;;
--dry-run
)
DRY_RUN
=
1;
shift
;;
--verbose
)
VERBOSE
=
1;
shift
;;
--
*
)
echo
>&2
"
$0
:
$1
: unknown option"
exit
1;;
*
)
break
;;
esac
done
if
[
$#
-ne 1
]
;
then
error
"Wrong number of arguments"
fi
GNULIB_SRCDIR
=
$1
# Check the correctness of the invocation
if
[
-r configure.ac
]
;
then
if
grep -q
'AC_INIT(\[GNU Mailutils'
configure.ac;
then
:
else
error
"This does not seem a mailutils package."
fi
else
error
"Cannot find configure.ac"
fi
if
[
-r gnulib.modules
]
;
then
:
else
error
"gnulib.modules does not exist."
exit
1
fi
if
[
-d
$GNULIB_SRCDIR
]
;
then
:
else
echo
"
$GNULIB_SRCDIR
: not found or is not a directory"
>&2
exit
1
fi
<
$GNULIB_SRCDIR
/gnulib-tool
||
error
"gnulib-tool is not present?!?"
#####################
## Functions
#####################
get_modules
()
{
while
read
NAME
do
case
$NAME
in
""
)
;;
\#
*
)
;;
:
*
)
variable
=
`
echo
$NAME
| cut -c2-
`
case
$variable
in
lib|mailbox
)
;;
*
)
echo
"Unknown variable
$variable
"
>&2
exit
1;;
esac
;;
*
)
eval
${
variable
}
_modules
=
\"\$
${
variable
}
_modules
$NAME
\"
esac
done
<
$1
}
expand_modules
()
{
eval
gnulib_modules
=
"
\$
${
1
}
"
gnulib_modules
=
"
`
echo
$gnulib_modules
| sort -u -
`
"
previous_gnulib_modules
=
while
[
"
$gnulib_modules
"
!
=
"
$previous_gnulib_modules
"
]
do
previous_gnulib_modules
=
$gnulib_modules
gnulib_modules
=
`
(
echo
"
$gnulib_modules
"
for
module
in
$gnulib_modules
;
do
$GNULIB_SRCDIR
/gnulib-tool --extract-dependencies
$module
done
)
| sort -u
`
done
eval
${
1
}
=
\"
$gnulib_modules
\"
}
verbose
()
{
[
-n
"
$VERBOSE
"
]
&&
echo
$*
}
do_copy
()
{
case
$1
in
*
.m4
)
verbose
"
${
3
:-
Copying
}
$1
to
$2
"
if
[
-z
"
$DRY_RUN
"
]
;
then
if
[
-n
"
$3
"
]
;
then
sed
"
$3
"
$1
>
$2
||
exit
else
cp
$1
$2
||
exit
fi
fi
;;
*
)
verbose
"Copying
$1
to
$2
"
if
[
-z
"
$DRY_RUN
"
]
;
then
cp
$1
$2
||
exit
fi
;;
esac
echo
$2
>>
$CVSFILES
}
# copy_files dir
copy_files
()
{
eval
list
=
"
\$
${
1
}
_modules"
files
=
`
$GNULIB_SRCDIR
/gnulib-tool --extract-filelist
$list
| sort -u
`
echo
"
$files
"
| sed
's,/[^/]*$,,'
| sort -u |
sed
"s/lib/
$1
/;s/config/scripts/"
|
while
read
DIR
do
if
[
-d
$DIR
]
;
then
:
else
echo
"Directory
$DIR
does not exist!"
>&2
echo
"Update gnulib-sync script!"
>&2
exit
1
fi
done
for
file
in
$files
do
dest
=
`
echo
$file
| sed
"s/lib/
$1
/;s/config
\/
/scripts
\/
/"
`
case
$file
in
m4/codeset.m4
)
continue
;;
m4/intdiv0.m4
)
continue
;;
m4/inttypes-pri.m4
)
continue
;;
m4/isc-posix.m4
)
continue
;;
m4/lcmessage.m4
)
continue
;;
m4/onceonly_2_57.m4
)
dest
=
m4/onceonly.m4;;
# These will be overwritten by autopoint, which still uses
# old jm_.* macro names, so we have to keep both copies.
m4/gettext.m4 | m4/glibc21.m4 | m4/inttypes_h.m4 | m4/lib-ld.m4 |
\
m4/lib-prefix.m4 | m4/po.m4 | m4/stdint_h.m4 | m4/uintmax_t.m4 |
\
m4/longlong.m4 | m4/ulonglong.m4
)
dest
=
`
expr
$file
:
'\(.*\).m4'
`
_gl.m4;;
esac
rm -f
$dest
&&
do_copy
$GNULIB_SRCDIR
/
$file
$dest
$2
done
}
create_m4_wrapper
()
{
(
eval
list
=
"
\$
${
1
}
_modules"
if
[
$#
-eq 1
]
;
then
libname
=
lib
$1
else
libname
=
$2
fi
echo
"AC_DEFUN([
${
libname
}
_GNULIB],["
for
module
in
$list
do
echo
"#
$module
"
$GNULIB_SRCDIR
/gnulib-tool --extract-autoconf-snippet
$module
done
echo
"])"
)
| sed
'/AM_GNU_GETTEXT/d'
}
update_makefile_am
()
{
eval
list
=
"
\$
${
1
}
_modules"
if
[
$#
-eq 1
]
;
then
libname
=
lib
$1
else
libname
=
$2
fi
cat
$1
/Makefile.am | sed
'/##:##.*##:##/,$d'
echo
"##:## EOF marker for gnulib-sync script. Please, do not remove ##:##"
echo
"## Do not change anything below this line ##"
$GNULIB_SRCDIR
/gnulib-tool --extract-automake-snippet
$list
|
sed
"s/lib_/
${
libname
}
_la_/g"
}
# Update EXTRA_DIST variables based on MU_LIBSOURCES and MU_LIBOBJ
# FIXME: This needs cleaning up. First, the output list should be
# filtered through `sort -u'. Secondly, the actual value of EXTRA_DIST
# must be considered too.
update_extra_dist
()
{
file
=
$1
/Makefile.am
shift
# The following sed program does not work: s/[\[\]]//g. A bug in sed?
#
find m4 -name
'*.m4'
-not -name mu_libobj.m4 |
xargs sed -n
\
'/MU_LIBSOURCES/{s/,//g;s/.*MU_LIBSOURCES *( *\[\(.*\)\]).*/\1/p;};/MU_LIBOBJ/{s/\[//g;s/\]//g;s/.*MU_LIBOBJ *(\(.*\)).*/\1.c/p;};/MU_REPLACE_FUNCS/{s/\[//g;s/\]//g;s/.*MU_REPLACE_FUNCS *(\(.*\)).*/\1.c/p;}'
|
(
EXTRA_DIST
=
while
read
NAME;
do
EXTRA_DIST
=
"
$EXTRA_DIST
$NAME
"
;
done
if
[
-n
"
$EXTRA_DIST
"
]
;
then
echo
"EXTRA_DIST +=
$EXTRA_DIST
"
fi
)
}
cvs_commands
()
{
echo
"<<<<<< Update by gnulib-sync. Please edit before applying"
>
$CHANGELOG
echo
""
>>
$CHANGELOG
echo
"# CVS commands generated by gnulib-sync at
`
date
`
"
echo
"# Please edit before applying"
sort
$CVSFILES
|
while
read
NAME
do
dir
=
`
expr
$NAME
:
'\(.*\)/.*'
`
name
=
`
expr
$NAME
:
'.*/\(.*\)'
`
if
[
-r
$dir
/CVS/Entries
]
;
then
if
grep -q
$name
$dir
/CVS/Entries;
then
comment
=
"Updated"
else
comment
=
"Added to the repository"
echo
"cvs add
$NAME
"
fi
echo
"cvs commit -m '
$comment
by gnulib-sync'
$NAME
"
echo
" *
$NAME
:
$comment
"
>>
$CHANGELOG
fi
done
echo
">>>>>>"
>>
$CHANGELOG
}
cleanup
()
{
rm -f
$CVSFILES
$CHANGELOG
}
#####################
## OK, let's start!
#####################
cat /dev/null >
$CVSFILES
trap
cleanup 1 2 13 15
get_modules gnulib.modules
expand_modules lib_modules
expand_modules mailbox_modules
MODLIST
=
for
mod
in
$lib_modules
do
if
echo
"
$mailbox_modules
"
| grep -q
"
$mod
"
-;
then
:
else
MODLIST
=
"
$MODLIST
$mod
"
fi
done
lib_modules
=
`
echo
$MODLIST
| sort -u
`
mailbox_modules
=
`
echo
$mailbox_modules
| sort -u
`
copy_files lib
copy_files mailbox
's/AC_LIBSOURCES/MU_LIBSOURCES/;s/AC_REPLACE_FUNCS/MU_REPLACE_FUNCS/;s/AC_LIBOBJ/MU_LIBOBJ/'
if
[
-n
"
$DRY_RUN
"
]
;
then
echo
"-----BEGIN gnulib.m4 FILE-----"
create_m4_wrapper lib mailutils
create_m4_wrapper mailbox
echo
"-----END gnulib.m4 FILE-----"
echo
""
echo
"-----BEGIN lib/Makefile.am FILE-----"
update_makefile_am lib libmailutils
echo
"-----END lib/Makefile.am FILE-----"
echo
""
echo
"-----BEGIN mailbox/Makefile.am FILE-----"
update_makefile_am mailbox
update_extra_dist mailbox m4/
*
.m4
echo
"-----END mailbox/Makefile.am FILE-----"
echo
"-----BEGIN CVS COMMANDS-----"
cvs_commands
echo
"-----END CVS COMMANDS-----"
echo
"-----BEGIN ChangeLog ENTRY-----"
cat
$CHANGELOG
echo
"-----END ChangeLog ENTRY-----"
else
verbose
"Creating gnulib.m4"
(
echo
"# This file is generated automatically. Please, do not edit."
echo
"#"
create_m4_wrapper lib libmailutils
create_m4_wrapper mailbox
)
> m4/gnulib.m4
verbose
"Creating lib/Makefile.am"
update_makefile_am lib libmailutils > lib/Makefile.am.
$$
mv lib/Makefile.am.
$$
lib/Makefile.am
verbose
"Creating mailbox/Makefile.am"
(
update_makefile_am mailbox
update_extra_dist mailbox m4/
*
.m4
)
> mailbox/Makefile.am.
$$
mv mailbox/Makefile.am.
$$
mailbox/Makefile.am
cvs_commands > gnulib.cvs
mv
$CHANGELOG
gnulib.changelog
echo
"See gnulib.cvs and gnulib.changelog"
fi
cleanup
exit
0
Please
register
or
sign in
to post a comment