From 7c255710ce66884ddc23952b40752d20f0ddb298 Mon Sep 17 00:00:00 2001 From: Till Hofmann Date: Tue, 21 Sep 2021 09:33:33 +0200 Subject: [PATCH 1/7] cmake: set and use PROJECT_VERSION --- CMakeLists.txt | 16 ++++++---------- cmake/golog++.pc.in | 2 +- cmake/parsegolog++.pc.in | 2 +- cmake/readylog++.pc.in | 2 +- 4 files changed, 9 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5eca7334..ed4f5ff4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,8 +15,8 @@ # along with golog++. If not, see . ########################################################################### -project(golog++) cmake_minimum_required(VERSION 3.0) +project(golog++ VERSION 0.1.0) include(CMakeDependentOption) include(GNUInstallDirs) @@ -68,10 +68,6 @@ endif(NOT CMAKE_BUILD_TYPE) set(SEMANTICS_INSTALL_DIR ${CMAKE_INSTALL_DATAROOTDIR}/golog++/semantics) -set(GOLOGPP_VERSION 0.1.0) - - - ###################################################################################### # The golog++ language metamodel: libgolog++.so ###################################################################################### @@ -125,7 +121,7 @@ set(INTERFACE_SRC add_library(golog++ SHARED ${INTERFACE_SRC}) target_compile_options(golog++ PUBLIC -fPIC) target_link_libraries (golog++ ${CMAKE_THREAD_LIBS_INIT}) -set_property(TARGET golog++ PROPERTY SOVERSION ${GOLOGPP_VERSION}) +set_property(TARGET golog++ PROPERTY SOVERSION ${PROJECT_VERSION}) target_compile_features(golog++ PUBLIC cxx_std_17) install(TARGETS golog++ DESTINATION ${CMAKE_INSTALL_LIBDIR}) @@ -236,7 +232,7 @@ if (${BUILD_PARSER}) ) add_library(parsegolog++ SHARED ${PARSER_SRC}) target_link_libraries(parsegolog++ golog++) - set_property(TARGET parsegolog++ PROPERTY SOVERSION ${GOLOGPP_VERSION}) + set_property(TARGET parsegolog++ PROPERTY SOVERSION ${PROJECT_VERSION}) target_compile_options(parsegolog++ PRIVATE -Wno-undefined-func-template -O${OPTIMIZE_PARSER}) if (${DEBUG_PARSER}) target_compile_definitions(parsegolog++ PRIVATE -DBOOST_SPIRIT_DEBUG -DGOLOGPP_DEBUG_PARSER) @@ -327,7 +323,7 @@ if (${BUILD_READYLOG_SEMANTICS}) ) target_include_directories(readylog++ PUBLIC ${ECLIPSE_INCLUDE_DIRS}) target_link_libraries(readylog++ golog++ ${ECLIPSE_LIBRARIES} stdc++fs) - set_property(TARGET readylog++ PROPERTY SOVERSION ${GOLOGPP_VERSION}) + set_property(TARGET readylog++ PROPERTY SOVERSION ${PROJECT_VERSION}) install(TARGETS readylog++ DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(FILES src/semantics/readylog/semantics.h @@ -413,7 +409,7 @@ if (BUILD_TAPTENC_SEMANTICS) add_library(taptenc-golog++ SHARED ${TAPTENC_SRC} ${TAPTENC_SEMANTICS_SRC}) target_include_directories(taptenc-golog++ PUBLIC ${TAPTENC_INCLUDE_PATHS}) - set_property(TARGET taptenc-golog++ PROPERTY SOVERSION ${GOLOGPP_VERSION}) + set_property(TARGET taptenc-golog++ PROPERTY SOVERSION ${PROJECT_VERSION}) target_include_directories(taptenc-golog++ PUBLIC external) target_compile_options(taptenc-golog++ PRIVATE -std=c++17) set(TEST_LIBS ${TEST_LIBS} taptenc-golog++) @@ -427,7 +423,7 @@ if (BUILD_TAPTENC_SEMANTICS) target_link_libraries(golog++ taptenc-golog++) - set_property(TARGET taptenc-golog++ PROPERTY SOVERSION ${GOLOGPP_VERSION}) + set_property(TARGET taptenc-golog++ PROPERTY SOVERSION ${PROJECT_VERSION}) install(TARGETS taptenc-golog++ DESTINATION ${CMAKE_INSTALL_LIBDIR}) else(BUILD_TAPTENC_SEMANTICS) diff --git a/cmake/golog++.pc.in b/cmake/golog++.pc.in index eb915bf4..0c8aa09b 100644 --- a/cmake/golog++.pc.in +++ b/cmake/golog++.pc.in @@ -3,6 +3,6 @@ includedir=@CMAKE_INSTALL_PREFIX@/@CMAKE_INSTALL_INCLUDEDIR@ Name: golog++ Description: The golog++ object model library -Version: @GOLOGPP_VERSION@ +Version: @PROJECT_VERSION@ Cflags: -I${includedir}/golog++ -I${includedir} @GOLOGPP_CXXFLAGS@ Libs: -L${libdir} -lgolog++ diff --git a/cmake/parsegolog++.pc.in b/cmake/parsegolog++.pc.in index 15a076dd..9c69470a 100644 --- a/cmake/parsegolog++.pc.in +++ b/cmake/parsegolog++.pc.in @@ -1,6 +1,6 @@ Name: parsegolog++ Description: The golog++ parser library -Version: @GOLOGPP_VERSION@ +Version: @PROJECT_VERSION@ Requires: golog++ Cflags: -I@Boost_INCLUDE_DIR@ @PARSEGOLOGPP_CXXFLAGS@ Libs: -lparsegolog++ diff --git a/cmake/readylog++.pc.in b/cmake/readylog++.pc.in index 2efbe1f0..39acd33d 100644 --- a/cmake/readylog++.pc.in +++ b/cmake/readylog++.pc.in @@ -1,6 +1,6 @@ Name: readylog++ Description: The ReadyLog semantics library for golog++ -Version: @GOLOGPP_VERSION@ +Version: @PROJECT_VERSION@ Requires: golog++ Cflags: @READYLOGPP_CXXFLAGS@ Libs: -lreadylog++ @READYLOGPP_LDFLAGS@ From d7dbab27cd3836e4760af4b105468431bf8414ea Mon Sep 17 00:00:00 2001 From: Till Hofmann Date: Tue, 21 Sep 2021 09:38:31 +0200 Subject: [PATCH 2/7] cmake: export cmake targets and config to allow find_package(golog++) Make golog++ discoverably with cmake by installing the respective config files and exporting all targets. --- CMakeLists.txt | 23 ++++++++++++++++++----- cmake/golog++-config.cmake | 8 ++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 cmake/golog++-config.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index ed4f5ff4..e1bb7e8f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -123,7 +123,7 @@ target_compile_options(golog++ PUBLIC -fPIC) target_link_libraries (golog++ ${CMAKE_THREAD_LIBS_INIT}) set_property(TARGET golog++ PROPERTY SOVERSION ${PROJECT_VERSION}) target_compile_features(golog++ PUBLIC cxx_std_17) -install(TARGETS golog++ DESTINATION ${CMAKE_INSTALL_LIBDIR}) +install(TARGETS golog++ EXPORT golog++-targets DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(FILES src/model/model_element.h @@ -237,7 +237,7 @@ if (${BUILD_PARSER}) if (${DEBUG_PARSER}) target_compile_definitions(parsegolog++ PRIVATE -DBOOST_SPIRIT_DEBUG -DGOLOGPP_DEBUG_PARSER) endif() - install(TARGETS parsegolog++ DESTINATION ${CMAKE_INSTALL_LIBDIR}) + install(TARGETS parsegolog++ EXPORT golog++-targets DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(FILES src/parser/grammar.h src/parser/parser.h @@ -324,7 +324,7 @@ if (${BUILD_READYLOG_SEMANTICS}) target_include_directories(readylog++ PUBLIC ${ECLIPSE_INCLUDE_DIRS}) target_link_libraries(readylog++ golog++ ${ECLIPSE_LIBRARIES} stdc++fs) set_property(TARGET readylog++ PROPERTY SOVERSION ${PROJECT_VERSION}) - install(TARGETS readylog++ DESTINATION ${CMAKE_INSTALL_LIBDIR}) + install(TARGETS readylog++ EXPORT golog++-targets DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(FILES src/semantics/readylog/semantics.h src/semantics/readylog/formula.h @@ -424,7 +424,7 @@ if (BUILD_TAPTENC_SEMANTICS) target_link_libraries(golog++ taptenc-golog++) set_property(TARGET taptenc-golog++ PROPERTY SOVERSION ${PROJECT_VERSION}) - install(TARGETS taptenc-golog++ DESTINATION ${CMAKE_INSTALL_LIBDIR}) + install(TARGETS taptenc-golog++ EXPORT golog++-targets DESTINATION ${CMAKE_INSTALL_LIBDIR}) else(BUILD_TAPTENC_SEMANTICS) target_compile_definitions(golog++ PRIVATE USE_DUMMY_PLATFORM) @@ -469,7 +469,20 @@ if (BUILD_PARSER AND BUILD_READYLOG_SEMANTICS) endforeach() endif() - install(TARGETS gologpp-test DESTINATION ${CMAKE_INSTALL_BINDIR}) + install(TARGETS gologpp-test EXPORT golog++-targets DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/golog++-config-version.cmake + VERSION ${PROJECT_VERSION} + COMPATIBILITY SameMajorVersion) +install(EXPORT golog++-targets + FILE golog++-targets.cmake + NAMESPACE golog++:: + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/golog++) + +install(FILES cmake/golog++-config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/golog++-config-version.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/golog++) diff --git a/cmake/golog++-config.cmake b/cmake/golog++-config.cmake new file mode 100644 index 00000000..36c325b0 --- /dev/null +++ b/cmake/golog++-config.cmake @@ -0,0 +1,8 @@ +include(CMakeFindDependencyMacro) +find_dependency(PkgConfig) +find_dependency(Boost REQUIRED COMPONENTS filesystem program_options) +find_dependency(EclipseClp) +find_dependency(Threads) +pkg_check_modules(SWIPL "swipl" QUIET) +include("${CMAKE_CURRENT_LIST_DIR}/golog++-targets.cmake") + From cb2d95ca166dbd72e2336cfb82b006b3e113a996 Mon Sep 17 00:00:00 2001 From: Till Hofmann Date: Sun, 19 Sep 2021 11:06:22 +0200 Subject: [PATCH 3/7] doc: add doxygen cmake target to build doxygen docs --- CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index e1bb7e8f..5e34af45 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -486,3 +486,9 @@ install(EXPORT golog++-targets install(FILES cmake/golog++-config.cmake ${CMAKE_CURRENT_BINARY_DIR}/golog++-config-version.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/golog++) + +find_package(Doxygen REQUIRED dot) +if (Doxygen_FOUND) + set(DOXYGEN_OUTPUT_DIRECTORY api) + doxygen_add_docs(doc src README.md) +endif() From 042b80f9ed7384e14691df5f07432aea1b6964dd Mon Sep 17 00:00:00 2001 From: Till Hofmann Date: Tue, 21 Sep 2021 09:53:21 +0200 Subject: [PATCH 4/7] cmake: only build doc if BUILD_DOC is set to true --- CMakeLists.txt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5e34af45..bd983291 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,7 @@ pkg_check_modules(SWIPL "swipl") option(BUILD_TAPTENC_SEMANTICS "Build the taptenc platform model semantics" OFF) option(USE_LIBASAN "Enable the AddressSanitizer to detect memory management bugs" OFF) option(BUILD_PARSER "Build the parser library" ON) +option(BUILD_DOC "Build doxygen documentation" OFF) CMAKE_DEPENDENT_OPTION(DEBUG_PARSER "Enable debug output for the parser" OFF "BUILD_PARSER" OFF) if (${ECLIPSE_FOUND}) option(BUILD_READYLOG_SEMANTICS "Build the readylog semantics (ECLiPSe Prolog)" ON) @@ -487,8 +488,10 @@ install(FILES cmake/golog++-config.cmake ${CMAKE_CURRENT_BINARY_DIR}/golog++-config-version.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/golog++) -find_package(Doxygen REQUIRED dot) -if (Doxygen_FOUND) - set(DOXYGEN_OUTPUT_DIRECTORY api) - doxygen_add_docs(doc src README.md) +if (BUILD_DOC) + find_package(Doxygen REQUIRED dot) + if (Doxygen_FOUND) + set(DOXYGEN_OUTPUT_DIRECTORY api) + doxygen_add_docs(doc src README.md) + endif() endif() From 4888510e7baddfd5e2bf4c28df0ab5a29ea21fe2 Mon Sep 17 00:00:00 2001 From: Till Hofmann Date: Tue, 21 Sep 2021 14:03:57 +0200 Subject: [PATCH 5/7] cmake: set include directories for install interface --- CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index bd983291..d1dd0a3f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -124,6 +124,7 @@ target_compile_options(golog++ PUBLIC -fPIC) target_link_libraries (golog++ ${CMAKE_THREAD_LIBS_INIT}) set_property(TARGET golog++ PROPERTY SOVERSION ${PROJECT_VERSION}) target_compile_features(golog++ PUBLIC cxx_std_17) +target_include_directories(golog++ PUBLIC $) install(TARGETS golog++ EXPORT golog++-targets DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(FILES @@ -238,6 +239,7 @@ if (${BUILD_PARSER}) if (${DEBUG_PARSER}) target_compile_definitions(parsegolog++ PRIVATE -DBOOST_SPIRIT_DEBUG -DGOLOGPP_DEBUG_PARSER) endif() + target_include_directories(parsegolog++ PUBLIC $) install(TARGETS parsegolog++ EXPORT golog++-targets DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(FILES src/parser/grammar.h @@ -323,6 +325,7 @@ if (${BUILD_READYLOG_SEMANTICS}) -DSEMANTICS_INSTALL_DIR=\"${CMAKE_INSTALL_PREFIX}/${SEMANTICS_INSTALL_DIR}\" ) target_include_directories(readylog++ PUBLIC ${ECLIPSE_INCLUDE_DIRS}) + target_include_directories(readylog++ PUBLIC $) target_link_libraries(readylog++ golog++ ${ECLIPSE_LIBRARIES} stdc++fs) set_property(TARGET readylog++ PROPERTY SOVERSION ${PROJECT_VERSION}) install(TARGETS readylog++ EXPORT golog++-targets DESTINATION ${CMAKE_INSTALL_LIBDIR}) @@ -410,6 +413,7 @@ if (BUILD_TAPTENC_SEMANTICS) add_library(taptenc-golog++ SHARED ${TAPTENC_SRC} ${TAPTENC_SEMANTICS_SRC}) target_include_directories(taptenc-golog++ PUBLIC ${TAPTENC_INCLUDE_PATHS}) + target_include_directories(taptenc-golog++ PUBLIC $) set_property(TARGET taptenc-golog++ PROPERTY SOVERSION ${PROJECT_VERSION}) target_include_directories(taptenc-golog++ PUBLIC external) target_compile_options(taptenc-golog++ PRIVATE -std=c++17) From 0c9b8c9fa59666db4603fbf70805e7299b35ca68 Mon Sep 17 00:00:00 2001 From: Till Hofmann Date: Tue, 21 Sep 2021 14:15:39 +0200 Subject: [PATCH 6/7] cmake: add include dir for build interface --- CMakeLists.txt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d1dd0a3f..a2e330a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -124,7 +124,9 @@ target_compile_options(golog++ PUBLIC -fPIC) target_link_libraries (golog++ ${CMAKE_THREAD_LIBS_INIT}) set_property(TARGET golog++ PROPERTY SOVERSION ${PROJECT_VERSION}) target_compile_features(golog++ PUBLIC cxx_std_17) -target_include_directories(golog++ PUBLIC $) +target_include_directories(golog++ PUBLIC + $ + $) install(TARGETS golog++ EXPORT golog++-targets DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(FILES @@ -239,7 +241,9 @@ if (${BUILD_PARSER}) if (${DEBUG_PARSER}) target_compile_definitions(parsegolog++ PRIVATE -DBOOST_SPIRIT_DEBUG -DGOLOGPP_DEBUG_PARSER) endif() - target_include_directories(parsegolog++ PUBLIC $) + target_include_directories(parsegolog++ PUBLIC + $ + $) install(TARGETS parsegolog++ EXPORT golog++-targets DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(FILES src/parser/grammar.h @@ -325,7 +329,9 @@ if (${BUILD_READYLOG_SEMANTICS}) -DSEMANTICS_INSTALL_DIR=\"${CMAKE_INSTALL_PREFIX}/${SEMANTICS_INSTALL_DIR}\" ) target_include_directories(readylog++ PUBLIC ${ECLIPSE_INCLUDE_DIRS}) - target_include_directories(readylog++ PUBLIC $) + target_include_directories(readylog++ PUBLIC + $ + $) target_link_libraries(readylog++ golog++ ${ECLIPSE_LIBRARIES} stdc++fs) set_property(TARGET readylog++ PROPERTY SOVERSION ${PROJECT_VERSION}) install(TARGETS readylog++ EXPORT golog++-targets DESTINATION ${CMAKE_INSTALL_LIBDIR}) @@ -413,7 +419,9 @@ if (BUILD_TAPTENC_SEMANTICS) add_library(taptenc-golog++ SHARED ${TAPTENC_SRC} ${TAPTENC_SEMANTICS_SRC}) target_include_directories(taptenc-golog++ PUBLIC ${TAPTENC_INCLUDE_PATHS}) - target_include_directories(taptenc-golog++ PUBLIC $) + target_include_directories(taptenc-golog++ PUBLIC + $ + $) set_property(TARGET taptenc-golog++ PROPERTY SOVERSION ${PROJECT_VERSION}) target_include_directories(taptenc-golog++ PUBLIC external) target_compile_options(taptenc-golog++ PRIVATE -std=c++17) From 50d30431c3ab9e74bf5775fb093c88b4762639cb Mon Sep 17 00:00:00 2001 From: Till Hofmann Date: Tue, 21 Sep 2021 09:44:51 +0200 Subject: [PATCH 7/7] cmake: require at least cmake 3.1 Needed for doxygen macros. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a2e330a5..9932e3f5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ # along with golog++. If not, see . ########################################################################### -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.1) project(golog++ VERSION 0.1.0) include(CMakeDependentOption)