From 9ec79612e822b39d0ab2ef5c4b9d584884ef61cd Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Mon, 1 Oct 2012 17:42:39 +0200 Subject: [PATCH] build: use gnulib's non-recursive-gnulib-prefix-hack Suggested by Jim Meyering. * etc/prefix-gnulib-mk: Remove, as it is now provided by... * bootstrap.conf (modules): the non-recursive-gnulib-prefix-hack module. * build-aux/.gitignore, configure.ac, m4/.gitignore: Adjust. --- bootstrap.conf | 3 +- build-aux/.gitignore | 1 + configure.ac | 13 --- etc/prefix-gnulib-mk | 220 ------------------------------------------- m4/.gitignore | 1 + 5 files changed, 4 insertions(+), 234 deletions(-) delete mode 100755 etc/prefix-gnulib-mk diff --git a/bootstrap.conf b/bootstrap.conf index 190327d3..3e631a2a 100644 --- a/bootstrap.conf +++ b/bootstrap.conf @@ -25,6 +25,7 @@ gnulib_modules=' gpl-3.0 hash inttypes isnan javacomp-script javaexec-script ldexpl malloc-gnu mbswidth + non-recursive-gnulib-prefix-hack obstack obstack-printf perror progname @@ -78,7 +79,7 @@ gnulib_tool_option_extras='--symlink --makefile-name=gnulib.mk' bootstrap_post_import_hook() { # Massage lib/gnulib.mk before using it later in the bootstrapping process. - etc/prefix-gnulib-mk --lib-name=$gnulib_name lib/$gnulib_mk + build-aux/prefix-gnulib-mk --lib-name=$gnulib_name lib/$gnulib_mk # Ensure that ChangeLog exists, for automake. test -f ChangeLog || touch ChangeLog diff --git a/build-aux/.gitignore b/build-aux/.gitignore index e2c69c38..2c8b6fe1 100644 --- a/build-aux/.gitignore +++ b/build-aux/.gitignore @@ -26,3 +26,4 @@ /vc-list-files /warn-on-use.h /ylwrap +/prefix-gnulib-mk diff --git a/configure.ac b/configure.ac index 328d9294..d6a86a73 100644 --- a/configure.ac +++ b/configure.ac @@ -187,19 +187,6 @@ AC_SUBST([GCC]) gt_JAVACOMP([1.3], [1.4]) gt_JAVAEXEC -# We use gnulib, but from lib/local.mk instead of lib/Makefile.am. -# So prefix paths with lib/. See also etc/prefix-gnulib-mk. -gl_LIBOBJS=`echo "$gl_LIBOBJS" | sed -e 's, , lib/,g'` -# Listing the names of the variables to prefix is error-prone. -# Rather, adjust all the AC_SUBST variables whose name ends in '_H', -# and whose content ends in '.h'. -for ac_var in $ac_subst_vars -do - eval "ac_val=\$$ac_var" - case $ac_var=$ac_val in - (*_H=*.h) eval "$ac_var=lib/\$$ac_var";; - esac -done AC_CONFIG_FILES([Makefile po/Makefile.in doc/yacc.1]) diff --git a/etc/prefix-gnulib-mk b/etc/prefix-gnulib-mk deleted file mode 100755 index 81c0924f..00000000 --- a/etc/prefix-gnulib-mk +++ /dev/null @@ -1,220 +0,0 @@ -#! /usr/bin/perl -w - -use strict; -use IO::File; -use Getopt::Long; -use File::Basename; # for dirname - -my $VERSION = '2012-01-21 17:13'; # UTC -(my $ME = $0) =~ s|.*/||; - -my $prefix; -my $lib_name; - -sub usage ($) -{ - my ($exit_code) = @_; - my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); - if ($exit_code != 0) - { - print $STREAM "Try '$ME --help' for more information.\n"; - } - else - { - print $STREAM <getline or die "$file"; - $f->close; - return $contents; -} - -# prefix_word ($WORD) -# ------------------- -# Do not prefix special words such as variable dereferences. Also, -# "Makefile" is really "Makefile", since precisely there is no -# lib/Makefile. -sub prefix_word ($) -{ - local ($_) = @_; - $_ = $prefix . $_ - unless /^-/ || m{^\$\(\w+\)} || $_ eq "Makefile" || $_ eq '\\'; - return $_; -} - - -# prefix_words ($TEXT) -# -------------------- -sub prefix_words ($) -{ - local ($_) = @_; - s{(\S+)}{prefix_word($1)}gem; - return $_; -} - - -# prefix_assignment ($LHS-AND-ASSIGN-OP, $RHS) -# -------------------------------------------- -sub prefix_assignment ($$) -{ - my ($lhs_and_assign_op, $rhs) = @_; - my $res; - - # Some variables are initialized by gnulib.mk, and we don't want - # that. Change '=' to '+='. - if ($lhs_and_assign_op =~ /^(SUBDIRS|EXTRA_DIST|BUILT_SOURCES|SUFFIXES|MOSTLYCLEANFILES|CLEANFILES|DISTCLEANFILES|MAINTAINERCLEANFILES|AM_CFLAGS|AM_CPPFLAGS|AM_GNU_GETTEXT) =/) - { - $lhs_and_assign_op =~ s/=/+=/; - } - # We don't want to inherit gnulib's AUTOMAKE_OPTIONS, comment them. - elsif ($lhs_and_assign_op =~ /^AUTOMAKE_OPTIONS =/) - { - $lhs_and_assign_op =~ s/^/# /; - } - # Don't touch suffixes. - elsif ($lhs_and_assign_op =~ /^SUFFIXES /) - { - } - # The words are (probably) paths to files in lib/: prefix them. - else - { - $rhs = prefix_words($rhs) - } - - # Variables which name depend on the location: libbison_a_SOURCES => - # lib_libbison_a_SOURCES. - $lhs_and_assign_op =~ s/($lib_name)/lib_$1/g; - - return $lhs_and_assign_op . $rhs; -} - -# prefix $CONTENTS -# ---------------- -# $CONTENTS is a Makefile content. Post-process it so that each file-name -# is prefixed with $prefix (e.g., "lib/"). -# -# Relies heavily on the regularity of the file generated by gnulib-tool. -sub prefix ($) -{ - # Work on $_. - local ($_) = @_; - - # Prefix all the occurrence of files in rules. If there is nothing - # after in the :, it's probably a phony target, or a suffix rule. - # Don't touch it. - s{^([-\w+/]+\.[-\w.]+ *: *\S.*)$} - {prefix_words($1)}gem; - - # Prefix files in variables. - s{^([\w.]+\s*\+?=)(.*)$} - {prefix_assignment($1, $2)}gem; - - # These three guys escape all the other regular rules. - s{(charset\.alias|ref-add\.sed|ref-del\.sed)}{$prefix$1}g; - # Unfortunately, as a result we sometimes have lib/lib. - s{($prefix){2}}{$1}g; - - # $(srcdir) is actually $(top_srcdir)/lib. - s{\$\(srcdir\)}{\$(top_srcdir)/lib}g; - - # Sometimes, t-$@ is used instead of $@-t, which, of course, does - # not work when we have a $@ with a directory in it. - s{t-\$\@}{\$\@-t}g; - - # Some AC_SUBST patterns remain and would better be Make macros. - s{\@(MKDIR_P)\@}{\$($1)}g; - - # Adjust paths in mkdir. - s{(\$\(MKDIR_P\))\s*(\w+)}{$1 $prefix$2}g; - - return $_; -} - -# process ($IN) -# ------------- -sub process ($) -{ - my ($file) = @_; - my ($bak) = "$file.bak"; - rename ($file, $bak) or die; - my $contents = contents ($bak); - $contents = prefix ($contents); - my $out = new IO::File(">$file") or die; - print $out $contents; -} - -{ - GetOptions - ( - 'lib-name=s' => \$lib_name, - help => sub { usage 0 }, - version => sub { print "$ME version $VERSION\n"; exit }, - ) or usage 1; - - my $fail = 0; - defined $lib_name - or (warn "$ME: no library name; use --lib-name=NAME\n"), $fail = 1; - - # There must be exactly one argument. - @ARGV == 0 - and (warn "$ME: missing FILE argument\n"), $fail = 1; - 1 < @ARGV - and (warn "$ME: too many arguments:\n", join ("\n", @ARGV), "\n"), - $fail = 1; - $fail - and usage 1; - - my $file = $ARGV[0]; - $prefix = (dirname $file) . '/'; - warn "prefix=$prefix\n"; - - process $file; -} - -### Setup "GNU" style for perl-mode and cperl-mode. -## Local Variables: -## perl-indent-level: 2 -## perl-continued-statement-offset: 2 -## perl-continued-brace-offset: 0 -## perl-brace-offset: 0 -## perl-brace-imaginary-offset: 0 -## perl-label-offset: -2 -## cperl-indent-level: 2 -## cperl-brace-offset: 0 -## cperl-continued-brace-offset: 0 -## cperl-label-offset: -2 -## cperl-extra-newline-before-brace: t -## cperl-merge-trailing-else: nil -## cperl-continued-statement-offset: 2 -## eval: (add-hook 'write-file-hooks 'time-stamp) -## time-stamp-start: "my $VERSION = '" -## time-stamp-format: "%:y-%02m-%02d %02H:%02M" -## time-stamp-time-zone: "UTC" -## time-stamp-end: "'; # UTC" -## End: diff --git a/m4/.gitignore b/m4/.gitignore index d3178586..3dfdf6ad 100644 --- a/m4/.gitignore +++ b/m4/.gitignore @@ -183,3 +183,4 @@ /xstrndup.m4 /obstack-printf.m4 /extern-inline.m4 +/non-recursive-gnulib-prefix-hack.m4 -- 2.45.2