my $printed_header = 0;
my (%allvars, %sourcevars);
+my @cleanfiles;
sub drop {
undef $_;
# 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;
# 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.
$_ = 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;
} continue { print };
-print "\$(libgnu_la_OBJECTS): \$(gnulib_headers)\n";
+print <<'EOF';
+gnulib_lt_objects = $(libgnu_la_OBJECTS) $(gl_LTLIBOBJS)
+$(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
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";
}