Nick Bowler [Mon, 9 Jun 2014 23:46:34 +0000 (19:46 -0400)]
Add libpng detection macro.
I've been carrying around library detection in individual projects for
too long. This is a from-scratch rewrite of the core probing code but
the actual libpng test is basically the same as before.
The idea is to better leverage M4 macros to reduce duplication, so it
should be easy to add more libraries in the future.
Nick Bowler [Fri, 21 Jun 2013 19:58:49 +0000 (15:58 -0400)]
fix-gnulib: Improve filename mangling.
This corrects a problem with some of the make rules in the localcharset
module. Some filenames were not being properly prefixed with lib/ while
others were, leading to some files not being built.
Nick Bowler [Wed, 13 Mar 2013 01:03:59 +0000 (21:03 -0400)]
fix-gnulib: Add a call to AC_CONFIG_LIBOBJ_DIR
For some reason, the alloca module uses Autoconf's stock LIBOBJ
machinery and things explode if AC_CONFIG_LIBOBJ_DIR is not set
correctly, because the Gnulib macros sure don't.
Add such a call to the included m4 fragment to fix things up.
The amount of magic and poor documentation around this feature is
astounding.
Nick Bowler [Tue, 8 Jan 2013 23:54:41 +0000 (18:54 -0500)]
Add some backwards-compatibility helpers for silent-rules.
The silent-rules support in Automake has changed over the ages. Most
glaringly, the output alignment changed between 1.11 and 1.12. Add a
new macro, DX_AUTOMAKE_COMPAT, which is intended to capture the
compatibility hacks needed to support multiple versions of Automake.
Currently, this means that it will define a variable to help print
silent-rule output that maintains alignment, and it will AC_SUBST
compatible versions, if necessary, of variables substituted in later
versions of Automake's silent-rule support.
Update glconfig.mk to make use of the new feature.
Nick Bowler [Wed, 5 Dec 2012 23:22:44 +0000 (18:22 -0500)]
Fix DX_EXPORTED_SH to AC_SUBST required variables.
The exported.sh support wasn't really usable as-is since it was relying
on a symbol defined by cdecl99's configure.ac. Bring that configuration
into the common macro.
Nick Bowler [Wed, 29 Aug 2012 00:38:53 +0000 (20:38 -0400)]
exported.sh: Improve error handling.
Use the eval trick to handle errors from commands in the pipeline other
than the last. In particular, we now detect if nm failed and return an
error status in this case. While we're rewriting this code, replace
sort | uniq with sort -u as the latter should be fine according to
POSIX. We can re-add the two-command version if it actually causes
problems.
Nick Bowler [Wed, 15 Aug 2012 20:46:33 +0000 (16:46 -0400)]
Import exported.sh from cdecl99.
This script is required for the glconfig.mk snippet to actually
work, but it somehow got forgotten when that snippet was imported.
Bring in the script, and add M4 plumbing to support finding auxilliary
files in the dxcommon source directory. The result should be totally
automatic, although this unfortunately means that users of fix-gnulib.pl
that don't need or want to use glconfig.mk are stuck with some extra
dependencies (including libtool) to generate the exported.sh script.
Currently, I can't think of a way to keep the automatic glconfig.mk
support (i.e., the only thing users really have to do is include the
snippet for it to work) without this spurious dependency. So things
may need to change later, but let's just get the support in for now.
Nick Bowler [Tue, 24 Jul 2012 23:59:34 +0000 (19:59 -0400)]
fix-gnulib: Handle MOSTLYCLEANDIRS.
Usage of this variable suffers from similar problems as xxxCLEANFILES,
so fix it up in the same way by moving it to the end of the makefile
fragment. The check needs to be improved a bit as the fragment contains
actual references to this variable, and only want to move the
assignments.
The variable also needs to be set before use, which strangely doesn't
actually happen in the fragment, even though this is a totally internal
thing...
Nick Bowler [Fri, 11 May 2012 02:17:51 +0000 (22:17 -0400)]
fix-ltdl: Delete libobj symlink before attempting to create it.
There seems to be a (rare) race in parallel builds where make for some
reason decides to update the libobj symlink after it already exists,
which fails. I can't reproduce the failure, but deleting the symlink
(if one exists) before creating it should avoid the issue.
Nick Bowler [Thu, 10 May 2012 00:51:24 +0000 (20:51 -0400)]
Merge branch 'fix-gnulib' of /home/nbowler/projects/cdecl99
Import the fix-gnulib history from cdecl99.
* 'fix-gnulib' of /home/nbowler/projects/cdecl99:
Better document fix-gnulib.
Make fix-gnulib only need a single output file.
Simplify glconfig include mechanism.
Mangle spliced makefile lines in Gnulib correctly.
Avoid gratuitous library dependencies linking gnulib.
Rewrite Gnulib symbols to be in libcdecl's namespace.
Split gnulib_headers into 3 variables.
Move all Gnulib CLEANFILES variables to the end of the makefile.
Handle gl_LIBOBJS/gl_LTLIBOBJS correctly.
Eliminate use of BUILT_SOURCES from Gnulib.
Integrate Gnulib non-recursively.
Nick Bowler [Thu, 10 May 2012 00:02:29 +0000 (20:02 -0400)]
Better document fix-gnulib.
Add a big blurb in the comments describing the main bits required to use
the script in a project. Also rename the header variables a bit so we
can ensure future compatibility with the documented behaviour.
Nick Bowler [Wed, 9 May 2012 23:59:32 +0000 (19:59 -0400)]
Make fix-gnulib only need a single output file.
We combine the Automake and M4 bits into a single polyglot that can be
interpreted by either, so all one needs to do is include the makefile
fragment in configure.ac. I've created a monster.
libcdecl doesn't use the readline module at all, but libtool happily
pulls it in as a dependency. Handle library dependencies manually to
avoid this problem.
Nick Bowler [Wed, 21 Sep 2011 04:51:17 +0000 (00:51 -0400)]
Rewrite Gnulib symbols to be in libcdecl's namespace.
The gnulib symbols are not properly prefixed for libcdecl internal
symbols (e.g. cdecl__blah). This *will* cause problems when statically
linking against both libcdecl and another library that uses the same
gnulib modules.
Unfortunately, there's no simple way to determine what symbols need
prefixing without compiling all the gnulib objects. The results can't
be distributed either, because they depend on the configuration. So,
limited to simple tools and portable make rules, we hack together a
"new" config.h at build time that defines object-like macros to rewrite
the symbols, carefully ensuring that header dependencies are correct.
Nick Bowler [Mon, 19 Sep 2011 03:01:18 +0000 (23:01 -0400)]
Eliminate use of BUILT_SOURCES from Gnulib.
As with recursive make, BUILT_SOURCES is harmful because of inadequate
dependency information. We can achieve a similar effect with by using
order-only dependencies: These force the headers to be up-to-date
before anything that might require them is built: but rebuilds are only
triggered based on the accurate dependency information generated by the
normal mechanisms.
Unfortunately, order-only dependencies are a GNU make feature, so we use
a hack which should fall back to ordinary dependencies on other make
implementations. The worst effect of using ordinary dependencies will
be that files might be needlessly rebuilt when a header changes.