The --version support in the 'posix-modules' script predates the switch from CVS to git. This updates it, using the code we have in gnulib-tool.
2008-09-26 Bruno Haible <[EMAIL PROTECTED]> * posix-modules (cvsdatestamp, last_checkin_date, version): Remove variables. (func_version): Essentially copied from gnulib-tool. (func_exit, func_gnulib_dir, func_tmpdir, func_fatal_error, func_readlink): Copied from gnulib-tool. *** posix-modules.orig 2008-09-26 20:33:25.000000000 +0200 --- posix-modules 2008-09-26 20:32:51.000000000 +0200 *************** *** 18,26 **** progname=$0 package=gnulib - cvsdatestamp='$Date: 2007-09-11 00:40:16 $' - last_checkin_date=`echo "$cvsdatestamp" | sed -e 's,^\$[D]ate: ,,'` - version=`echo "$last_checkin_date" | sed -e 's/ .*$//' -e 's,/,-,g'` # func_usage # outputs to stdout the --help usage message. --- 18,23 ---- *************** *** 36,120 **** # outputs to stdout the --version message. func_version () { ! year=`echo "$last_checkin_date" | sed -e 's,/.*$,,'` echo "\ ! $progname (GNU $package) $version Copyright (C) $year Free Software Foundation, Inc. ! This is free software; see the source for copying conditions. There is NO ! warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Written by" "Bruno Haible" } ! case "$0" in ! /*) self_abspathname="$0" ;; ! */*) self_abspathname=`pwd`/"$0" ;; ! *) ! # Look in $PATH. ! # Iterate through the elements of $PATH. ! # We use IFS=: instead of ! # for d in `echo ":$PATH:" | sed -e 's/:::*/:.:/g' | sed -e 's/:/ /g'` ! # because the latter does not work when some PATH element contains spaces. ! # We use a canonicalized $pathx instead of $PATH, because empty PATH ! # elements are by definition equivalent to '.', however field splitting ! # according to IFS=: loses empty fields in many shells: ! # - /bin/sh on OSF/1 and Solaris loses all empty fields (at the ! # beginning, at the end, and in the middle), ! # - /bin/sh on IRIX and /bin/ksh on IRIX and OSF/1 lose empty fields ! # at the beginning and at the end, ! # - GNU bash, /bin/sh on AIX and HP-UX, and /bin/ksh on AIX, HP-UX, ! # Solaris lose empty fields at the end. ! # The 'case' statement is an optimization, to avoid evaluating the ! # explicit canonicalization command when $PATH contains no empty fields. ! self_abspathname= ! if test "${PATH_SEPARATOR+set}" != set; then ! func_tmpdir ! { echo "#! /bin/sh"; echo "exit 0"; } > "$tmp"/conf.sh ! chmod +x "$tmp"/conf.sh ! if (PATH="/nonexistent;$tmp"; conf.sh) >/dev/null 2>&1; then ! PATH_SEPARATOR=';' else ! PATH_SEPARATOR=: fi ! rm -rf "$tmp" ! fi ! if test "$PATH_SEPARATOR" = ";"; then ! # On Windows, programs are searched in "." before $PATH. ! pathx=".;$PATH" ! else ! # On Unix, we have to convert empty PATH elements to ".". ! pathx="$PATH" ! case :$PATH: in ! *::*) ! pathx=`echo ":$PATH:" | sed -e 's/:::*/:.:/g' -e 's/^://' -e 's/:\$//'` ! ;; ! esac ! fi ! save_IFS="$IFS" ! IFS="$PATH_SEPARATOR" ! for d in $pathx; do IFS="$save_IFS" ! test -z "$d" && d=. ! if test -x "$d/$0" && test ! -d "$d/$0"; then ! self_abspathname="$d/$0" ! break fi ! done ! IFS="$save_IFS" ! if test -z "$self_abspathname"; then ! func_fatal_error "could not locate the posix-modules program - how did you invoke it?" ! fi ! ;; ! esac ! while test -h "$self_abspathname"; do ! # Resolve symbolic link. ! linkval=`func_readlink "$self_abspathname"` ! test -n "$linkval" || break ! case "$linkval" in ! /* ) self_abspathname="$linkval" ;; ! * ) self_abspathname=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`/"$linkval" ;; esac ! done ! gnulib_dir=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'` # Command-line option processing. while test $# -gt 0; do --- 33,224 ---- # outputs to stdout the --version message. func_version () { ! func_gnulib_dir ! 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=' '`cd "$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 "\ ! gnulib-tool (GNU $package $date)$version Copyright (C) $year Free Software Foundation, Inc. ! License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> ! This is free software: you are free to change and redistribute it. ! There is NO WARRANTY, to the extent permitted by law. ! Written by" "Bruno Haible" } ! # func_exit STATUS ! # exits with a given status. ! # This function needs to be used, rather than 'exit', when a 'trap' handler is ! # in effect that refers to $?. ! func_exit () ! { ! (exit $1); exit $1 ! } ! ! # func_gnulib_dir ! # locates the directory where the gnulib repository lives ! # Sets variables ! # - self_abspathname absolute pathname of gnulib-tool ! # - gnulib_dir absolute pathname of gnulib repository ! func_gnulib_dir () ! { ! case "$0" in ! /*) self_abspathname="$0" ;; ! */*) self_abspathname=`pwd`/"$0" ;; ! *) ! # Look in $PATH. ! # Iterate through the elements of $PATH. ! # We use IFS=: instead of ! # for d in `echo ":$PATH:" | sed -e 's/:::*/:.:/g' | sed -e 's/:/ /g'` ! # because the latter does not work when some PATH element contains spaces. ! # We use a canonicalized $pathx instead of $PATH, because empty PATH ! # elements are by definition equivalent to '.', however field splitting ! # according to IFS=: loses empty fields in many shells: ! # - /bin/sh on OSF/1 and Solaris loses all empty fields (at the ! # beginning, at the end, and in the middle), ! # - /bin/sh on IRIX and /bin/ksh on IRIX and OSF/1 lose empty fields ! # at the beginning and at the end, ! # - GNU bash, /bin/sh on AIX and HP-UX, and /bin/ksh on AIX, HP-UX, ! # Solaris lose empty fields at the end. ! # The 'case' statement is an optimization, to avoid evaluating the ! # explicit canonicalization command when $PATH contains no empty fields. ! self_abspathname= ! if test "${PATH_SEPARATOR+set}" != set; then ! func_tmpdir ! { echo "#! /bin/sh"; echo "exit 0"; } > "$tmp"/conf.sh ! chmod +x "$tmp"/conf.sh ! if (PATH="/nonexistent;$tmp"; conf.sh) >/dev/null 2>&1; then ! PATH_SEPARATOR=';' ! else ! PATH_SEPARATOR=: ! fi ! rm -rf "$tmp" ! fi ! if test "$PATH_SEPARATOR" = ";"; then ! # On Windows, programs are searched in "." before $PATH. ! pathx=".;$PATH" else ! # On Unix, we have to convert empty PATH elements to ".". ! pathx="$PATH" ! case :$PATH: in ! *::*) ! pathx=`echo ":$PATH:" | sed -e 's/:::*/:.:/g' -e 's/^://' -e 's/:\$//'` ! ;; ! esac fi ! save_IFS="$IFS" ! IFS="$PATH_SEPARATOR" ! for d in $pathx; do ! IFS="$save_IFS" ! test -z "$d" && d=. ! if test -x "$d/$0" && test ! -d "$d/$0"; then ! self_abspathname="$d/$0" ! break ! fi ! done IFS="$save_IFS" ! if test -z "$self_abspathname"; then ! func_fatal_error "could not locate the gnulib-tool program - how did you invoke it?" fi ! ;; esac ! while test -h "$self_abspathname"; do ! # Resolve symbolic link. ! linkval=`func_readlink "$self_abspathname"` ! test -n "$linkval" || break ! case "$linkval" in ! /* ) self_abspathname="$linkval" ;; ! * ) self_abspathname=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'`/"$linkval" ;; ! esac ! done ! gnulib_dir=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'` ! } ! ! # func_tmpdir ! # creates a temporary directory. ! # Sets variable ! # - tmp pathname of freshly created temporary directory ! func_tmpdir () ! { ! # Use the environment variable TMPDIR, falling back to /tmp. This allows ! # users to specify a different temporary directory, for example, if their ! # /tmp is filled up or too small. ! : ${TMPDIR=/tmp} ! { ! # Use the mktemp program if available. If not available, hide the error ! # message. ! tmp=`(umask 077 && mktemp -d "$TMPDIR/glXXXXXX") 2>/dev/null` && ! test -n "$tmp" && test -d "$tmp" ! } || ! { ! # Use a simple mkdir command. It is guaranteed to fail if the directory ! # already exists. $RANDOM is bash specific and expands to empty in shells ! # other than bash, ksh and zsh. Its use does not increase security; ! # rather, it minimizes the probability of failure in a very cluttered /tmp ! # directory. ! tmp=$TMPDIR/gl$$-$RANDOM ! (umask 077 && mkdir "$tmp") ! } || ! { ! echo "$0: cannot create a temporary directory in $TMPDIR" >&2 ! func_exit 1 ! } ! } ! ! # func_fatal_error message ! # outputs to stderr a fatal error message, and terminates the program. ! func_fatal_error () ! { ! echo "gnulib-tool: *** $1" 1>&2 ! echo "gnulib-tool: *** Stop." 1>&2 ! func_exit 1 ! } ! ! # func_readlink SYMLINK ! # outputs the target of the given symlink. ! if (type -p readlink) > /dev/null 2>&1; then ! func_readlink () ! { ! # Use the readlink program from GNU coreutils. ! readlink "$1" ! } ! else ! func_readlink () ! { ! # Use two sed invocations. A single sed -n -e 's,^.* -> \(.*\)$,\1,p' ! # would do the wrong thing if the link target contains " -> ". ! LC_ALL=C ls -l "$1" | sed -e 's, -> ,#%%#,' | sed -n -e 's,^.*#%%#\(.*\)$,\1,p' ! } ! fi # Command-line option processing. while test $# -gt 0; do