diff options
-rwxr-xr-x | bootstrap | 223 | ||||
-rw-r--r-- | cfg.mk | 1 | ||||
m--------- | gnulib | 0 | ||||
-rw-r--r-- | m4/.gitignore | 112 |
4 files changed, 270 insertions, 66 deletions
@@ -1,6 +1,6 @@ #! /bin/sh # Print a version string. -scriptversion=2010-04-30.16; # UTC +scriptversion=2011-01-21.16; # UTC # Bootstrap this package from checked-out sources. @@ -42,24 +42,32 @@ local_gl_dir=gl bt='._bootmp' bt_regex=`echo "$bt"| sed 's/\./[.]/g'` bt2=${bt}2 +me=$0 usage() { cat <<EOF -Usage: $0 [OPTION]... +Usage: $me [OPTION]... Bootstrap this package from the checked-out sources. Options: - --gnulib-srcdir=DIRNAME Specify the local directory where gnulib + --gnulib-srcdir=DIRNAME specify the local directory where gnulib sources reside. Use this if you already have gnulib sources on your machine, and do not want to waste your bandwidth downloading - them again. Defaults to \$GNULIB_SRCDIR. - --copy Copy files instead of creating symbolic links. - --force Attempt to bootstrap even if the sources seem - not to have been checked out. - --skip-po Do not download po files. - -If the file $0.conf exists in the same directory as this script, its + them again. Defaults to \$GNULIB_SRCDIR + --bootstrap-sync if this bootstrap script is not identical to + the version in the local gnulib sources, + update this script, and then restart it with + /bin/sh or the shell \$CONFIG_SHELL + --no-bootstrap-sync do not check whether bootstrap is out of sync + --copy copy files instead of creating symbolic links + --force attempt to bootstrap even if the sources seem + not to have been checked out + --no-git do not use git to update gnulib. Requires that + --gnulib-srcdir point to a correct gnulib snapshot + --skip-po do not download po files + +If the file $me.conf exists in the same directory as this script, its contents are read as shell variables to configure the bootstrap. For build prerequisites, environment variables like \$AUTOCONF and \$AMTAR @@ -80,6 +88,10 @@ gnulib_modules= # Any gnulib files needed that are not in modules. gnulib_files= +# A function to be called to edit gnulib.mk right after it's created. +# Override it via your own definition in bootstrap.conf. +gnulib_mk_hook() { :; } + # A function to be called after everything else in this script. # Override it via your own definition in bootstrap.conf. bootstrap_epilogue() { :; } @@ -90,7 +102,8 @@ bootstrap_epilogue() { :; } # options because the latest/%s directory and the .po files within are # all symlinks. po_download_command_format=\ -"rsync -Lrtvz 'translationproject.org::tp/latest/%s/' '%s'" +"rsync --delete --exclude '*.s1' -Lrtvz \ + 'translationproject.org::tp/latest/%s/' '%s'" extract_package_name=' /^AC_INIT(/{ @@ -163,6 +176,13 @@ copy=false # on which version control system (if any) is used in the source directory. vc_ignore=auto +# Set this to true in bootstrap.conf to enable --bootstrap-sync by +# default. +bootstrap_sync=false + +# Use git to update gnulib sources +use_git=true + # find_tool ENVVAR NAMES... # ------------------------- # Search for a required program. Use the value of ENVVAR, if set, @@ -187,11 +207,11 @@ find_tool () find_tool_error_prefix="\$$find_tool_envvar: " fi if test x"$find_tool_res" = x; then - echo >&2 "$0: one of these is required: $find_tool_names" + echo >&2 "$me: one of these is required: $find_tool_names" exit 1 fi ($find_tool_res --version </dev/null) >/dev/null 2>&1 || { - echo >&2 "$0: ${find_tool_error_prefix}cannot run $find_tool_res --version" + echo >&2 "$me: ${find_tool_error_prefix}cannot run $find_tool_res --version" exit 1 } eval "$find_tool_envvar=\$find_tool_res" @@ -234,12 +254,25 @@ do checkout_only_file=;; --copy) copy=true;; + --bootstrap-sync) + bootstrap_sync=true;; + --no-bootstrap-sync) + bootstrap_sync=false;; + --no-git) + use_git=false;; *) echo >&2 "$0: $option: unknown option" exit 1;; esac done +if $use_git || test -d "$GNULIB_SRCDIR"; then + : +else + echo "$0: Error: --no-git requires --gnulib-srcdir" >&2 + exit 1 +fi + if test -n "$checkout_only_file" && test ! -r "$checkout_only_file"; then echo "$0: Bootstrapping from a non-checked-out distribution is risky." >&2 exit 1 @@ -256,6 +289,21 @@ insert_sorted_if_absent() { || exit 1 } +# Adjust $PATTERN for $VC_IGNORE_FILE and insert it with +# insert_sorted_if_absent. +insert_vc_ignore() { + vc_ignore_file="$1" + pattern="$2" + case $vc_ignore_file in + *.gitignore) + # A .gitignore entry that does not start with `/' applies + # recursively to subdirectories, so prepend `/' to every + # .gitignore entry. + pattern=`echo "$pattern" | sed s,^,/,`;; + esac + insert_sorted_if_absent "$vc_ignore_file" "$pattern" +} + # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac. found_aux_dir=no grep '^[ ]*AC_CONFIG_AUX_DIR(\['"$build_aux"'\])' configure.ac \ @@ -274,7 +322,7 @@ if test ! -d $build_aux; then mkdir $build_aux for dot_ig in x $vc_ignore; do test $dot_ig = x && continue - insert_sorted_if_absent $dot_ig $build_aux + insert_vc_ignore $dot_ig $build_aux done fi @@ -324,17 +372,18 @@ get_version() { $app --version >/dev/null 2>&1 || return 1 $app --version 2>&1 | - sed -n '# extract version within line - s/.*[v ]\{1,\}\([0-9]\{1,\}\.[.a-z0-9-]*\).*/\1/ - t done + sed -n '# Move version to start of line. + s/.*[v ]\([0-9]\)/\1/ + + # Skip lines that do not start with version. + /^[0-9]/!d - # extract version at start of line - s/^\([0-9]\{1,\}\.[.a-z0-9-]*\).*/\1/ - t done + # Remove characters after the version. + s/[^.a-z0-9-].*// - d + # The first component must be digits only. + s/^\([0-9]*\)[a-z-].*/\1/ - :done #the following essentially does s/5.005/5.5/ s/\.0*\([1-9]\)/.\1/g p @@ -345,18 +394,26 @@ check_versions() { ret=0 while read app req_ver; do + # We only need libtoolize from the libtool package. + if test "$app" = libtool; then + app=libtoolize + fi + # Exempt git if --no-git is in effect. + if test "$app" = git; then + $use_git || continue + fi # Honor $APP variables ($TAR, $AUTOCONF, etc.) - appvar=`echo $app | tr '[a-z]' '[A-Z]'` + appvar=`echo $app | tr '[a-z]-' '[A-Z]_'` test "$appvar" = TAR && appvar=AMTAR eval "app=\${$appvar-$app}" inst_ver=$(get_version $app) if [ ! "$inst_ver" ]; then - echo "Error: '$app' not found" >&2 + echo "$me: Error: '$app' not found" >&2 ret=1 elif [ ! "$req_ver" = "-" ]; then latest_ver=$(sort_ver $req_ver $inst_ver | cut -d' ' -f2) if [ ! "$latest_ver" = "$inst_ver" ]; then - echo "Error: '$app' version == $inst_ver is too old" >&2 + echo "$me: Error: '$app' version == $inst_ver is too old" >&2 echo " '$app' version >= $req_ver is required" >&2 ret=1 fi @@ -369,16 +426,30 @@ check_versions() { print_versions() { echo "Program Min_version" echo "----------------------" - printf "$buildreq" + printf %s "$buildreq" echo "----------------------" # can't depend on column -t } +use_libtool=0 +# We'd like to use grep -E, to see if any of LT_INIT, +# AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac, +# but that's not portable enough (e.g., for Solaris). +grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \ + && use_libtool=1 +grep '^[ ]*LT_INIT' configure.ac >/dev/null \ + && use_libtool=1 +if test $use_libtool = 1; then + find_tool LIBTOOLIZE glibtoolize libtoolize +fi + if ! printf "$buildreq" | check_versions; then - test -f README-prereq && - echo "See README-prereq for notes on obtaining these prerequisite programs:" >&2 - echo - print_versions + echo >&2 + if test -f README-prereq; then + echo "$0: See README-prereq for how to get the prerequisite programs" >&2 + else + echo "$0: Please install the prerequisite programs" >&2 + fi exit 1 fi @@ -389,11 +460,11 @@ if test -d .git && (git --version) >/dev/null 2>/dev/null ; then if git config merge.merge-changelog.driver >/dev/null ; then : elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then - echo "initializing git-merge-changelog driver" + echo "$0: initializing git-merge-changelog driver" git config merge.merge-changelog.name 'GNU-style ChangeLog merge driver' git config merge.merge-changelog.driver 'git-merge-changelog %O %A %B' else - echo "consider installing git-merge-changelog from gnulib" + echo "$0: consider installing git-merge-changelog from gnulib" fi fi @@ -409,6 +480,7 @@ git_modules_config () { } gnulib_path=`git_modules_config submodule.gnulib.path` +test -z "$gnulib_path" && gnulib_path=gnulib # Get gnulib files. @@ -424,7 +496,8 @@ case ${GNULIB_SRCDIR--} in trap cleanup_gnulib 1 2 13 15 - git clone -h|grep -- --depth > /dev/null && shallow='--depth 2' || shallow= + shallow= + git clone -h 2>&1 | grep -- --depth > /dev/null && shallow='--depth 2' git clone $shallow git://git.sv.gnu.org/gnulib "$gnulib_path" || cleanup_gnulib @@ -460,6 +533,16 @@ case ${GNULIB_SRCDIR--} in ;; esac +if $bootstrap_sync; then + cmp -s "$0" "$GNULIB_SRCDIR/build-aux/bootstrap" || { + echo "$0: updating bootstrap and restarting..." + exec sh -c \ + 'cp "$1" "$2" && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \ + -- "$GNULIB_SRCDIR/build-aux/bootstrap" \ + "$0" "$@" --no-bootstrap-sync + } +fi + gnulib_tool=$GNULIB_SRCDIR/gnulib-tool <$gnulib_tool || exit @@ -468,27 +551,29 @@ gnulib_tool=$GNULIB_SRCDIR/gnulib-tool download_po_files() { subdir=$1 domain=$2 - echo "$0: getting translations into $subdir for $domain..." + echo "$me: getting translations into $subdir for $domain..." cmd=`printf "$po_download_command_format" "$domain" "$subdir"` eval "$cmd" } -# Download .po files to $po_dir/.reference and copy only the new +# Mirror .po files to $po_dir/.reference and copy only the new # or modified ones into $po_dir. Also update $po_dir/LINGUAS. +# Note po files that exist locally only are left in $po_dir but will +# not be included in LINGUAS and hence will not be distributed. update_po_files() { # Directory containing primary .po files. # Overwrite them only when we're sure a .po file is new. po_dir=$1 domain=$2 - # Download *.po files into this dir. + # Mirror *.po files into this dir. # Usually contains *.s1 checksum files. ref_po_dir="$po_dir/.reference" test -d $ref_po_dir || mkdir $ref_po_dir || return download_po_files $ref_po_dir $domain \ && ls "$ref_po_dir"/*.po 2>/dev/null | - sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" + sed 's|.*/||; s|\.po$||' > "$po_dir/LINGUAS" || return langs=`cd $ref_po_dir && echo *.po|sed 's/\.po//g'` test "$langs" = '*' && langs=x @@ -500,7 +585,7 @@ update_po_files() { ! test -f "$po_dir/$po.po" || ! $SHA1SUM -c --status "$cksum_file" \ < "$new_po" > /dev/null; then - echo "updated $po_dir/$po.po..." + echo "$me: updated $po_dir/$po.po..." cp "$new_po" "$po_dir/$po.po" \ && $SHA1SUM < "$new_po" > "$cksum_file" fi @@ -538,20 +623,20 @@ symlink_to_dir() for dot_ig in x $vc_ignore; do test $dot_ig = x && continue ig=$parent/$dot_ig - insert_sorted_if_absent $ig `echo "$dst_dir"|sed 's,.*/,,'` + insert_vc_ignore $ig `echo "$dst_dir"|sed 's,.*/,,'` done fi if $copy; then { test ! -h "$dst" || { - echo "$0: rm -f $dst" && + echo "$me: rm -f $dst" && rm -f "$dst" } } && test -f "$dst" && cmp -s "$src" "$dst" || { - echo "$0: cp -fp $src $dst" && + echo "$me: cp -fp $src $dst" && cp -fp "$src" "$dst" } else @@ -565,7 +650,7 @@ symlink_to_dir() *) case /$dst/ in *//* | */../* | */./* | /*/*/*/*/*/) - echo >&2 "$0: invalid symlink calculation: $src -> $dst" + echo >&2 "$me: invalid symlink calculation: $src -> $dst" exit 1;; /*/*/*/*/) dot_dots=../../../;; /*/*/*/) dot_dots=../../;; @@ -573,7 +658,7 @@ symlink_to_dir() esac;; esac - echo "$0: ln -fs $dot_dots$src $dst" && + echo "$me: ln -fs $dot_dots$src $dst" && ln -fs "$dot_dots$src" "$dst" } fi @@ -606,7 +691,7 @@ cp_mark_as_generated() cmp -s "$cp_src" "$cp_dst" || { # Copy the file first to get proper permissions if it # doesn't already exist. Then overwrite the copy. - echo "$0: cp -f $cp_src $cp_dst" && + echo "$me: cp -f $cp_src $cp_dst" && rm -f "$cp_dst" && cp "$cp_src" "$cp_dst-t" && sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst-t" && @@ -624,7 +709,7 @@ cp_mark_as_generated() if cmp -s "$cp_dst-t" "$cp_dst"; then rm -f "$cp_dst-t" else - echo "$0: cp $cp_src $cp_dst # with edits" && + echo "$me: cp $cp_src $cp_dst # with edits" && mv -f "$cp_dst-t" "$cp_dst" fi fi @@ -643,7 +728,7 @@ version_controlled_file() { elif test -d .svn; then svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes else - echo "$0: no version control for $dir/$file?" >&2 + echo "$me: no version control for $dir/$file?" >&2 fi test $found = yes } @@ -655,7 +740,8 @@ slurp() { for file in `ls -a $1/$dir`; do case $file in .|..) continue;; - .*) continue;; # FIXME: should all file names starting with "." be ignored? + # FIXME: should all file names starting with "." be ignored? + .*) continue;; esac test -d $1/$dir/$file && continue for excluded_file in $excluded_files; do @@ -664,18 +750,20 @@ slurp() { if test $file = Makefile.am && test "X$gnulib_mk" != XMakefile.am; then copied=$copied${sep}$gnulib_mk; sep=$nl remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g" - sed "$remove_intl" $1/$dir/$file | cmp - $dir/$gnulib_mk > /dev/null || { - echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." && + sed "$remove_intl" $1/$dir/$file | + cmp - $dir/$gnulib_mk > /dev/null || { + echo "$me: Copying $1/$dir/$file to $dir/$gnulib_mk ..." && rm -f $dir/$gnulib_mk && - sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk + sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk && + gnulib_mk_hook $dir/$gnulib_mk } elif { test "${2+set}" = set && test -r $2/$dir/$file; } || version_controlled_file $dir $file; then - echo "$0: $dir/$file overrides $1/$dir/$file" + echo "$me: $dir/$file overrides $1/$dir/$file" else copied=$copied$sep$file; sep=$nl if test $file = gettext.m4; then - echo "$0: patching m4/gettext.m4 to remove need for intl/* ..." + echo "$me: patching m4/gettext.m4 to remove need for intl/* ..." rm -f $dir/$file sed ' /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\ @@ -695,18 +783,25 @@ slurp() { test $dot_ig = x && continue ig=$dir/$dot_ig if test -n "$copied"; then - insert_sorted_if_absent $ig "$copied" + insert_vc_ignore $ig "$copied" # If an ignored file name ends with .in.h, then also add # the name with just ".h". Many gnulib headers are generated, # e.g., stdint.in.h -> stdint.h, dirent.in.h ->..., etc. # Likewise for .gperf -> .h, .y -> .c, and .sin -> .sed - f=`echo "$copied"|sed 's/\.in\.h$/.h/;s/\.sin$/.sed/;s/\.y$/.c/;s/\.gperf$/.h/'` - insert_sorted_if_absent $ig "$f" + f=`echo "$copied" | + sed ' + s/\.in\.h$/.h/ + s/\.sin$/.sed/ + s/\.y$/.c/ + s/\.gperf$/.h/ + ' + ` + insert_vc_ignore $ig "$f" # For files like sys_stat.in.h and sys_time.in.h, record as # ignorable the directory we might eventually create: sys/. f=`echo "$copied"|sed 's/sys_.*\.in\.h$/sys/'` - insert_sorted_if_absent $ig "$f" + insert_vc_ignore $ig "$f" fi done done @@ -731,6 +826,12 @@ gnulib_tool_options="\ --local-dir $local_gl_dir\ $gnulib_tool_option_extras\ " +if test $use_libtool = 1; then + case "$gnulib_tool_options " in + *' --libtool '*) ;; + *) gnulib_tool_options="$gnulib_tool_options --libtool" ;; + esac +fi echo "$0: $gnulib_tool $gnulib_tool_options --import ..." $gnulib_tool $gnulib_tool_options --import $gnulib_modules && slurp $bt || exit @@ -773,20 +874,12 @@ grep -E '^[ ]*AC_CONFIG_HEADERS?\>' configure.ac >/dev/null || for command in \ libtool \ - "${ACLOCAL-aclocal} --force -I m4" \ + "${ACLOCAL-aclocal} --force -I m4 $ACLOCAL_FLAGS" \ "${AUTOCONF-autoconf} --force" \ "${AUTOHEADER-autoheader} --force" \ "${AUTOMAKE-automake} --add-missing --copy --force-missing" do if test "$command" = libtool; then - use_libtool=0 - # We'd like to use grep -E, to see if any of LT_INIT, - # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac, - # but that's not portable enough (e.g., for Solaris). - grep '^[ ]*A[CM]_PROG_LIBTOOL' configure.ac >/dev/null \ - && use_libtool=1 - grep '^[ ]*LT_INIT' configure.ac >/dev/null \ - && use_libtool=1 test $use_libtool = 0 \ && continue command="${LIBTOOLIZE-libtoolize} -c -f" @@ -23,7 +23,6 @@ update-copyright-env = \ local-checks-to-skip = \ sc_GPL_version \ sc_bindtextdomain \ - sc_copyright_check \ sc_file_system \ sc_immutable_NEWS \ sc_obsolete_symbols \ diff --git a/gnulib b/gnulib -Subproject 4cae3d45b2bad5f45adef5a0fab285313b58eb6 +Subproject ef05ce61b0e5354256e0096c7dc022bf09bbf1d diff --git a/m4/.gitignore b/m4/.gitignore index f111425..aab56be 100644 --- a/m4/.gitignore +++ b/m4/.gitignore @@ -1,3 +1,115 @@ +/00gnulib.m4 +/alloca.m4 +/argmatch.m4 +/backupfile.m4 +/bison.m4 +/canonicalize.m4 +/clock_time.m4 +/codeset.m4 +/configmake.m4 +/d-ino.m4 +/dirent-safer.m4 +/dirent_h.m4 +/dirfd.m4 +/dirname.m4 +/double-slash-root.m4 +/dup2.m4 +/eealloc.m4 +/environ.m4 +/errno_h.m4 +/error.m4 +/extensions.m4 +/fcntl-o.m4 +/fcntl.m4 +/fcntl_h.m4 +/float_h.m4 +/getdtablesize.m4 +/getopt.m4 +/gettime.m4 +/gettimeofday.m4 +/glibc21.m4 +/gnulib-cache.m4 +/gnulib-common.m4 +/gnulib-comp.m4 +/gnulib-tool.m4 +/hash.m4 +/include_next.m4 +/inline.m4 +/intmax_t.m4 +/inttypes_h.m4 +/lchmod.m4 +/localcharset.m4 +/locale-fr.m4 +/locale-ja.m4 +/locale-zh.m4 +/longlong.m4 +/lstat.m4 +/malloc.m4 +/malloca.m4 +/manywarnings.m4 +/mbrtowc.m4 +/mbsinit.m4 +/mbstate_t.m4 +/memchr.m4 +/minmax.m4 +/mkdir.m4 +/mktime.m4 +/mmap-anon.m4 +/multiarch.m4 +/parse-datetime.m4 +/pathmax.m4 +/printf.m4 +/quote.m4 +/quotearg.m4 +/readlink.m4 +/realloc.m4 +/rename.m4 +/rmdir.m4 +/safe-read.m4 +/safe-write.m4 +/setenv.m4 +/size_max.m4 +/ssize_t.m4 +/stat-time.m4 +/stat.m4 +/stdarg.m4 +/stdbool.m4 +/stddef_h.m4 +/stdint.m4 +/stdint_h.m4 +/stdio_h.m4 +/stdlib_h.m4 +/strerror.m4 +/string_h.m4 +/strndup.m4 +/strnlen.m4 +/symlink.m4 +/sys_stat_h.m4 +/sys_time_h.m4 +/tempname.m4 +/time_h.m4 +/time_r.m4 +/timespec.m4 +/tm_gmtoff.m4 +/unistd-safer.m4 +/unistd_h.m4 +/unlink.m4 +/utimbuf.m4 +/utimens.m4 +/utimes.m4 +/vasnprintf.m4 +/vasprintf.m4 +/warn-on-use.m4 +/warnings.m4 +/wchar_h.m4 +/wchar_t.m4 +/wctype_h.m4 +/wint_t.m4 +/write.m4 +/xalloc.m4 +/xsize.m4 +/xstrndup.m4 +/xvasprintf.m4 00gnulib.m4 alloca.m4 argmatch.m4 |