diff --git a/import-gnulib.sh b/import-gnulib.sh index c9075889..3e4fce99 100755 --- a/import-gnulib.sh +++ b/import-gnulib.sh @@ -1,7 +1,7 @@ #! /bin/sh # # import-gnulib.sh -- imports a copy of gnulib into findutils -# Copyright (C) 2003,2004,2005,2006 Free Software Foundation, Inc. +# Copyright (C) 2003,2004,2005,2006,2007 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 @@ -23,125 +23,144 @@ # This script is intended to populate the "gnulib" directory # with a subset of the gnulib code, as provided by "gnulib-tool". # -# To use it, run this script, speficying the location of the -# gnulib code as the only argument. Some sanity-checking is done -# before we commit to modifying things. The gnulib code is placed -# in the "gnulib" subdirectory, which is where the buid files expect -# it to be. -# +# To use it, just run this script with the top-level sourec directory +# as your working directory. # If CDPATH is set, it will sometimes print the name of the directory # to which you have moved. Unsetting CDPATH prevents this, as does # prefixing it with ".". unset CDPATH + +## Defaults +# cvsdir=/doesnotexist configfile="./import-gnulib.config" -cvsdir="gnulib-cvs" - -source $configfile - -if [ -z "$gnulib_version" ] -then - echo "Error: There should be a gnulib_version setting in $configfile, but there is not." >&2 - exit 1 -fi +need_checkout=yes -if ! [ -d "$cvsdir" ] ; then - if mkdir "$cvsdir" ; then - echo "Created $cvsdir" - else - echo "Failed to create $cvsdir" >&2 - exit 1 +usage() { + cat >&2 <&2 + exit 1 fi -fi - -# Decide if gnulib_version is probably a date or probably a tag. -if date -d yesterday >/dev/null ; then - # It looks like GNU date is available - if date -d "$gnulib_version" >/dev/null ; then - # Looks like a date. - cvs_sticky_option="-D" - else - echo "Warning: assuming $gnulib_version is a CVS tag rather than a date" >&2 - cvs_sticky_option="-r" + + + if ! [ -d "$cvsdir" ] ; then + if mkdir "$cvsdir" ; then + echo "Created $cvsdir" + else + echo "Failed to create $cvsdir" >&2 + exit 1 + fi fi -else - # GNU date unavailable, assume the version is a date - cvs_sticky_option="-D" -fi - - - -( - # Change directory unconditionally (rater than using checkout -d) so that - # cvs does not pick up defaults from ./CVS. Those defaults refer to our - # own CVS repository for our code, not to gnulib. - cd $cvsdir - if test -d gnulib/CVS ; then - cd gnulib - cmd=update - root="" # use previous + + # Decide if gnulib_version is probably a date or probably a tag. + if date -d yesterday >/dev/null ; then + # It looks like GNU date is available + if date -d "$gnulib_version" >/dev/null ; then + # Looks like a date. + cvs_sticky_option="-D" + else + echo "Warning: assuming $gnulib_version is a CVS tag rather than a date" >&2 + cvs_sticky_option="-r" + fi else - root="-d :pserver:anonymous@cvs.sv.gnu.org:/sources/gnulib" - cmd=checkout - args=gnulib + # GNU date unavailable, assume the version is a date + cvs_sticky_option="-D" fi + + + + ( + # Change directory unconditionally (rater than using checkout -d) so that + # cvs does not pick up defaults from ./CVS. Those defaults refer to our + # own CVS repository for our code, not to gnulib. + cd $cvsdir + if test -d gnulib/CVS ; then + cd gnulib + cmd=update + root="" # use previous + else + root="-d :pserver:anonymous@cvs.sv.gnu.org:/sources/gnulib" + cmd=checkout + args=gnulib + fi + set -x + cvs -q -z3 $root $cmd $cvs_sticky_option "$gnulib_version" $args + set +x + ) +} + +run_gnulib_tool() { + local tool="$1" + if test -f "$tool" + then + true + else + echo "$tool does not exist, did you specify the right directory?" >&2 + exit 1 + fi + + if test -x "$tool" + then + true + else + echo "$tool is not executable" >&2 + exit 1 + fi + + + if [ -d gnulib ] + then + echo "Warning: directory gnulib already exists, removing it." >&2 + rm -rf gnulib + fi + mkdir gnulib + set -x - cvs -q -z3 $root $cmd $cvs_sticky_option "$gnulib_version" $args - set +x -) - -set x $cvsdir/gnulib ; shift - -if test -f "$1"/gnulib-tool -then - true -else - echo "$1/gnulib-tool does not exist, did you specify the right directory?" >&2 - exit 1 -fi - -if test -x "$1"/gnulib-tool -then - true -else - echo "$1/gnulib-tool is not executable" >&2 - exit 1 -fi + if "$tool" --import --symlink --with-tests --dir=. --lib=libgnulib --source-base=gnulib/lib --m4-base=gnulib/m4 $modules + then + set +x + else + set +x + echo "$tool failed, exiting." >&2 + exit 1 + fi +} -if [ -d gnulib ] -then - echo "Warning: directory gnulib already exists, removing it." >&2 - rm -rf gnulib -fi -mkdir gnulib - -printf "Running gnulib-tool..." -if "$1"/gnulib-tool --import --dir=. --lib=libgnulib --source-base=gnulib/lib --m4-base=gnulib/m4 $modules -then - : OK -else - echo "gnulib-tool failed, exiting." >&2 - exit 1 -fi -echo done - - - -## for file in $extra_files; do -## bn="$(basename $file)" -## case "$file" in -## */mdate-sh | */texinfo.tex) dest=doc; destfile=doc/"$bn";; -## *) dest=.; destfile="$bn";; -## esac -## cmp "$file" "$destfile" || cp -fpv "$1"/"$file" "$dest" || exit 1 -## done +hack_gnulib_tool_output() { + local gnulibdir="${1}" + for file in $extra_files; do + case $file in + */mdate-sh | */texinfo.tex) dest=doc;; + *) dest=build-aux;; + esac + test -d "$dest" || mkdir "$dest" + cp -fp "${gnulibdir}"/"$file" "$dest" || exit + done -cat > gnulib/Makefile.am < gnulib/Makefile.am < gnulib/Makefile.am < "${outfile}".new < /dev/null ; then + rm "${outfile}".new + return 0 + fi + fi + mv "${outfile}".new "${outfile}" +} + + +main() { + ## Option parsing + local gnulibdir=/doesnotexist + while getopts "d:" opt + do + case "$opt" in + d) gnulibdir="$OPTARG" ; need_checkout=no ;; + **) usage; exit 1;; + esac + done + + # We need the config file to tell us which modules + # to use, even if we don't want to know the CVS version. + . $configfile || exit 1 + + ## If -d was not given, do CVS checkout/update + if [ $need_checkout = yes ] ; then + do_checkout gnulib-cvs + gnulibdir=gnulib-cvs/gnulib + else + echo "Warning: using gnulib code which already exists in $gnulibdir" >&2 + fi + + ## Invoke gnulib-tool to import the code. + local tool="${gnulibdir}"/gnulib-tool + + if run_gnulib_tool "${tool}" && + hack_gnulib_tool_output "${gnulibdir}" && + refresh_output_files && + update_version_file ; then + echo Done. + else + echo FAILED >&2 + exit 1 + fi +} + +main "$@"