From b48ddbe1ee821a75e11675235f83e3e47f2bf923 Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Wed, 9 May 2012 19:59:32 -0400 Subject: [PATCH] Make fix-gnulib only need a single output file. We combine the Automake and M4 bits into a single polyglot that can be interpreted by either, so all one needs to do is include the makefile fragment in configure.ac. I've created a monster. --- bootstrap | 2 +- configure.ac | 3 ++- fix-gnulib.pl | 55 +++++++++++++++++++++++---------------------------- glconfig.mk | 7 ++++--- 4 files changed, 32 insertions(+), 35 deletions(-) diff --git a/bootstrap b/bootstrap index a9ad671..1362e25 100755 --- a/bootstrap +++ b/bootstrap @@ -17,7 +17,7 @@ else die "Gnulib sources are not properly installed in gnulib/." fi -$PERL fix-gnulib.pl -o lib/gnulib.mk -i lib/gnulib.mk.in -m m4/fix-gnulib.m4 \ +$PERL fix-gnulib.pl -o lib/gnulib.mk -i lib/gnulib.mk.in \ || die "Failed to fixup Gnulib makefile fragment." $AUTORECONF -fis diff --git a/configure.ac b/configure.ac index f766023..538452f 100644 --- a/configure.ac +++ b/configure.ac @@ -19,7 +19,8 @@ gl_EARLY LT_INIT gl_INIT -DX_FIX_GNULIB([cdecl__]) +m4_include([lib/gnulib.mk]) +DX_GLSYM_PREFIX([cdecl__]) dnl We provide our own makefile rules for gettext. Disable tracing of dnl AM_GNU_GETTEXT to prevent autoreconf from running autopoint, and to diff --git a/fix-gnulib.pl b/fix-gnulib.pl index ee7a0c9..f2c8cfe 100755 --- a/fix-gnulib.pl +++ b/fix-gnulib.pl @@ -1,6 +1,6 @@ #!/usr/bin/env perl # -# Copyright © 2011 Nick Bowler +# Copyright © 2011-2012 Nick Bowler # # Prepare the Gnulib tree for inclusion into a non-recursive automake build. # @@ -14,8 +14,6 @@ use Getopt::Long; my $output = undef; my $input = undef; -my $m4output = undef; -my $m4macro = "DX_FIX_GNULIB"; my $line = 0; @@ -23,8 +21,6 @@ Getopt::Long::Configure("gnu_getopt", "no_auto_abbrev"); GetOptions( "o|output=s" => \$output, "i|input=s" => \$input, - "m|m4output=s" => \$m4output, - "M|m4macro=s" => \$m4macro, ); open STDOUT, ">", $output or die "$output: $!\n" if (defined $output); @@ -100,6 +96,10 @@ while () { if (!$printed_header) { print "# Postprocessed by ", basename($0), "\n\n"; print <<'EOF'; +# BEGIN AUTOMAKE/M4 POLYGLOT \ +m4_unquote(m4_argn([2], [ +.PHONY: # Automake code follows + # This trick should define gnulib_orderonly to | iff we're using GNU make. gnulib_have_orderonly = $(findstring order-only,$(.FEATURES)) gnulib_orderonly = $(gnulib_have_orderonly:order-only=|) @@ -186,26 +186,17 @@ print @cleanfiles; # prepend lib/ if and only if they're not empty. Unfortunately, make is not # powerful to do this, so we need to put this transformation into configure # itself by defining a new autoconf macro. -if (defined $m4output) { - my $lc = List::Compare->new('-u', '-a', \%sourcevars, \%allvars); - my @vars = $lc->get_unique; - - open(M4OUT, '>', $m4output) or die "$m4output: $!\n"; - - print M4OUT <new('-u', '-a', \%sourcevars, \%allvars); +my @vars = $lc->get_unique; + +print <<'EOF'; +if FALSE +], [dnl M4 code follows + +AC_SUBST([GLSRC], [lib]) +AC_DEFUN_ONCE([DX_GLSYM_PREFIX], [AC_SUBST([GLSYM_PREFIX], [$1])]) +AC_CONFIG_COMMANDS_PRE([DX_GLSYM_PREFIX([${PACKAGE}__])]) m4_foreach([gl_objvar], [[gl_LIBOBJS], [gl_LTLIBOBJS]], [dnl set x $gl_objvar; shift @@ -215,10 +206,14 @@ while test ${#} -gt 0; do done ]) EOF - foreach (@vars) { - print M4OUT "$_=\${$_:+lib/\$$_}\n"; - } - print M4OUT "])\n"; - close M4OUT; +foreach (@vars) { + print "$_=\${$_:+lib/\$$_}\n"; } + +print <<'EOF'; +], [ +endif +# ]))dnl +# END AUTOMAKE/M4 POLYGLOT +EOF diff --git a/glconfig.mk b/glconfig.mk index b72f1b0..218eec0 100644 --- a/glconfig.mk +++ b/glconfig.mk @@ -1,12 +1,13 @@ # Copyright © 2011 Nick Bowler # # Automake fragment to generate a Gnulib config header to rewrite exported -# symbols. This fragment relies on the Gnulib makefile enhancements done by -# fix-gnulib.pl. Furthermore, the following additional changes may be +# symbols. This fragment relies on the Gnulib makefile postprocessing done by +# fix-gnulib.pl. Furthermore, the following additions to configure.ac may be # required: # # * Add AM_PROC_CC_C_O to configure.ac -# * Pass the desired symbol prefix to DX_FIX_GNULIB in configure.ac. +# * Pass the desired symbol prefix to DX_GLSYM_PREFIX in configure.ac, +# after including the fix-gnulib.pl output. # # License WTFPL2: Do What The Fuck You Want To Public License, version 2. # This is free software: you are free to do what the fuck you want to. -- 2.43.0