Nick Bowler [Sat, 27 May 2023 00:38:11 +0000 (20:38 -0400)]
Stop using gnulib's flexmember module.
The only thing we're actually using from this module is provided
directly by Autoconf, via AC_C_FLEXIBLE_ARRAY_MEMBER, so we can
just use that macro instead.
Nick Bowler [Thu, 25 May 2023 23:38:59 +0000 (19:38 -0400)]
cdecl99: Fix some improper error message formatting.
Errors opening the file specified by a --file option are printed with
two newlines, and errors generated by actual commands are not properly
prefixed with the program name.
Add test cases to catch these specific problems and fix them.
Nick Bowler [Tue, 24 Jan 2023 07:37:00 +0000 (02:37 -0500)]
Avoid POSIX character classes in the test suite.
Instead of [[:alnum:]] and friends, expand to an explicit list of
characters, which is a bit more portable usage (and also avoids
unneeded locale dependency). We can use macros to make this
just as convenient to write.
Nick Bowler [Tue, 24 Jan 2023 07:14:53 +0000 (02:14 -0500)]
Fix configuration on Solaris 8.
There is an quoting error in Gnulib's threadlib.m4 which causes
incorrect configuration settings on old Solaris. We can repeat
the simple check with correct quoting to workaround the problem.
Additionally, pull in DX_LINGUAS fixes from dxcommon to avoid
tripping on Solaris' pre-POSIX /bin/awk.
Nick Bowler [Tue, 24 Jan 2023 04:58:55 +0000 (23:58 -0500)]
cdecl99: Drop locale-sensitive isblank usage.
The intention of this function is to avoid recording no-op command lines
in the history. This is exactly the set of commands containing just
regular tabs and spaces.
It is inappropriate to use the locale-sensitive isblank for this, as
this may be a little bit different. In practice there is probably no
meaningful difference, but as isblank is a C99 feature losing this call
also helps when building against older C libraries that lack it.
Nick Bowler [Tue, 24 Jan 2023 04:47:18 +0000 (23:47 -0500)]
Provide strtoumax fallback in the scanner.
We already do something similar in the test suite. We don't really care
about the full range of uintmax_t, we just prefer the widest type that
is available to us. It is no real problem to fall back to a narrower
conversion function.
Nick Bowler [Tue, 10 Jan 2023 01:20:19 +0000 (20:20 -0500)]
Don't parse command-line options more than once.
Instead of parsing the options a second time to collect the --execute
option arguments, we can easily permute the argv array on the first
pass through, which simplifies the subsequent evaluation.
Nick Bowler [Fri, 18 Nov 2022 03:45:07 +0000 (22:45 -0500)]
Avoid Gnulib std-gnu11 module.
It has come to my attention that this module rewrites AC_PROG_CC in
a way that actually breaks Automake's AM_PROG_CC_C_O functionality.
This results in the "compile" script not being included or used in
packages bootstrapped with Autoconf 2.69.
With later versions of Autoconf things work because this module
doesn't touch things and thus disables itself.
I don't care about building with C11 one way or the other. Let's
just skip the module.
Nick Bowler [Fri, 22 Apr 2022 02:01:57 +0000 (22:01 -0400)]
Explicitly require gnulib getline module.
Currently, the gnulib getline module is only pulled in indirectly via
the readline module. As a result, when configuring for a system that
has GNU readline installed (and readline is enabled), the readline
replacement is not used and therefore the getline replacement is
never included.
But on systems that lack getline in the C library, without the gnulib
replacement the build will fail. Simply listing getline as a needed
module suffices to allow such configurations to build successfully.
Nick Bowler [Sun, 3 Apr 2022 01:56:22 +0000 (21:56 -0400)]
tests: Correct RNG implementation.
Due to a mistake in the adaptation, the output of the generator was
not done correctly. Correct that, and add a little test program that
would have caught this mistake by directly comparing against the
reference implementation.
Nick Bowler [Sat, 26 Mar 2022 04:00:56 +0000 (00:00 -0400)]
Bump dxcommon to fix builds using --disable-dependency-tracking.
Some build rules were inadvertently depending on directory creation that
happens as a side effect of depfiles generation. This does not happen
when configuring with --disable-dependency-tracking, leading to issues
with both VPATH builds and the gnulib symfiles machinery.
Failures are easily observed with a command like
make DISTCHECK_CONFIGURE_FLAGS=--disable-dependency-tracking distcheck
Using parallel make can hide problems since it seems Automake also
generates make rules that incidentally create these directories.
Nick Bowler [Sat, 19 Feb 2022 23:07:59 +0000 (18:07 -0500)]
Fix regressions caused by symbol renaming changes.
A bug in dxcommon was causing VPATH builds to continue to apply symbol
renaming to all gnulib sources. Fixing this revealed that dependency
tracking was broken for the non-renamed objects (distcheck noticed that
the dependency products were not being cleaned).
To fix dependency tracking Automake needs to be aware of all the source
files going into the statically-linked version of the library.
Unfortunately, Automake complains if we just add the same sources to a
non-libtool library, even though there is no real conflict since only
one will actually be built. The issue can be worked around by using
Automake's object renaming facilities, which complicates things slightly
but is straightforward enough to implement.
Nick Bowler [Fri, 18 Feb 2022 22:15:34 +0000 (17:15 -0500)]
Fix gen-typegen.awk incompatibility with busybox awk.
It seems that busybox awk does not support * in printf conversions.
There is only one use of this feature in the scripts and we can use
the substr function instead.
Nick Bowler [Fri, 18 Feb 2022 04:08:19 +0000 (23:08 -0500)]
Improve gnulib build times.
Use the new dxcommon features in an attempt to avoid the expensive
symbol renaming and PIC build steps for the portions of gnulib that
are not actually needed by the libcdecl library.
Nick Bowler [Thu, 10 Feb 2022 01:37:50 +0000 (20:37 -0500)]
Plug memory leak in declgen.
When a void typespec is generated in a context where it is invalid,
gen_typespecs just rolls the dice again. Unfortunately, the typespec
is not freed in this case, leaking memory. Easily fixed.
Nick Bowler [Wed, 9 Feb 2022 08:06:02 +0000 (03:06 -0500)]
Portability improvements for new random number generator.
On HP-UX 11, the ldexp function requires linking against libm.
Moreover, instead of strtoull declared in <stdlib.h> we have
__strtoull declared in <inttypes.h>. Add configure tests to
find these.
Nick Bowler [Wed, 9 Feb 2022 04:37:53 +0000 (23:37 -0500)]
Clean up declgen a bit.
Use wrapper functions to perform the "allocate a structure and
initialize its members" sequence which is a common sequence here,
and avoid the use of compound literals for this which improves
portability to older compilers.
Nick Bowler [Wed, 9 Feb 2022 04:34:17 +0000 (23:34 -0500)]
Simplify and improve randomdecl sanity test.
We don't need to do any weird shell variable stuff here, we can just
directly compute the expected output and verify against that. As a
bonus, when the test fails this gives a much better description of
which expected forms are missing in the testsuite log.
Nick Bowler [Wed, 9 Feb 2022 03:30:48 +0000 (22:30 -0500)]
Remove randomdecl test dependency on GSL.
It's a bit silly for a test application to depend on this huge library
just for random number generation. We can just directly incorporate
a simple RNG implementation which should be plenty good enough for
this purpose.
Nick Bowler [Thu, 14 Oct 2021 03:28:37 +0000 (23:28 -0400)]
Fix formatting error in libcdecl(3) man page.
The use of "e.g." at the end of a line confuses troff into thinking this
is the end of the sentence. That is not correct, so adjust the syntax
to avoid such interpretation.
Nick Bowler [Fri, 13 Aug 2021 02:41:14 +0000 (22:41 -0400)]
Make library i18n init conditional on NLS support.
If the package is configured with --disable-nls, the library's i18n
initialization does nothing useful but the internal functions are
not fully removed. Looks like a simple opportunity for improvement.
Nick Bowler [Fri, 13 Aug 2021 00:43:00 +0000 (20:43 -0400)]
Include glthread headers late.
It seems that in some configurations, the glthread headers can
include Windows headers which define macros that can conflict
with the libcdecl headers.
As the damage appears to be isolated to the headers, re-ordering
the includes appears to be sufficient to avoid any problems, at
least within the library.
Nick Bowler [Sat, 13 Mar 2021 22:23:46 +0000 (17:23 -0500)]
Rework library error reporting.
This removes (hopefully) all cases where the libcdecl prints
error messages directly to stderr, and reports these messages
via cdecl_get_error instead.
Nick Bowler [Fri, 12 Mar 2021 05:34:27 +0000 (00:34 -0500)]
Generate specifier strings directly from cdecl.h
Since the specs.lst file is no longer used for output ordering, it is
now mostly redundant information. There is another list of specifiers:
the enumeration constants in cdecl.h. We can fairly easily reconstruct
the strings from this instead.
Nick Bowler [Fri, 12 Mar 2021 04:54:24 +0000 (23:54 -0500)]
Restructure the type specifier check.
As the typemap.c functionality is only used for one thing and is quite
simple, let's integrate that more closely with the declaration specifier
checks. This further reduces the code size of the library somewhat.
The old sed line noise is replaced by a similar awk script which should
be much easier to adjust as needed.
Nick Bowler [Fri, 12 Mar 2021 04:58:52 +0000 (23:58 -0500)]
Hand-code the normalized specifier ordering.
For the most part, the enumerated values for specifier types in the
library are already in an acceptable order for normalization. This
list is part of the API and is expected to be stable.
We can achieve the desired ordering by simply tweaking these values
as needed. There is also no need to totally order the specifiers
because some combinations are never valid. This change not only
eliminates a pile of comparatively complex code generation, but
also reduces the overall size of the library somewhat.
Add a new testcase to validate the resulting ordering.
Nick Bowler [Wed, 10 Mar 2021 07:31:59 +0000 (02:31 -0500)]
Replace typegen.sh with a new and improved script.
The old typegen.sh has a bunch of portability problems; let's write
a new script in awk which is a better tool for this sort of code
generation task anyway.
Nick Bowler [Wed, 10 Mar 2021 01:34:05 +0000 (20:34 -0500)]
Work around designated initializer bug on HP-UX cc.
Work around a designated initializer bug encountered on old versions
of HP-UX. It seems there are some glitches leading to compilation
failures when the initializers are out of order (or omitted), and
the initializer for such a member is non-constant, and there is a
type conversion involved.
This affects several of the parser actions that initialize declspec
values. In this case, it is super easy to just change the type and
avoid type conversion, which easily avoids the bug.
Nick Bowler [Fri, 5 Mar 2021 00:15:37 +0000 (19:15 -0500)]
Add configure option to disable readline.
Apparently the Gnulib readline module does not provide any obvious way
for users to disable it. Setting the gl_cv_lib_readline cache variable
works but probably only Autoconfers will know how to discover that.
Add an explicit --with-readline (and --without-readline) option which
internally sets this. Since this option shows up in configure's help
output it is hopefully more obvious.
Nick Bowler [Wed, 3 Mar 2021 02:21:50 +0000 (21:21 -0500)]
Fix testcase compilation with --disable-shared.
Since the libtest library depends on functions in libcdecl,
we must list libcdecl after libtest on the linker command line,
otherwise required objects from static libcdecl will not be
pulled in to the link. A similar problem also occurs when
building tests with LDFLAGS=-Wl,--as-needed.
Nick Bowler [Tue, 2 Mar 2021 05:13:56 +0000 (00:13 -0500)]
Consolidate header files.
There is no need for this quantity of tiny header files. We can simply
use a single internal header file for libcdecl, and a single internal
header file for cdecl99, including all necessary declarations.
Nick Bowler [Fri, 26 Feb 2021 05:37:17 +0000 (00:37 -0500)]
Use the newly-minted option generator script from dxcommon.
Instead of maintaining the relation between long options and help text
dircetly in C code, let's use this new script to generate C code from
a simple description file.
This ditches support for translated option names. I'm a bit unsure
about the practical use of this functionality as I do not personally
use it and locale-specific interpretation of command-line arguments
just seems like it would cause more problems than it would solve.
Nick Bowler [Wed, 24 Feb 2021 01:46:55 +0000 (20:46 -0500)]
Bundle scripts to help re-bootstrap the package.
We can include the main bootstrapping scripts easily enough in the
package. If the user has a (possibly updated) Gnulib available, it
is now possible to regenerate the build system just by running the
included bootstrap script.
Nick Bowler [Wed, 24 Feb 2021 00:44:48 +0000 (19:44 -0500)]
Use AC_CONFIG_HEADERS rather than AC_CONFIG_HEADER.
The former name has been supported since approximately forever ago and
the latter form is now formally deprecated (with a warning) in recent
versions of Autoconf.
Nick Bowler [Wed, 24 Feb 2021 00:41:44 +0000 (19:41 -0500)]
Ensure INSTALL is packaged.
When Automake is run in foreign mode, the standard INSTALL file is not
copied by automake --add-missing. As this file provides general usage
instructions for the GNU build system, it is useful to have included
in the package.
Just copy the file manually when bootstrapping to make that happen.
Nick Bowler [Wed, 24 Feb 2021 00:33:16 +0000 (19:33 -0500)]
Rework the README.
This consolidates the text of this README with the text on my website,
and gets rid of a bunch of bootstrapping-related suggestions which
are not particularly interesting and probably obsolete anyway as none
of the tool versions listed have been updated in about a decade.
Nick Bowler [Tue, 23 Feb 2021 05:39:30 +0000 (00:39 -0500)]
Generate ChangeLog from git at packaging time.
Import the gitlog-to-changelog script from gnulib and add rules to
generate an up-to-date changelog from the git history, if available,
when running 'make dist'.
The ChangeLog is otherwise taken from srcdir as usual, so that
modified versions can be prepared from a release tarball without
requiring the full git history. In this scenario, the ChangeLog
would have to be manually edited.
In case the ChangeLog generation fails, a distcheck-hook is added
to hopefully catch issues before releasing tarballs with a broken
ChangeLog.
Nick Bowler [Tue, 23 Feb 2021 04:50:06 +0000 (23:50 -0500)]
Bump gnulib to latest.
Switch to using the gettext-h module, which I believe should work
exactly the same as before, just that the Autoconf macros get pulled
in from gettext rather than gnulib when bootstrapping.
Nick Bowler [Sat, 4 Jul 2020 17:28:53 +0000 (13:28 -0400)]
Fix use-after-free during parser error recovery.
When parsing a declaration containing more than one full declarator,
each such declarator references the same list of declaration specifiers.
While processing the declarators the specifier list is normalized and
each declarator needs to be updated to the new list.
However, if a syntax error is detected we break out of the processing
loop and end up with only some of these updates occurring. When the
partially-updated declaration list is subsequently freed, this can
in some cases lead to a use after free when the stale pointers are
encountered.
Fix this by updating all the specifier references before doing any
further processing to avoid dealing with partially-updated lists.
Nick Bowler [Fri, 3 Jul 2020 03:16:51 +0000 (23:16 -0400)]
Port random crossparse test to Autotest.
I don't really know why the existing crossparse testcase is so
complicated. Sure running the test generation and execution in
parallel may be an interesting approach, but it seems to be total
overkill for this use case.
By enhancing the crossparse application to take a list of test cases
from a file, we can just generate the stimuli in one step and execute
the tests in another which is simple and works fine.
As this is the final test to port to Autotest, we can now retire the
use of the Automake test harness.
Nick Bowler [Thu, 2 Jul 2020 22:45:15 +0000 (18:45 -0400)]
Fix parsing of int (x*).
We are incorrectly eliminating the function declarator from this
parse, which ends up "flipping" the pointer declarator. So the
result is simply wrong. Fix that up.
Also remove some contextless notes in a comment which I am no
longer smart enough to understand.
Nick Bowler [Tue, 30 Jun 2020 03:54:43 +0000 (23:54 -0400)]
Output copyright symbol directly, rather than via translations.
The "(C)" isn't really a translatable string. Instead of requiring
translations to deal with it, use Gnulib's str_iconv module to encode it
into the user's locale encoding. We fall back to (C) if that fails for
any reason, or if NLS is disabled.
Nick Bowler [Wed, 9 Jan 2013 00:01:53 +0000 (19:01 -0500)]
Fix silent-rules alignment in Automake 1.12.
Automake 1.12 changes the alignment of silent-rules output, which
looks ugly. Use the new compatibility helpers in dxcommon to fix
the alignment of flex/bison printouts in a backwards-compatible way.
Nick Bowler [Thu, 30 Aug 2012 00:29:03 +0000 (20:29 -0400)]
Add basic readline history support.
Bump gnulib as later versions include a free check for history.h
already, then implement a wrapper for add_history that should work
even when support is not available.
Nick Bowler [Wed, 29 Aug 2012 22:35:55 +0000 (18:35 -0400)]
Work around breakage caused by newer Bison versions.
Newer versions of GNU Bison automagically add a prototype for yyparse to
the header file, where previous versions did not. Unfortunately, the
use of yyscan_t in %parse-param causes a build failure now, as yyscan_t
is declared in scan.h. Moreover, since scan.h includes parse.h, we
cannot simply include scan.h in parse.h to get the type definition.
Work around the problem by declaring yyparse as taking a void *
directly.
Nick Bowler [Wed, 15 Aug 2012 00:34:44 +0000 (20:34 -0400)]
Workaround Gentoo's silly Automake wrapper in bootstrap.
It's pretty annoying when running bootstrap doesn't actually rebuild
using newly-installed tool versions. This happens because Gentoo's
automake wrapper script detects that stuff has been previously built
with a particular version of Automake, and runs that instead of the
latest.
Since we're going to recreate them anyway, delete the generated files so
that Gentoo's script picks the latest.
Nick Bowler [Wed, 15 Aug 2012 00:20:52 +0000 (20:20 -0400)]
Prevent gratuitous Automake failures.
Automake-1.12 introduces some new warnings, as well as fixing an earlier
bug that prevented -Wall from enabling all warnings. Since we were
using -Werror, this causes Automake to fail.
However, the warnings are gratuitous: some are warning about stuff
provided by libtool (which should be fixed in libtool, not worked
around in this package), and the others are warning about the non-
portability of (hopefully!) portable constructs. Most are automake
bug #9587 <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9587>, but
Automake also warns about the $(.FEATURES) trick to use order-only
dependencies when available.
Nick Bowler [Sat, 28 Jul 2012 20:32:18 +0000 (16:32 -0400)]
Move some gettext bits to dxcommon.
Migrate the mostly-package-agnostic parts of the gettext support into
dxcommon, thus allowing these bits to be shared with other packages.
We remove the AC_CONFIG_MACRO_DIR from configure.ac because its
behaviour is not clearly specified, and it's not obvious how (if it's
even possible at all) one handles multiple directories containing macro
definitions. Moreover, even if this macro is specified you still need
to define ACLOCAL_AMFLAGS anyway, and this definition must be kept
consistent with the AC_CONFIG_MACRO_DIR usage.
In the end, it looks like the only thing AC_CONFIG_MACRO_DIR does is
silence a single warning from libtoolize, without doing anything else
meaningful. In light of the above, the warning seems preferable at
this time.
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.
Nick Bowler [Sun, 18 Mar 2012 22:05:05 +0000 (18:05 -0400)]
Unbreak random array declarators.
Passing really big values to gsl_rng_uniform_int is not supported by the
library. Instead, add a function to generate any possible uintmax_t
value uniformly at random.
Nick Bowler [Sun, 18 Mar 2012 20:54:43 +0000 (16:54 -0400)]
Fix bogus switch cases in declgen.
One of the switch statements in declgen has completely bogus case
labels: '0', '1', ... instead of 0, 1, ...
Fix this up and also add a default: assert(0); which would have caught
this earlier. Improve the test case output when a randomdecl failure
causes the test to fail.
Also add a comment to the one switch statement in this file which
intentionally does not have a default: assert(0).