summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Blake <ebb9@byu.net>2009-03-20 06:54:12 -0600
committerEric Blake <ebb9@byu.net>2009-03-23 06:01:01 -0600
commit33434cee444ebefb51734ec286857e7639500ad3 (patch)
tree4e463d3b6be5892a3cb5da6215a88e15cd4fb2f6
parent993cc5e94d2546ae7bfcb99cf749edb61a13efaf (diff)
downloadm4-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--.gitmodules3
-rw-r--r--ChangeLog9
-rw-r--r--HACKING42
-rwxr-xr-xbootstrap96
-rw-r--r--cfg.mk2
m---------gnulib0
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
diff --git a/ChangeLog b/ChangeLog
index f25fbe92..4c9c95a5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/HACKING b/HACKING
index 17bbeafe..b4099006 100644
--- a/HACKING
+++ b/HACKING
@@ -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).
diff --git a/bootstrap b/bootstrap
index 8bc30213..f5d7321d 100755
--- a/bootstrap
+++ b/bootstrap
@@ -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
## ------- ##
diff --git a/cfg.mk b/cfg.mk
index a67d0883..2aac5ac6 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -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