error.c, md5.c, regex.c: Use '#if USE_UNLOCKED_IO' instead of
[gnulib.git] / gnulib-tool
index 3fe0264..45ad00f 100755 (executable)
 
 progname=$0
 package=gnulib
-cvsdatestamp='$Date: 2004-08-12 20:47:12 $'
+cvsdatestamp='$Date: 2004-10-04 11:44:19 $'
 last_checkin_date=`echo "$cvsdatestamp" | sed -e 's,^\$[D]ate: ,,'`
 version=`echo "$last_checkin_date" | sed -e 's/ .*$//' -e 's,/,-,g'`
 
 # You can set AUTOCONFPATH to empty if autoconf 2.57 is already in your PATH.
 AUTOCONFPATH=
-case $USER in
-  bruno )
-    AUTOCONFBINDIR=/packages/gnu-inst-autoconf/2.57/bin
-    AUTOCONFPATH="eval env PATH=${AUTOCONFBINDIR}:\$PATH "
-    ;;
-esac
+#case $USER in
+#  bruno )
+#    AUTOCONFBINDIR=/packages/gnu-inst-autoconf/2.57/bin
+#    AUTOCONFPATH="eval env PATH=${AUTOCONFBINDIR}:\$PATH "
+#    ;;
+#esac
 
-AUTOCONF="${AUTOCONFPATH}autoconf"
-AUTOHEADER="${AUTOCONFPATH}autoheader"
-AUTOMAKE="${AUTOCONFPATH}automake-1.7"
-ACLOCAL="aclocal-1.7"
+AUTORECONF="${AUTOCONFPATH}autoreconf"
 
 # func_usage
 # outputs to stdout the --help usage message.
@@ -57,6 +54,7 @@ Usage: gnulib-tool --list
        gnulib-tool --extract-autoconf-snippet module
        gnulib-tool --extract-automake-snippet module
        gnulib-tool --extract-include-directive module
+       gnulib-tool --extract-license module
        gnulib-tool --extract-maintainer module
 
 Operation modes:
@@ -75,6 +73,8 @@ Operation modes:
       --extract-autoconf-snippet   extract the snippet for configure.ac
       --extract-automake-snippet   extract the snippet for lib/Makefile.am
       --extract-include-directive  extract the #include directive
+      --extract-license            report the license terms of the source files
+                                   under lib/
       --extract-maintainer         report the maintainer(s) inside gnulib
 
 Options:
@@ -88,8 +88,11 @@ Options:
                             placed (default \"lib\"), for --import.
       --m4-base=DIRECTORY   Directory relative --dir where *.m4 macros are
                             placed (default \"m4\"), for --import.
+      --lgpl                Abort if modules aren't available under the LGPL.
+                            Also modify license template from GPL to LGPL.
       --libtool             Use libtool rules, for --import.
       --no-changelog        don't update or create ChangeLog files
+      --dry-run             For --import, only print what would have been done.
 
 Report bugs to <bug-gnulib@gnu.org>."
 }
@@ -123,14 +126,19 @@ func_fatal_error ()
 # - m4base          from --m4-base
 # - libtool         true if --libtool was given, blank otherwise
 # - do_changelog    false if --no-changelog was given, : otherwise
+# - dry_run         true if --dry-run was given, blank otherwise
 {
   mode=
   destdir=
   libname=libgnu
-  sourcebase=lib
-  m4base=m4
+  sourcebase=
+  m4base=
   libtool=
   do_changelog=:
+  dry_run=
+  lgpl=
+
+  supplied_opts="$@"
 
   while test $# -gt 0; do
     case "$1" in
@@ -171,9 +179,11 @@ func_fatal_error ()
           func_fatal_error "missing argument for --lib"
         fi
         libname=$1
+       supplied_libname=true
         shift ;;
       --lib=* )
         libname=`echo "X$1" | sed -e 's/^X--lib=//'`
+       supplied_libname=true
         shift ;;
       --source-base )
         shift
@@ -198,9 +208,15 @@ func_fatal_error ()
       --libtool )
         libtool=true
         shift ;;
+      --lgpl )
+        lgpl=true
+        shift ;;
       --no-changelog | --no-changelo | --no-changel | --no-change | --no-chang | --no-chan | --no-cha | --no-ch | --no-c )
         do_changelog=false
         shift ;;
+      --dry-run )
+        dry_run=true
+        shift ;;
       --help | --hel | --he | --h )
         func_usage
         exit 0 ;;
@@ -252,7 +268,7 @@ gnulib_dir=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`
 func_all_modules ()
 {
   (cd "$gnulib_dir/modules" && ls -1) \
-      | sed -e '/^CVS$/d' -e '/^ChangeLog$/d' -e '/^TEMPLATE$/d' -e '/~$/d' \
+      | sed -e '/^CVS$/d' -e '/^ChangeLog$/d' -e '/^README$/d' -e '/^TEMPLATE$/d' -e '/~$/d' \
       | sort
 }
 
@@ -263,6 +279,7 @@ func_verify_module ()
   if test ! -f "$gnulib_dir/modules/$module" \
      || test "CVS" = "$module" \
      || test "ChangeLog" = "$module" \
+     || test "README" = "$module" \
      || test "TEMPLATE" = "$module"; then
     echo "gnulib-tool: module $module doesn't exist" 1>&2
     module=
@@ -278,6 +295,7 @@ sed_extract_prog=':[        ]*$/ {
     s/^configure\.ac:[         ]*$//
     s/^Makefile\.am:[  ]*$//
     s/^Include:[       ]*$//
+    s/^License:[       ]*$//
     s/^Maintainer:[    ]*$//
     tb
     p
@@ -324,6 +342,12 @@ func_get_include_directive ()
   sed -e 's/^\(["<]\)/#include \1/'
 }
 
+# func_get_license module
+func_get_license ()
+{
+  sed -n -e "/^License$sed_extract_prog" < "$gnulib_dir/modules/$1"
+}
+
 # func_get_maintainer module
 func_get_maintainer ()
 {
@@ -489,14 +513,8 @@ func_create_testdir ()
 
   # Create autogenerated files.
   (cd "$testdir"
-   echo "executing ${ACLOCAL} -I m4"
-   ${ACLOCAL} -I m4
-   echo "executing ${AUTOHEADER}"
-   ${AUTOHEADER}
-   echo "executing ${AUTOCONF}"
-   ${AUTOCONF}
-   echo "executing ${AUTOMAKE} --add-missing --copy"
-   ${AUTOMAKE} --add-missing --copy
+   echo "executing ${AUTORECONF} --force --install"
+   ${AUTORECONF} --force --install
   )
   if grep '^BUILT_SOURCES *+=' "$testdir/lib/Makefile.am" > /dev/null; then
     (cd "$testdir"
@@ -554,12 +572,8 @@ func_create_megatestdir ()
 
   # Create autogenerated files.
   (cd "$megatestdir"
-   echo "executing ${ACLOCAL}"
-   ${ACLOCAL}
-   echo "executing ${AUTOCONF}"
-   ${AUTOCONF}
-   echo "executing ${AUTOMAKE} --add-missing --copy Makefile"
-   ${AUTOMAKE} --add-missing --copy Makefile
+   echo "executing ${AUTORECONF} --force --install"
+   ${AUTORECONF} --force --install
   )
 }
 
@@ -572,28 +586,68 @@ case $mode in
     ;;
 
   import )
+       # Where to import.
        if test -z "$destdir"; then
            destdir=.
        fi
        test -d "$destdir" \
            || func_fatal_error "destination directory does not exist: $destdir"
-       sourcebase=`cd $destdir; $AUTOCONF --trace=gl_SOURCE_BASE | sed 's,^.*:,,g'`
+
+        # Prefer configure.ac to configure.in
+       test -f $destdir/configure.in && configure_ac=$destdir/configure.in
+       test -f $destdir/configure.ac && configure_ac=$destdir/configure.ac
+       test -f "$configure_ac" \
+            || func_fatal_error "cannot find $destdir/configure.ac"
+
+       # Get settings.
+       my_sed_traces='s,#.*$,,; s,^dnl .*$,,; s, dnl .*$,,;
+        /gl_MODULES[^_]/  {
+            s,^.*gl_MODULES([[   ]*\([^])]*\).*$,ac_modules="\1",; p;
+        };
+        /gl_SOURCE_BASE/   {
+            s,^.*gl_SOURCE_BASE([[         ]*\([^])]*\).*$,ac_sourcebase="\1",; p;
+        };
+        /gl_M4_BASE/   {
+            s,^.*gl_M4_BASE([[         ]*\([^])]*\).*$,ac_m4base="\1",; p;
+        };
+        /gl_LIB/   {
+            s,^.*gl_LIB([[         ]*\([^])]*\).*$,ac_libname="\1",; p;
+        };
+        /A[CM]_PROG_LIBTOOL/ { s,^.*$,seen_libtool=:,; p; };
+        /LT_INIT/            { s,^.*$,seen_libtool=:,; p; };
+        /gl_LGPL/            { s,^.*$,lgpl=true,; p; };
+        d;'
+       eval `cat $configure_ac | sed "$my_sed_traces"`
+
+       # Override libname?
+       if test -z "$supplied_libname" && test -n "$ac_libname"; then
+           libname="$ac_libname"
+       fi
+
+       # Set up source base.
+       test -z "$sourcebase" && sourcebase="$ac_sourcebase"
+       test -z "$sourcebase" && sourcebase="lib"
        test -d "$destdir/$sourcebase" || \
-           mkdir "$destdir/$sourcebase" || \
-           func_fatal_error \
-           "could not create source base directory: $destdir/$sourcebase"
-       m4base=`cd $destdir; $AUTOCONF --trace=gl_M4_BASE | sed 's,^.*:,,g'`
+           (test -z "$dry_run" && mkdir "$destdir/$sourcebase") || \
+           func_fatal_error "source base $destdir/$sourcebase doesn't exist"
+
+       # Set up m4 base.
+       test -z "$m4base" && m4base="$ac_m4base"
+       test -z "$m4base" && m4base="m4"
        test -d "$destdir/$m4base" || \
-           mkdir "$destdir/$m4base" || \
-           func_fatal_error \
-           "could not create m4 base directory: $destdir/$m4base"
+           (test -z "$dry_run" && mkdir "$destdir/$m4base") || \
+           func_fatal_error "m4 base $destdir/$m4base doesn't exist"
+
+       # Using libtool?
+       if test x$seen_libtool != x; then
+           libtool=true
+       fi
+
+       # What modules to extract.
        supplied_modules="$*"
        modules=`for m in $supplied_modules; do echo $m; done | sort | uniq`
        if test -z "$modules"; then
-           modules=`cd $destdir; $AUTOCONF --trace=gl_MODULES | sed 's,^.*:,,g'`
-       fi
-       if test x`cd $destdir; $AUTOCONF --trace=AC_PROG_LIBTOOL` != x; then
-           libtool=true
+           modules="$ac_modules"
        fi
 
         # Determine final module list.
@@ -619,6 +673,17 @@ case $mode in
        echo "Module list with included dependencies:"
        echo "$modules" | sed -e 's/^/  /'
 
+       # If --lgpl, check the license of modules are compatible.
+       if test -n "$lgpl"; then
+           for module in $modules; do
+               license=`sed -n -e "/^License$sed_extract_prog" < "$gnulib_dir/modules/$module"`
+               if test $license != LGPL; then
+                   func_fatal_error \
+                   "incompatible license on module \`$module\`: $license"
+               fi
+           done
+       fi
+
         # Determine final file list.
        files=
        for module in $modules; do
@@ -631,18 +696,41 @@ case $mode in
        echo "File list:"
        echo "$files" | sed -e 's/^/  /'
 
+       test -n "$files" \
+           || func_fatal_error "refusing to do nothing"
+
         # Copy files.
        for f in $files; do
+           source=
            case "$f" in
                config/*) g=`echo "$f" | sed -e 's,^config/,,'` ;;
-               lib/*) g=`echo "$f" | sed -e "s,^lib/,$sourcebase/,"` ;;
+               lib/*) g=`echo "$f" | sed -e "s,^lib/,$sourcebase/,"`;
+                   source=true ;;
                m4/*) g=`echo "$f" | sed -e "s,^m4/,$m4base/,"` ;;
                *) g="$f" ;;
            esac
-           cp -p "$gnulib_dir/$f" "$destdir/$g"
+           test -n "$dry_run" && dry=echo
+           $dry cp -p "$gnulib_dir/$f" "$destdir/$g"
+           # Update license.
+           if test -z "$dry_run" -a -n "$lgpl" -a -n "$source"; then
+               perl -pi -e 's/GNU General/GNU Lesser General/g;' \
+                   -e 's/version 2([ ,])/version 2.1\1/g' $destdir/$g
+           fi
        done
 
+       # Commands printed in a comment in generated files.
+       cmd="gnulib-tool $supplied_opts"
+       opt_libtool=
+       if test -n "$libtool"; then
+           opt_libtool="--libtool"
+       fi
+       if test -n "$lgpl"; then
+           opt_lgpl="--lgpl"
+       fi
+       actioncmd="gnulib-tool --import --dir=$destdir --lib=$libname --source-base=$sourcebase --m4-base=$m4base $opt_libtool $opt_lgpl `echo $modules`"
+
         # Create lib/Makefile.am.
+       echo "Creating $destdir/$sourcebase/Makefile.am..."
        if test -n "$libtool"; then
            libext=la
            perhapsLT=LT
@@ -650,7 +738,13 @@ case $mode in
            libext=a
            perhapsLT=
        fi
-       (echo "## Process this file with automake to produce Makefile.in."
+       (
+           if test -z "$dry_run"; then
+               exec > $destdir/$sourcebase/Makefile.am
+           else
+               echo "# $destdir/$sourcebase/Makefile.am"
+           fi
+           echo "## Process this file with automake to produce Makefile.in."
            echo "# Copyright (C) 2004 Free Software Foundation, Inc."
            echo "#"
            echo "# This file is free software, distributed under the terms of the GNU"
@@ -661,11 +755,8 @@ case $mode in
            echo "#"
            echo "# Generated by gnulib-tool."
            echo "#"
-           opt_libtool=
-           if test -n "$libtool"; then
-               opt_libtool="--libtool"
-           fi
-           echo "# gnulib-tool --import --dir=$destdir --lib=$libname --source-base=$sourcebase --m4-base=$m4base $opt_libtool $supplied_modules"
+           echo "# Invoked as: $cmd"
+           echo "# Reproduce by: $actioncmd"
            echo
            echo "AUTOMAKE_OPTIONS = 1.8 gnits"
            echo
@@ -689,10 +780,19 @@ case $mode in
                    fi
                fi
            done
-       ) > "$destdir/$sourcebase/Makefile.am"
+           echo
+           echo "# Makefile.am ends here"
+       )
 
         # Create gnulib.m4.
-       (echo "# Copyright (C) 2004 Free Software Foundation, Inc."
+       echo "Creating $destdir/$m4base/gnulib.m4..."
+       (
+           if test -z "$dry_run"; then
+               exec > $destdir/$m4base/gnulib.m4
+           else
+               echo "# $destdir/$m4base/gnulib.m4"
+           fi
+           echo "# Copyright (C) 2004 Free Software Foundation, Inc."
            echo "# This file is free software, distributed under the terms of the GNU"
            echo "# General Public License.  As a special exception to the GNU General"
            echo "# Public License, this file may be distributed as part of a program"
@@ -701,11 +801,8 @@ case $mode in
            echo "#"
            echo "# Generated by gnulib-tool."
            echo "#"
-           opt_libtool=
-           if test -n "$libtool"; then
-               opt_libtool="--libtool"
-           fi
-           echo "# gnulib-tool --import --dir=$destdir --lib=$libname --source-base=$sourcebase --m4-base=$m4base $opt_libtool $supplied_modules"
+           echo "# Invoked as: $cmd"
+           echo "# Reproduce by: $actioncmd"
            echo
            echo "AC_DEFUN([gl_EARLY],"
            echo "["
@@ -735,7 +832,20 @@ case $mode in
            echo
            echo "dnl Usage: gl_M4_BASE(DIR)"
            echo "AC_DEFUN([gl_M4_BASE], [])"
-       ) > "$destdir/$m4base/gnulib.m4"
+           echo
+           echo "dnl Usage: gl_LIB(LIBNAME)"
+           echo "AC_DEFUN([gl_LIB], [])"
+           echo
+           echo "dnl Usage: gl_LGPL"
+           echo "AC_DEFUN([gl_LGPL], [])"
+           echo
+           echo "# gnulib.m4 ends here"
+       )
+       echo "Finished."
+       echo
+       echo "Don't forget to add \"$sourcebase/Makefile\""
+       echo "to AC_CONFIG_FILES in \"$configure_ac\" and to mention"
+       echo "\"`basename $sourcebase`\" in SUBDIRS in some Makefile.am."
        ;;
 
   create-testdir )
@@ -860,6 +970,16 @@ case $mode in
     done
     ;;
 
+  extract-license )
+    for module
+    do
+      func_verify_module
+      if test -n "$module"; then
+        func_get_license "$module"
+      fi
+    done
+    ;;
+
   extract-maintainer )
     for module
     do