[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
improve "posix-modules --version"
From: |
Bruno Haible |
Subject: |
improve "posix-modules --version" |
Date: |
Fri, 26 Sep 2008 20:35:22 +0200 |
User-agent: |
KMail/1.5.4 |
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 <address@hidden>
* 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
- improve "posix-modules --version",
Bruno Haible <=