Nick Bowler [Sat, 25 Feb 2012 02:28:51 +0000 (21:28 -0500)]
Avoid per-target CFLAGS (for now).
There's no real reason to use per-target CFLAGS to specify $(GSL_CFLAGS)
only on libtest, as the flags will simply be harmless (and useless) on
other targets. Set them globally and completely avoid the mess
resulting from the use of per-target flags.
Nick Bowler [Sat, 25 Feb 2012 02:25:21 +0000 (21:25 -0500)]
Fix GSL detection when using the default --with-gsl=auto.
The use of a shell case statement was preventing the AC_REQUIRE macros
in DX_CHECK_GSL from working correctly in the second case. Switch to
AS_CASE to avoid the issue.
Nick Bowler [Sat, 25 Feb 2012 01:54:45 +0000 (20:54 -0500)]
Fix "make dist" permissions when using a read-only srcdir.
Apparently Automake copies permissions from the source directory, so
if you run "make dist" in a VPATH build from a read-only srcdir, the
resulting distdir will be read-only. Beyond the resulting tarball
permissions, this can actually cause dist hooks to fail in some
instances.
Add another dist hook which makes distdir user-writable.
Nick Bowler [Fri, 24 Feb 2012 02:51:26 +0000 (21:51 -0500)]
Try to fix explanations of "child" declarators in the manual.
The "child" relationship between declarators is somwhat unintuitive.
Try to explain it properly in the manual. It's still probably not too
helpful, but it's certainly better than the outright lies that are in
there currently.
Nick Bowler [Fri, 24 Feb 2012 02:31:58 +0000 (21:31 -0500)]
Fix spacing after qualified pointers when rendering C declarations.
We don't want to print spaces after pointer qualifiers all the time: in
particular, things like "type const pointer to array of int" would print
a space between the "const" and the ")", as in:
int (* const )[]
Fix that up by eliding the space if (a) the pointer has qualifiers, and
(b) the child is not a null declarator.
Nick Bowler [Tue, 29 Nov 2011 03:03:07 +0000 (22:03 -0500)]
Reduce "set +x" noise in (un)install targets.
By judicious use of subshells, we can eliminate the need to call
"set +x" explicitly, which should (slightly) reduce the noise of the
(un)install targets.
Nick Bowler [Sun, 20 Nov 2011 16:37:00 +0000 (11:37 -0500)]
Separate specifier handling from the output routines.
This moves all the code to handle redundant specifiers and multiple
orderings to the parser, so that the output routines just have to
print them out in order.
This will allow the output routines to be used by test generators.
Nick Bowler [Sat, 22 Oct 2011 23:53:38 +0000 (19:53 -0400)]
Make CDECL_SPEC_TYPE non-zero.
This allows us to meaningfully OR together the various CDECL_SPEC_
constants. A bit of code assumes that CDECL_SPEC_TYPE is zero, so that
needs to be fixed.
Nick Bowler [Tue, 4 Oct 2011 02:02:28 +0000 (22:02 -0400)]
Identify nonterminals in the manual's grammar in an alternate way.
Some output devices won't render .Va text differently from .Li text when
displaying the man page. This unfortunately means that nonterminals
look exactly the same as terminals in the grammar. Add brackets
around nonterminals (which are otherwise unused in the grammar) so
that it is readable on these devices, too.
Nick Bowler [Thu, 29 Sep 2011 01:57:23 +0000 (21:57 -0400)]
Start implementing proper error handling.
Since the library shouldn't be printing its own error messages, we need
a mechanism to propagate error details to the caller. Implement a
system using thread-local storage which tracks the most recent errors.
Nick Bowler [Thu, 29 Sep 2011 00:05:49 +0000 (20:05 -0400)]
Use (un)install-local to (un)install .mo files.
These install rules do not depend on any other installed file, so
there's no need to use the -hook versions which guarantee ordering.
Use -local instead.
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 23:11:39 +0000 (19:11 -0400)]
Fix build with NLS disabled.
When NLS is disabled, we should not install any .mo files but we still
need to distribute the .po files. However, ALL_LINGUAS was not being
set in this case, so the POFILES was not set if NLS is disabled, causing
a distcheck failure.
Also fix a build error in this case due to a missing #include.
Nick Bowler [Wed, 21 Sep 2011 23:12:52 +0000 (19:12 -0400)]
Include config.h in scan.l.
This is required for things to work. Unfortunately, %top{...} appears
to be the only bit where config.h can be put in a flex scanner, as
headers are included before the first %{...} block is output. Thus, the
include ends up in the scan.h header file. Nevertheless, this should
not be a problem since config.h only defines macros.
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.
Nick Bowler [Thu, 15 Sep 2011 01:10:19 +0000 (21:10 -0400)]
Enable i18n in Bison.
This makes us require library initialization. To avoid requiring an
explicit call, we implicitly initialize the library when it is first
required. Bring in Gnulib's threading library to do this in a
thread-safe manner when available.
Nick Bowler [Sun, 11 Sep 2011 23:28:57 +0000 (19:28 -0400)]
Use .Va instead of .Fa in man pages when appropriate.
".Va" means "variable name", which is more appropriate than "function
argument" for variables. Nevertheless, they're probably typeset the
same way, anyway.
Nick Bowler [Sun, 11 Sep 2011 23:28:35 +0000 (19:28 -0400)]
Re-word description of nonterminals in man page.
There's no reason to assume that "function arguments" are typeset with
an underline. So re-word that sentence to avoid directly stating
typographical conventions by using an example instead.
Nick Bowler [Sun, 10 Jul 2011 16:25:37 +0000 (12:25 -0400)]
Split up interactive/noninteractive loops.
Readline isn't well suited for non-interactive loops since it tends to
print stuff to standard output. So use two loops: a readline-based one
and a getline-based one.
Nick Bowler [Thu, 7 Jul 2011 00:39:47 +0000 (20:39 -0400)]
Don't gratuitously reject inline specifiers.
We actually do support functions now, so we need to handle inline.
Turns out the last user of the old output routines (the code that
prints "inline") didn't actually work properly, so port it over to
the new interface.
Nick Bowler [Wed, 6 Jul 2011 02:43:42 +0000 (22:43 -0400)]
Kill the "horizontal" declarator chain.
The "next" pointer in declarators is used in exactly one place: the list
of declarators of a declaration. Move this chain to the toplevel so
that we get a list of declarations instead: now every struct cdecl has
exatly one declarator.
This helps eliminate the nasty hack in "explain" to print multiple
declarators.
Nick Bowler [Mon, 4 Jul 2011 22:11:51 +0000 (18:11 -0400)]
Add support for empty declarators.
This allows the parser to recognize type names which are required for
function prototypes, as well as actual declarations. This also makes it
easy to let the user ask for an explanation of types. For instance:
Nick Bowler [Sat, 25 Jun 2011 13:45:16 +0000 (09:45 -0400)]
Add support for array declarators.
Currently there is a (I think quite reasonable) restriction that the
array length either be unspecified, a positive integer constant, an
identifier, or *.