]> git.draconx.ca Git - dxcommon.git/blobdiff - scripts/fix-gnulib.pl
Handle gl_LIBOBJS/gl_LTLIBOBJS correctly.
[dxcommon.git] / scripts / fix-gnulib.pl
index 6663e6e4b49c333eb95b53fcb10b0657f6d7417c..1f50d4954b4c203dd90eb5d122b3c85768f1f115 100755 (executable)
@@ -87,7 +87,14 @@ while (<STDIN>) {
        next if (/^#/);
 
        if (!$printed_header) {
-               print "# Postprocessed by ", basename($0), "\n";
+               print "# Postprocessed by ", basename($0), "\n\n";
+               print <<'EOF';
+# 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=|)
+gnulib_headers = $(gnulib_orderonly)
+EOF
+
                $printed_header = 1;
                drop;
        }
@@ -122,6 +129,11 @@ while (<STDIN>) {
                }
        }
 
+       # BUILT_SOURCES has similar problems to recursive make: inadequate
+       # dependencies lead to incorrect builds.  Collect them into an
+       # ordinary variable so we can deal with them later.
+       s/BUILT_SOURCES/gnulib_headers/;
+
        # Targets are similar to variables: the target and its dependencies
        # need to be mangled.
        if (/:/) {
@@ -133,6 +145,11 @@ while (<STDIN>) {
        s:\$\(builddir\):\$\(top_builddir\)/lib:g;
 } continue { print };
 
+print <<'EOF';
+gnulib_lt_objects = $(libgnu_la_OBJECTS) $(gl_LTLIBOBJS)
+$(gnulib_lt_objects): $(gnulib_headers)
+EOF
+
 # Some filenames are AC_SUBSTed by the Gnulib macros, and thus we need to
 # 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
@@ -145,6 +162,16 @@ if (defined $m4output) {
 
        print M4OUT "dnl This file was generated by fix-gnulib.pl\n";
        print M4OUT "AC_DEFUN([$m4macro], [dnl\n";
+       print M4OUT <<'EOF';
+m4_foreach([gl_objvar], [[gl_LIBOBJS], [gl_LTLIBOBJS]], [dnl
+set x $gl_objvar; shift
+gl_objvar=
+while test ${#} -gt 0; do
+       gl_objvar="$gl_objvar lib/${1}"; shift
+done
+])
+EOF
+
        foreach (@vars) {
                print M4OUT "$_=\${$_:+lib/\$$_}\n";
        }