diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-11-09 19:15:23 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-11-09 19:22:50 +0200 |
commit | 63bb8d52fdfed913318a7990416a60d61237bec5 (patch) | |
tree | 20135c90097cd93e6a44ffc11695bd69c6d6248e | |
parent | 706bb744d7ca1a090fd06fb75c8f3af5732eb368 (diff) | |
download | cflow-63bb8d52fdfed913318a7990416a60d61237bec5.tar.gz cflow-63bb8d52fdfed913318a7990416a60d61237bec5.tar.bz2 |
Housekeeping changes.
* .gitmodules: Make gnulib a submodule.
* Makefile.am (SUBDIRS): Rename `lib' to `gnu'.
* configure.ac: Likewise.
* README-hacking: Update
* bootstrap, bootstrap.conf: Update.
* gnulib.modules: Remove `malloc'.
* lib/Makefile.am: Remove.
* lib/argcv.c, lib/argcv.h: Move to src.
* po/POTFILES.in, src/Makefile.am: Reflect the above changes.
* src/parser.c (declare): Improve diagnostic messages.
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | .gitmodules | 3 | ||||
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | README-hacking | 14 | ||||
-rwxr-xr-x | bootstrap | 543 | ||||
-rw-r--r-- | bootstrap.conf | 71 | ||||
-rw-r--r-- | configure.ac | 9 | ||||
m--------- | gnulib | 0 | ||||
-rw-r--r-- | gnulib.modules | 1 | ||||
-rw-r--r-- | lib/Makefile.am | 23 | ||||
-rw-r--r-- | po/POTFILES.in | 10 | ||||
-rw-r--r-- | src/Makefile.am | 6 | ||||
-rw-r--r-- | src/argcv.c (renamed from lib/argcv.c) | 0 | ||||
-rw-r--r-- | src/argcv.h (renamed from lib/argcv.h) | 0 | ||||
-rw-r--r-- | src/parser.c | 11 |
15 files changed, 472 insertions, 222 deletions
@@ -25,2 +25,3 @@ config.status configure +gnu m4 diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..acb2669 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "gnulib"] + path = gnulib + url = git://git.sv.gnu.org/gnulib.git diff --git a/Makefile.am b/Makefile.am index ce5ccbb..3e74d49 100644 --- a/Makefile.am +++ b/Makefile.am @@ -22,3 +22,3 @@ ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = lib src elisp po doc tests +SUBDIRS = gnu src elisp po doc tests diff --git a/README-hacking b/README-hacking index 5307d93..2e74619 100644 --- a/README-hacking +++ b/README-hacking @@ -37,16 +37,2 @@ INSTALLATION). -Normally you will have to run bootstrap only once. However, if you -intend to hack on GNU cflow, you might need to run it again later. In -this case, you will probably want to save some time and bandwidth by -avoiding downloading the same files again. If so, create in the project's -root directory a file named `.bootstrap' with the following -contents: - - --gnulib-srcdir=$HOME/gnulib - -Replace `$HOME/gnulib' with the actual directory where the Gnulib -sources reside. - -For more information about `bootstrap', run `bootstrap --help'. - Enjoy! @@ -4,3 +4,3 @@ -# Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +# Copyright (C) 2003-2009 Free Software Foundation, Inc. @@ -36,3 +36,3 @@ bt2=${bt}2 usage() { - echo >&2 "\ + cat <<EOF Usage: $0 [OPTION]... @@ -51,7 +51,10 @@ Options: -If the file bootstrap.conf exists in the current working directory, its +If the file $0.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 +are honored. + Running without arguments will suffice in most cases. -" +EOF } @@ -98,12 +101,17 @@ gnulib_name=lib$package build_aux=build-aux +source_base=lib +m4_base=m4 +doc_base=doc +tests_base=tests + # Extra files from gnulib, which override files from other sources. gnulib_extra_files=" - $build_aux/install-sh - $build_aux/missing - $build_aux/mdate-sh - $build_aux/texinfo.tex - $build_aux/depcomp - $build_aux/config.guess - $build_aux/config.sub - doc/INSTALL + $build_aux/install-sh + $build_aux/missing + $build_aux/mdate-sh + $build_aux/texinfo.tex + $build_aux/depcomp + $build_aux/config.guess + $build_aux/config.sub + doc/INSTALL " @@ -123,2 +131,5 @@ XGETTEXT_OPTIONS='\\\ +# Package bug report address for gettext files +MSGID_BUGS_ADDRESS=bug-$package@gnu.org + # Files we don't want to import. @@ -139,4 +150,49 @@ vc_ignore=auto +# find_tool ENVVAR NAMES... +# ------------------------- +# Search for a required program. Use the value of ENVVAR, if set, +# otherwise find the first of the NAMES that can be run (i.e., +# supports --version). If found, set ENVVAR to the program name, +# die otherwise. +find_tool () +{ + # Find sha1sum, named gsha1sum on MacPorts. + find_tool_envvar=$1 + shift + find_tool_names=$@ + eval "find_tool_res=\$$find_tool_envvar" + if test x"$find_tool_res" = x; then + for i + do + if ($i --version </dev/null) >/dev/null 2>&1; then + find_tool_res=$i + break + fi + done + else + 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" + 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" + exit 1 + } + eval "$find_tool_envvar=\$find_tool_res" + eval "export $find_tool_envvar" +} + +# Find sha1sum, named gsha1sum on MacPorts. +find_tool SHA1SUM sha1sum gsha1sum + # Override the default configuration, if necessary. -test -r bootstrap.conf && . ./bootstrap.conf +# Make sure that bootstrap.conf is sourced from the current directory +# if we were invoked as "sh bootstrap". +case "$0" in + */*) test -r "$0.conf" && . "$0.conf" ;; + *) test -r "$0.conf" && . ./"$0.conf" ;; +esac + @@ -159,3 +215,3 @@ do --gnulib-srcdir=*) - GNULIB_SRCDIR=`expr "$option" : '--gnulib-srcdir=\(.*\)'`;; + GNULIB_SRCDIR=`expr "X$option" : 'X--gnulib-srcdir=\(.*\)'`;; --skip-po) @@ -183,3 +239,3 @@ insert_sorted_if_absent() { test -f $file || touch $file - echo "$str" | sort -u - $file | cmp -s - $file \ + echo "$str" | sort -u - $file | cmp - $file > /dev/null \ || echo "$str" | sort -u - $file -o $file \ @@ -210,4 +266,112 @@ fi +# Note this deviates from the version comparison in automake +# in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a +# but this should suffice as we won't be specifying old +# version formats or redundant trailing .0 in bootstrap.conf. +# If we did want full compatibility then we should probably +# use m4_version_compare from autoconf. +sort_ver() { # sort -V is not generally available + ver1="$1" + ver2="$2" + + # split on '.' and compare each component + i=1 + while : ; do + p1=$(echo "$ver1" | cut -d. -f$i) + p2=$(echo "$ver2" | cut -d. -f$i) + if [ ! "$p1" ]; then + echo "$1 $2" + break + elif [ ! "$p2" ]; then + echo "$2 $1" + break + elif [ ! "$p1" = "$p2" ]; then + if [ "$p1" -gt "$p2" ] 2>/dev/null; then # numeric comparison + echo "$2 $1" + elif [ "$p2" -gt "$p1" ] 2>/dev/null; then # numeric comparison + echo "$1 $2" + else # numeric, then lexicographic comparison + lp=$(printf "$p1\n$p2\n" | LANG=C sort -n | tail -n1) + if [ "$lp" = "$p2" ]; then + echo "$1 $2" + else + echo "$2 $1" + fi + fi + break + fi + i=$(($i+1)) + done +} + +get_version() { + app=$1 + + $app --version >/dev/null 2>&1 || return 1 + + $app --version 2>&1 | + sed -n 's/[^0-9.]*\([0-9]\{1,\}\.[.a-z0-9-]*\).*/\1/p + t done + d + :done + q' +} + +check_versions() { + ret=0 + + while read app req_ver; do + # Honor $APP variables ($TAR, $AUTOCONF, etc.) + 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 + 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 " '$app' version >= $req_ver is required" >&2 + ret=1 + fi + fi + done + + return $ret +} + +print_versions() { + echo "Program Min_version" + echo "----------------------" + printf "$buildreq" + echo "----------------------" + # can't depend on column -t +} + +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 + exit 1 +fi + echo "$0: Bootstrapping from checked-out $package sources..." +# See if we can use gnulib's git-merge-changelog merge driver. +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" + 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" + fi +fi + + cleanup_gnulib() { @@ -218,2 +382,6 @@ cleanup_gnulib() { +git_modules_config () { + test -f .gitmodules && git config --file .gitmodules "$@" +} + # Get gnulib files. @@ -222,3 +390,8 @@ case ${GNULIB_SRCDIR--} in -) - if [ ! -d gnulib ]; then + if git_modules_config submodule.gnulib.url >/dev/null; then + echo "$0: getting gnulib files..." + git submodule init || exit $? + git submodule update || exit $? + + elif [ ! -d gnulib ]; then echo "$0: getting gnulib files..." @@ -227,3 +400,4 @@ case ${GNULIB_SRCDIR--} in - git clone --depth 2 git://git.sv.gnu.org/gnulib || + git clone --help|grep depth > /dev/null && shallow='--depth 2' || shallow= + git clone $shallow git://git.sv.gnu.org/gnulib || cleanup_gnulib @@ -233,2 +407,16 @@ case ${GNULIB_SRCDIR--} in GNULIB_SRCDIR=gnulib + ;; +*) + # Redirect the gnulib submodule to the directory on the command line + # if possible. + if test -d "$GNULIB_SRCDIR"/.git && \ + git_modules_config submodule.gnulib.url >/dev/null; then + git submodule init + GNULIB_SRCDIR=`cd $GNULIB_SRCDIR && pwd` + git config --replace-all submodule.gnulib.url $GNULIB_SRCDIR + echo "$0: getting gnulib files..." + git submodule update || exit $? + GNULIB_SRCDIR=gnulib + fi + ;; esac @@ -267,3 +455,3 @@ update_po_files() { test "$langs" = '*' && langs=x - for po in `cd $ref_po_dir && echo *.po|sed 's/\.po//g'`; do + for po in $langs; do case $po in x) continue;; esac @@ -272,5 +460,8 @@ update_po_files() { if ! test -f "$cksum_file" || - ! sha1sum -c --status "$cksum_file" < "$new_po" > /dev/null; then + ! test -f "$po_dir/$po.po" || + ! $SHA1SUM -c --status "$cksum_file" \ + < "$new_po" > /dev/null; then echo "updated $po_dir/$po.po..." - cp "$new_po" "$po_dir/$po.po" && sha1sum < "$new_po" > "$cksum_file" + cp "$new_po" "$po_dir/$po.po" \ + && $SHA1SUM < "$new_po" > "$cksum_file" fi @@ -308,5 +499,5 @@ 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,.*/,,'` + test $dot_ig = x && continue + ig=$parent/$dot_ig + insert_sorted_if_absent $ig `echo "$dst_dir"|sed 's,.*/,,'` done @@ -316,6 +507,6 @@ symlink_to_dir() { - test ! -h "$dst" || { - echo "$0: rm -f $dst" && - rm -f "$dst" - } + test ! -h "$dst" || { + echo "$0: rm -f $dst" && + rm -f "$dst" + } } && @@ -323,4 +514,4 @@ symlink_to_dir() cmp -s "$src" "$dst" || { - echo "$0: cp -fp $src $dst" && - cp -fp "$src" "$dst" + echo "$0: cp -fp $src $dst" && + cp -fp "$src" "$dst" } @@ -331,18 +522,18 @@ symlink_to_dir() test "$src_i" = "$dst_i" || { - dot_dots= - case $src in - /*) ;; - *) - case /$dst/ in - *//* | */../* | */./* | /*/*/*/*/*/) - echo >&2 "$0: invalid symlink calculation: $src -> $dst" - exit 1;; - /*/*/*/*/) dot_dots=../../../;; - /*/*/*/) dot_dots=../../;; - /*/*/) dot_dots=../;; - esac;; - esac - - echo "$0: ln -fs $dot_dots$src $dst" && - ln -fs "$dot_dots$src" "$dst" + dot_dots= + case $src in + /*) ;; + *) + case /$dst/ in + *//* | */../* | */./* | /*/*/*/*/*/) + echo >&2 "$0: invalid symlink calculation: $src -> $dst" + exit 1;; + /*/*/*/*/) dot_dots=../../../;; + /*/*/*/) dot_dots=../../;; + /*/*/) dot_dots=../;; + esac;; + esac + + echo "$0: ln -fs $dot_dots$src $dst" && + ln -fs "$dot_dots$src" "$dst" } @@ -369,12 +560,16 @@ cp_mark_as_generated() + # If the destination directory doesn't exist, create it. + # This is required at least for "lib/uniwidth/cjk.h". dst_dir=`dirname "$cp_dst"` - if ! test -d "$dst_dir"; then - mkdir -p "$dst_dir" - fi - + test -d "$dst_dir" || mkdir -p "$dst_dir" + if test -z "$c1"; then cmp -s "$cp_src" "$cp_dst" || { - echo "$0: cp -f $cp_src $cp_dst" && - rm -f "$cp_dst" && - sed "s!$bt_regex/!!g" "$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" && + rm -f "$cp_dst" && + cp "$cp_src" "$cp_dst-t" && + sed "s!$bt_regex/!!g" "$cp_src" > "$cp_dst-t" && + mv -f "$cp_dst-t" "$cp_dst" } @@ -385,11 +580,11 @@ cp_mark_as_generated() ( - echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" && - echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" && - sed "s!$bt_regex/!!g" "$cp_src" + echo "$c1-*- buffer-read-only: t -*- vi: set ro:$c2" && + echo "${c1}DO NOT EDIT! GENERATED AUTOMATICALLY!$c2" && + sed "s!$bt_regex/!!g" "$cp_src" ) > $cp_dst-t && if cmp -s "$cp_dst-t" "$cp_dst"; then - rm -f "$cp_dst-t" + rm -f "$cp_dst-t" else - echo "$0: cp $cp_src $cp_dst # with edits" && - mv -f "$cp_dst-t" "$cp_dst" + echo "$0: cp $cp_src $cp_dst # with edits" && + mv -f "$cp_dst-t" "$cp_dst" fi @@ -405,5 +600,7 @@ version_controlled_file() { grep -F "/$file/" $dir/CVS/Entries 2>/dev/null | - grep '^/[^/]*/[0-9]' > /dev/null && found=yes + grep '^/[^/]*/[0-9]' > /dev/null && found=yes elif test -d .git; then - git-rm -n "$dir/$file" > /dev/null 2>&1 && found=yes + git rm -n "$dir/$file" > /dev/null 2>&1 && found=yes + elif test -d .svn; then + svn log -r HEAD "$dir/$file" > /dev/null 2>&1 && found=yes else @@ -414,2 +611,65 @@ version_controlled_file() { +# AWK program to convert a Makefile(.am) file rules to Automake 1.11 +# silent mode. +silent_rules_prog=' +# state = 0 - outside rules +# state = 1 - first line inside a rule +# state = 2 - subsequent lines inside a rule +# cont = 1 - this line is a continuation of the previous one +# defn = 1 - insert AM_V_GEN/AM_V_at definitions after the initail comment +# Print comment lines +/^[ \t]*#/ { print; next } +# Insert AM_V_ definitions, if required. +state == 0 && defn == 1 { + print "AM_DEFAULT_VERBOSITY=0" # FIXME + print "AM_V_GEN = $(am__v_GEN_$(V))" + print "am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))" + print "am__v_GEN_0 = @echo \" GEN \" $@;" + print "AM_V_at = $(am__v_at_$(V))" + print "am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))" + print "am__v_at_0 = @" + defn = 0 +} +# Start of a rule +/^[^ \t].*:/ { print; state = 1; cont = 0; next } +# First action within the rule +state == 1 && /^\t/ { + # Print silent rules without changes. The second match + # is necessary to handle @VAR@ substitutions. + if (!(match($1, /^@/) && !match($1, /.@$/))) + sub(/^\t[\t ]*/, "&$(AM_V_GEN)") + print + cont = match($0, /\\$/) + state = 2 + next +} +# All non-continuation lines within the rule are prefixed +# with $(AM_V_at). +state == 2 && /^\t/ && NF > 0 { + if (!cont) + sub(/^\t[\t ]*/, "&$(AM_V_at)") + print + cont = match($0, /\\$/) + next +} +# Everything else is output verbatim +{ print } +' + +silent_rules=yes +grep 'AM_SILENT_RULES' configure.ac > /dev/null || + grep '^[ ]*AM_INIT_AUTOMAKE([^)][^)]*silent-rules' configure.ac > /dev/null || + silent_rules=no + +silentize() { + if test "$silent_rules" = yes; then + case $1 in + *.am) defn=0;; + *.in) defn=1;; + esac + awk -v defn=$defn "$silent_rules_prog" $1 > ${1}-t && + mv ${1}-t $1 + fi +} + slurp() { @@ -425,3 +685,3 @@ slurp() { for excluded_file in $excluded_files; do - test "$dir/$file" = "$excluded_file" && continue 2 + test "$dir/$file" = "$excluded_file" && continue 2 done @@ -429,27 +689,27 @@ slurp() { copied=$copied${sep}$gnulib_mk; sep=$nl - remove_intl='/^[^#].*\/intl/s/^/#/;'"s!$bt_regex/!!g" - sed "$remove_intl" $1/$dir/$file | cmp -s - $dir/$gnulib_mk || { - echo "$0: Copying $1/$dir/$file to $dir/$gnulib_mk ..." && - rm -f $dir/$gnulib_mk && - sed "$remove_intl" $1/$dir/$file >$dir/$gnulib_mk - } + 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 ..." && + rm -f $dir/$gnulib_mk && + sed "$remove_intl" $1/$dir/$file >$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" + version_controlled_file $dir $file; then + echo "$0: $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/* ..." - rm -f $dir/$file - sed ' - /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\ - AC_DEFUN([AM_INTL_SUBDIR], [ - /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\ - AC_DEFUN([gt_INTL_SUBDIR_CORE], []) - $a\ - AC_DEFUN([gl_LOCK_EARLY], []) - ' $1/$dir/$file >$dir/$file - else - cp_mark_as_generated $1/$dir/$file $dir/$file - fi + copied=$copied$sep$file; sep=$nl + if test $file = gettext.m4; then + echo "$0: patching m4/gettext.m4 to remove need for intl/* ..." + rm -f $dir/$file + sed ' + /^AC_DEFUN(\[AM_INTL_SUBDIR],/,/^]/c\ + AC_DEFUN([AM_INTL_SUBDIR], [ + /^AC_DEFUN(\[gt_INTL_SUBDIR_CORE],/,/^]/c\ + AC_DEFUN([gt_INTL_SUBDIR_CORE], []) + $a\ + AC_DEFUN([gl_LOCK_EARLY], []) + ' $1/$dir/$file >$dir/$file + else + cp_mark_as_generated $1/$dir/$file $dir/$file + fi fi || exit @@ -461,14 +721,14 @@ slurp() { if test -n "$copied"; then - insert_sorted_if_absent $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" - - # 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_sorted_if_absent $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" + + # 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" fi @@ -478,3 +738,2 @@ slurp() { - # Create boot temporary directories to import from gnulib and gettext. @@ -489,9 +748,9 @@ gnulib_tool_options="\ --aux-dir $bt/$build_aux\ - --doc-base $bt/doc\ + --doc-base $bt/$doc_base\ --lib $gnulib_name\ - --m4-base $bt/m4/\ - --source-base $bt/lib/\ - --tests-base $bt/tests\ + --m4-base $bt/$m4_base/\ + --source-base $bt/$source_base/\ + --tests-base $bt/$tests_base\ --local-dir $local_gl_dir\ -$gnulib_tool_option_extras\ + $gnulib_tool_option_extras\ " @@ -512,28 +771,20 @@ grep '^[ ]*AM_GNU_GETTEXT_VERSION(' configure.ac >/dev/null || \ if test $with_gettext = yes; then - echo "$0: (cd $bt2; autopoint) ..." + echo "$0: (cd $bt2; ${AUTOPOINT-autopoint}) ..." cp configure.ac $bt2 && - (cd $bt2 && autopoint && rm configure.ac) && + (cd $bt2 && ${AUTOPOINT-autopoint} && rm configure.ac) && slurp $bt2 $bt || exit - - rm -fr $bt $bt2 || exit -fi - -# Coreutils is unusual in that it generates some of its test-related -# Makefile.am files. That must be done before invoking automake. -mam_template=tests/Makefile.am.in -if test -f $mam_template; then - PERL=perl - for tool in cut head join pr sort tac tail test tr uniq wc; do - m=tests/$tool/Makefile.am - t=${m}t - rm -f $m $t - sed -n '1,/^##test-files-begin/p' $mam_template > $t - echo "x = $tool" >> $t - srcdir=tests/$tool - $PERL -I$srcdir -w -- tests/mk-script $srcdir --list >> $t - sed -n '/^##test-files-end/,$p' $mam_template >> $t - chmod -w $t - mv $t $m - done fi +rm -fr $bt $bt2 || exit + +# Remove any dangling symlink matching "*.m4" or "*.[ch]" in some +# gnulib-populated directories. Such .m4 files would cause aclocal to fail. +# The following requires GNU find 4.2.3 or newer. Considering the usual +# portability constraints of this script, that may seem a very demanding +# requirement, but it should be ok. Ignore any failure, which is fine, +# since this is only a convenience to help developers avoid the relatively +# unusual case in which a symlinked-to .m4 file is git-removed from gnulib +# between successive runs of this script. +find "$m4_base" "$source_base" \ + -depth \( -name '*.m4' -o -name '*.[ch]' \) \ + -type l -xtype l -delete > /dev/null 2>&1 @@ -541,2 +792,6 @@ fi +# Skip autoheader if it's not needed. +grep '^[ ]*AC_CONFIG_HEADERS\>' configure.ac >/dev/null || + AUTOHEADER=true + aclocal_flags=`sed -n 's/ACLOCAL_AMFLAGS *=//p' Makefile.am` @@ -544,11 +799,19 @@ for command in \ libtool \ - "aclocal --force $aclocal_flags" \ - 'autoconf --force' \ - 'autoheader --force' \ - 'automake --add-missing --copy --force-missing'; + "${ACLOCAL-aclocal} --force $aclocal_flags" \ + "${AUTOCONF-autoconf} --force" \ + "${AUTOHEADER-autoheader} --force" \ + "${AUTOMAKE-automake} --add-missing --copy --force-missing" do if test "$command" = libtool; then - grep '^[ ]*AM_PROG_LIBTOOL\>' configure.ac >/dev/null || - continue - command='libtoolize -c -f' + 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" fi @@ -575,3 +838,4 @@ if test $with_gettext = yes; then /^EXTRA_LOCALE_CATEGORIES *=/s/=.*/= '"$EXTRA_LOCALE_CATEGORIES"'/ - /^MSGID_BUGS_ADDRESS *=/s/=.*/= bug-'"$package"'@gnu.org/ + /^MSGID_BUGS_ADDRESS *=/s/=.*/= '"$MSGID_BUGS_ADDRESS"'/ + /^COPYRIGHT_HOLDER *=/s/=.*/= '"$COPYRIGHT_HOLDER"'/ /^XGETTEXT_OPTIONS *=/{ @@ -579,5 +843,6 @@ if test $with_gettext = yes; then a\ - '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} + '"$XGETTEXT_OPTIONS"' $${end_of_xgettext_options+} } ' po/Makevars.template >po/Makevars + silentize po/Makefile.in.in @@ -591,5 +856,5 @@ if test $with_gettext = yes; then /^XGETTEXT_OPTIONS *=/{ - s/$/ \\/ - a\ - '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+} + s/$/ \\/ + a\ + '"$XGETTEXT_OPTIONS_RUNTIME"' $${end_of_xgettext_options+} } @@ -603 +868,5 @@ fi echo "$0: done. Now you can run './configure'." + +# Local Variables: +# indent-tabs-mode: nil +# End: diff --git a/bootstrap.conf b/bootstrap.conf index 4dc2998..504dfbe 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -1,3 +1,3 @@ # Bootstrap configuration. -# Copyright (C) 2006, 2007 Free Software Foundation, Inc. +# Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc. # @@ -18,41 +18,37 @@ -# We don't need these modules, even though gnulib-tool mistakenly -# includes them because of gettext dependencies. -avoided_gnulib_modules=' - --avoid=lock -' +source_base=gnu +gnulib_name=libgnu +gnulib_mk=Makefile.am + +MODAVOID="" + +if [ -n "$MODAVOID" ]; then + gnulib_tool_option_extras="`echo $MODAVOID | sed 's/\([^ ][^ ]*\)/--avoid &/g'`" +fi # gnulib modules used by this package. -gnulib_modules="$avoided_gnulib_modules -`grep '^[^#]' gnulib.modules` -" +gnulib_modules=`grep '^[^#]' gnulib.modules` + +NLS_MARKERS="" + # Additional xgettext options to use. Use "\\\newline" to break lines. -XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\ - --flag=_:1:pass-c-format\\\ - --flag=N_:1:pass-c-format\\\ - --flag=error:3:c-format --flag=error_at_line:5:c-format\\\ - --flag=asnprintf:3:c-format --flag=vasnprintf:3:c-format\\\ - --flag=argp_error:2:c-format\\\ - --flag=__argp_error:2:c-format\\\ - --flag=argp_failure:4:c-format\\\ - --flag=__argp_failure:4:c-format\\\ - --flag=argp_fmtstream_printf:2:c-format\\\ - --flag=__argp_fmtstream_printf:2:c-format\\\ -' +if [ -n "$NLS_MARKERS" ]; then + XGETTEXT_OPTIONS="$XGETTEXT_OPTIONS "`echo $NLS_MARKERS | tr ' ' '\n' | sed 's/.*/ --flag=&:pass-c-format\\\\\\\\\\\\/'`" +" +fi -# Gettext supplies these files, but we don't need them since -# we don't have an intl subdirectory. -excluded_files=' - m4/glibc2.m4 - m4/intdiv0.m4 - m4/lcmessage.m4 - m4/lock.m4 - m4/printf-posix.m4 - m4/size_max.m4 - m4/uintmax_t.m4 - m4/ulonglong.m4 - m4/visibility.m4 - m4/xsize.m4 +# Bug address +extract_bug_address=' + /^AC-INIT-BUG-ADDRESS/{ + s/[][]//g + s/.*=//p + } ' +COPYRIGHT_HOLDER="Sergey Poznyakoff" +MSGID_BUGS_ADDRESS=`m4 -D'AC_INIT=AC-INIT-BUG-ADDRESS=$3' configure.ac | sed -n "$extract_bug_address"` +if test -z "$MSGID_BUGS_ADDRESS"; then + MSGID_BUGS_ADDRESS="bug-${package}@gnu.org.ua" +fi + # Read local configuration file @@ -62 +58,8 @@ if [ -r .bootstrap ]; then fi + +test -d $source_base || mkdir $source_base + +cat > ChangeLog <<EOT +This file is a placeholder. It will be replaced with the actual ChangeLog +by make dist. Run make ChangeLog if you wish to create it earlier. +EOT diff --git a/configure.ac b/configure.ac index 39f9770..0a8a203 100644 --- a/configure.ac +++ b/configure.ac @@ -24,4 +24,9 @@ AC_CONFIG_SRCDIR([src/cflow.h]) AC_CONFIG_AUX_DIR([build-aux]) -AM_INIT_AUTOMAKE([1.9 gnits tar-ustar dist-bzip2 std-options]) +AM_INIT_AUTOMAKE([1.11 gnits tar-ustar dist-bzip2 dist-lzma dist-xz std-options +silent-rules]) AC_CONFIG_HEADER([config.h]) + +# Enable silent rules by default: +AM_SILENT_RULES([yes]) + gl_EARLY @@ -80,3 +85,3 @@ AC_CONFIG_FILES([ Makefile - lib/Makefile + gnu/Makefile src/Makefile diff --git a/gnulib b/gnulib new file mode 160000 +Subproject 6553be82a4a522e50ece1a430e82a9b1dfd0f47 diff --git a/gnulib.modules b/gnulib.modules index 87b9346..53c29e8 100644 --- a/gnulib.modules +++ b/gnulib.modules @@ -7,3 +7,2 @@ obstack lstat -malloc error diff --git a/lib/Makefile.am b/lib/Makefile.am deleted file mode 100644 index 3156f0a..0000000 --- a/lib/Makefile.am +++ /dev/null @@ -1,23 +0,0 @@ -# Makefile for GNU cflow library. -*- Makefile -*- - -# Copyright (C) 2005, 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 -## the Free Software Foundation; either version 3, or (at your option) -## any later version. - -## This program is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. - -## You should have received a copy of the GNU General Public License -## along with this program; if not, write to the Free Software -## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -## 02110-1301, USA. - -include gnulib.mk - -noinst_HEADERS += argcv.h -libcflow_a_SOURCES += argcv.c diff --git a/po/POTFILES.in b/po/POTFILES.in index 2f2e55f..2a83044 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -6,6 +6,6 @@ src/symbol.c -lib/argp-help.c -lib/argp-parse.c -lib/error.c -lib/getopt.c -lib/obstack.c +gnu/argp-help.c +gnu/argp-parse.c +gnu/error.c +gnu/getopt.c +gnu/obstack.c diff --git a/src/Makefile.am b/src/Makefile.am index ce4663d..05acd30 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -20,3 +20,3 @@ -INCLUDES = -I$(top_srcdir)/lib -I../ -I../lib +INCLUDES = -I$(top_srcdir)/gnu -I../ -I../gnu @@ -24,2 +24,4 @@ bin_PROGRAMS = cflow cflow_SOURCES = \ + argcv.c\ + argcv.h\ c.l\ @@ -39,3 +41,3 @@ localedir = $(datadir)/locale -cflow_LDADD=../lib/libcflow.a @LIBINTL@ +LDADD=../gnu/libgnu.a @LIBINTL@ AM_CPPFLAGS=-DLOCALEDIR=\"$(localedir)\" diff --git a/lib/argcv.c b/src/argcv.c index 51e335e..51e335e 100644 --- a/lib/argcv.c +++ b/src/argcv.c diff --git a/lib/argcv.h b/src/argcv.h index 17a2f31..17a2f31 100644 --- a/lib/argcv.h +++ b/src/argcv.h diff --git a/src/parser.c b/src/parser.c index 16ab289..6478ed5 100644 --- a/src/parser.c +++ b/src/parser.c @@ -984,5 +984,10 @@ declare(Ident *ident, int maybe_knr) } else { - error_at_line(0, 0, filename, ident->line, - _("%s/%d redefined"), - ident->name, sp->arity); + if (sp->arity >= 0) + error_at_line(0, 0, filename, ident->line, + _("%s/%d redefined"), + ident->name, sp->arity); + else + error_at_line(0, 0, filename, ident->line, + _("%s redefined"), + ident->name); error_at_line(0, 0, sp->source, sp->def_line, |