X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=gnulib-tool;h=6dcee926509ff014ec7e8ed0e4482848ef080543;hb=6286aba7da0cee73276babaf4d79d67f91f368d2;hp=d5991fc5dbbc24b66ffdf39839fbce84f9ee3af9;hpb=6f99528a90dc8e6beb07ac5ced73770ed82a0830;p=gnulib.git diff --git a/gnulib-tool b/gnulib-tool index d5991fc5d..6dcee9265 100755 --- a/gnulib-tool +++ b/gnulib-tool @@ -1,6 +1,6 @@ #! /bin/sh # -# Copyright (C) 2002, 2003 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -22,23 +22,20 @@ progname=$0 package=gnulib -cvsdatestamp='$Date: 2003-01-20 10:02:37 $' +cvsdatestamp='$Date: 2004-09-29 05:58:14 $' 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. @@ -46,7 +43,7 @@ func_usage () { echo "\ Usage: gnulib-tool --list - gnulib-tool --import module1 ... moduleN + gnulib-tool --import [MODULE...] gnulib-tool --create-testdir --dir=directory module1 ... moduleN gnulib-tool --create-megatestdir --dir=directory [module1 ... moduleN] gnulib-tool --test --dir=directory module1 ... moduleN @@ -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,12 +73,26 @@ 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: --dir=DIRECTORY specify the target directory - --lib=libRARY specify the library name + For --import, this specify where your + configure.ac can be found. Defaults to current + directory. + --lib=LIBRARY Specify the library name. Defaults to 'libgnu'. + --source-base=DIRECTORY + Directory relative --dir where source code is + 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 ." } @@ -110,12 +122,23 @@ func_fatal_error () # - mode list or import or create-testdir or create-megatestdir # - destdir from --dir # - libname from --lib +# - sourcebase from --source-base +# - 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=libfoo + libname=libgnu + sourcebase= + m4base= + libtool= do_changelog=: + dry_run= + lgpl= + + supplied_opts="$@" while test $# -gt 0; do case "$1" in @@ -156,13 +179,44 @@ 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 + if test $# = 0; then + func_fatal_error "missing argument for --source-base" + fi + sourcebase=$1 + shift ;; + --source-base=* ) + sourcebase=`echo "X$1" | sed -e 's/^X--source-base=//'` + shift ;; + --m4-base ) + shift + if test $# = 0; then + func_fatal_error "missing argument for --m4-base" + fi + m4base=$1 + shift ;; + --m4-base=* ) + m4base=`echo "X$1" | sed -e 's/^X--m4-base=//'` + shift ;; + --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 ;; @@ -197,7 +251,7 @@ case "$0" in fi ;; esac -while test -L "$self_abspathname"; do +while test -h "$self_abspathname"; do # Resolve symbolic link. sedexpr1='s, -> ,#%%#,' sedexpr2='s,^.*#%%#\(.*\)$,\1,p' @@ -231,11 +285,17 @@ func_verify_module () fi } -tags_regexp='\(Description\|Files\|Depends-on\|configure\.ac\|Makefile\.am\|Include\)' sed_extract_prog=':[ ]*$/ { :a n - s/^'"$tags_regexp"':[ ]*$// + s/^Description:[ ]*$// + s/^Files:[ ]*$// + s/^Depends-on:[ ]*$// + s/^configure\.ac:[ ]*$// + s/^Makefile\.am:[ ]*$// + s/^Include:[ ]*$// + s/^License:[ ]*$// + s/^Maintainer:[ ]*$// tb p ba @@ -281,6 +341,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 () { @@ -300,6 +366,11 @@ func_create_testdir () for module in $modules; do func_verify_module if test -n "$module"; then + # Duplicate dependenies are harmless, but Jim wants a warning. + duplicated_deps=`func_get_dependencies $module | sort | uniq -d` + if test -n "$duplicated_deps"; then + echo "warning: module $module has duplicated dependencies: "`echo $duplicated_deps` 1>&2 + fi xmodules="$xmodules $module "`func_get_dependencies $module` fi done @@ -421,6 +492,10 @@ func_create_testdir () echo "AC_GNU_SOURCE" echo fi + if grep gl_USE_SYSTEM_EXTENSIONS "$testdir"/m4/*.m4 > /dev/null; then + echo "gl_USE_SYSTEM_EXTENSIONS" + echo + fi for module in $modules; do func_verify_module if test -n "$module"; then @@ -437,14 +512,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" @@ -502,12 +571,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 ) } @@ -520,7 +585,267 @@ case $mode in ;; import ) - func_fatal_error "NYI" ;; + # Where to import. + if test -z "$destdir"; then + destdir=. + fi + test -d "$destdir" \ + || func_fatal_error "destination directory does not exist: $destdir" + + # 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" || \ + (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" || \ + (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="$ac_modules" + fi + + # Determine final module list. + while true; do + xmodules= + for module in $modules; do + func_verify_module + if test -n "$module"; then + # Duplicate dependenies are harmless, but Jim wants a warning. + duplicated_deps=`func_get_dependencies $module | sort | uniq -d` + if test -n "$duplicated_deps"; then + echo "warning: module $module has duplicated dependencies: "`echo $duplicated_deps` 1>&2 + fi + xmodules="$xmodules $module "`func_get_dependencies $module` + fi + done + xmodules=`for m in $xmodules; do echo $m; done | sort | uniq` + if test "$xmodules" = "$modules"; then + break + fi + modules="$xmodules" + done + 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 + func_verify_module + if test -n "$module"; then + files="$files "`func_get_filelist $module` + fi + done + files=`for f in $files; do echo $f; done | sort | uniq` + 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/,"`; + source=true ;; + m4/*) g=`echo "$f" | sed -e "s,^m4/,$m4base/,"` ;; + *) g="$f" ;; + esac + 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 + else + libext=a + perhapsLT= + fi + ( + 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" + 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" + echo "# that contains a configuration script generated by Automake, under" + echo "# the same distribution terms as the rest of that program." + echo "#" + echo "# Generated by gnulib-tool." + echo "#" + echo "# Invoked as: $cmd" + echo "# Reproduce by: $actioncmd" + echo + echo "AUTOMAKE_OPTIONS = 1.8 gnits" + echo + echo "noinst_${perhapsLT}LIBRARIES = $libname.$libext" + echo + echo "${libname}_${libext}_SOURCES =" + echo "${libname}_${libext}_LIBADD = @${perhapsLT}LIBOBJS@" + echo "EXTRA_DIST =" + echo "BUILT_SOURCES =" + echo "SUFFIXES =" + echo "MOSTLYCLEANFILES =" + echo "CLEANFILES =" + echo "DISTCLEANFILES =" + echo "MAINTAINERCLEANFILES =" + for module in $modules; do + func_verify_module + if test -n "$module"; then + func_get_automake_snippet "$module" | sed -e "s,lib_SOURCES,${libname}_${libext}_SOURCES,g" -e "s,lib_OBJECTS,${libname}_${libext}_OBJECTS,g" + if test "$module" = 'alloca'; then + echo "${libname}_${libext}_LIBADD += @ALLOCA@" + fi + fi + done + echo + echo "# Makefile.am ends here" + ) + + # Create gnulib.m4. + 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" + echo "# that contains a configuration script generated by Autoconf, under" + echo "# the same distribution terms as the rest of that program." + echo "#" + echo "# Generated by gnulib-tool." + echo "#" + echo "# Invoked as: $cmd" + echo "# Reproduce by: $actioncmd" + echo + echo "AC_DEFUN([gl_EARLY]," + echo "[" + if grep AC_GNU_SOURCE "$destdir"/$m4base/*.m4 > /dev/null; then + echo " AC_GNU_SOURCE" + fi + if grep gl_USE_SYSTEM_EXTENSIONS "$destdir"/$m4base/*.m4 > /dev/null; then + echo " gl_USE_SYSTEM_EXTENSIONS" + fi + echo "])" + echo + echo "AC_DEFUN([gl_INIT]," + echo "[" + 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./' + fi + done + echo "])" + echo + echo "dnl Usage: gl_MODULES(module1 module2 ...)" + echo "AC_DEFUN([gl_MODULES], [])" + echo + echo "dnl Usage: gl_SOURCE_BASE(DIR)" + echo "AC_DEFUN([gl_SOURCE_BASE], [])" + echo + echo "dnl Usage: gl_M4_BASE(DIR)" + echo "AC_DEFUN([gl_M4_BASE], [])" + 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 ) if test -z "$destdir"; then @@ -644,6 +969,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