X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=gnulib-tool;h=362de0eaa8eaf17948149ebff0428e602371a544;hb=3585608d42307ab95969d64555a9c2f92fd90caa;hp=9aaa1b15ff4fde53ceb4adc9268e01f1b42a65dd;hpb=83df31cca09b0cc980065a95f44324e33cd59ffa;p=gnulib.git diff --git a/gnulib-tool b/gnulib-tool index 9aaa1b15f..362de0eaa 100755 --- a/gnulib-tool +++ b/gnulib-tool @@ -13,8 +13,8 @@ # 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # This program is meant for authors or maintainers which want to import @@ -22,7 +22,7 @@ progname=$0 package=gnulib -cvsdatestamp='$Date: 2006-01-09 13:27:12 $' +cvsdatestamp='$Date: 2006-01-26 12:51:48 $' last_checkin_date=`echo "$cvsdatestamp" | sed -e 's,^\$[D]ate: ,,'` version=`echo "$last_checkin_date" | sed -e 's/ .*$//' -e 's,/,-,g'` @@ -35,7 +35,23 @@ AUTOCONFPATH= # ;; #esac -AUTORECONF="${AUTOCONFPATH}autoreconf" +# You can set AUTOMAKEPATH to empty if automake 1.9.x is already in your PATH. +AUTOMAKEPATH= + +# If you didn't set AUTOCONFPATH and AUTOMAKEPATH, you can also set the +# variables AUTOCONF, ACLOCAL, AUTOMAKE, AUTORECONF individually. +if test -z "${AUTOCONF}" || test -n "${AUTOCONFPATH}"; then + AUTOCONF="${AUTOCONFPATH}autoconf" +fi +if test -z "${ACLOCAL}" || test -n "${AUTOMAKEPATH}"; then + ACLOCAL="${AUTOMAKEPATH}aclocal" +fi +if test -z "${AUTOMAKE}" || test -n "${AUTOMAKEPATH}"; then + AUTOMAKE="${AUTOMAKEPATH}automake" +fi +if test -z "${AUTORECONF}" || test -n "${AUTOCONFPATH}"; then + AUTORECONF="${AUTOCONFPATH}autoreconf" +fi # func_usage # outputs to stdout the --help usage message. @@ -136,7 +152,7 @@ func_tmpdir () { # Use the mktemp program if available. If not available, hide the error # message. - tmp=`(umask 077 && mktemp -d -q "$TMPDIR/glXXXXXX") 2>/dev/null` && + tmp=`(umask 077 && mktemp -d "$TMPDIR/glXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { @@ -628,6 +644,40 @@ func_modules_transitive_closure () done } +# func_modules_add_dummy +# Input: +# - modules list of modules, including dependencies +# Output: +# - modules list of modules, including 'dummy' if needed +func_modules_add_dummy () +{ + have_lib_SOURCES= + sed_remove_backslash_newline=':a +/\\$/{ +s/\\$// +N +s/\n// +ba +}' + for module in $modules; do + func_verify_nontests_module + if test -n "$module"; then + # Extract the value of "lib_SOURCES += ...". + for file in `func_get_automake_snippet "$module" | sed -e "$sed_remove_backslash_newline" | sed -n -e 's,^lib_SOURCES[ ]*+=\([^#]*\).*$,\1,p'`; do + # Ignore .h files since they are not compiled. + case "$file" in + *.h) ;; + *) have_lib_SOURCES=yes ;; + esac + done + fi + done + # Add the dummy module, to make sure the library will be non-empty. + if test -z "$have_lib_SOURCES"; then + modules="$modules dummy" + fi +} + # func_modules_to_filelist # Input: # - modules list of modules, including dependencies @@ -682,6 +732,7 @@ func_emit_lib_Makefile_am () echo echo "${libname}_${libext}_SOURCES =" echo "${libname}_${libext}_LIBADD = @${perhapsLT}LIBOBJS@" + echo "noinst_HEADERS =" echo "EXTRA_DIST =" echo "BUILT_SOURCES =" echo "SUFFIXES =" @@ -748,9 +799,15 @@ func_emit_tests_Makefile_am () echo echo "ACLOCAL_AMFLAGS = -I ${testsbase_inverse}/${m4base}" echo + # Nothing is being added to SUBDIRS; nevertheless the existence of this + # variable is needed to avoid an error from automake: + # "AM_GNU_GETTEXT used but SUBDIRS not defined" + echo "SUBDIRS =" echo "TESTS =" echo "TESTS_ENVIRONMENT =" echo "noinst_PROGRAMS =" + echo "check_PROGRAMS =" + echo "noinst_HEADERS =" echo "EXTRA_DIST =" echo "BUILT_SOURCES =" echo "SUFFIXES =" @@ -933,6 +990,9 @@ func_import () echo "Module list with included dependencies:" echo "$modules" | sed -e 's/^/ /' + # Add the dummy module if needed. + func_modules_add_dummy + # If --lgpl, check the license of modules are compatible. if test -n "$lgpl"; then for module in $modules; do @@ -1020,7 +1080,8 @@ func_import () echo "$g""$delimiter""$f" done | LC_ALL=C sort > "$tmp"/new-files # First the files that are in old-files, but not in new-files: - for g in `LC_ALL=C join -t"$delimiter" -v1 "$tmp"/old-files "$tmp"/new-files | sed -e 's,'"$delimiter"'.*,,'`; do + sed_take_first_column='s,'"$delimiter"'.*,,' + for g in `LC_ALL=C join -t"$delimiter" -v1 "$tmp"/old-files "$tmp"/new-files | sed -e "$sed_take_first_column"`; do # Remove the file. Do nothing if the user already removed it. if test -f "$destdir/$g"; then if $doit; then @@ -1090,8 +1151,9 @@ func_import () rm -f "$destdir/$g.tmp" } # Then the files that are in new-files, but not in old-files: + sed_take_last_column='s,^.*'"$delimiter"',,' already_present= - for f in `LC_ALL=C join -t"$delimiter" -v2 "$tmp"/old-files "$tmp"/new-files | sed -e 's,'^.*"$delimiter"',,'`; do + for f in `LC_ALL=C join -t"$delimiter" -v2 "$tmp"/old-files "$tmp"/new-files | sed -e "$sed_take_last_column"`; do case "$f" in build-aux/*) g=`echo "$f" | sed -e "s,^build-aux/,$auxdir/,"` ;; lib/*) g=`echo "$f" | sed -e "s,^lib/,$sourcebase/,"` ;; @@ -1103,7 +1165,7 @@ func_import () done # Then the files that are in new-files and in old-files: already_present=true - for f in `LC_ALL=C join -t"$delimiter" "$tmp"/old-files "$tmp"/new-files | sed -e 's,'^.*"$delimiter"',,'`; do + for f in `LC_ALL=C join -t"$delimiter" "$tmp"/old-files "$tmp"/new-files | sed -e "$sed_take_last_column"`; do case "$f" in build-aux/*) g=`echo "$f" | sed -e "s,^build-aux/,$auxdir/,"` ;; lib/*) g=`echo "$f" | sed -e "s,^lib/,$sourcebase/,"` ;; @@ -1114,7 +1176,13 @@ func_import () func_add_or_update done rm -rf "$tmp" - trap - 0 1 2 3 15 + # Undo the effect of the previous 'trap' command. Some shellology: + # We cannot use "trap - 0 1 2 3 15", because Solaris sh would attempt to + # execute the command "-". "trap '' ..." is fine only for signal 0 (= normal + # exit); for the others we need to call 'exit' explicitly. The value of $? is + # 128 + signal number and is set before the trap-registered command is run. + trap '' 0 + trap 'exit $?' 1 2 3 15 # Command-line invocation printed in a comment in generated gnulib-cache.m4. actioncmd="gnulib-tool --import" @@ -1249,6 +1317,9 @@ func_import () if grep gl_USE_SYSTEM_EXTENSIONS "$destdir"/$m4base/*.m4 > /dev/null; then echo " AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])" fi + if grep gl_LOCK "$destdir"/$m4base/*.m4 > /dev/null; then + echo " AC_REQUIRE([gl_LOCK])" + fi echo "])" echo echo "# This macro should be invoked from $configure_ac, in the section" @@ -1260,10 +1331,24 @@ func_import () else echo " AM_CONDITIONAL([GL_COND_LIBTOOL], [true])" fi + if test "$auxdir" != "build-aux"; then + sed_replace_build_aux=' + :a + /AC_CONFIG_FILES(.*:build-aux\/.*)/{ + s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:'"$auxdir"'/\2)| + ba + }' + sed_replace_build_aux=`echo "$sed_replace_build_aux" | sed -e 1d -e 's/^ *//'` + else + sed_replace_build_aux= + fi for module in $modules; do func_verify_module if test -n "$module"; then - func_get_autoconf_snippet "$module" | sed -e '/^$/d;' -e 's/^/ /' -e 's/AM_GNU_GETTEXT(\[external\])/dnl you must add AM_GNU_GETTEXT([external]) or similar to configure.ac./' + func_get_autoconf_snippet "$module" \ + | sed -e '/^$/d;' -e 's/^/ /' \ + -e 's/AM_GNU_GETTEXT(\[external\])/dnl you must add AM_GNU_GETTEXT([external]) or similar to configure.ac./' \ + -e "$sed_replace_build_aux" if test "$module" = 'alloca' && test -n "$libtool"; then echo 'changequote(,)dnl' echo 'LTALLOCA=`echo "$ALLOCA" | sed '"'"'s/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'"'"'`' @@ -1375,6 +1460,9 @@ func_create_testdir () echo "Module list with included dependencies:" echo "$modules" | sed -e 's/^/ /' + # Add the dummy module if needed. + func_modules_add_dummy + # Determine final file list. func_modules_to_filelist echo "File list:" @@ -1460,24 +1548,41 @@ func_create_testdir () echo "gl_USE_SYSTEM_EXTENSIONS" echo fi + if grep gl_LOCK "$testdir"/m4/*.m4 > /dev/null; then + echo "gl_LOCK" + echo + fi if test -z "$libtool"; then echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [false])" else echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [true])" fi + if test "$auxdir" != "build-aux"; then + sed_replace_build_aux=' + :a + /AC_CONFIG_FILES(.*:build-aux\/.*)/{ + s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:../'"$auxdir"'/\2)| + ba + }' + sed_replace_build_aux=`echo "$sed_replace_build_aux" | sed -e 1d -e 's/^ *//'` + else + sed_replace_build_aux= + fi # We don't have explicit ordering constraints between the various # autoconf snippets. It's cleanest to put those of the library before # those of the tests. for module in $modules; do func_verify_nontests_module if test -n "$module"; then - func_get_autoconf_snippet "$module" + func_get_autoconf_snippet "$module" \ + | sed -e "$sed_replace_build_aux" fi done for module in $modules; do func_verify_tests_module if test -n "$module"; then - func_get_autoconf_snippet "$module" + func_get_autoconf_snippet "$module" \ + | sed -e "$sed_replace_build_aux" fi done echo @@ -1524,15 +1629,31 @@ func_create_testdir () echo "gl_USE_SYSTEM_EXTENSIONS" echo fi + if grep gl_LOCK "$testdir"/m4/*.m4 > /dev/null; then + echo "gl_LOCK" + echo + fi if test -z "$libtool"; then echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [false])" else echo "AM_CONDITIONAL([GL_COND_LIBTOOL], [true])" fi + if test "$auxdir" != "build-aux"; then + sed_replace_build_aux=' + :a + /AC_CONFIG_FILES(.*:build-aux\/.*)/{ + s|AC_CONFIG_FILES(\(.*\):build-aux/\(.*\))|AC_CONFIG_FILES(\1:'"$auxdir"'/\2)| + ba + }' + sed_replace_build_aux=`echo "$sed_replace_build_aux" | sed -e 1d -e 's/^ *//'` + else + sed_replace_build_aux= + fi for module in $modules; do func_verify_nontests_module if test -n "$module"; then - func_get_autoconf_snippet "$module" + func_get_autoconf_snippet "$module" \ + | sed -e "$sed_replace_build_aux" fi done echo @@ -1615,8 +1736,17 @@ func_create_megatestdir () # Create autogenerated files. (cd "$megatestdir" - echo "executing ${AUTORECONF} --install" - ${AUTORECONF} --install + # Do not use "${AUTORECONF} --install", because autoreconf operates + # recursively, but the subdirectories are already finished, therefore + # calling autoreconf here would only waste lots of CPU time. + echo "executing ${ACLOCAL}" + ${ACLOCAL} + echo "executing mkdir build-aux" + mkdir build-aux + echo "executing ${AUTOCONF}" + ${AUTOCONF} + echo "executing ${AUTOMAKE} --add-missing --copy" + ${AUTOMAKE} --add-missing --copy ) }