]> git.draconx.ca Git - dxcommon.git/blobdiff - scripts/fix-gnulib.pl
gen-strtab.awk: Allow repeated whitespace in one-line strings.
[dxcommon.git] / scripts / fix-gnulib.pl
index 69a7d864f29e939385a3f712d6fa1515318468e1..640f1cd66897b031a769560f40349eb23b8e5c43 100755 (executable)
@@ -1,6 +1,6 @@
 #!/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
@@ -63,6 +63,7 @@ open STDOUT, ">", $output or die "$output: $!\n" if (defined $output);
 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
@@ -168,12 +169,12 @@ EOF
        # 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;
        }
 
@@ -231,9 +232,23 @@ EOF
        # 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($_);
        }