Dear SWI-Prolog user,
SWI-Prolog 8.5.2 is ready for download. Most of the changes concern
portability, testing and stability. Highlights:
Handle C-stack overflows as normal Prolog exceptions for read/1,
write/1 and assert/1 (and friends). Only works on POSIX systems
that provide the sigaltstack() API.
Several reports on test failures by @peter.ludemann. Resulted in
a fix for a possible crash in shutdown.
Serious rewrite for installing community packs that involve
foreign components. Now provides support for conan for
dependencies and much enhanced support for CMake for building.
May cause some (pack install) regression. Please report.
Clean build on
gcc-11(stop some innocent warnings). Unfortunately
gcc-11 seems to produce noticeable slower code (~5%) than 10 and 9.
Make SWI-cpp.h compile without warnings on
Corinna Vinschen updated the Cygwin port.
@eric.zinda, I’m afraid I missed the latest MQI patches. They are now
in the git version. Sorry.
Enjoy --- Jan
STYLE: list_void_declarations/0, part of checks after make/0 to list
predicates defined as discontuguous/1 while they have no clauses.
This is, according to ISO, not a bug as such predicates are considered
to be defined.
FIXED: Be more relaxed about existence of the current predicate
when pushing and popping the compilation context.
ENHANCED: Report failed build steps because no tools was willing to
do the job. Pass
-DCMAKE_BUILD_TYPE=Type, which may be set from
the options to pack_install/2.
ENHANCED: Get version info into the Prolog flag. Now uses CMake rather
than a shell script and provides a new Prolog flag
FIXED: pack_install/1 install step for make based packages.
FIXED: Rebuilding GNU-style packages failed due to catching wrong
FIXED: pack_rebuild/1 for CMake configurations.
ADDED: A file
<home>/cmake/swipl.cmakethat provides generics to
use CMake for building SWI-Prolog packs.
DOC: Updated CMake build instructions.
ADDED: pack_install/1: reorganized the code building foreign resources.
This code is now in a new library(build/tools) and uses a plugin
architecture that deals with Conan, CMake and GNU tools (autoconf
etc.). The changes are intended to be fully compatible with the
old system. The build system now supports more tools and provides
mechanisms for structured extensions.
DOC: meta_predicate/1: updated mode declarations.
EHNACED: pack_rebuild/1,2 for CMake based packages to use
cmake --installfor the build and install steps rather
ninja, etc. directly. Suggested by Wouter Beek.
MAINTENANCE: Possible segv in retract/1 when compiled using O_DEBUG.
FIXED: Possible race conditions between the various ways a thread
can be joined.
FIXED: Do not start a new thread to join garbage collected threads
while shutting down the system.
MAINTENANCE: On a system error we only go into interactive mode if
both stdin and stderr are connected to a terminal. Otherwise we
print the message, C and Prolog stack and abort.
MAINTENANCE: Use of guarded C-stack using sigaltstack() doesn’t go
with ASAN. Results in the error below. Disabled guarding the C
stack when compiling using address sanitizer. ``` ==101190==ERROR:
AddressSanitizer failed to deallocate 0x2000 (8192) bytes at
address 0x6250000b1900 ==101190==AddressSanitizer CHECK failed:
“((“unable to unmap” && 0)) != (0)” (0x0, 0x0)
FIXED: CMake packs must use environment variables.
ninjabuilds when using CMake
FIXED: pack_install/1,2: If we use CMake for configuration, we should
also build in the CMake directory.
TEST: Signalled thread may already be dead.
ADDED: pack_install/1,2: provide pack_install(.) to add the local
directory to the pack registry and build it. Also add option
rebuild(When)to provide more fine control over the build.
FIXED: pack_install/1,2: do not remove contents if the package
registered as a symbolic link.
FIXED: memberchk/2 for partial lists where the unbound part is
constrained. Reported on Discourse by Abramo Bagnara.
BUILD: Avoid GCC-11 warning
ENHANCED: Protect assertz/1 and friends (compiler) against C-stack
ENHANCED: Use setjmp() instead of sigsetjmp() to reduce the overhead
of the C-stack guarding.
MAINTENANCE: Updated C calltree analysis for CMake build and new
coding style and conventions.
FIXED: Fallback to find a place for packages to install executables.
FIXED: Hash consistency on pointer sided integers for 64-bit bigendian
machines. Only affects consistency of term_hash/2 over platforms.
FIXED: Checking that an uncaught exception is caught in an outer
environment, i.e., nested C<->Prolog callback.
FIXED: Make C-stack guarding work in threads.
ENHANCED: Use C-stack guarding for read/1 and friends.
FIXED: format/2,3: Term printing using ~[kpqw] did not propagate
ENHANCED: Handle C-stack overflows gracefully on POSIX targets with
CLEANUP: SWI-cpp.h: more consistent type handling and silence several
COMPATIBILITY: SWI-cpp.h to use
to avoid warnings on modern C++ compilers.
- TEST: Simplified shutdown management for the http:proxy tests.
- BUILD: Silence GCC-11 warning (ugly)
TEST: Handle all failures from test_server_options_and_shutdown as
warnings unless “SWIPL_TEST_FAIL_ON_UNLIKELY=y” This test has lots
of threading and potential race conditions so it can fail when the
system is heavily loaded.
Handle by catching all exceptions and only actually failing if
SWIPL_TEST_FAIL_ON_UNLIKELY - y
DOC: Update URLs from EricZinda/swiplserver to packages-mqi
ADDED: All files needed to actually build the Python ‘swiplserver’
model and post to pypi.org so that ‘pip install swiplserver’
works Includes instructions on how to the build the model in
- CMAKE: Requires minimally cmake 3.9
- FIXED: Issue #15 (long directory name) Shorten directory
protoc_gen_prolog_pb to gen_pb for R build (R build outputs a warning
if a the path is more than 100 bytes)
TEST: Prevent occasional early termination in test(primes).
TEST: Make sure the Redis test group consumers are properly discarded.
- BUILD: Trick GCC-11 we are not really freeing a non-heap address.
- BUILD: Silence (incorrect) GCC-11 uninitialized warning.
PORT: remove Cygwin from targets requiring dllexport Cygwin ld uses
auto-export by default. Mixing that with dllexport in some cases
leaves other symbols unexported.
Signed-off-by: Corinna Vinschen firstname.lastname@example.org
BUILD: Avoid GCC-11 warning.