]> git.draconx.ca Git - dxcommon.git/blobdiff - scripts/fix-gnulib.pl
Rewrite Gnulib symbols to be in libcdecl's namespace.
[dxcommon.git] / scripts / fix-gnulib.pl
index 1f50d4954b4c203dd90eb5d122b3c85768f1f115..b8185fa642107538128023f844d76eb03191f286 100755 (executable)
@@ -30,6 +30,7 @@ open STDIN,  "<", $input  or die "$input: $!\n"  if (defined $input);
 
 my $printed_header = 0;
 my (%allvars, %sourcevars);
+my @cleanfiles;
 
 sub drop {
        undef $_;
@@ -92,7 +93,9 @@ while (<STDIN>) {
 # 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)
+gnulib_core_headers = $(gnulib_orderonly)
+gnulib_src_headers = $(gnulib_core_headers)
+gnulib_headers = $(gnulib_src_headers)
 EOF
 
                $printed_header = 1;
@@ -132,7 +135,7 @@ EOF
        # 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/;
+       s/BUILT_SOURCES/gnulib_core_headers/;
 
        # Targets are similar to variables: the target and its dependencies
        # need to be mangled.
@@ -140,6 +143,16 @@ EOF
                $_ = mangle_target($_);
        }
 
+       # When using conditional-dependencies, *CLEANFILES can end up
+       # depending on the configuration.  This means that "make distclean"
+       # 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/) {
+               push(@cleanfiles, $_);
+               drop;
+       }
+
        # Finally, references to $(srcdir) and $(builddir) need to be fixed up.
        s:\$\(srcdir\):\$\(top_srcdir\)/lib:g;
        s:\$\(builddir\):\$\(top_builddir\)/lib:g;
@@ -147,8 +160,9 @@ EOF
 
 print <<'EOF';
 gnulib_lt_objects = $(libgnu_la_OBJECTS) $(gl_LTLIBOBJS)
-$(gnulib_lt_objects): $(gnulib_headers)
+$(gnulib_lt_objects): $(gnulib_src_headers)
 EOF
+print @cleanfiles;
 
 # 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
@@ -160,9 +174,21 @@ if (defined $m4output) {
 
        open(M4OUT, '>', $m4output) or die "$m4output: $!\n";
 
-       print M4OUT "dnl This file was generated by fix-gnulib.pl\n";
-       print M4OUT "AC_DEFUN([$m4macro], [dnl\n";
+       print M4OUT <<EOF;
+dnl This file was generated by fix-gnulib.pl
+dnl
+dnl Usage: DX_FIX_GNULIB([symbol-prefix])
+dnl   where symbol-prefix is the application-specific symbol prefix to apply
+dnl   to Gnulib's symbols.  Defaults to \${PACKAGE}__.
+dnl   top-level source directory; e.g. lib.
+AC_DEFUN([$m4macro], [dnl
+EOF
        print M4OUT <<'EOF';
+GLSRC=lib
+GLSYM_PREFIX='ifelse([$1], [], [${PACKAGE}__], [$1])'
+AC_SUBST([GLSRC])
+AC_SUBST([GLSYM_PREFIX])
+
 m4_foreach([gl_objvar], [[gl_LIBOBJS], [gl_LTLIBOBJS]], [dnl
 set x $gl_objvar; shift
 gl_objvar=
@@ -171,7 +197,6 @@ while test ${#} -gt 0; do
 done
 ])
 EOF
-
        foreach (@vars) {
                print M4OUT "$_=\${$_:+lib/\$$_}\n";
        }