I spoke too soon. I recompiled against the wrong SVN.
Whaever the changes that involve sem_timedwait in Quad_Plot.hh and the GTK and
XCB modules, they've broken APL builds on macOS even if you've told configure
to remove x11 and gtk3. As an example
Quad_PLOT.hh is being included in Archive.cc <http://archive.cc/>. That
breaks the compilation:
g++ -DHAVE_CONFIG_H -I. -I.. -Wall -O2 -I ./sql -I
/Users/paulrockwell/Documents/apl/trunk -O2 -Wno-narrowing
-I/opt/local/include -std=gnu++17 -I /Users/paulrockwell/Documents/apl/trunk
-MT apl-Archive.o -MD -MP -MF .deps/apl-Archive.Tpo -c -o apl-Archive.o `test
-f 'Archive.cc' || echo './'`Archive.cc
In file included from Archive.cc:85:
./Quad_PLOT.hh:103:13: error: use of undeclared identifier 'sem_timedwait'
103 | if (sem_timedwait(sema, &deadline) == 0) return PLOT_WAIT_OK;
| ^~~~~~~~~~~~~
In file included from Archive.cc:91:
In file included from ./StateIndicator.hh:33:
./Prefix.hh:31:1: warning: struct 'DerivedFunction' was previously declared as
a class; this is valid, but may result in linker errors under the Microsoft C++
ABI [-Wmismatched-tags]
31 | struct DerivedFunction;
| ^
./DerivedFunction.hh:39:7: note: previous use is here
39 | class DerivedFunction : public Function
| ^
./Prefix.hh:31:1: note: did you mean class here?
31 | struct DerivedFunction;
| ^~~~~~
| class
1 warning and 1 error generated.
If you try commenting out Quad_PLOT.hh, the following error occurs:
g++ -DHAVE_CONFIG_H -I. -I.. -Wall -O2 -I ./sql -I
/Users/paulrockwell/Documents/apl/trunk -O2 -Wno-narrowing
-I/opt/local/include -std=gnu++17 -I /Users/paulrockwell/Documents/apl/trunk
-MT apl-Archive.o -MD -MP -MF .deps/apl-Archive.Tpo -c -o apl-Archive.o `test
-f 'Archive.cc' || echo './'`Archive.cc
In file included from Archive.cc:91:
In file included from ./StateIndicator.hh:33:
./Prefix.hh:31:1: warning: struct 'DerivedFunction' was previously declared as
a class; this is valid, but may result in linker errors under the Microsoft C++
ABI [-Wmismatched-tags]
31 | struct DerivedFunction;
| ^
./DerivedFunction.hh:39:7: note: previous use is here
39 | class DerivedFunction : public Function
| ^
./Prefix.hh:31:1: note: did you mean class here?
31 | struct DerivedFunction;
| ^~~~~~
| class
In file included from Archive.cc:561:
./SystemVariable.def:88:10: error: use of undeclared identifier 'Quad_PLOT'
88 | sf_def(Quad_PLOT, "PLOT", "Plot a Value" )
| ^
1 warning and 1 error generated.
Seems like there's a bigger issue here. The changes made that introduced the
use of sem_timedwait() (which seemed to be introduced to fix other problems
related to the windows that were created by either GTK3 or XCB use in ⎕PLOT)
seem to be incompatible with platforms other than Linux. And right now there
doesn't seem to be a way around it. It appears that the definition of the
functions in Quad_PLOT.hh may have to be conditionalized based upon whether the
X11/GTK/XCB libraries are actually present (indicating that you're going to use
an X11 window). Seems to me that you don't need to go through all the semaphore
wait code if you have a platform that isn't using X11. Or figure out a way to
fix the issue that you've found without having to use the Linux-only
sem_timedwait() so that other platforms can continue to use XCB or GTK3.
- Paul
> On Aug 20, 2026, at 2:01 PM, Paul Rockwell <[email protected]> wrote:
>
> I wasn't able to get by the error until I performed an autoreconf --install
> --force which rebuilt Makefile.in from your updated Makefile.am. I'm now
> getting past this particular issue issue, but encountering another one:
>
> g++ -DHAVE_CONFIG_H -I. -I.. -Wall -O2 -I ./sql -I
> /Users/paulrockwell/Documents/apl/trunk -O2 -Wno-narrowing
> -I/opt/local/include -std=gnu++17 -I /Users/paulrockwell/Documents/apl/trunk
> -MT apl-Plot_xcb.o -MD -MP -MF .deps/apl-Plot_xcb.Tpo -c -o apl-Plot_xcb.o
> `test -f 'Plot_xcb.cc' || echo './'`Plot_xcb.cc
> In file included from Plot_xcb.cc:42:
> ./Quad_PLOT.hh:103:13: error: use of undeclared identifier 'sem_timedwait'
> 103 | if (sem_timedwait(sema, &deadline) == 0) return
> PLOT_WAIT_OK;
> | ^~~~~~~~~~~~~
> Plot_xcb.cc:192:22: warning: variable length arrays in C++ are a Clang
> extension [-Wvla-cxx-extension]
> 192 | xcb_char2b_t xcb_str[string_length + 10];
> | ^~~~~~~~~~~~~~~~~~
> Plot_xcb.cc:192:22: note: initializer of 'string_length' is not a constant
> expression
> Plot_xcb.cc:191:14: note: declared here
> 191 | const size_t string_length = strlen(string);
> | ^
> Plot_xcb.cc:1315:27: warning: variable length arrays in C++ are a Clang
> extension [-Wvla-cxx-extension]
> 1315 | uint8_t scanline[3*width + 10];
> | ^~~~~~~~~~~~
> Plot_xcb.cc:1315:29: note: initializer of 'width' is not a constant expression
> 1315 | uint8_t scanline[3*width + 10];
> | ^
> Plot_xcb.cc:1228:20: note: declared here
> 1228 | const unsigned int width = geo_x + geo_w + geo_x;
> | ^
> Plot_xcb.cc:1281:5: warning: variable 'file_bytes' set but not used
> [-Wunused-but-set-variable]
> 1281 | int file_bytes = 0;
> | ^
> 3 warnings and 1 error generated.
> make[3]: *** [apl-Plot_xcb.o] Error 1
> make[2]: *** [all-recursive] Error 1
> make[1]: *** [all-recursive] Error 1
> make: *** [all] Error 2
> paulrockwell@Upstairs trunk %
>
>
> I'm running configure with the following options:
>
> ./configure --without-gtk3 CXXFLAGS="-O2 -Wno-narrowing -I/opt/local/include
> -std=gnu++17" LDFLAGS="-L/opt/local/lib"
>
> I have X11, gtk3, and and other open-source libraries used by GNU APL
> installed via MacPorts (an alternative to Homebrew). They reside in
> /opt/local/include and /opt/local/lib - so I needed to add them to the
> library and header search lists.
>
> The SVN of APL that I have installed for my day-to-day use (SVN 2034)
> compiled fine without this use of undeclared identifier error. Just reverted
> back to SVN 2034 and re-built to verify.
>
> A diff shows lots of changes in Plot_xcb.cc <http://plot_xcb.cc/> and
> Quad_Plot.hh - which I suspect are the reasons behing why this error is now
> appearing.
>
> I've been able to work around this by adding --without-x to my configure
> command"
>
> ./configure --without-x --without-gtk3 CXXFLAGS="-O2 -Wno-narrowing
> -I/opt/local/include -std=gnu++17" LDFLAGS="-L/opt/local/lib"
>
>
> Some additional research indicates that sem_timedwait does not exist on macOS.
>
> - Paul
>
>
>> On Aug 20, 2026, at 12:55 PM, Paul Rockwell <[email protected]> wrote:
>>
>> SVN 2090 still doesn't work. Manually executing the statement that you
>> changed when using the macOS standard shell zsh:
>>
>> % for so in .libs/*.so .libs/*.dylib ; do
>> echo "$so"
>> done
>> zsh: no matches found: .libs/*.so
>>
>> Running it in the Bourne shell works:
>>
>> % sh
>> sh-3.2$ for so in .libs/*.so .libs/*.dylib ; do
>> > echo "$so"
>> > done
>> .libs/*.so
>> .libs/libemacs.0.dylib
>> .libs/libemacs.dylib
>> sh-3.2$
>>
>> Running this under Bash also fails but with a different issue:
>>
>> bash
>> bash-5.3$ for so in .libs/*.so .libs/*dylib ; do
>> > echo "$$so"
>> > done
>> 59622so
>> 59622so
>> 59622so
>>
>> The following does work under bash, and the Bourne sh, but not zsh:
>>
>> % bash
>> bash-5.3$ for so in .libs/*.so .libs/*dylib ; do echo "$so"; done
>> .libs/*.so
>> .libs/libemacs.0.dylib
>> .libs/libemacs.dylib
>> % exit
>> % sh
>> sh-3.2$ for so in .libs/*.so .libs/*dylib ; do echo "$so"; done
>> .libs/*.so
>> .libs/libemacs.0.dylib
>> .libs/libemacs.dylib
>>
>>
>> - Paul
>>
>>
>>
>>
>>> On Aug 20, 2026, at 12:17 PM, Dr. Jürgen Sauermann via Bugs and suggestions
>>> for GNU APL <[email protected]> wrote:
>>>
>>> Hi Mike,
>>>
>>> thanks for the follow-up. Same class of bug, just in a different
>>> subdirectory this time: src/emacs_mode/Makefile.am's all-local step had
>>> the identical .libs/*.so-only glob (used to copy the freshly built
>>> libemacs next to the apl binary) -- on MacOS libtool builds libemacs.dylib
>>> instead, so the glob was again left as a literal, non-existent filename,
>>> and the failed 'test -f' aborted the build right there, again with no
>>> error text of its own.
>>>
>>> Fixed in SVN 2090 -- now globs both *.so and *.dylib in
>>> src/emacs_mode/Makefile.am as well, and can no longer abort the build
>>> either way. Please svn up and retry; let us know if anything else comes
>>> up.
>>>
>>> Best regards,
>>> Jürgen
>>>
>>> PS: This error was fixed with the help of Claude Code
>>> (https://savannah.gnu.org/projects/apl).
>>>
>>>
>>>
>>> On 8/20/26 15:16, M.Hall wrote:
>>>> Thank you! It gets much farther along before the next error:
>>>> ===
>>>> libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../..
>>>> -Wno-deprecated-declarations -g -O2 -I
>>>> /Volumes/ARCHIVE/Language/APL/gnu-apl/SVN/trunk -MT VersionCommand.lo -MD
>>>> -MP -MF .deps/VersionCommand.Tpo -c VersionCommand.cc -o VersionCommand.o
>>>> >/dev/null 2>&1
>>>> /bin/sh ../../libtool --tag=CXX --mode=link g++
>>>> -Wno-deprecated-declarations -g -O2 -I
>>>> /Volumes/ARCHIVE/Language/APL/gnu-apl/SVN/trunk -export-dynamic -o
>>>> libemacs.la <http://libemacs.la/> -rpath /usr/local/lib/apl DefCommand.lo
>>>> emacs.lo FnCommand.lo FnTagCommand.lo FollowCommand.lo GetVarCommand.lo
>>>> HelpCommand.lo Listener.lo LockWrapper.lo network.lo NetworkConnection.lo
>>>> RunCommand.lo SicCommand.lo SiCommand.lo SendCommand.lo SystemFnCommand.lo
>>>> SystemVariableCommand.lo TcpListener.lo TempFileWrapper.lo TraceData.lo
>>>> UnixSocketListener.lo util.lo VariablesCommand.lo VersionCommand.lo
>>>> -lpcre2-32 -lpng -lz -lfftw3 -ldl -lm -lpthread
>>>> libtool: link: g++ -r -keep_private_externs -nostdlib -o
>>>> .libs/libemacs.0.dylib-master.o .libs/DefCommand.o .libs/emacs.o
>>>> .libs/FnCommand.o .libs/FnTagCommand.o .libs/FollowCommand.o
>>>> .libs/GetVarCommand.o .libs/HelpCommand.o .libs/Listener.o
>>>> .libs/LockWrapper.o .libs/network.o .libs/NetworkConnection.o
>>>> .libs/RunCommand.o .libs/SicCommand.o .libs/SiCommand.o
>>>> .libs/SendCommand.o .libs/SystemFnCommand.o .libs/SystemVariableCommand.o
>>>> .libs/TcpListener.o .libs/TempFileWrapper.o .libs/TraceData.o
>>>> .libs/UnixSocketListener.o .libs/util.o .libs/VariablesCommand.o
>>>> .libs/VersionCommand.o
>>>> libtool: link: g++ -dynamiclib -Wl,-undefined -Wl,dynamic_lookup -o
>>>> .libs/libemacs.0.dylib .libs/libemacs.0.dylib-master.o
>>>> /usr/local/lib/libpcre2-32.dylib /usr/local/lib/libpng16.dylib -lz
>>>> /usr/local/lib/libfftw3.a -ldl -lm -lpthread -g -O2 -pthread
>>>> -install_name /usr/local/lib/apl/libemacs.0.dylib -compatibility_version
>>>> 1 -current_version 1.0
>>>> libtool: link: (cd ".libs" && rm -f "libemacs.dylib" && ln -s
>>>> "libemacs.0.dylib" "libemacs.dylib")
>>>> libtool: link: ar cr .libs/libemacs.a DefCommand.o emacs.o FnCommand.o
>>>> FnTagCommand.o FollowCommand.o GetVarCommand.o HelpCommand.o Listener.o
>>>> LockWrapper.o network.o NetworkConnection.o RunCommand.o SicCommand.o
>>>> SiCommand.o SendCommand.o SystemFnCommand.o SystemVariableCommand.o
>>>> TcpListener.o TempFileWrapper.o TraceData.o UnixSocketListener.o util.o
>>>> VariablesCommand.o VersionCommand.o
>>>> libtool: link: ranlib .libs/libemacs.a
>>>> libtool: link: ( cd ".libs" && rm -f "libemacs.la <http://libemacs.la/>"
>>>> && ln -s "../libemacs.la <http://libemacs.la/>" "libemacs.la
>>>> <http://libemacs.la/>" )
>>>> make[3]: *** [all-local] Error 1
>>>> make[3]: Leaving directory
>>>> `/Volumes/ARCHIVE/Language/APL/gnu-apl/SVN/trunk/src/emacs_mode'
>>>> make[2]: *** [all-recursive] Error 1
>>>> make[2]: Leaving directory
>>>> `/Volumes/ARCHIVE/Language/APL/gnu-apl/SVN/trunk/src'
>>>> make[1]: *** [all-recursive] Error 1
>>>> make[1]: Leaving directory
>>>> `/Volumes/ARCHIVE/Language/APL/gnu-apl/SVN/trunk'
>>>> make: *** [all] Error 2
>>>> make: Leaving directory `/Volumes/ARCHIVE/Language/APL/gnu-apl/SVN/trunk'
>>>> SVN/trunk $
>>>>
>>>> $ svn info
>>>> Path: .
>>>> Working Copy Root Path: /Volumes/ARCHIVE/Language/APL/gnu-apl/SVN/trunk
>>>> URL: svn://svn.savannah.gnu.org/apl/trunk
>>>> <http://svn.savannah.gnu.org/apl/trunk>
>>>> Relative URL: ^/trunk
>>>> Repository Root: svn://svn.savannah.gnu.org/apl
>>>> <http://svn.savannah.gnu.org/apl>
>>>> Repository UUID: bd74f7bd-1a55-4bac-9fab-68015b139e80
>>>> Revision: 2089
>>>> Node Kind: directory
>>>> Schedule: normal
>>>> Last Changed Author: j_sauermann
>>>> Last Changed Rev: 2089
>>>> Last Changed Date: 2026-08-20 07:21:59 -0500 (Thu, 20 Aug 2026)
>>>>
>>>> $ c++ --version
>>>> Apple clang version 17.0.0 (clang-1700.0.13.5)
>>>> Target: arm64-apple-darwin24.6.0
>>>> Thread model: posix
>>>> InstalledDir: /Library/Developer/CommandLineTools/usr/bin
>>>>
>>>>
>>>> On Tue, Aug 18, 2026 at 10:30 AM Dr. Jürgen Sauermann
>>>> <mail@jürgen-sauermann.de <mailto:mail@j%C3%BCrgen-sauermann.de>> wrote:
>>>>> Hi Mike,
>>>>>
>>>>> Thanks for the report -- found it. src/native/Makefile.am's all-local
>>>>> step copies the freshly-built native-function libraries next to the
>>>>> apl binary so the interpreter can be tested from the build tree without
>>>>> a prior 'make install'. That step globbed .libs/*.so only; on MacOS
>>>>> libtool builds .dylib instead, so the glob matches nothing, is left as
>>>>> a literal (non-existent) filename, and the resulting failed 'test -f'
>>>>> aborts the whole build right there -- which is exactly why your
>>>>> transcript shows a fully successful compile/link/ranlib/symlink
>>>>> sequence for lib_template_OP2 immediately followed by 'all-local]
>>>>> Error 1' with no error text of its own: the failure is in that copy
>>>>> step, not in anything you pasted above it.
>>>>>
>>>>> Fixed at SVN 2087 -- now globs both *.so and *.dylib, and
>>>>> can no longer abort the build either way. Please svn up and retry;
>>>>> let us know if anything else comes up.
>>>>>
>>>>> Jürgen
>>>>>
>>>>> PS: Claude Code found and fixed this one.
>>>>>
>>>>>
>>>>> On 8/18/26 16:13, M.Hall wrote:
>>>>>> I get a build error with the latest SVN (happened last week, too). Used
>>>>>> to build ok earlier in the year. No changes to compiler; only security
>>>>>> updates to macOS 15.7. Have removed existing svn/trunk directory and
>>>>>> tried a new svn clone. Same result.
>>>>>>
>>>>>> $ make clean
>>>>>> $ svn up
>>>>>> $ ./configure --without-x
>>>>>> $ make -w
>>>>>> ...
>>>>>>
>>>>>> /bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H
>>>>>> -I. -I../.. -I ./.. -g -O2 -g -O2 -I
>>>>>> /Volumes/WORK/Language/APL/gnu-apl/SVN/trunk -MT
>>>>>> lib_template_OP2_la-template_OP2.lo -MD -MP -MF
>>>>>> .deps/lib_template_OP2_la-template_OP2.Tpo -c -o
>>>>>> lib_template_OP2_la-template_OP2.lo `test -f 'template_OP2.cc' || echo
>>>>>> './'`template_OP2.cc
>>>>>> libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I ./.. -g -O2 -g -O2
>>>>>> -I /Volumes/WORK/Language/APL/gnu-apl/SVN/trunk -MT
>>>>>> lib_template_OP2_la-template_OP2.lo -MD -MP -MF
>>>>>> .deps/lib_template_OP2_la-template_OP2.Tpo -c template_OP2.cc
>>>>>> -fno-common -DPIC -o .libs/lib_template_OP2_la-template_OP2.o
>>>>>> libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I ./.. -g -O2 -g -O2
>>>>>> -I /Volumes/WORK/Language/APL/gnu-apl/SVN/trunk -MT
>>>>>> lib_template_OP2_la-template_OP2.lo -MD -MP -MF
>>>>>> .deps/lib_template_OP2_la-template_OP2.Tpo -c template_OP2.cc -o
>>>>>> lib_template_OP2_la-template_OP2.o >/dev/null 2>&1
>>>>>> mv -f .deps/lib_template_OP2_la-template_OP2.Tpo
>>>>>> .deps/lib_template_OP2_la-template_OP2.Plo
>>>>>> /bin/sh ../../libtool --tag=CXX --mode=link g++ -I ./.. -g -O2 -g
>>>>>> -O2 -I /Volumes/WORK/Language/APL/gnu-apl/SVN/trunk -avoid-version
>>>>>> -export-dynamic -o lib_template_OP2.la -rpath /usr/local/lib/apl
>>>>>> lib_template_OP2_la-template_OP2.lo -lpcre2-32 -lpng -lz -lfftw3 -ldl
>>>>>> -lm -lpthread
>>>>>> libtool: link: g++ -r -keep_private_externs -nostdlib -o
>>>>>> .libs/lib_template_OP2.dylib-master.o
>>>>>> .libs/lib_template_OP2_la-template_OP2.o
>>>>>> libtool: link: g++ -dynamiclib -Wl,-undefined -Wl,dynamic_lookup -o
>>>>>> .libs/lib_template_OP2.dylib .libs/lib_template_OP2.dylib-master.o
>>>>>> /usr/local/lib/libpcre2-32.dylib /usr/local/lib/libpng16.dylib -lz
>>>>>> /usr/local/lib/libfftw3.a -ldl -lm -lpthread -g -O2 -g -O2 -pthread
>>>>>> -install_name /usr/local/lib/apl/lib_template_OP2.dylib
>>>>>> libtool: link: ar cr .libs/lib_template_OP2.a
>>>>>> lib_template_OP2_la-template_OP2.o
>>>>>> libtool: link: ranlib .libs/lib_template_OP2.a
>>>>>> libtool: link: ( cd ".libs" && rm -f "lib_template_OP2.la" && ln -s
>>>>>> "../lib_template_OP2.la" "lib_template_OP2.la" )
>>>>>> make[3]: *** [all-local] Error 1
>>>>>> make[3]: Leaving directory
>>>>>> `/Volumes/WORK/Language/APL/gnu-apl/SVN/trunk/src/native'
>>>>>> make[2]: *** [all-recursive] Error 1
>>>>>> make[2]: Leaving directory
>>>>>> `/Volumes/WORK/Language/APL/gnu-apl/SVN/trunk/src'
>>>>>> make[1]: *** [all-recursive] Error 1
>>>>>> make[1]: Leaving directory `/Volumes/WORK/Language/APL/gnu-apl/SVN/trunk'
>>>>>> make: *** [all] Error 2
>>>>>> make: Leaving directory `/Volumes/WORK/Language/APL/gnu-apl/SVN/trunk'
>>>>>>
>>>>>> $ svn info
>>>>>> Path: .
>>>>>> Working Copy Root Path: /Volumes/WORK/Language/APL/gnu-apl/SVN/trunk
>>>>>> URL: svn://svn.savannah.gnu.org/apl/trunk
>>>>>> <http://svn.savannah.gnu.org/apl/trunk>
>>>>>> Relative URL: ^/trunk
>>>>>> Repository Root: svn://svn.savannah.gnu.org/apl
>>>>>> <http://svn.savannah.gnu.org/apl>
>>>>>> Repository UUID: bd74f7bd-1a55-4bac-9fab-68015b139e80
>>>>>> Revision: 2086
>>>>>> Node Kind: directory
>>>>>> Schedule: normal
>>>>>> Last Changed Author: j_sauermann
>>>>>> Last Changed Rev: 2086
>>>>>> Last Changed Date: 2026-08-18 08:23:05 -0500 (Tue, 18 Aug 2026)
>>>>>>
>>>>>> $ g++ --version
>>>>>> Apple clang version 17.0.0 (clang-1700.0.13.5)
>>>>>> Target: arm64-apple-darwin24.6.0
>>>>>> Thread model: posix
>>>>>> InstalledDir: /Library/Developer/CommandLineTools/usr/bin
>>>>>>
>>>>>> Thanks.
>>>>>> --
>>>>>> Mike Hall
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Mike Hall
>>>>
>>>>
>>>
>>
>