# Ann: SWI-Prolog 9.3.26

**URL:** <https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120>\
**Category:** Releases\
**Created:** [July 23, 2025, 3:50pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120 "2025-07-23T15:50:15Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [July 23, 2025, 3:50pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/1 "2025-07-23T15:50:15Z")

</div>

Dear SWI-Prolog user,

I have uploaded SWI-Prolog 9.3.26. From the Prolog point of view,  
this merely fixes a few minor issues. As discussed though, the  
tooling has changed considerably:

- The xpce GUI toolkit is now based on the SDL3+Cairo+Pango libraries,  
using practically the same source on all platforms.
- The GUI toolkit now runs natively on MacOS (i.e., no more need for  
XQuartz) and Wayland (the Linux display server that is now more and  
more replacing X11).
- The `swipl-win` executable now uses xpce for its console window. This  
implies that the native `swipl-win.exe` on Windows and the Qt based  
version for MacOS and Linux have gone.
- The GNU readline binding is disabled. We now use the BSD libedit for  
command line editing as it is more flexible and can support more  
instances, which allows it to run inside the xpce based Prolog console(s).

Availability

- As usual, we provide binaries for Windows and MacOS. These use the  
full stack outlined above.
- We will update the flatpak version. The snap version will be discontinued  
as it is harder to manage and serves the same purpose as the flatpak  
version.
- We provide PPAs for Ubuntu. The one for plucky (25.04) will provide  
the gui. Versions for older Ubuntu releases will not. Users can either  
use the flatpak version or build from source, after building SDL3 and  
SDL3\_image from source. Unfortunately the plucky PPA build failed to  
include the gui as well. This will be fixed.
- The Macports version will be updated. Unfortunately there is an issue  
with Macports SDL3\_image package that prevents `port` from building it.  
You can build SWI-Prolog using the dependencies from Macports, including  
SDL3\_image. This is merely an issue on how `port` works.

Issues are to be expected and a quick re-release as well. Please test!

```
Enjoy --- Jan

```

# SWI-Prolog Changelog since version 9.3.25

- FIXED: `swipl-win` installation for MacOS when not creating a bundle.

- PPA: Updated scripts/make-ppa to setup building without gui for  
older distros

- ADDED: Empty `light` theme file.

- FIXED: Code generation for unification moved to the head. Minimal test  
case: `p(X, Y) :- X = f(Y), Y = a.`. Issue occurs if a variable is  
accessed (Y) before its unification must be moved to the head.

- FIXED: Building; typo in prolog\_pack/http fix

- BUILD: Avoid installing some libraries with missing dependencies -  
Do not install library(prolog\_pack) if http support is missing.

- FIXED: library(prolog\_xref): added some missing hook declarations.

- THEME: Dark theme declarations for class list\_browser and the profiler.  
Requires the SDL version of xpce.

- ENHANCED: Improve `dark` theme Only applies with new SDL based xpce

- PORT: Fixed MacOS installer to include transitive dependencies and  
fix the @rpath.

- BUILD: Fixed PGO build with `-DEPILOG=ON`

- BUILD: Ensure proper GUI environment for building the manual.

- ADDED: Support `-Dtheme=<theme>`

- PORT: Update scripts/macos-deps.sh Update most ports, add SDL3,  
SDL3\_image, cairo and pango.

- ADDED: Working directory handling for MacOS app.

- PORT: Create a MacOS bundle based on Epilog.

- ENHANCED: interactor/0,1: use epilog when available. In the long  
term we will drop xterm support as well as native win32 support.

- EPILOG: Deal with `--win-app` option in a way that also supports  
epilog.

- ENHANCED: Remove thread context for threads running the REPL loop.  
This avoids the complicating `[Thread xyz]` note on messages in  
alternate consoles such as Epilog or SSH shells.

- ADDED: Prolog flag `toplevel_thread`. This flag is `true` in a thread  
that is currently running a REPL loop.

- FIXED: Edit from PceEmacs using popup could raise an error.  
E.g. ERROR: prolog\_edit:is\_file\_spec/1: No rule matches  
prolog\_edit:is\_file\_spec(20\_625\_830)

- BUILD: Add CMake `-DEPILOG` option This option prepares the core  
for the upcoming Epilog configuration. It must be used with the  
`sdl` branch of `packages/xpce`. Effect:

- PORT: Find MinGW DLL dependencies more dynamically This provides two  
CMake functions to find the direct and indirect MinGW DLLs that must  
be included into the distribution

- ADDED: Allow storing the tty screen size with a stream. This is  
required for environments where we use a non-tty I/O device such as a  
pipe or socket while there is a notion of a tty size. Currently used  
for Epilog on Windows.

- MODIFIED: print\_term/2: print dict tags and compound functors using  
the current write options. Both used to be printed hardwired using  
`~q` (quoted).

- FIXED: When `rational_syntax` is `natural`, write /(Int,Number) with  
spaces. This ensures such a term is not read as a rational number.

- FIXED: Use autoload\_call/1 to avoid reporting undefined predicates.

- MODIFIED: Make the code walker ignore calls to autoload\_call/1.

- ADDED: autoload\_call/1: call Goal after autoloading.

- PORT: Avoid errors on sharing violations.

- FIXED: Windows: comparing string equality with surrogate pairs  
Comparing strings with surrogate pairs could signal inequality while  
the strings are equal.

- FIXED: Unification to chars or codes of wchar\_t text on Windows.

## Package debian

- PPA: Updated to support xpce based GUI This deletes the Qt console  
(swi-prolog-win package) and replaces the X11 dependencies with  
SDL+cairo+pango.

## Package libedit

- ADDED: Support winlibedit hook to get the terminal size. This allows  
fetching the terminal size for Epilog on Windows.

- PORT: Make el\_history\_events/2 also work on the fileno property  
on Windows.

- ENHANCED: Use autoload\_call/1 to avoid undefined errors.

- FIXED: Read multi-byte characters on non-Windows.

- ADDED: Support Windows pipe handles for I/O This is work in progress to  
support Epilog on Windows. It consists of changes to our winlibedit  
port of libedit. These changes do not use Console mode setting and  
read using ReadFile() rather than ReadConsoleInput().

## Package xpce

- See at the top

---

<div class="post-metadata">

**Author:** ![peter.ludemann](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/peter.ludemann/32/48_2.png) [@peter.ludemann](https://swi-prolog.discourse.group/u/peter.ludemann)\
**Post date:** [July 23, 2025, 8:22pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/2 "2025-07-23T20:22:17Z")

</div>

Oops … my mistake when building SDL … deleted my error report.

---

<div class="post-metadata">

**Author:** ![mike.elston](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/mike.elston/32/3691_2.png) [@mike.elston](https://swi-prolog.discourse.group/u/mike.elston)\
**Post date:** [July 23, 2025, 11:23pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/3 "2025-07-23T23:23:34Z")

</div>

Hi Jan

I tried building from source. First built SDL3 and SDL\_image:

$ lsb\_release -a  
No LSB modules are available.  
Distributor ID: Ubuntu  
Description: Ubuntu 24.04.2 LTS  
Release: 24.04  
Codename: noble

SDL3

git clone [GitHub - libsdl-org/SDL: Simple Directmedia Layer](https://github.com/libsdl-org/SDL.git)  
cd SDL  
ls -al  
cmake --version  
g++ --version  
mkdir build  
cd build  
cmake ..  
ls  
make -j 8  
sudo make install

No errors or warnings

SDL\_image

git clone [GitHub - libsdl-org/SDL\_image: Image decoding for many popular formats for Simple Directmedia Layer.](https://github.com/libsdl-org/SDL_image.git)  
cd SDL\_image  
mkdir build  
cd build  
cmake ..  
make  
sudo make install

No errors or warnings

SWIPL

cd swipl-devel/  
2030 git clean -xfd  
2031 git submodule foreach git clean -xfd  
2032 git pull  
2033 git submodule update --init  
2034 mkdir build  
2035 cd build  
2036 cmake -DCMAKE\_INSTALL\_PREFIX=$HOME -DCMAKE\_BUILD\_TYPE=PGO -G Ninja ..

– signal handler is not reset (BSD signals)  
– Check size of double  
CMake Error at /home/mike/swipl-devel/build/CMakeFiles/CMakeScratch/TryCompile-nQX4Dk/CMakeLists.txt:30 (target\_link\_libraries):  
Target “cmTC\_c07a3” links to:

```
SDL3::SDL3

```

but the target was not found. Possible reasons include:

```
* There is a typo in the target name.
* A find_package call is missing for an IMPORTED target.
* An ALIAS target is missing.

```

CMake Error at /usr/share/cmake-3.28/Modules/CheckTypeSize.cmake:146 (try\_compile):  
Failed to generate test project build system.  
Call Stack (most recent call first):  
/usr/share/cmake-3.28/Modules/CheckTypeSize.cmake:271 (\_\_check\_type\_size\_impl)  
packages/xpce/cmake/XPCEConfig.cmake:13 (check\_type\_size)  
packages/xpce/CMakeLists.txt:33 (include)

---

<div class="post-metadata">

**Author:** ![peter.ludemann](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/peter.ludemann/32/48_2.png) [@peter.ludemann](https://swi-prolog.discourse.group/u/peter.ludemann)\
**Post date:** [July 24, 2025, 12:56am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/4 "2025-07-24T00:56:28Z")

</div>

I got the same error on Debian 12 (bookworm):

```txt
CMake Error at /home/peter/src/swipl-devel/build.debug/CMakeFiles/CMakeScratch/TryCompile-0dljyG/CMakeLists.txt:26 (target_link_libraries):
  Target "cmTC_8a416" links to:

    SDL3::SDL3

  but the target was not found. Possible reasons include:

    * There is a typo in the target name.
    * A find_package call is missing for an IMPORTED target.
    * An ALIAS target is missing.

CMake Error at /usr/share/cmake-3.25/Modules/CheckIncludeFile.cmake:95 (try_compile):
  Failed to generate test project build system.
Call Stack (most recent call first):
  cmake/Utils.cmake:45 (check_include_file)
  packages/xpce/cmake/XPCEConfig.cmake:16 (AC_CHECK_HEADERS)
  packages/xpce/CMakeLists.txt:33 (include)

```

I built with options from Jan’s config file, but with static and test turned on (the ctest for SDL had 2 failed tests: `testautomation`, `testautomation-no-simd`, which I presume don’t matter).

I also got a warning from cmake: `Could NOT find ALSA (missing: ALSA_LIBRARY ALSA_INCLUDE_DIR) `.

These were the commands I used to build SDL and SDL\_image:

```txt
git clone --recurse git@github.com:libsdl-org/SDL.git
git clone --recurse git@github.com:libsdl-org/SDL_image.git
cd ~/src/SDL && mkdir -p build && cd build
cmake -G Ninja -DSDL_SHARED=ON -DSDL_STATIC=ON -DSDL_TESTS=ON ..
ninja && ctest -j6 && sudo ninja install
cd ~/src/SDL_image && mkdir -p build && cd build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DSDLIMAGE_BACKEND_IMAGEIO=ON -DSDLIMAGE_BACKEND_STB=ON -DSDLIMAGE_JPG=ON -DSDLIMAGE_PNG=ON -DSDLIMAGE_WEBP=OFF ..
ninja && sudo ninja install

```

---

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [July 24, 2025, 9:44am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/5 "2025-07-24T09:44:09Z")

</div>

> [@mike.elston](#):
>
> CMake Error at /home/mike/swipl-devel/build/CMakeFiles/CMakeScratch/TryCompile-nQX4Dk/CMakeLists.txt:30 (target\_link\_libraries):  
> Target “cmTC\_c07a3” links to:
> 
> `SDL3::SDL3`

Also by @peter.ludemann . This is an issue with older versions of cmake. I stumbled on it at some point as well and fixed it by updating CMake. ChatGPT proposes another solution that makes the configuration work with older versions. Please **do reconfigure from scratch**.

I pushed fixes for this. There are also some other small fixes for benign compiler warnings and QLF compilation warnings if the build locale is not UTF-8 based. Also pushed fixes for two bad colours in the dark theme.

All now compiles completely clean on Debian Bookworm for me (started from a clean Docker image).

Thanks for the feedback.

---

<div class="post-metadata">

**Author:** ![mike.elston](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/mike.elston/32/3691_2.png) [@mike.elston](https://swi-prolog.discourse.group/u/mike.elston)\
**Post date:** [July 24, 2025, 10:44am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/6 "2025-07-24T10:44:42Z")

</div>

Thanks Jan. Got much futher but then this:

2490/2691] Generating lib/main.tex  
SDL\_Init() failed: No available video device  
SDL\_VIDEODRIVER=(null)  
[PCE fatal: nil: Failed to initialize SDL  
in:   
]  
  
Host stack:  
[96] pce\_principal:set\_pce\_thread([app\_name(swipl)])  
[94] ‘$run\_init\_goal’(pce:start\_dispatch)  
[93] catch(system:‘$run\_init\_goal’(pce:start\_dispatch), \_132890, system:‘$initialization\_error’(\_132890, pce:start\_dispatch, ‘/home/mike/swipl-devel/build/home/xpce/prolog/lib/pce.pl’:179))  
[92] catch\_with\_backtrace(system:‘$run\_init\_goal’(pce:start\_dispatch), \_132890, system:‘$initialization\_error’(\_132890, pce:start\_dispatch, ‘/home/mike/swipl-devel/build/home/xpce/prolog/lib/pce.pl’:179))  
[91] ‘$run\_init\_goal’(pce:start\_dispatch, ‘/home/mike/swipl-devel/build/home/xpce/prolog/lib/pce.pl’:179)  
[2576/2691] Generating HTML documentation for core system  
FAILED: man/manual.html /home/mike/swipl-devel/build/man/manual.html  
cd /home/mike/swipl-devel/build/man && rm -f Manual/_.html Manual/_.gif && /usr/bin/cmake -E env --unset=DISPLAY SDL\_VIDEODRIVER=dummy /home/mike/swipl-devel/build/src/swipl -f none --no-packs /home/mike/swipl-devel/build/home/library/ext/ltx2htm/latex2html.pl – --quiet --texinputs=lib:: SWI-Prolog-9.3.26 && /usr/bin/cmake -E remove /home/mike/swipl-devel/build/home/doc/manindex.db && /usr/bin/cmake -E touch manual.html  
ERROR: [Thread main] /home/mike/swipl-devel/build/home/library/ext/ltx2htm/latex2html.pl:3224: tex:main source\_sink `tex(main)’ does not exist  
[2585/2691] Generating tests/test\_certs/generated  
ninja: build stopped: subcommand failed.

---

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [July 24, 2025, 11:25am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/7 "2025-07-24T11:25:12Z")

</div>

Hmm. Weird. There is the `/usr/bin/cmake -E env --unset=DISPLAY SDL_VIDEODRIVER=dummy` but that doesn’t seem to get through. I noticed that before in some build environment.

The simple work-around is to do `export SDL_VIDEODRIVER=dummy` before running ninja. You don’t have to start again. Just set the variable and re-run ninja.

The the only question remaining is why … In what environment are you building?

---

<div class="post-metadata">

**Author:** ![mike.elston](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/mike.elston/32/3691_2.png) [@mike.elston](https://swi-prolog.discourse.group/u/mike.elston)\
**Post date:** [July 24, 2025, 11:36am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/8 "2025-07-24T11:36:02Z")

</div>

$ lsb\_release -a  
No LSB modules are available.  
Distributor ID: Ubuntu  
Description: Ubuntu 24.04.2 LTS  
Release: 24.04  
Codename: noble

---

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [July 24, 2025, 11:56am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/9 "2025-07-24T11:56:56Z")

</div>

> [@mike.elston](#):
>
> $ lsb\_release -a

Thanks. Did you build in the GUI environment, i.e., can you start X11/Wayland tools from the shell in which you were building?

A great thing about SDL is that there is the dummy driver that allows the library to function without a GUI, but apparently the setting doesn’t come through ☹

---

<div class="post-metadata">

**Author:** ![peter.ludemann](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/peter.ludemann/32/48_2.png) [@peter.ludemann](https://swi-prolog.discourse.group/u/peter.ludemann)\
**Post date:** [July 24, 2025, 9:39pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/10 "2025-07-24T21:39:48Z")

</div>

> [@jan](#):
>
> work-around is to do `export SDL_VIDEODRIVER=dummy` before running ninja

I did this and it built fine. I tried gtrace/0 and edit/0, and they worked as expected, except I had to change `~/.config/swi-prolog/xpce/Defaults`:

```prolog
font.scale: @display?dpi?width/200

```

(I was using width/150 before)

```txt
$ lsb_release -a && uname -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 12 (bookworm)
Release:	12
Codename:	bookworm
Linux penguin 6.6.76-08024-gb30cb4a129c2 #1 SMP PREEMPT_DYNAMIC Fri, 25 Apr 2025 05:08:33 -0700 x86_64 GNU/Linux

```

---

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [July 25, 2025, 7:03am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/11 "2025-07-25T07:03:39Z")

</div>

> [@peter.ludemann](#):
>
> worked as expected

Fine

> [@peter.ludemann](#):
>
> `font.scale: @display?dpi?width/200`

You can just use a constant. `@display?dpi` is bogus as SDL does not report that. It is fixed to 96. SDL uses logical pixels that should be treated as old style low-res displays. SDL, Cairo and Pango all deal with sub-pixel resolutions (each in their own way …) and parts of xpce now handle dimensions as floats.

---

<div class="post-metadata">

**Author:** ![peter.ludemann](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/peter.ludemann/32/48_2.png) [@peter.ludemann](https://swi-prolog.discourse.group/u/peter.ludemann)\
**Post date:** [July 25, 2025, 11:17pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/12 "2025-07-25T23:17:24Z")

</div>

> [@jan](#):
>
> `@display?dpi` is bogus as SDL does not report that. It is fixed to 96.

So, is this what I should have in `Defaults` file?:

```txt
display.dpi: 96
font.scale: 1.0

```

BTW, ctrl-C (from my terminal) with gtrace doesn’t behave the way I remember it … it seems to get stuck. And when closing the trace window, “Exit from Prolog” simply returns to the SWI-Prolog REPL.

---

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [July 26, 2025, 10:50am UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/13 "2025-07-26T10:50:21Z")

</div>

> [@peter.ludemann](#):
>
> So, is this what I should have in `Defaults` file?:
> 
> ```prolog
> display.dpi: 96
> font.scale: 1.0
> 
> ```

I would not say anything about DPI. Just use font.scale. The default is 1.0. Depending on your preferences and hardware it seems to end up between 0.8 and 1.2 or so to get what you want. If that is true for all of us, we are fine.

> [@peter.ludemann](#):
>
> BTW, ctrl-C (from my terminal) with gtrace doesn’t behave the way I remember it … it seems to get stuck.

Yes. That happens if you are waiting for the tracer gui. That is because the GUI now runs in the main thread as that seems to be required on most platforms SDL supports. But, if it is waiting for the tracer you can use ‘a’ to abort. If it is not waiting for the tracer (i.e., you do a _leap_ and no spy point gets hit), Ctrl-C works fine for me.

> [@peter.ludemann](#):
>
> And when closing the trace window, “Exit from Prolog” simply returns to the [SWI-Prolog](https://www.swi-prolog.org/pldoc/doc_for?object=manual) REPL.

That reproduces. Should be fixed.

---

<div class="post-metadata">

**Author:** ![joseph-vidal-rosset](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/joseph-vidal-rosset/32/2594_2.png) [@joseph-vidal-rosset](https://swi-prolog.discourse.group/u/joseph-vidal-rosset)\
**Post date:** [July 28, 2025, 1:37pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/14 "2025-07-28T13:37:32Z")

</div>

On Debian 12:

```prolog
root@mx:/usr/local/swipl-devel/build# ninja[1/923] Building C object packages/xpce/CMakeFiles/plugin_pl2xpce.dir/src/win/display.c.oFAILED: packages/xpce/CMakeFiles/plugin_pl2xpce.dir/src/win/display.c.o/usr/bin/cc -Dplugin_pl2xpce_EXPORTS -I/usr/local/swipl-devel/build/packages/xpce -I/usr/local/swipl-devel/packages/xpce/src -I/usr/include/freetype2 -I/usr/local/swipl-devel/src/os -I/usr/local/swipl-devel/src -O2 -gdwarf-2 -g3 -fPIC -fvisibility=hidden -Wall -DHAVE_CONFIG_H -DSWI -D __SWI_PROLOG__ -std=gnu11 -MD -MT packages/xpce/CMakeFiles/plugin_pl2xpce.dir/src/win/display.c.o -MF packages/xpce/CMakeFiles/plugin_pl2xpce.dir/src/win/display.c.o.d -o packages/xpce/CMakeFiles/plugin_pl2xpce.dir/src/win/display.c.o -c /usr/local/swipl-devel/packages/xpce/src/win/display.c/usr/local/swipl-devel/packages/xpce/src/win/display.c: In function ‘getDPIDisplay’:/usr/local/swipl-devel/packages/xpce/src/win/display.c:394:43: error: ‘NAME_dpi’ undeclared (first use in this function); did you mean ‘NAME_pie’?394 | Any rc = getClassVariableValueObject(d, NAME_dpi);| ^~~~~~~~| NAME_pie/usr/local/swipl-devel/packages/xpce/src/win/display.c:394:43: note: each undeclared identifier is reported only once for each function it appears inIn file included from /usr/local/swipl-devel/packages/xpce/src/win/display.c:36:/usr/local/swipl-devel/packages/xpce/src/win/display.c: At top level:/usr/local/swipl-devel/packages/xpce/src/win/display.c:1254:6: error: ‘NAME_dpi’ undeclared here (not in a function); did you mean ‘NAME_pie’?1254 | IV(NAME_dpi, “[size|int]”, IV_NONE,| ^~~~~~~~/usr/local/swipl-devel/packages/xpce/src/h/kernel.h:895:35: note: in definition of macro ‘IV’895 | #define IV(n, t, f, g, s) { n, t, f, NULL, (Name) g, s }| ^/usr/local/swipl-devel/packages/xpce/src/win/display.c:1272:6: error: ‘NAME_wmClass’ undeclared here (not in a function); did you mean ‘NAME_noClass’?1272 | IV(NAME_wmClass, “[name]”, IV_BOTH,| ^ ~~~~~~~~~~~ /usr/local/swipl-devel/packages/xpce/src/h/kernel.h:895:35: note: in definition of macro ‘IV’895 | #define IV(n, t, f, g, s) { n, t, f, NULL, (Name) g, s }| ^[6/923] Building C object packages/xpce/CMakeFiles/plugin_pl2xpce.dir/src/img/gifwrite.c.oninja: build stopped: subcommand failed.root@mx:/usr/local/swipl-devel/build#

```

---

<div class="post-metadata">

**Author:** ![jan](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/jan/32/4_2.png) [@jan](https://swi-prolog.discourse.group/u/jan)\
**Post date:** [July 28, 2025, 1:44pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/15 "2025-07-28T13:44:01Z")

</div>

You should be fine with a clean build. Incremental builds normally work, but the old system had no mechanism to deal with changes to xpce’s “name” database.

The most recent changes also lead to a upgrade issue wrt. building the .qlf files. That too should be fine using a clean build.

If there is something useful in the build directory, run

```prolog
../scripts/clean-build

```

Of not, `rm -r` does the job.

---

<div class="post-metadata">

**Author:** ![joseph-vidal-rosset](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/joseph-vidal-rosset/32/2594_2.png) [@joseph-vidal-rosset](https://swi-prolog.discourse.group/u/joseph-vidal-rosset)\
**Post date:** [July 28, 2025, 2:03pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/16 "2025-07-28T14:03:29Z")

</div>

```prolog
Thanks Jan. As usual, your advice is very useful: 100% tests passed, 0 tests failed out of 82

```

```prolog
Total Test time (real) = 19.85 secroot@mx:/usr/local/swipl-devel/build# ninja install[33/34] Install the project…– Install configuration: “PGO”– Set runtime path of “/root/lib/swipl/bin/x86_64-linux/swipl” to “/root/lib/swipl/lib/x86_64-linux”– Set runtime path of “/root/lib/swipl/lib/x86_64-linux/libswipl.so.9.3.26” to “/root/lib/swipl/lib/x86_64-linux”– Set runtime path of “/root/lib/swipl/bin/x86_64-linux/swipl-win” to “/root/lib/swipl/lib/x86_64-linux”– Set runtime path of “/root/lib/swipl/bin/x86_64-linux/swipl-ld” to “/root/lib/swipl/lib/x86_64-linux”root@mx:/usr/local/swipl-devel/build# exitexitjoseph@mx:/usr/local/swipl-devel$ cd ~/joseph@mx:~$ swipl --versionSWI-Prolog version 9.3.26 for x86_64-linux

```

---

<div class="post-metadata">

**Author:** ![alanbur](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/alanbur/32/7166_2.png) [@alanbur](https://swi-prolog.discourse.group/u/alanbur)\
**Post date:** [August 1, 2025, 9:37pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/17 "2025-08-01T21:37:56Z")

</div>

> [@jan](#):
>
> All now compiles completely clean on Debian Bookworm for me (started from a clean Docker image).

It doesn’t for me, Debian 12.11, commit ee7aa973f7ff44f95751582b5ed343cba536cd16. I followed the instructions at [Prerequisites for Debian based systems (Ubuntu, Mint, ...)](https://www.swi-prolog.org/build/Debian.html) and [Building XPCE for SDL3 and Cairo · SWI-Prolog/packages-xpce Wiki · GitHub](https://github.com/SWI-Prolog/packages-xpce/wiki/Building-XPCE-for-SDL3-and-Cairo#porting-to-linux-distros-without-sdl3) and I get the following. My guess is a library path issue, but I haven’t had time to track it down any further.

```prolog
OR: '<meta-call>'/1: Unknown procedure: pce:object/1
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/gui_tracer.pl:45:
ERROR: [Thread 1]: exception handler failed to define pce_principal:send/2
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/gui_tracer.pl:45:
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/boot/pce_global.pl:115: Initialization goal raised exception:
ERROR: pce_global:register_handler/0: Unknown procedure: pce_principal:send/2
ERROR: However, there are definitions for:
ERROR: pce_principal:send/3
ERROR: pce_principal:send/4
ERROR: pce_principal:send/5
ERROR: pce_principal:send/6
ERROR: pce_principal:send/7
ERROR: pce_principal:send/8
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/gui_tracer.pl:45:
ERROR: [Thread 1]: exception handler failed to define pce_principal:send/2
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/gui_tracer.pl:45:
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/boot/pce_autoload.pl:104: Initialization goal raised exception:
ERROR: pce_autoload:register_handler/0: Unknown procedure: pce_principal:send/2
ERROR: However, there are definitions for:
ERROR: pce_principal:send/3
ERROR: pce_principal:send/4
ERROR: pce_principal:send/5
ERROR: pce_principal:send/6
ERROR: pce_principal:send/7
ERROR: pce_principal:send/8
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/gui_tracer.pl:45:
ERROR: [Thread 1]: exception handler failed to define pce_principal:get/3
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/gui_tracer.pl:45:
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/boot/pce_editor.pl:137: Initialization goal raised exception:
ERROR: pce_principal:get/4: Unknown procedure: pce_principal:get/3
ERROR: However, there are definitions for:
ERROR: pce_principal:get/4
ERROR: pce_principal:get/5
ERROR: pce_principal:get/6
ERROR: pce_principal:get/7
ERROR: pce_principal:get/8
ERROR: det/1
ERROR: get/1
ERROR: get0/1
ERROR: get/2
ERROR: get0/2
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/gui_tracer.pl:45:
ERROR: [Thread 1]: exception handler failed to define pce_principal:get/3
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/gui_tracer.pl:45:
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/boot/pce_keybinding.pl:364: Initialization goal raised exception:
ERROR: pce_principal:get/4: Unknown procedure: pce_principal:get/3
ERROR: However, there are definitions for:
ERROR: pce_principal:get/4
ERROR: pce_principal:get/5
ERROR: pce_principal:get/6
ERROR: pce_principal:get/7
ERROR: pce_principal:get/8
ERROR: det/1
ERROR: get/1
ERROR: get0/1
ERROR: get/2
ERROR: get0/2
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/gui_tracer.pl:45:
ERROR: [Thread 1]: exception handler failed to define pce_principal:get/3
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/gui_tracer.pl:45:
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/boot/pce_keybinding.pl:396: Initialization goal raised exception:
ERROR: pce_principal:get/4: Unknown procedure: pce_principal:get/3
ERROR: However, there are definitions for:
ERROR: pce_principal:get/4
ERROR: pce_principal:get/5
ERROR: pce_principal:get/6
ERROR: pce_principal:get/7
ERROR: pce_principal:get/8
ERROR: det/1
ERROR: get/1
ERROR: get0/1
ERROR: get/2
ERROR: get0/2
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/gui_tracer.pl:45:
ERROR: [Thread 1]: exception handler failed to define pce_principal:get/3
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/gui_tracer.pl:45:
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/boot/pce_keybinding.pl:409: Initialization goal raised exception:
ERROR: pce_keybinding:make_key_binding_style_type/0: Unknown procedure: pce_principal:get/3
ERROR: However, there are definitions for:
ERROR: pce_principal:get/4
ERROR: pce_principal:get/5
ERROR: pce_principal:get/6
ERROR: pce_principal:get/7
ERROR: pce_principal:get/8
ERROR: det/1
ERROR: get/1
ERROR: get0/1
ERROR: get/2
ERROR: get0/2
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/gui_tracer.pl:45:
ERROR: [Thread 1]: exception handler failed to define pce_principal:send/2
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/gui_tracer.pl:45:
ERROR: /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/pce.pl:256: Initialization goal raised exception:
ERROR: pce:set_version/0: Unknown procedure: pce_principal:send/2
ERROR: However, there are definitions for:
ERROR: pce_principal:send/3
ERROR: pce_principal:send/4
ERROR: pce_principal:send/5
ERROR: pce_principal:send/6
ERROR: pce_principal:send/7
ERROR: pce_principal:send/8
ERROR: Unknown procedure: pce_principal:in_pce_thread_sync2/2
ERROR: In:
ERROR: [15] pce_principal:in_pce_thread_sync2((gui_tracer: ...)-[],[])
ERROR: [14] pce:in_pce_thread_sync(gui_tracer:load_files(...,...)) at /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/pce.pl:157
ERROR: [13] gui_tracer:guitracer at /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/gui_tracer.pl:80
ERROR: [12] gui_tracer:gspy(user:true) at /opt/swipl-9.3.26+/lib/swipl/xpce/prolog/lib/gui_tracer.pl:159
ERROR: [11] toplevel_call(user:user: ...) at /opt/swipl-9.3.26+/lib/swipl/boot/toplevel.pl:1540
   Exception: (15) pce_principal:in_pce_thread_sync2((gui_tracer:load_files([library('trace/trace')], [silent(true), if(not_loaded)]))-[], []) ? 

```

---

<div class="post-metadata">

**Author:** ![alanbur](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/alanbur/32/7166_2.png) [@alanbur](https://swi-prolog.discourse.group/u/alanbur)\
**Post date:** [August 1, 2025, 9:59pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/18 "2025-08-01T21:59:10Z")

</div>

Yeah:

```prolog
$ LD_LIBRARY_PATH=/usr/local/lib /opt/swipl-9.3.26+/bin/swipl
?- gspy(true).
true.

[debug] ?-
^D

$ LD_DEBUG=files /opt/swipl-9.3.26+/bin/swipl
...
?- gspy(true).
   1784603:	
   1784603:	file=/opt/swipl-9.3.26+/lib/swipl/lib/x86_64-linux/pl2xpce.so [0]; dynamically loaded by /opt/swipl-9.3.26+/lib/swipl/lib/x86_64-linux/libswipl.so.9 [0]
   1784603:	file=/opt/swipl-9.3.26+/lib/swipl/lib/x86_64-linux/pl2xpce.so [0]; generating link map
   1784603: dynamic: 0x00007f71f5a3ed20 base: 0x00007f71f5800000 size: 0x0000000000299e18
   1784603: entry: 0x00007f71f5800000 phdr: 0x00007f71f5800040 phnum: 9
   1784603:	
   1784603:	
   1784603:	file=libSDL3_image.so.0 [0]; needed by /opt/swipl-9.3.26+/lib/swipl/lib/x86_64-linux/pl2xpce.so [0]
...

$ ldd /opt/swipl-9.3.26+/lib/swipl/lib/x86_64-linux/pl2xpce.so | grep 'not found'
	libSDL3_image.so.0 => not found
	libSDL3.so.0 => not found
$ readelf -d /opt/swipl-9.3.26+/lib/swipl/lib/x86_64-linux/pl2xpce.so

Dynamic section at offset 0x23dd20 contains 31 entries:
  Tag Type Name/Value
 0x0000000000000001 (NEEDED) Shared library: [libSDL3_image.so.0]
 0x0000000000000001 (NEEDED) Shared library: [libSDL3.so.0]
...

# patchelf --add-rpath /usr/local/lib /opt/swipl-9.3.26+/lib/swipl/lib/x86_64-linux/pl2xpce.so

$ readelf -d /opt/swipl-9.3.26+/lib/swipl/lib/x86_64-linux/pl2xpce.so

Dynamic section at offset 0x10ba000 contains 32 entries:
  Tag Type Name/Value
 0x000000000000001d (RUNPATH) Library runpath: [/usr/local/lib]
 0x0000000000000001 (NEEDED) Shared library: [libSDL3_image.so.0]
 0x0000000000000001 (NEEDED) Shared library: [libSDL3.so.0]

$ ldd /opt/swipl-9.3.26+/lib/swipl/lib/x86_64-linux/pl2xpce.so
	linux-vdso.so.1 (0x00007fffa378c000)
	libSDL3_image.so.0 => /usr/local/lib/libSDL3_image.so.0 (0x00007f7098ff4000)
	libSDL3.so.0 => /usr/local/lib/libSDL3.so.0 (0x00007f7098800000)
...

$ /opt/swipl-9.3.26+/bin/swipl
?- gspy(true).
true.

[debug] ?- 

```

That’s a dirty hack - it needs fixing properly in whatever configures/builds pl2xpce.so.

---

<div class="post-metadata">

**Author:** ![alanbur](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/alanbur/32/7166_2.png) [@alanbur](https://swi-prolog.discourse.group/u/alanbur)\
**Post date:** [August 1, 2025, 10:22pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/19 "2025-08-01T22:22:50Z")

</div>

It’s “working” but only for a loose definition of working. Font size is huge and on a dual monitor setup if I run the debugger on the RHS screen and open a child window, its placement is almost entirely off the RHS side the screen. If I do the same on the LHS screen, the child window is split between the two monitors.

---

<div class="post-metadata">

**Author:** ![peter.ludemann](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/peter.ludemann/32/48_2.png) [@peter.ludemann](https://swi-prolog.discourse.group/u/peter.ludemann)\
**Post date:** [August 1, 2025, 10:44pm UTC](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120/20 "2025-08-01T22:44:39Z")

</div>

> [@alanbur](#):
>
> Font size is huge

You might try setting `font.scale: 1.0` in the `Defaults` file (see my discussion with Jan on July 24 for other parameters)

[Next page](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-26/9120.md?page=2)
