[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
minor syntax issues when building Guile on older setups
From: |
Gordon Steemson |
Subject: |
minor syntax issues when building Guile on older setups |
Date: |
Wed, 21 Aug 2024 21:10:40 -0700 |
I'm trying to compile a more recent Guile than 2.0.11 (the version available
through my package manager) on my old Power Mac G5, and have thus far
encountered two minor issues when building 3.0.10:
Firstly: In libguile/print.h and libguile/dynstack.h, the header
libguile/scm.h is included right before a typedef that elaborates upon a
typedef in scm.h. Specifically, libguile/scm.h says
> typedef struct scm_print_state scm_print_state;
> typedef struct scm_dynstack scm_t_dynstack;
then libguile/print.h says
> typedef struct scm_print_state {
> [ 14 lines of structure members & comments ]
> } scm_print_state;
and libguile/dynstack.h says
> typedef struct scm_dynstack {
> [ 3 lines of structure members ]
> } scm_t_dynstack;
Older GCCs are confused by this framing and mistake it for a redefinition of
the type alias, which is a fatal error. The fix is to merely define the
structures, rather than making a second typedef statement out of them -- you
don't need to reiterate that they're typedefs, that each is a typedef is
already stated in scm.h immediately prior. Like this...
In libguile/print.h:
> struct scm_print_state {
> [ 14 lines of structure members & comments ]
> };
and in libguile/dynstack.h:
> struct scm_dynstack {
> [ 3 lines of structure members ]
> };
(I'll also add here that the literal form feeds embedded in these source files
make it unnecessarily fiddly to construct patches for them. Seriously, that
stopped being an unambiguously good idea 40 years ago.)
Secondly: In libguile/posix.c, there is exactly one use of “dprintf()”. This
function does not exist on my machine, which ceased to be supported by its
manufacturer before dprintf() was standardized. I request that either a more
portable alternative, or the gnulib module which makes dprintf() reliably
available, be used. (Using “fprintf()” instead seems to work here, but this
occurs in an error handler and for all I know there may have been a very good
reason the existing code writes specifically to a file descriptor rather than
to a stream, so I'm not about to declare it an obvious change to make.)
I do not have any other issues to report on a purely mechanical "proofreading"
level, but I can't really comment on whether Guile actually operates as
intended because it is still bootstrapping itself after 11 continuous hours.
(Based on the list of source files in stage0/Makefile.in, I am reasonably
confident it will proceed to stage one from stage zero some time in the next
two or three hours.) Is it normal for it to take this long? I know two cores
at 2 GHz is a bit slow by today's standards, but even GCC 7 builds to
completion on this thing in only about 18 hours.
Gordon S.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- minor syntax issues when building Guile on older setups,
Gordon Steemson <=