diff options
author | Liliana Marie Prikler <liliana.prikler@gmail.com> | 2024-06-29 08:53:54 +0200 |
---|---|---|
committer | Liliana Marie Prikler <liliana.prikler@gmail.com> | 2024-07-07 08:04:47 +0200 |
commit | 3ed077e92cebe4286eeecf372722690eb5c9a8aa (patch) | |
tree | e40b319d6d6c47c0f5e1c1e275e766dcb7bb403c /gnu/packages/patches/clasp-hide-event-ids.patch | |
parent | 8546ca946e617c32ef3bb60947e368f7d038090c (diff) |
gnu: clasp: Prevent ID clashes in dependent packages.
Clasp uses an interesting CRTP pattern to insert statically (i.e. compile-time)
generated numeric IDs into global fields. However, these templates are
instantiated once per shared library---thus, whenever a library is linked, new
IDs are generated, and the original intent (safely type-casting objects across
libraries) is lost. To help the linker out, we make sure that these IDs are
only instantiated in clasp and not when building other libraries.
* gnu/packages/patches/clasp-hide-event-ids.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it here.
* gnu/packages/clasp.scm (source)[patches]: Add it here.
(clingo)[#:phases]: Drop ‘skip-failing-tests’.
(python-clorm)[#:phases]<fix-breaking-tests>: Adjust accordingly.
(python-clintest): Drop arguments.
Diffstat (limited to 'gnu/packages/patches/clasp-hide-event-ids.patch')
-rw-r--r-- | gnu/packages/patches/clasp-hide-event-ids.patch | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/gnu/packages/patches/clasp-hide-event-ids.patch b/gnu/packages/patches/clasp-hide-event-ids.patch new file mode 100644 index 0000000000..9587f9ff3f --- /dev/null +++ b/gnu/packages/patches/clasp-hide-event-ids.patch @@ -0,0 +1,41 @@ +From a4c4e4f3c410834c3e56f644841f5bcbb084225c Mon Sep 17 00:00:00 2001 +From: Liliana Marie Prikler <liliana.prikler@ist.tugraz.at> +Date: Fri, 28 Jun 2024 11:15:16 +0200 +Subject: [PATCH] clasp: Hide Event_t<T>::id_s. + +This patch helps build clingo with non-local clasp while keeping the +event system working as intended. +--- + clasp/util/misc_types.h | 2 ++ + src/CMakeLists.txt | 2 +- + 2 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/clasp/util/misc_types.h b/clasp/util/misc_types.h +index 3677873..09c2075 100644 +--- a/clasp/util/misc_types.h ++++ b/clasp/util/misc_types.h +@@ -432,7 +432,9 @@ struct Event_t : Event { + Event_t(Subsystem sys, Verbosity verb) : Event(sys, id_s, verb) {} + static const uint32 id_s; + }; ++#if _BUILDING_CLASP_ + template <class T> const uint32 Event_t<T>::id_s = Event::nextId(); ++#endif + + template <class ToType, class EvType> const ToType* event_cast(const EvType& ev) { return ev.id == ToType::id_s ? static_cast<const ToType*>(&ev) : 0; } + +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 8439d12..4f55990 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -123,6 +123,7 @@ source_group("${ide_header}\\mt" FILES ${header_mt}) + endif() + + add_library(libclasp ${header} ${header_util} ${header_cli} ${header_mt} ${src}) ++target_compile_definitions(libclasp PRIVATE _BUILDING_CLASP_) + if (CLASP_BUILD_WITH_THREADS) + target_link_libraries(libclasp PUBLIC Threads::Threads) + target_compile_options(libclasp PRIVATE +-- +2.45.1 + |