]> git.draconx.ca Git - dxcommon.git/blobdiff - scripts/fix-gnulib.pl
Add a helper macro to use the new gen-options packed format.
[dxcommon.git] / scripts / fix-gnulib.pl
index 69d97cad46876534cdc8375e82d07f7fee42e6d4..ce27521b007b86b3a22bb446c2bf24242836812d 100755 (executable)
@@ -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
@@ -186,6 +187,16 @@ EOF
        # 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
@@ -211,7 +222,7 @@ EOF
        if (/^([[:word:]]+)[[:space:]]*\+?=/) {
                $allvars{$1} = 1;
 
-               if (/_SOURCES|CLEANFILES|EXTRA_DIST|[[:upper:]]+_H/) {
+               if ($1 =~ /(_SOURCES|CLEANFILES|EXTRA_DIST|[[:upper:]]+_H)$/) {
                        $_ = mangle_variable($_);
                }
        }
@@ -221,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($_);
        }
 
@@ -246,9 +271,10 @@ EOF
        # component.
        s/t-\$@/\$\@-t/g;
 
-       # Finally, references to $(srcdir) and $(builddir) need to be fixed up.
+       # Finally, $(srcdir), $(builddir) and %reldir% need to be fixed up.
        s:\$\(srcdir\):\$\(top_srcdir\)/lib:g;
        s:\$\(builddir\):\$\(top_builddir\)/lib:g;
+       s:%reldir%:lib:g;
 } continue { s/(\n.)/\\\1/g; print; };
 
 print <<'EOF' if ($use_libtool);