| Did you know ... | Search Documentation: |
| Pack keynub_licdongle -- CMakeLists.txt |
# # `swipl pack install` runs configure, build, install and ctest here and # passes -DSWIPL=<the swipl that installs the pack>. Built on its own, the # swipl on the PATH is used: # # cmake -S . -B build && cmake --build build && cmake --install build # # The install step puts the module into lib/<arch>/, where the pack loads it # from. The module does not link against the KeyNub library. cmake_minimum_required(VERSION 3.10) project(keynub_licdongle4pl C)
if(NOT SWIPL)
find_program(SWIPL NAMES swipl)
endif()
if(NOT SWIPL)
message(FATAL_ERROR "swipl was not found; pass -DSWIPL=<path to swipl>")
endif()
endif()
foreach(name PLBASE PLARCH PLSOEXT PLLIBDIR)
if(swipl_variables MATCHES "(^|\n)${name}=\"([^\"]*)\"")
set(${name} "${CMAKE_MATCH_2}")
else()
message(FATAL_ERROR "${SWIPL} does not report ${name}")
endif()
endforeach()
message(STATUS "SWI-Prolog ${PLBASE} (${PLARCH})")
add_library(keynub_licdongle4pl MODULE c/keynub_licdongle4pl.c) target_include_directories(keynub_licdongle4pl PRIVATE "${PLBASE}/include") set_target_properties(keynub_licdongle4pl PROPERTIES PREFIX "" SUFFIX ".${PLSOEXT}" C_STANDARD 99 C_VISIBILITY_PRESET hidden)
if(WIN32)
# Windows resolves the SWI-Prolog API at link time, against libswipl.
if(MSVC)
find_file(swipl_import_library libswipl.lib PATHS "${PLLIBDIR}" "${PLBASE}/lib" NO_DEFAULT_PATH)
else()
find_file(swipl_import_library NAMES libswipl.dll.a libswipl.lib
PATHS "${PLLIBDIR}" "${PLBASE}/lib" NO_DEFAULT_PATH)
endif()
if(NOT swipl_import_library)
message(FATAL_ERROR "no libswipl import library under ${PLLIBDIR}")
endif()
target_link_libraries(keynub_licdongle4pl PRIVATE "${swipl_import_library}")
elseif(APPLE)
# macOS resolves the SWI-Prolog API from the process that loads the module.
set_target_properties(keynub_licdongle4pl PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
else()
target_link_libraries(keynub_licdongle4pl PRIVATE ${CMAKE_DL_LIBS})
endif()
install(TARGETS keynub_licdongle4pl LIBRARY DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/lib/${PLARCH}")
enable_testing()
add_test(NAME unit
COMMAND "${SWIPL}" -p "foreign=$TARGET_FILE_DIR:keynub_licdongle4pl"
"${CMAKE_CURRENT_SOURCE_DIR}/test/unit_test.pl"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")