]> git.draconx.ca Git - dxcommon.git/blobdiff - scripts/fix-gnulib.pl
fix-gnulib: Improve filename mangling.
[dxcommon.git] / scripts / fix-gnulib.pl
index d4ea7d1b68cac82f0932a654cf3e021768b6e0e2..954780f42eeaaa998322adf454faac48468966e2 100755 (executable)
@@ -83,8 +83,10 @@ sub mangle_file {
                # Do nothing.  Generic transformation will take care of
                # $(srcdir) and $(builddir).
        } elsif ($word =~ /^[[:word:].+\/-]+$/) {
-               # Fix up things that look like filenames.
-               $word = "lib/$word";
+               # Mangle the filename.  Assume that all relevant files start
+               # with a non-dot (so we don't transform suffix rules) and
+               # contain at least one dot (so we don't transform phony rules).
+               $word = "lib/$word" if ($word =~ /^[^.]+\./);
        } else {
                print STDERR "$0:$line: warning: unrecognized source file: $word\n";
        }
@@ -138,6 +140,10 @@ gnulib_orderonly = $(gnulib_have_orderonly:order-only=|)
 gnulib_core_headers =
 gnulib_raw_headers = $(gnulib_core_headers)
 gnulib_headers = $(gnulib_orderonly) $(gnulib_raw_headers)
+
+# Oddly, gnulib tries to add to MOSTLYCLEANDIRS (which is *not* an automake
+# variable) without defining it.
+MOSTLYCLEANDIRS =
 EOF
 
                $printed_header = 1;
@@ -161,14 +167,15 @@ EOF
        # handle them all manually.
        drop if (/LDFLAGS/);
 
+       # Current uses of SUFFIXES in gnulib are pointless since Automake will
+       # figure it out all on its own.  Strip it out.
+       drop if (/SUFFIXES/);
+
        # Rewrite automake hook targets to be more generic.
        if (s/^(.*)-local:/\1-gnulib:/) {
                print ".PHONY: $1-gnulib\n";
                print "$1-local: $1-gnulib\n";
                s/$1-generic//;
-
-               # Don't let these targets get confused with filenames below.
-               next;
        }
 
        # We need to mangle filenames in make variables; prepending a lib/ on
@@ -203,11 +210,15 @@ EOF
        # may not actually delete everything if the configuration changes
        # after building the package.  Stash all the variables for later so
        # they can be moved outside of any conditional.
-       if (/CLEANFILES/) {
+       if (/(CLEANFILES|CLEANDIRS)[[:space:]]*\+=/) {
                push(@cleanfiles, $_);
                drop;
        }
 
+       # Change t-$@ to $@-t as the former will break if $@ has a directory
+       # component.
+       s/t-\$@/\$\@-t/g;
+
        # Finally, references to $(srcdir) and $(builddir) need to be fixed up.
        s:\$\(srcdir\):\$\(top_srcdir\)/lib:g;
        s:\$\(builddir\):\$\(top_builddir\)/lib:g;
@@ -232,7 +243,12 @@ if FALSE
 ], [dnl M4 code follows
 
 AC_SUBST([GLSRC], [lib])
-AC_DEFUN_ONCE([DX_GLSYM_PREFIX], [AC_SUBST([GLSYM_PREFIX], [$1])])
+AC_CONFIG_LIBOBJ_DIR([lib])
+
+AC_DEFUN_ONCE([DX_GLSYM_PREFIX], [dnl
+AC_REQUIRE([DX_EXPORTED_SH])
+AC_SUBST([GLSYM_PREFIX], [$1])
+])
 AC_CONFIG_COMMANDS_PRE([DX_GLSYM_PREFIX([${PACKAGE}__])])
 
 m4_foreach([gl_objvar], [[gl_LIBOBJS], [gl_LTLIBOBJS]], [dnl