diff options
author | Eric Blake <ebb9@byu.net> | 2009-03-20 06:54:12 -0600 |
---|---|---|
committer | Eric Blake <ebb9@byu.net> | 2009-03-23 06:01:01 -0600 |
commit | 33434cee444ebefb51734ec286857e7639500ad3 (patch) | |
tree | 4e463d3b6be5892a3cb5da6215a88e15cd4fb2f6 | |
parent | 993cc5e94d2546ae7bfcb99cf749edb61a13efaf (diff) | |
download | m4-33434cee444ebefb51734ec286857e7639500ad3.tar.gz |
Make gnulib a git submodule.
* .gitmodules: New file.
* gnulib: Record which version of gnulib has been tested.
* bootstrap: Aid in submodule usage.
* cfg.mk (gnulib_dir): Alter default location of gnulib.
* HACKING: Mention how to use submodule.
Signed-off-by: Eric Blake <ebb9@byu.net>
(cherry picked from commit 6942f58cb5bb624a28672658a4369b85bce77783)
-rw-r--r-- | .gitmodules | 3 | ||||
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | HACKING | 42 | ||||
-rwxr-xr-x | bootstrap | 96 | ||||
-rw-r--r-- | cfg.mk | 2 | ||||
m--------- | gnulib | 0 |
6 files changed, 98 insertions, 54 deletions
diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..acb26693 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "gnulib"] + path = gnulib + url = git://git.sv.gnu.org/gnulib.git @@ -1,3 +1,12 @@ +2009-03-23 Eric Blake <ebb9@byu.net> + + Make gnulib a git submodule. + * .gitmodules: New file. + * gnulib: Record which version of gnulib has been tested. + * bootstrap: Aid in submodule usage. + * cfg.mk (gnulib_dir): Alter default location of gnulib. + * HACKING: Mention how to use submodule. + 2009-03-21 Eric Blake <ebb9@byu.net> Use memcmp2 to simplify lexicographic comparisons. @@ -73,19 +73,46 @@ and is not part of a release distribution. - LZMA Utils 4.32 or later (from <http://tukaani.org/lzma/>) - Texinfo 4.8 or later - Any prerequisites of the above (such as perl, tex) - - A git checkout of gnulib. A read-only copy of gnulib can be - obtained by: + + Note that none of these bootstrapping dependencies should be required + by a distributed release. + +* M4 includes gnulib as a git submodule. By default, the bootstrap + script will attempt to run + git submodule update --init + to grab a gnulib clone from the official read-only location of + git://git.sv.gnu.org/gnulib.git + + However, this can be network and disk intensive. If you already have + another gnulib clone on your disk, you can use the environment + variable GNULIB_SRCDIR to point to the previous checkout to speed up + the process. Additionally, both the bootstrap script and gnulib-tool + require a shell that supports functions, so you can set the + environment variable CONFIG_SHELL to choose a better shell on systems + (like Solaris) where /bin/sh is lacking. Thus, you may find it + convenient to run: + GNULIB_SRCDIR=path/to/gnulib CONFIG_SHELL=path/to/sh \ + path/to/sh ./bootstrap + + A read-only copy of gnulib can be obtained by: git clone git://git.sv.gnu.org/gnulib.git or cvs -d:pserver:anonymous@pserver.git.sv.gnu.org:/srv/git/gnulib.git \ co -d gnulib HEAD + Using a CVS checkout might work, but it is relatively untested, + particularly now that we use a git submodule for gnulib. + If you are a member of the savannah group for gnulib, a read-write copy can be obtained by: git clone <savannah-user>@git.sv.gnu.org:/srv/git/gnulib.git - Note that none of these bootstrapping dependencies should be required - by a distributed release. + If you are behind a firewall that blocks the git protocol, you may + find it useful to do: + git config --global url.http://git.sv.gnu.org/r/.insteadof \ + git://git.sv.gnu.org/ + to force git to transparently rewrite all savannah git references to + instead use http. * Either add the gnulib directory to your PATH, or run GNULIB_TOOL=path/to/gnulib/gnulib-tool ./bootstrap @@ -214,13 +241,18 @@ yyyy-mm-dd Name of Author <email@address> (tiny change) * Make sure your locale is sane, e.g. by exporting LC_ALL=C. +* Make sure you are happy with the particular gnulib version recorded as + the gnulib submodule. If necessary to update to the latest, run: + git submodule foreach git pull + git commit -m 'Update gnulib submodule to latest.' gnulib + * Update the version number in configure.ac. See http://www.gnu.org/software/libtool/contribute.html for details of the numbering scheme (m4 uses the same scheme as libtool). * Update NEWS, ChangeLog. -* Run ./bootstrap. +* Run ./bootstrap, perhaps with environment variables set. * Run ./configure (or create a build directory first and run configure from there, if you want to keep the build tree separate). @@ -1,6 +1,6 @@ #! /bin/sh -# bootstrap (GNU M4) version 2009-03-13 +# bootstrap (GNU M4) version 2009-03-23 # Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Free Software # Foundation, Inc. # License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> @@ -33,7 +33,7 @@ # You can also set the following variables to help $progname # locate the right tools: -# AUTOPOINT, AUTORECONF, AWK, GNULIB_SRCDIR, GNULIB_TOOL, LIBTOOLIZE, +# AUTOPOINT, AUTORECONF, AWK, CONFIG_SHELL, GNULIB_SRCDIR, LIBTOOLIZE, # M4, RM, SED # This script bootstraps a git or CVS checkout of GNU M4 by correctly calling @@ -50,7 +50,7 @@ : ${AUTOPOINT=autopoint} : ${AUTORECONF=autoreconf} : ${AWK=awk} -: ${GNULIB_TOOL=gnulib-tool} +: ${CONFIG_SHELL=/bin/sh} : ${LIBTOOLIZE=libtoolize} : ${M4=m4} : ${RM='rm -f'} @@ -396,35 +396,33 @@ $AUTOPOINT --force func_echo "running: $LIBTOOLIZE --force --copy --install" ${LIBTOOLIZE} --force --copy --install -## ---------------------------- ## -## Find the gnulib module tree. ## -## ---------------------------- ## +## ------------------------------ ## +## Update the gnulib module tree. ## +## ------------------------------ ## -if test -n "$GNULIB_SRCDIR" && test -d "$GNULIB_SRCDIR" ; then - gnulibdir=$GNULIB_SRCDIR +if test -d .git && (git --version) >/dev/null 2>/dev/null ; then + if test -f gnulib/gnulib-tool ; then + func_echo "updating gnulib submodule" + git submodule update \ + || func_fatal_error "Unable to update gnulib" + else + # A fresh checkout creates an empty subdirectory gnulib. However, + # older git didn't know how to clone into an empty subdir. If the + # user provided GNULIB_SRCDIR, then make the initial clone refer + # to the existing checkout, to save network traffic. + func_echo "importing gnulib submodule" + if test -d "$GNULIB_SRCDIR" ; then + rmdir gnulib 2>/dev/null + git clone --reference "$GNULIB_SRCDIR" git://git.sv.gnu.org/gnulib.git \ + && git submodule init && git submodule update \ + || func_fatal_error "Unable to update gnulib" + else + git submodule update --init \ + || func_fatal_error "Unable to update gnulib" + fi + fi else - case $GNULIB_TOOL in - /* ) gnulibdir=$GNULIB_TOOL ;; # absolute - */* ) gnulibdir=`pwd`/$GNULIB_TOOL ;; # relative - * ) gnulibdir=`which "$GNULIB_TOOL"` ;; # PATH search - esac - - # Follow symlinks - while test -h "$gnulibdir"; do - - # Resolve symbolic link. - sedexpr1='s, -> ,#%%#,' - sedexpr2='s,^.*#%%#\(.*\)$,\1,p' - linkval=`ls -l "$gnulibdir" | $SED "$sedexpr1" | $SED -n "$sedexpr2"` - test -n "$linkval" || break - - case "$linkval" in - /* ) gnulibdir="$linkval" ;; - * ) gnulibdir=`echo "$gnulibdir" | sed -e 's,/[^/]*$,,'`/"$linkval" ;; - esac - - done - gnulibdir=`echo "$gnulibdir" | $SED "$dirname"` + func_echo "git not detected. If needed, update gnulib subdirectory manually" fi @@ -432,9 +430,9 @@ fi ## Import Gnulib modules. ## ## ---------------------- ## -func_echo "running: ${GNULIB_TOOL} --update" -${GNULIB_TOOL} --update - +func_echo "running: $CONFIG_SHELL gnulib/gnulib-tool --update" +$CONFIG_SHELL gnulib/gnulib-tool --update \ + || func_fatal_error "gnulib-tool failed" ## --------------------------------- ## ## Copy additional src only modules. ## @@ -442,7 +440,8 @@ ${GNULIB_TOOL} --update func_echo "fetching modules for src directory" -for file in `${GNULIB_TOOL} --extract-filelist $src_modules`; do +for file in `$CONFIG_SHELL gnulib/gnulib-tool --extract-filelist $src_modules` +do dest=`echo $file | $SED "$basename"` case $file in @@ -454,11 +453,11 @@ for file in `${GNULIB_TOOL} --extract-filelist $src_modules`; do esac # Be sure to show all copying errors before bailing out - if test -f $gnulibdir/$file; then + if test -f gnulib/$file; then func_echo "copying file \`$dest'" - cp $gnulibdir/$file $dest + cp gnulib/$file $dest else - func_error "$gnulibdir/$file does not exist" + func_error "gnulib/$file does not exist" bailout_cb="exit 1" fi done @@ -480,17 +479,18 @@ AUTOPOINT=true LIBTOOLIZE=true \ ## Gnulib is more up-to-date than automake. ## ## ---------------------------------------- ## -func_update "$gnulibdir"/build-aux/config.guess $config_aux_dir/config.guess -func_update "$gnulibdir"/build-aux/config.sub $config_aux_dir/config.sub -func_update "$gnulibdir"/build-aux/depcomp $config_aux_dir/depcomp -func_update "$gnulibdir"/build-aux/install-sh $config_aux_dir/install-sh -func_update "$gnulibdir"/build-aux/mdate-sh $config_aux_dir/mdate-sh -func_update "$gnulibdir"/build-aux/missing $config_aux_dir/missing -func_update "$gnulibdir"/build-aux/texinfo.tex $config_aux_dir/texinfo.tex -func_update "$gnulibdir"/build-aux/po/Makefile.in.in po/Makefile.in.in -func_update "$gnulibdir"/build-aux/po/remove-potcdate.sin po/remove-potcdate.sin -func_update "$gnulibdir"/doc/COPYINGv3 COPYING -func_update "$gnulibdir"/doc/INSTALL INSTALL +func_update gnulib/build-aux/compile $config_aux_dir/compile +func_update gnulib/build-aux/config.guess $config_aux_dir/config.guess +func_update gnulib/build-aux/config.sub $config_aux_dir/config.sub +func_update gnulib/build-aux/depcomp $config_aux_dir/depcomp +func_update gnulib/build-aux/install-sh $config_aux_dir/install-sh +func_update gnulib/build-aux/mdate-sh $config_aux_dir/mdate-sh +func_update gnulib/build-aux/missing $config_aux_dir/missing +func_update gnulib/build-aux/texinfo.tex $config_aux_dir/texinfo.tex +func_update gnulib/build-aux/po/Makefile.in.in po/Makefile.in.in +func_update gnulib/build-aux/po/remove-potcdate.sin po/remove-potcdate.sin +func_update gnulib/doc/COPYINGv3 COPYING +func_update gnulib/doc/INSTALL INSTALL ## ------- ## @@ -37,4 +37,4 @@ local-checks-to-skip = changelog-check # The local directory containing the checked-out copy of gnulib used in this # release. Used solely to get gnulib's SHA1 for the "announcement" target. -gnulib_dir = $(srcdir)/../gnulib +gnulib_dir = $(srcdir)/gnulib diff --git a/gnulib b/gnulib new file mode 160000 +Subproject 6c410f6d2875a0a41671daab4d9751a74c69c45 |