Hi Robert,
> Subject: [PATCH] cobol: Eliminate unguarded clock_gettime dependencies.
> [PR119975]
>
> These changes are help make it possible to compile on MacOS. In
it's not macOS in general, just older versions: clock_gettime is
available in macOS 11 and up (maybe earlier), but missing in (at least)
10.7 and 10.11.
> addition to guarding clock_settime() calls, it removes the use
> of structures and constants needed for clock_settime().
I've just run a COBOL-only bootstrap on Darwin 15 (Mac OS X 10.11) which
lacks clock_gettime. The build went fine and cobol results are
reasonable:
=== cobol Summary ===
# of expected passes 5271
# of unexpected failures 92
# of expected failures 54
# of unresolved testcases 91
All remaining failures are like
FAIL: cobol.dg/group1/declarative_1.cob -O0 (test for excess errors)
Excess errors:
/vol/gcc/src/hg/master/darwin/gcc/testsuite/cobol.dg/group1/declarative_1.cob:51:22:
sorry, unimplemented: SECTION segment '�~Oúíþ^G' is not ISO syntax
UNRESOLVED: cobol.dg/group1/declarative_1.cob -O0 compilation failed to
produce executable
My builds are run with LANG=C LC_CTYPE=en_US.UTF-8; that may be related.
> diff --git a/libgcobol/libgcobol.cc b/libgcobol/libgcobol.cc
> index f8697afd59c..81b5b7af812 100644
> --- a/libgcobol/libgcobol.cc
> +++ b/libgcobol/libgcobol.cc
[...]
> -uint64_t
> -get_time_nanoseconds()
> +// For testing purposes, this undef causes the use of gettimeofday().
> +// #undef HAVE_CLOCK_GETTIME
No need to do this in the sources proper: if you want to test such a
configuration, you can adjust .../libgcobol/config.h after
configuration.
> +static uint64_t
> +get_time_nanoseconds_local()
> {
> // This code was unabashedly stolen from gcc/timevar.cc.
> // It returns the Unix epoch with nine decimal places.
>
> + /* Note: I am perplexed. I have been examining the gcc Makefiles and
> + configure.ac files, and I am unable to locate where
> HAVE_GETTIMEOFDAY
> + is established. There have been issues compiling on MacOS, where
> + apparently clock_gettime() is not available. But I don't see
> exactly
> + how gettimeofday() gets used, instead. But without the ability to
> + compile on a MacOS system, I am fumbling along as best I can.
> +
> + I decided to simply replace clock_gettime() with getttimeofday()
> when
> + clock_gettime() isn't available, even though gcc/timevar.cc handles
> + the situation differently.
> +
> + -- Bob Dubner, 2025-06-11*/
The issue is that gettimeofday availability is never tested for. You
need something like
AC_CHECK_FUNCS_ONCE(gettimeofday)
in libgcobol/configure.ac, then run autoconf; autoheader to regenerate
configure and config.h.in.
gcc/configure.ac has this as
AC_CHECK_FUNCS(...
gettimeofday
...)
After that, you can use
#ifdef HAVE_CLOCK_GETTIME
<use clock_gettime>
#elif HAVE_GETTIMEOFDAY
<use gettimeofday>
#else
#error ...
#endif
Rainer
--
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University