#!/usr/bin/env perl
#
-# Copyright © 2011-2014, 2020-2022 Nick Bowler
+# Copyright © 2011-2014, 2020-2023 Nick Bowler
#
# Prepare the Gnulib tree for inclusion into a non-recursive automake build.
# While the output of gnulib-tool is "include"-able if the --makefile-name
open STDIN, "<", $input or die "$input: $!\n" if (defined $input);
my $printed_header = 0;
+my $check_mkdir;
my @cleanfiles;
# Hashes to record make variables used in the automake source. The allvars
# something actually depends on it (which is typically the case).
if (/^noinst_LIBRARIES.*libgnu.a/) {
s/^noinst/EXTRA/;
- $for_library //= 0;
+ $for_library = 0 unless defined $for_library;
$use_libtool = 0;
}
if (/^noinst_LTLIBRARIES.*libgnu.la/) {
s/^noinst/EXTRA/;
- $for_library //= 1;
+ $for_library = 1 unless defined $for_library;
$use_libtool = 1;
}
# useful for non-recursive builds. Strip them out.
drop if (/^(AM_CPPFLAGS|AM_CFLAGS)/);
+ # We don't care about upstream warning flags that just result in adding
+ # massive amounts of additional build rules for no reason.
+ if (/_CFLAGS/) {
+ s/ *\$\(GL_CFLAG_GNULIB_WARNINGS\)// if /_CFLAGS\s*=/;
+ }
+
+ # Drop superfluous CFLAGS assignments (which may be created by above
+ # transformation).
+ drop if /_CFLAGS\s*=\s*\$\(AM_CFLAGS\)\s*$/;
+
# Library dependencies are added automatically to libgnu.la by
# gnulib-tool. Unfortunately, this means that everything linking
# against libgnu.la is forced to pull in the same deps, even if they're
# ordinary variable so we can deal with them later.
s/BUILT_SOURCES/gnulib_core_headers/;
+ # Rules for "toplevel" header files do not include commands to create
+ # the target directory; let's add that.
+ if (defined $check_mkdir) {
+ if (/gl_V_at/ || /AM_V_GEN/ and not /MKDIR_P/) {
+ my $dir = "lib/$check_mkdir";
+ $dir =~ s|/[^/]*||;
+
+ print "\t\$(AM_V_GEN)\$(MKDIR_P) $dir\n";
+ s/AM_V_GEN|gl_V_at/AM_V_at/;
+ }
+ undef $check_mkdir
+ }
+
# Targets are similar to variables: the target and its dependencies
# need to be mangled.
- if (/^[^\t].*:/) {
+ if (/^([^\t:]*):/) {
+ $check_mkdir = $1;
$_ = mangle_target($_);
}