dxcommon.git
4 months agoAdd library test for libdiscid master
Nick Bowler [Sat, 1 Jun 2019 14:27:15 +0000 (10:27 -0400)]
Add library test for libdiscid

And establish a basic scheme to cover these macros in the test suite.

7 months agoImport and adapt GLib test macros from upkg.
Nick Bowler [Sat, 23 Feb 2019 16:13:27 +0000 (11:13 -0500)]
Import and adapt GLib test macros from upkg.

7 months agoApply AS_TR_SH to variable names in library helpers.
Nick Bowler [Sat, 23 Feb 2019 16:08:13 +0000 (11:08 -0500)]
Apply AS_TR_SH to variable names in library helpers.

This should help writing tests for libraries with hyphens in the
names, by automatically translating hyphens in computed varible
names to underscores.

7 months agoNormalize whitespace on detected library flags.
Nick Bowler [Fri, 22 Feb 2019 22:48:21 +0000 (17:48 -0500)]
Normalize whitespace on detected library flags.

It seems that pkg-config sometimes spits out a bunch of trailing
whitespace.  This gets into the substituted variables and makes
them a bit annoying to work with.  Add a step to the library helper
which normalizes the spaces: in addition to removing leading and
trailing spaces this will also remove internal spaces, which I
think should be harmless as there does not appear to be any way
for the user to usefully get quoted spaces into these variables.

9 months agoFix depfiles compatibility with modern Automake.
Nick Bowler [Sun, 6 Jan 2019 16:56:28 +0000 (11:56 -0500)]
Fix depfiles compatibility with modern Automake.

Automake 1.16 changes how depfiles are created.  It is now necessary
to define a rule which creates the stub and additionally we must clean
them explicitly.  This is a bit annoying to do but that's the price of
relying on undocumented internal behaviour, I guess.

The extra rule should be harmless when using Automake 1.15.

10 months agoAdd simple detection macros for libcneartree and libgerbv.
Nick Bowler [Thu, 20 Dec 2018 20:38:35 +0000 (15:38 -0500)]
Add simple detection macros for libcneartree and libgerbv.

20 months agoFix underquoting issue in DX_DO.
Nick Bowler [Thu, 25 Jan 2018 00:29:52 +0000 (19:29 -0500)]
Fix underquoting issue in DX_DO.

The m4_map macro takes a "quoted list of argument descriptions ...
[which are] in turn a quoted list of quoted elements, suitable for
m4_apply."  This is not what actually is being passed in DX_DO,
which is underquoted resulting in various problems.

Add a test case to expose this issue, and switch DX_DO to use
m4_map_args which is a better fit.

Thanks to Eric Blake.

2 years agoAdd libevdev detection macro.
Nick Bowler [Wed, 28 Jun 2017 23:23:54 +0000 (19:23 -0400)]
Add libevdev detection macro.

2 years agoImport libmodplug detection from upkg.
Nick Bowler [Fri, 1 May 2015 01:51:20 +0000 (21:51 -0400)]
Import libmodplug detection from upkg.

Change include to <libmodplug/modplug.h>, as required by newer versions
(and should work the same on older ones...)

2 years agoFix testsuite VPATH builds.
Nick Bowler [Thu, 30 Apr 2015 04:41:19 +0000 (00:41 -0400)]
Fix testsuite VPATH builds.

Need to add -I$(srcdir) to all autom4te invocations, otherwise it will
try to find input files only in builddir.

2 years agoEnsure that all testsuite dependencies are distributed.
Nick Bowler [Sun, 26 Apr 2015 05:49:28 +0000 (01:49 -0400)]
Ensure that all testsuite dependencies are distributed.

Failing to distribute all testsuite dependencies will cause failures
if the testsuite is modified.  Unfortunately, this is not caught by
distcheck because the testsuite is not rebuilt normally.  Therefore,
it is desirable for the dependencies to be picked up automatically
to reduce the possibility of omission.

We could check the M4 traces in a dist-hook, but then Autotest becomes
a dependency for "make dist", even when the testsuite is not modified.
Instead, distribute a record of all dependencies, and use that to
implement the dist-hook.

2 years agoFix testsuite issues caught by distcheck.
Nick Bowler [Sun, 26 Apr 2015 05:47:06 +0000 (01:47 -0400)]
Fix testsuite issues caught by distcheck.

Handle VPATH builds properly by dealing with testsuite in either
builddir or srcdir.  Also clean out configure-generated files on
distclean.

2 years agoMove Autotest makefile bits into includable snippet.
Nick Bowler [Sat, 25 Apr 2015 01:58:05 +0000 (21:58 -0400)]
Move Autotest makefile bits into includable snippet.

This all seems reasonably generic, so let's make it available for use
elsewhere.

2 years agoUpdate DX_COMMAND_OUTPUT to handle newlines and backslashes.
Nick Bowler [Wed, 22 Apr 2015 01:47:44 +0000 (21:47 -0400)]
Update DX_COMMAND_OUTPUT to handle newlines and backslashes.

The 'read' builtin eats backslashes from the input, so this macro fails
to properly handle output containing backslashes.  Since the -r option
is not portable according to the Autoconf manual, fix up the input by
escaping all backslashes.

While we're at it, remove the "feature" which converts newlines to
spaces because it seems rather silly.

2 years agoImport integer packing library.
Nick Bowler [Sat, 14 Mar 2015 02:38:45 +0000 (19:38 -0700)]
Import integer packing library.

This simple library is used in a couple projects, better to maintain
it in one place.

Hook it into the newfangled test suite too.

4 years agoFix DX_BASEDIR hoisting problems in base.m4.
Nick Bowler [Sat, 22 Nov 2014 18:38:20 +0000 (13:38 -0500)]
Fix DX_BASEDIR hoisting problems in base.m4.

Currently, DX_INIT expands to a bunch of text, mostly whitespace.
This is not normally a serious problem, except when DX_BASEDIR
is called at the top level without previously expanding DX_INIT.
Since DX_BASEDIR is intended to be expanded during argument
collection, the result is that DX_INIT's output ends up as part
of the argument where DX_BASEDIR appears.

Fixing this turns out to be somewhat non-trivial.  Both DX_INIT and
DX_BASEDIR need to be changed.

  - First, avoid using AC_REQUIRE in DX_BASEDIR.  This relies on
    diversions which do not work correctly during argument collection.

  - Rewrite DX_INIT so that it expands to no text whatsoever.

  - Finally, the AC_DEFUN_ONCE mechanism appears to insert newlines
    where the macros are called for the first time.  Use m4_ignore
    to eat that inside DX_BASEDIR.

4 years agoFix distribution of dx-stamp.m4.
Nick Bowler [Sat, 22 Nov 2014 17:21:10 +0000 (12:21 -0500)]
Fix distribution of dx-stamp.m4.

The automatic distribution of dx-stamp.m4 depends on m4_include
appearing in the m4 traces.  Normally aclocal does that but it
seems to not be entirely reliable.  The reason we do not simply
use m4_include is because this produces warnings about multiple
inclusion.

Fortunately, this is pretty easy to work around.  Just use m4_pushdef
to redefine m4_include to what we need, so the traces show the file
needs to be distributed.

4 years agofix-ltdl: Fix order-only hack with FreeBSD make.
Nick Bowler [Sat, 22 Nov 2014 17:15:48 +0000 (12:15 -0500)]
fix-ltdl: Fix order-only hack with FreeBSD make.

FreeBSD make does not work well when undefined variables are used in
nested expansions.  When such an expansion appears in the prerequisites
of a target, FreeBSD make exits with a fatal error.  For example:

  A = $(var$(B))
  foo : $(A)

  % make
  Error expanding embedded variable.

This causes the order-only hack to fail because FreeBSD make does not
define .FEATURES.  The workaround is simple: add another variable which
is assigned the value of .FEATURES.  That variable can be used in the
nested expansion to avoid the error.

4 years agofix-gnulib: Fix order-only hack with FreeBSD make.
Nick Bowler [Sat, 22 Nov 2014 17:11:56 +0000 (12:11 -0500)]
fix-gnulib: Fix order-only hack with FreeBSD make.

FreeBSD make does not work well when undefined variables are used in
nested expansions.  When such an expansion appears in the prerequisites
of a target, FreeBSD make exits with a fatal error.  For example:

  A = $(var$(B))
  foo : $(A)

  % make
  Error expanding embedded variable.

This causes the order-only hack to fail because FreeBSD make does not
define .FEATURES.  The workaround is simple: add another variable which
is assigned the value of .FEATURES.  That variable can be used in the
nested expansion to avoid the error.

4 years agoImplement initial test suite.
Nick Bowler [Tue, 10 Mar 2015 04:10:49 +0000 (21:10 -0700)]
Implement initial test suite.

First stab at a new autotest-based test suite for dxcommon.  Start with
a simple test case to expose a longstanding problem in DX_BASEDIR.

5 years agofix-gnulib: Eliminate dependency on List::Compare.
Nick Bowler [Fri, 29 Aug 2014 23:33:32 +0000 (19:33 -0400)]
fix-gnulib: Eliminate dependency on List::Compare.

This library was hardly needed; the code is shorter without it.  Now the
script can run on a stock perl installation.

5 years agoImport GTK2 detection macro.
Nick Bowler [Mon, 9 Jun 2014 23:49:29 +0000 (19:49 -0400)]
Import GTK2 detection macro.

Now that we have this support we can start bringing in
other library tests.

5 years agoAdd libpng detection macro.
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.

6 years agofix-gnulib: Improve filename mangling.
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.

6 years agofix-gnulib: Add a call to AC_CONFIG_LIBOBJ_DIR
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.

6 years agofix-gnulib: Strip out useless SUFFIXES assignments.
Nick Bowler [Tue, 12 Mar 2013 22:51:24 +0000 (18:51 -0400)]
fix-gnulib: Strip out useless SUFFIXES assignments.

These are useless because Automake handles trivial cases automatically.

6 years agoAdd some backwards-compatibility helpers for silent-rules.
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.

6 years agoFix DX_EXPORTED_SH to AC_SUBST required variables.
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.

7 years agoexported.sh: Improve error handling.
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.

7 years agoImport exported.sh from cdecl99.
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.

7 years agoImport gettext m4/automake bits from cdecl99.
Nick Bowler [Sat, 28 Jul 2012 19:16:42 +0000 (15:16 -0400)]
Import gettext m4/automake bits from cdecl99.

These are pretty package-agnostic, and can be shared pretty easily.

7 years agofix-gnulib: Handle MOSTLYCLEANDIRS.
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...

7 years agofix-ltdl: Move all convenience libs to EXTRA_LTLIBRARIES only.
Nick Bowler [Sat, 12 May 2012 00:00:02 +0000 (20:00 -0400)]
fix-ltdl: Move all convenience libs to EXTRA_LTLIBRARIES only.

There's no reason to list these in noinst_LTLIBRARIES in a non-recursive
build, as they will be picked up correctly by ordinary prerequisites.

7 years agofix-ltdl: Delete libobj symlink before attempting to create it.
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.

7 years agofix-ltdl: New script to fix up nonrecursive libltdl.
Nick Bowler [Thu, 10 May 2012 22:11:33 +0000 (18:11 -0400)]
fix-ltdl: New script to fix up nonrecursive libltdl.

Similar in spirit to fix-gnulib, this one improves the nonrecursive
libltdl integration.

7 years agofix-gnulib: Fix up $(MKDIR_P) paths as well.
Nick Bowler [Thu, 10 May 2012 02:16:37 +0000 (22:16 -0400)]
fix-gnulib: Fix up $(MKDIR_P) paths as well.

Otherwise it will create the directory at the top level rather than
where it's going to write the output...

7 years agoMerge branch 'fix-gnulib' of /home/nbowler/projects/cdecl99
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.

7 years agoInitial commit
Nick Bowler [Thu, 10 May 2012 00:08:12 +0000 (20:08 -0400)]
Initial commit

7 years agoBetter document fix-gnulib.
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.

7 years agoMake fix-gnulib only need a single output file.
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.

7 years agoSimplify glconfig include mechanism.
Nick Bowler [Sat, 25 Feb 2012 17:08:23 +0000 (12:08 -0500)]
Simplify glconfig include mechanism.

Instead of relying on include order to select the right config.h, modify
config.h to include the glconfig header conditionally.

This allows the use of Automake's default include paths again, and is
conceptually simpler.

8 years agoMangle spliced makefile lines in Gnulib correctly.
Nick Bowler [Sat, 22 Oct 2011 17:37:27 +0000 (13:37 -0400)]
Mangle spliced makefile lines in Gnulib correctly.

Otherwise, target and variable mangling may only apply to the first
line.

8 years agoAvoid gratuitous library dependencies linking gnulib.
Nick Bowler [Thu, 22 Sep 2011 00:58:27 +0000 (20:58 -0400)]
Avoid gratuitous library dependencies linking gnulib.

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.

8 years agoRewrite Gnulib symbols to be in libcdecl's namespace.
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.

8 years agoSplit gnulib_headers into 3 variables.
Nick Bowler [Wed, 21 Sep 2011 04:31:15 +0000 (00:31 -0400)]
Split gnulib_headers into 3 variables.

This will be useful for symbol mangling, where additional header files
may need to be added to various points in the dependency chain.

8 years agoMove all Gnulib CLEANFILES variables to the end of the makefile.
Nick Bowler [Mon, 19 Sep 2011 22:44:47 +0000 (18:44 -0400)]
Move all Gnulib CLEANFILES variables to the end of the makefile.

This makes the clean procedure independent of the configuration.

8 years agoHandle gl_LIBOBJS/gl_LTLIBOBJS correctly.
Nick Bowler [Mon, 19 Sep 2011 22:43:34 +0000 (18:43 -0400)]
Handle gl_LIBOBJS/gl_LTLIBOBJS correctly.

These AC_SUBSTed variables reference objects whose sources are located
in lib, thus they need to be rewritten like other AC_SUBSTed variables.

These objects also need the header dependencies like other objects.

8 years agoEliminate use of BUILT_SOURCES from Gnulib.
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.

8 years agoIntegrate Gnulib non-recursively.
Nick Bowler [Mon, 19 Sep 2011 01:46:14 +0000 (21:46 -0400)]
Integrate Gnulib non-recursively.

With a little bit of mangling, it's possible to make the makefile
fragment produced by gnulib-tool suitable for use in our non-recursive
makefile.