bug-gnulib
[Top][All Lists]
Advanced

[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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]