# Upgrade from 9.2.9 to 10.0.2 missing "system resources"

**URL:** <https://swi-prolog.discourse.group/t/upgrade-from-9-2-9-to-10-0-2-missing-system-resources/9583>\
**Category:** Installing\
**Created:** [April 28, 2026, 3:29am UTC](https://swi-prolog.discourse.group/t/upgrade-from-9-2-9-to-10-0-2-missing-system-resources/9583 "2026-04-28T03:29:28Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![DewayneG](https://avatars.discourse-cdn.com/v4/letter/d/838e76/32.png) [@DewayneG](https://swi-prolog.discourse.group/u/DewayneG)\
**Post date:** [April 28, 2026, 3:29am UTC](https://swi-prolog.discourse.group/t/upgrade-from-9-2-9-to-10-0-2-missing-system-resources/9583/1 "2026-04-28T03:29:28Z")

</div>

I’m struggling to upgrade swipl 9.2.9 to 10.0.2 on FreeBSD 14.3. After a successful build and installation of the package, when I try to run swipl via CLI only (without GUI or X, which is how I normally use swipl).

```prolog
# swipl

FATAL: could not find SWI-Prolog home
Tried source: environment $SWI_HOME_DIR or $SWIPL
Found /usr/local/lib/swipl/bin/amd64-freebsd/swipl: no such directory
Tried source: using “swipl.home” from “/usr/local/lib/swipl/bin/amd64-freebsd/swipl”
Found /usr/local/lib/swipl: no ABI file
Tried source: compiled in
Found /usr/local/lib/swipl: no ABI file

```

I’ve reduced swipl as much as possible but still obtain the original FATAL messages. I have:  
`CMAKE_ARGS= -DSWIPL_PACKAGES_PYTHON=OFF -DSWIPL_PACKAGES_GUI=OFF -DSWIPL_PACKAGES_TIPC=OFF`  
`-DSWIPL_PACKAGES_JAVA=OFF -DSWIPL_PACKAGES_X=OFF `  
`-DUSE_GMP=OFF -DMULTI_THREADED=ON -DSWIPL_PACKAGES_ODBC=OFF `  
`-DCURSES_NEED_NCURSES=OFF -DCURSES_NEED_WIDE=OFF`  
`CMAKE_ARGS+=	-DINSTALL_DOCUMENTATION=OFF -DBUILD_TESTING=OFF`

After reviewing

- the build installation notes for Debian, Redhat, Arch and “other systems”
- the manual for installation guideance.
- it seems that the ABI file was introduced for 9.3.15 per [Ann: SWI-Prolog 9.3.16](https://swi-prolog.discourse.group/t/ann-swi-prolog-9-3-16/8645)

Fortunately the search mechanism on discourse provided [Updated search for Prolog installation](https://swi-prolog.discourse.group/t/updated-search-for-prolog-installation/8635) I suspect that this is required?

`swipl --abi-version > /usr/local/lib/swipl/bin/amd64-freebsd/ABI`

Yay! But now, after 5 hours trying to upgrade, I have no idea where to start with this FATAL ERROR;

```prolog
# swipl

[FATAL ERROR: at Tue Apr 28 12:54:42 2026
Could not find system resources at /usr/local/lib/swipl/bin/amd64-freebsd]
Abort trap

```

I need help…? What is the system resources that a CLI-only swipl requires?

---

<div class="post-metadata">

**Author:** ![DewayneG](https://avatars.discourse-cdn.com/v4/letter/d/838e76/32.png) [@DewayneG](https://swi-prolog.discourse.group/u/DewayneG)\
**Post date:** [April 28, 2026, 5:52am UTC](https://swi-prolog.discourse.group/t/upgrade-from-9-2-9-to-10-0-2-missing-system-resources/9583/2 "2026-04-28T05:52:04Z")

</div>

Please disregard my earlier PR, as the solution was to:

`swipl --abi-version > /usr/local/lib/swipl/ABI`

The hints were in

`Tried source: environment $SWI_HOME_DIR or $SWIPL`  
`Found /usr/local/lib/swipl: no ABI file`  
`Tried source: using “swipl.home” from “/usr/local/lib/swipl/bin/amd64-freebsd/swipl”`  
`Found /usr/local/lib/swipl: no ABI file`  
`Tried source: compiled in`  
`Found /usr/local/lib/swipl: no ABI file`

Once the ABI file is created in the correct location, swipl starts correctly without needing to set any environment variables. So for those that come across a similar problem, at least for the FreeBSD package the necessary files are boot.prc and the new ABI file in /usr/local/lib/swipl.

I needed to refer to an earlier version of swipl to find what it thinks is the home, via

```prolog
/usr/local/lib/swipl/bin/amd64-freebsd/swipl --home

/usr/local/lib/swipl

```

🙂

Of course, I’ll share this key step with the FreeBSD swipl maintainer @diamondbox.dk

---

<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:** [April 28, 2026, 7:46am UTC](https://swi-prolog.discourse.group/t/upgrade-from-9-2-9-to-10-0-2-missing-system-resources/9583/3 "2026-04-28T07:46:26Z")

</div>

Finding the home has not changed AFAIK, except there is a verbose mode 🙂 . Also, whether some dir is the home used to be simply checking for `boot.prc`, but now we check the ABI file to see whether the Prolog system and the home are compatible. This saves a lot of trouble we used to have where a new `swipl` found an old home, after which pretty much anything between completely functioning and an immediate hard crash could follow. Notably the “almost works” could be nasty to diagnose ☹

---

<div class="post-metadata">

**Author:** ![DewayneG](https://avatars.discourse-cdn.com/v4/letter/d/838e76/32.png) [@DewayneG](https://swi-prolog.discourse.group/u/DewayneG)\
**Post date:** [April 29, 2026, 12:08am UTC](https://swi-prolog.discourse.group/t/upgrade-from-9-2-9-to-10-0-2-missing-system-resources/9583/4 "2026-04-29T00:08:36Z")

</div>

Thanks Jan. Yes, you’re right the _home_ didn’t change. I didn’t fully understand the message as I was sidetracked changing the environment files SWI\_HOME\_DIR and SWIPL. The only step that mattered was creating the ABI file, could be worth mentioning in the [building page](https://www.swi-prolog.org/build/) 🙂 . I was also pleased to find that the ABI number only relied upon swipl information and not any operating system attributes (other than arch), as well.

---

<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:** [April 29, 2026, 2:08pm UTC](https://swi-prolog.discourse.group/t/upgrade-from-9-2-9-to-10-0-2-missing-system-resources/9583/5 "2026-04-29T14:08:35Z")

</div>

> [@DewayneG](#):
>
> The only step that mattered was creating the ABI file, could be worth mentioning in the [building page](https://www.swi-prolog.org/build/) 🙂

But, that is simply created as part of the standard `ninja install` step, no? I guess you needed to supply a list of files for the package manager and missed to add this one?

---

<div class="post-metadata">

**Author:** ![DewayneG](https://avatars.discourse-cdn.com/v4/letter/d/838e76/32.png) [@DewayneG](https://swi-prolog.discourse.group/u/DewayneG)\
**Post date:** [May 2, 2026, 7:15am UTC](https://swi-prolog.discourse.group/t/upgrade-from-9-2-9-to-10-0-2-missing-system-resources/9583/6 "2026-05-02T07:15:06Z")

</div>

Thank-you Jan. Yes, I can confirm that the ABI is created during the build process. Because I’m preceding the FreeBSD package, I didn’t find anything about this file in the usual build instructions. I’ll be sure to pass on my notes. I appreciate your patience 🙂

PS For any FreeBSD folk that find this note, its in both

```prolog
/usr/ports/lang/swipl/work/.build/home/ABI

/usr/ports/lang/swipl/work/stage/usr/local/lib/swipl/ABI

```

and post install it must reside in

`/usr/local/lib/swipl/ABI`

---

<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:** [October 29, 2026, 5:59am UTC](https://swi-prolog.discourse.group/t/upgrade-from-9-2-9-to-10-0-2-missing-system-resources/9583/7 "2026-10-29T05:59:59Z")

</div>

I have swipl version `10.1.19-29-g9ce9f0f98-DIRTY` installed in `~/.local` and it works fine.

With the latest source (commit `fde0211d39fd37b8b96406e82e20d3ca2b023f23`), the executable in `build.gcc/src/swipl` fails with this output:

```prolog
$ set | grep SWI
SWIPL_INSTALL_PREFIX=/home/peter/.local
$ ~/src/swipl-devel/build.gcc/src/swipl
FATAL: could not find SWI-Prolog home
  Tried source: environment $SWI_HOME_DIR or $SWIPL
  Tried source: using "swipl.home" from "/home/peter/src/swipl-devel/build.gcc/src/swipl"
    Found /home/peter/src/swipl-devel/build.gcc/home: no ABI file
  Tried source: compiled in
    Found /home/peter/.local/lib/swipl: ABI mismatch

```

I noticed that `build.gcc/src/swipl.home` now contains `../home` whereas in the installation (`~/.local/bin/swipl` which is a symbolic link to `../lib/swipl/bin/x86_64-linux/swipl`), that file contains `.`.

Anyway, there’s no `ABI` file; all I could find were these, which are executables:

```prolog
/home/peter/src/swipl-devel/build.gcc/CMakeFiles/3.25.1/CMakeDetermineCompilerABI_C.bin
/home/peter/src/swipl-devel/build.gcc/CMakeFiles/3.25.1/CMakeDetermineCompilerABI_CXX.bin

```

and the generated `.so` files are:

```prolog
$ ls -l /home/peter/src/swipl-devel/build.gcc/src/libswipl*
lrwxrwxrwx 1 peter peter 14 Oct 28 22:41 /home/peter/src/swipl-devel/build.gcc/src/libswipl.so -> libswipl.so.10
lrwxrwxrwx 1 peter peter 19 Oct 28 22:41 /home/peter/src/swipl-devel/build.gcc/src/libswipl.so.10 -> libswipl.so.10.1.19
-rwxr-xr-x 1 peter peter 17092184 Oct 28 22:41 /home/peter/src/swipl-devel/build.gcc/src/libswipl.so.10.1.19

```

In my local installation `/home/peter/.local/lib/swipl/ABI` contains `swipl-abi-2-68-de7f1d84-e5ee110c`.

---

<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:** [October 29, 2026, 8:30am UTC](https://swi-prolog.discourse.group/t/upgrade-from-9-2-9-to-10-0-2-missing-system-resources/9583/8 "2026-10-29T08:30:55Z")

</div>

> [@peter.ludemann](#):
>
> Anyway, there’s no `ABI` file

That should mean something in the build went wrong. The ABI file must be created during the build. Was the build directory clean? No warnings? The `swipl.home` is correct. The different values are because the layout of files differs between running in the build directory and outside. `swipl.home` should never be a symlink. When installing, `swipl`, `swipl-ld` and `swipl-win` are symlinks from your `bin` directory to the executables in the installed tree.

---

<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:** [October 29, 2026, 4:39pm UTC](https://swi-prolog.discourse.group/t/upgrade-from-9-2-9-to-10-0-2-missing-system-resources/9583/9 "2026-10-29T16:39:47Z")

</div>

> [@jan](#):
>
> That should mean something in the build went wrong.

I think I’ve figured out the problem … this is for the bootstrap of the `protobufs` compiler (a plugin to `protoc`), for which I need the `swipl` executable … at the point where `ninja` is doing `protobufs` compiler bootstrap, the `ABI` file doesn’t exist. So, I need a way of specifying that I need both the `swipl` executable and the `ABI` file. My `cmake` skills are rudimentary, so any suggetions?

(I’m not 100% sure of this analysis, because I still get the error when I run `ninja -j`.)

(The bootstrap for the `protobufs` compiler was done by hand; I’m trying to automate it so that other people can maintain the package.)

---

<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:** [October 29, 2026, 4:44pm UTC](https://swi-prolog.discourse.group/t/upgrade-from-9-2-9-to-10-0-2-missing-system-resources/9583/10 "2026-10-29T16:44:44Z")

</div>

> [@peter.ludemann](#):
>
> My `cmake` skills are rudimentary, so any suggetions?

Add `DEPENDS core prolog_home`. That implies the core system is build and the home directory in the build environment is populated. Grep for DEPENDS in the CMake file should give plenty of examples.

---

<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:** [October 29, 2026, 5:47pm UTC](https://swi-prolog.discourse.group/t/upgrade-from-9-2-9-to-10-0-2-missing-system-resources/9583/11 "2026-10-29T17:47:44Z")

</div>

> [@jan](#):
>
> Add `DEPENDS core prolog_home`.

That fixed the problem – the `../home/ABI` file now exists. Thank-you!

However, there seems to be a minor bug that can be fixed by adding `:-use_module(library(apply), [maplist/3])` to `library/prolog_config.pl`.

```prolog
$ ~/src/swipl-devel/build.gcc/src/swipl --dump_runtime_variables
PLBASE="/home/peter/src/swipl-devel/build.gcc/home";
ERROR: [Thread main] prolog_config:prolog_config/2: Unknown procedure: prolog_config:maplist/3

```

---

<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:** [October 29, 2026, 6:46pm UTC](https://swi-prolog.discourse.group/t/upgrade-from-9-2-9-to-10-0-2-missing-system-resources/9583/12 "2026-10-29T18:46:48Z")

</div>

> [@peter.ludemann](#):
>
> However, there seems to be a minor bug that can be fixed by adding `:-use_module(library(apply), [`[`maplist/3`](https://www.swi-prolog.org/pldoc/doc_for?object=maplist/3 "True if Goal is successfully applied on all matching elements of the list.")`])` to `library/prolog_config.pl`.

Yes. You should make sure the things you want to run during the build does not depend on autoloading. The autoload index is built as one of the last steps (because everything needs to be around).
