mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
Reported by Johan van Selst at
<http://lists.gnu.org/archive/html/bug-bison/2010-03/msg00014.html>.
* NEWS (2.4.3): New.
* THANKS (Johan van Selst): Add.
* etc/prefix-gnulib-mk (prefix): Adjust regex for makefile
targets so that gnulib's new c++defs.h is matched.
* gnulib: Update to latest.
(cherry picked from commit 311b2e56ea)
Conflicts:
NEWS
153 lines
3.7 KiB
Perl
Executable File
153 lines
3.7 KiB
Perl
Executable File
#! /usr/bin/perl -w
|
|
|
|
use strict;
|
|
use IO::File;
|
|
|
|
my $prefix = "lib/";
|
|
|
|
# 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";
|
|
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/(libbison)/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;
|
|
}
|
|
|
|
process ("${prefix}gnulib.mk")
|
|
|
|
|
|
### 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
|
|
## End:
|