X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=gnulib-tool;h=8e6fec4412e1aeb2f732725ebf96e04d4c092319;hb=bb037ad8926e663ad33a8a384f6d5c4f26af0fd4;hp=523812b9f55955589a7446036f836840c8c8e7f6;hpb=920c6db743e97848dd89f401f1623ad59acb97d1;p=gnulib.git diff --git a/gnulib-tool b/gnulib-tool index 523812b9f..8e6fec441 100755 --- a/gnulib-tool +++ b/gnulib-tool @@ -177,7 +177,10 @@ Options for --import: 'gl_INIT'. Default is 'gl'. --po-domain=NAME Specify the prefix of the i18n domain. Usually use the package name. A suffix '-gnulib' is appended. - --no-changelog don't update or create ChangeLog files + --vc-files Update version control related files. + --no-vc-files Don't update version control related files + (.gitignore and/or .cvsignore). + --no-changelog Don't update or create ChangeLog files. Options for --import and --update: --dry-run For --import, only print what would have been done. @@ -195,10 +198,39 @@ Report bugs to ." func_version () { func_gnulib_dir - version=`"$gnulib_dir"/build-aux/git-version-gen /dev/null` + if test -d "$gnulib_dir"/.git \ + && (git --version) >/dev/null 2>/dev/null \ + && (date --version) >/dev/null 2>/dev/null; then + # gnulib checked out from git. + sed_extract_first_date='/^Date/{ +s/^Date:[ ]*//p +q +}' + date=`cd "$gnulib_dir" && git log ChangeLog | sed -n -e "$sed_extract_first_date"` + # Turn "Fri Mar 21 07:16:51 2008 -0600" into "Mar 21 2008 07:16:51 -0600". + sed_year_before_time='s/^[^ ]* \([^ ]*\) \([0-9]*\) \([0-9:]*\) \([0-9]*\) /\1 \2 \4 \3 /' + date=`echo "$date" | sed -e "$sed_year_before_time"` + # Use GNU date to compute the time in GMT. + date=`date -d "$date" -u +"%Y-%m-%d %H:%M:%S"` + version=' '`"$gnulib_dir"/build-aux/git-version-gen /dev/null | sed -e 's/-dirty/-modified/'` + else + if test -d "$gnulib_dir"/CVS \ + && (cvs --version) >/dev/null 2>/dev/null; then + # gnulib checked out from CVS. + sed_extract_first_date='/^date: /{ +s/^date: \([0-9][0-9][0-9][0-9]\).\([0-9][0-9]\).\([0-9][0-9]\) \([0-9][0-9]:[0-9][0-9]:[0-9][0-9]\).*/\1-\2-\3 \4/p +q +}' + date=`cd "$gnulib_dir" && cvs log -N ChangeLog 2>/dev/null | sed -n -e "$sed_extract_first_date"` + else + # gnulib copy without versioning information. + date=`sed -e 's/ .*//;q' "$gnulib_dir"/ChangeLog` + fi + version= + fi year=`"$gnulib_dir"/build-aux/mdate-sh "$self_abspathname" | sed 's,^.* ,,'` echo "\ -$progname (GNU $package) $version +gnulib-tool (GNU $package $date)$version Copyright (C) $year Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. @@ -211,7 +243,10 @@ Written by" "Bruno Haible" "and" "Simon Josefsson" # outputs to stdout a header for a generated file. func_emit_copyright_notice () { - echo "# Copyright (C) 2004-2007 Free Software Foundation, Inc." + sed -n '/Copyright/ { + p + q + }' < "$self_abspathname" 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" @@ -680,6 +715,8 @@ fi # given, blank otherwise # - macro_prefix from --macro-prefix # - po_domain from --po-domain +# - vc_files true if --vc-files was given, false if --no-vc-files was +# given, blank otherwise # - autoconf_minversion minimum supported autoconf version # - do_changelog false if --no-changelog was given, : otherwise # - doit : if actions shall be executed, false if only to be printed @@ -707,6 +744,7 @@ fi libtool= macro_prefix= po_domain= + vc_files= do_changelog=: doit=: symbolic= @@ -900,6 +938,12 @@ fi --po-domain=* ) po_domain=`echo "X$1" | sed -e 's/^X--po-domain=//'` shift ;; + --vc-files ) + vc_files=true + shift ;; + --no-vc-files ) + vc_files=false + shift ;; --no-changelog | --no-changelo | --no-changel | --no-change | --no-chang | --no-chan | --no-cha | --no-ch | --no-c ) do_changelog=false shift ;; @@ -948,7 +992,7 @@ fi || test -n "$docbase" || test -n "$testsbase" || test -n "$auxdir" \ || test -n "$inctests" || test -n "$avoidlist" || test -n "$lgpl" \ || test -n "$makefile_name" || test -n "$macro_prefix" \ - || test -n "$po_domain"; then + || test -n "$po_domain" || test -n "$vc_files"; then echo "gnulib-tool: invalid options for 'update' mode" 1>&2 echo "Try 'gnulib-tool --help' for more information." 1>&2 echo "If you really want to modify the gnulib configuration of your project," 1>&2 @@ -1218,8 +1262,7 @@ func_get_filelist () echo m4/gnulib-common.m4 case "$autoconf_minversion" in 2.59) - #echo m4/onceonly.m4 - echo m4/onceonly_2_57.m4 + echo m4/onceonly.m4 ;; esac } @@ -1338,6 +1381,17 @@ func_get_automake_snippet () echo "EXTRA_DIST += "`echo "$buildaux_files" | sed -e "$sed_prepend_auxdir"` echo fi + # Synthesize an EXTRA_DIST augmentation also for the files from top/. + top_files=`for f in $all_files; do \ + case $f in \ + top/*) echo $f ;; \ + esac; \ + done | sed -e 's,^top/,,'` + if test -n "$top_files"; then + sed_prepend_topdir='s,^,$(top_srcdir)/,' + echo "EXTRA_DIST += "`echo "$top_files" | sed -e "$sed_prepend_topdir"` + echo + fi ;; esac } @@ -1992,6 +2046,7 @@ func_emit_initmacro_start () # We let automake know about the files to be distributed through the # EXTRA_lib_SOURCES variable. echo " m4_pushdef([AC_LIBSOURCES], m4_defn([${macro_prefix_arg}_LIBSOURCES]))" + echo " gl_COMMON" } # func_emit_initmacro_end macro_prefix @@ -2086,6 +2141,8 @@ func_emit_initmacro_done () # - guessed_libtool true if the configure.ac file uses libtool, false otherwise # - macro_prefix prefix of gl_EARLY, gl_INIT macros to use # - po_domain prefix of i18n domain to use (without -gnulib suffix) +# - vc_files true if --vc-files was given, false if --no-vc-files was +# given, blank otherwise # - autoconf_minversion minimum supported autoconf version # - doit : if actions shall be executed, false if only to be printed # - symbolic true if files should be symlinked, copied otherwise @@ -2111,6 +2168,7 @@ func_import () cached_libtool= cached_macro_prefix= cached_po_domain= + cached_vc_files= cached_files= if test -f "$destdir"/$m4base/gnulib-cache.m4; then cached_libtool=false @@ -2165,6 +2223,9 @@ func_import () } /gl_PO_DOMAIN(/ { s,^.*gl_PO_DOMAIN([[ ]*\([^])]*\).*$,cached_po_domain="\1",p + } + /gl_VC_FILES(/ { + s,^.*gl_VC_FILES([[ ]*\([^])]*\).*$,cached_vc_files="\1",p }' eval `sed -n -e "$my_sed_traces" < "$destdir"/$m4base/gnulib-cache.m4` if test -f "$destdir"/$m4base/gnulib-comp.m4; then @@ -2283,6 +2344,10 @@ func_import () if test -z "$po_domain"; then po_domain="$cached_po_domain" fi + # The vc_files defaults to the cached one. + if test -z "$vc_files"; then + vc_files="$cached_vc_files" + fi # Canonicalize the list of specified modules. specified_modules=`for m in $specified_modules; do echo $m; done | LC_ALL=C sort -u` @@ -2473,14 +2538,16 @@ func_import () s,^lib/,$cached_sourcebase/, s,^m4/,$cached_m4base/, s,^tests/,$cached_testsbase/, - s,^tests=lib/,$cached_testsbase/," + s,^tests=lib/,$cached_testsbase/, + s,^top/,," sed_rewrite_new_files="\ s,^build-aux/,$auxdir/, s,^doc/,$docbase/, s,^lib/,$sourcebase/, s,^m4/,$m4base/, s,^tests/,$testsbase/, - s,^tests=lib/,$testsbase/," + s,^tests=lib/,$testsbase/, + s,^top/,," # Create directories. { echo "$sourcebase" @@ -2604,7 +2671,7 @@ func_import () if test -n "$already_present"; then echo "Updating file $g (backup in ${g}~)" else - echo "Replacing file $g (non-gnulib code backuped in ${g}~) !!" + echo "Replacing file $g (non-gnulib code backed up in ${g}~) !!" fi mv -f "$destdir/$g" "$destdir/${g}~" || func_fatal_error "failed" if { test -n "$symbolic" \ @@ -2620,7 +2687,7 @@ func_import () if test -n "$already_present"; then echo "Update file $g (backup in ${g}~)" else - echo "Replace file $g (non-gnulib code backuped in ${g}~) !!" + echo "Replace file $g (non-gnulib code backed up in ${g}~) !!" fi fi fi @@ -2713,6 +2780,13 @@ func_import () if test -n "$po_domain"; then func_append actioncmd " --po-domain=$po_domain" fi + if test -n "$vc_files"; then + if test "$vc_files" = true; then + func_append actioncmd " --vc-files" + else + func_append actioncmd " --no-vc-files" + fi + fi func_append actioncmd " `echo $specified_modules`" # Default the makefile name to Makefile.am. @@ -2935,6 +3009,9 @@ func_import () fi echo "gl_MACRO_PREFIX([$macro_prefix])" echo "gl_PO_DOMAIN([$po_domain])" + if test -n "$vc_files"; then + echo "gl_VC_FILES([$vc_files])" + fi ) > "$tmpfile" if test -f "$destdir"/$m4base/gnulib-cache.m4; then if cmp "$destdir"/$m4base/gnulib-cache.m4 "$tmpfile" > /dev/null; then @@ -3142,88 +3219,90 @@ func_import () fi fi - # Update the .cvsignore and .gitignore files. - { echo "$added_files" | sed -e '/^$/d' -e 's,\([^/]*\)$,|A|\1,' - echo "$removed_files" | sed -e '/^$/d' -e 's,\([^/]*\)$,|R|\1,' - } | LC_ALL=C sort -t'|' -k1,1 > "$tmp"/fileset-changes - { # Rearrange file descriptors. Needed because "while ... done < ..." - # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh. - exec 5<&0 < "$tmp"/fileset-changes - func_update_ignorelist () - { - ignore="$1" - if test -f "$destdir/$dir$ignore"; then - if test -n "$dir_added" || test -n "$dir_removed"; then - LC_ALL=C sort "$destdir/$dir$ignore" > "$tmp"/ignore - echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u \ - | LC_ALL=C join -v 2 "$tmp"/ignore - > "$tmp"/ignore-added - echo "$dir_removed" | sed -e '/^$/d' | LC_ALL=C sort -u \ - | LC_ALL=C join -v 2 "$tmp"/ignore - > "$tmp"/ignore-removed - if test -s "$tmp"/ignore-added || test -s "$tmp"/ignore-removed; then + if test "$vc_files" != false; then + # Update the .cvsignore and .gitignore files. + { echo "$added_files" | sed -e '/^$/d' -e 's,\([^/]*\)$,|A|\1,' + echo "$removed_files" | sed -e '/^$/d' -e 's,\([^/]*\)$,|R|\1,' + } | LC_ALL=C sort -t'|' -k1,1 > "$tmp"/fileset-changes + { # Rearrange file descriptors. Needed because "while ... done < ..." + # constructs are executed in a subshell e.g. by Solaris 10 /bin/sh. + exec 5<&0 < "$tmp"/fileset-changes + func_update_ignorelist () + { + ignore="$1" + if test -f "$destdir/$dir$ignore"; then + if test -n "$dir_added" || test -n "$dir_removed"; then + LC_ALL=C sort "$destdir/$dir$ignore" > "$tmp"/ignore + echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u \ + | LC_ALL=C join -v 2 "$tmp"/ignore - > "$tmp"/ignore-added + echo "$dir_removed" | sed -e '/^$/d' | LC_ALL=C sort -u \ + | LC_ALL=C join -v 2 "$tmp"/ignore - > "$tmp"/ignore-removed + if test -s "$tmp"/ignore-added || test -s "$tmp"/ignore-removed; then + if $doit; then + echo "Updating $destdir/$dir$ignore (backup in $destdir/$dir${ignore}~)" + mv -f "$destdir/$dir$ignore" "$destdir/$dir$ignore"~ + sed -e 's,^,/^,' -e 's,$,\$/d,' < "$tmp"/ignore-removed > "$tmp"/sed-ignore-removed + cat "$destdir/$dir$ignore"~ "$tmp"/ignore-added \ + | sed -f "$tmp"/sed-ignore-removed \ + > "$destdir/$dir$ignore" + else + echo "Update $destdir/$dir$ignore (backup in $destdir/$dir${ignore}~)" + fi + fi + fi + else + if test -n "$dir_added"; then if $doit; then - echo "Updating $destdir/$dir$ignore (backup in $destdir/$dir${ignore}~)" - mv -f "$destdir/$dir$ignore" "$destdir/$dir$ignore"~ - sed -e 's,^,/^,' -e 's,$,\$/d,' < "$tmp"/ignore-removed > "$tmp"/sed-ignore-removed - cat "$destdir/$dir$ignore"~ "$tmp"/ignore-added \ - | sed -f "$tmp"/sed-ignore-removed \ - > "$destdir/$dir$ignore" + echo "Creating $destdir/$dir$ignore" + { + if test "$ignore" = .cvsignore; then + echo ".deps" + # Automake generates Makefile rules that create .dirstamp files. + echo ".dirstamp" + fi + echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u + } > "$destdir/$dir$ignore" else - echo "Update $destdir/$dir$ignore (backup in $destdir/$dir${ignore}~)" + echo "Create $destdir/$dir$ignore" fi fi fi - else - if test -n "$dir_added"; then - if $doit; then - echo "Creating $destdir/$dir$ignore" - { - if test "$ignore" = .cvsignore; then - echo ".deps" - # Automake generates Makefile rules that create .dirstamp files. - echo ".dirstamp" - fi - echo "$dir_added" | sed -e '/^$/d' | LC_ALL=C sort -u - } > "$destdir/$dir$ignore" - else - echo "Create $destdir/$dir$ignore" - fi + } + func_done_dir () + { + dir="$1" + dir_added="$2" + dir_removed="$3" + if test -d "$destdir/CVS" || test -d "$destdir/${dir}CVS" || test -f "$destdir/${dir}.cvsignore"; then + func_update_ignorelist .cvsignore fi - fi - } - func_done_dir () - { - dir="$1" - dir_added="$2" - dir_removed="$3" - if test -d "$destdir/CVS" || test -d "$destdir/${dir}CVS" || test -f "$destdir/${dir}.cvsignore"; then - func_update_ignorelist .cvsignore - fi - if test -d "$destdir/.git" || test -f "$destdir/${dir}.gitignore"; then - func_update_ignorelist .gitignore - fi + if test -d "$destdir/.git" || test -f "$destdir/${dir}.gitignore"; then + func_update_ignorelist .gitignore + fi + } + last_dir= + last_dir_added= + last_dir_removed= + while read line; do + # Why not ''read next_dir op file'' ? Because the dir column can be empty. + next_dir=`echo "$line" | sed -e 's,|.*,,'` + op=`echo "$line" | sed -e 's,^[^|]*|\([^|]*\)|.*$,\1,'` + file=`echo "$line" | sed -e 's,^[^|]*|[^|]*|,,'` + if test "$next_dir" != "$last_dir"; then + func_done_dir "$last_dir" "$last_dir_added" "$last_dir_removed" + last_dir="$next_dir" + last_dir_added= + last_dir_removed= + fi + case $op in + A) func_append last_dir_added "$file$nl";; + R) func_append last_dir_removed "$file$nl";; + esac + done + func_done_dir "$last_dir" "$last_dir_added" "$last_dir_removed" + exec 0<&5 5<&- } - last_dir= - last_dir_added= - last_dir_removed= - while read line; do - # Why not ''read next_dir op file'' ? Because the dir column can be empty. - next_dir=`echo "$line" | sed -e 's,|.*,,'` - op=`echo "$line" | sed -e 's,^[^|]*|\([^|]*\)|.*$,\1,'` - file=`echo "$line" | sed -e 's,^[^|]*|[^|]*|,,'` - if test "$next_dir" != "$last_dir"; then - func_done_dir "$last_dir" "$last_dir_added" "$last_dir_removed" - last_dir="$next_dir" - last_dir_added= - last_dir_removed= - fi - case $op in - A) func_append last_dir_added "$file$nl";; - R) func_append last_dir_removed "$file$nl";; - esac - done - func_done_dir "$last_dir" "$last_dir_added" "$last_dir_removed" - exec 0<&5 5<&- - } + fi echo "Finished." echo @@ -3386,6 +3465,7 @@ func_create_testdir () testsbase=gltests macro_prefix=gl po_domain= + vc_files= # Determine final module list. func_modules_transitive_closure @@ -3412,7 +3492,8 @@ func_create_testdir () s,^doc/,$docbase/, s,^lib/,$sourcebase/, s,^m4/,$m4base/, - s,^tests/,$testsbase/," + s,^tests/,$testsbase/, + s,^top/,," # Create directories. for f in $files; do echo $f; done \ @@ -4004,7 +4085,7 @@ case $mode in # such as # local_gnulib_dir, avoidlist, sourcebase, m4base, pobase, # docbase, testsbase, inctests, libname, lgpl, makefile_name, - # libtool, macro_prefix, po_domain + # libtool, macro_prefix, po_domain, vc_files # don't propagate from one directory to another. (func_import) || func_exit 1 done