]> git.draconx.ca Git - dxcommon.git/blobdiff - scripts/fix-gnulib.pl
gen-strtab.awk: Add a feature to disable l10n markings.
[dxcommon.git] / scripts / fix-gnulib.pl
index 16eac47a09bb585c763854a5c891faf9dbb9c874..ce27521b007b86b3a22bb446c2bf24242836812d 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env perl
 #
-# Copyright © 2011-2014, 2020-2021 Nick Bowler
+# Copyright © 2011-2014, 2020-2022 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
@@ -145,7 +146,7 @@ m4_unquote(m4_argn([2], [
 
 # This trick should define gnulib_orderonly to | iff we're using GNU make.
 gnulib_make_features = $(.FEATURES)
-gnulib_have_orderonly = $(findstring order-only,$(gnulib_make_features))
+gnulib_have_orderonly = $(findstring order-only,${gnulib_make_features})
 gnulib_orderonly = $(gnulib_have_orderonly:order-only=|)
 gnulib_core_headers =
 gnulib_raw_headers = $(gnulib_core_headers)
@@ -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,18 +271,21 @@ 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);
 gnulib_lt_objects = $(libgnu_la_OBJECTS) $(gl_LTLIBOBJS)
 gnulib_objects = $(gnulib_lt_objects)
+gnulib_all_symfiles = $(gnulib_lt_objects:.lo=.glsym)
 $(gnulib_objects): $(gnulib_headers)
 EOF
 print <<'EOF' if (!$use_libtool);
 gnulib_objects = $(libgnu_a_OBJECTS) $(gl_LIBOBJS)
+gnulib_all_symfiles = $(gnulib_objects:.@OBJEXT@=.glsym)
 $(gnulib_objects): $(gnulib_headers)
 EOF
 
@@ -271,9 +299,9 @@ AC_SUBST([GLSRC], [lib])
 AC_CONFIG_LIBOBJ_DIR([lib])
 
 AC_DEFUN_ONCE([DX_GLSYM_PREFIX],
-[AC_REQUIRE([DX_AUTOMAKE_COMPAT])AC_REQUIRE([DX_EXPORTED_SH])
-AC_SUBST([GLSYM_PREFIX], [$1])
-])
+[AC_REQUIRE([DX_AUTOMAKE_COMPAT])AC_REQUIRE([DX_EXPORTED_SH])dnl
+AC_SUBST([GLSYM_PREFIX], [$1])dnl
+AC_SUBST([gnulib_symfiles], ['$(gnulib_all_symfiles)'])])
 EOF
 
 print <<'EOF' if ($for_library);