mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-12 13:53:03 +00:00
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.
This commit is contained in:
@@ -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 <<EOF;
|
||||
Usage: $ME --lib-name=NAME FILE
|
||||
or: $ME [--help|--version]
|
||||
Rewrite a gnulib-tool-generated FILE like lib/gnulib.mk to work with
|
||||
automake's subdir-objects.
|
||||
|
||||
OPTIONS:
|
||||
|
||||
This option must be specified:
|
||||
|
||||
--lib-name=NAME library name, often "lib\$project"
|
||||
|
||||
The following are optional:
|
||||
|
||||
--help display this help and exit
|
||||
--version output version information and exit
|
||||
|
||||
EOF
|
||||
}
|
||||
exit $exit_code;
|
||||
}
|
||||
|
||||
# contents ($FILE_NAME)
|
||||
# ---------------------
|
||||
sub contents ($)
|
||||
{
|
||||
my ($file) = @_;
|
||||
local $/; # Turn on slurp-mode.
|
||||
my $f = new IO::File "< $file" or die "$file";
|
||||
my $contents = $f->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:
|
||||
Reference in New Issue
Block a user