From 53f41c40c0388a35d53a15aea874c9533c24ae65 Mon Sep 17 00:00:00 2001 From: Rafael Palomar Date: Sat, 13 Jan 2024 13:16:42 +0100 Subject: [PATCH 1/2] ENH: Refactor CMake project infrastructure - Removed old configuration and use CMake files in favor of`qRestAPIConfig.cmake.in` - Enable install configuration through implementation of qRestAPIInstallConfig.cmake.in - Enabled installation of development files. --- CMake/GenerateqRestAPIConfig.cmake | 20 ----- CMake/UseqRestAPI.cmake.in | 16 ---- CMake/qRestAPIConfig.cmake.in | 14 ---- CMakeLists.txt | 118 ++++++++++++++++++++++++++++- qRestAPIConfig.cmake.in | 5 ++ qRestAPIInstallConfig.cmake.in | 3 + 6 files changed, 124 insertions(+), 52 deletions(-) delete mode 100644 CMake/GenerateqRestAPIConfig.cmake delete mode 100644 CMake/UseqRestAPI.cmake.in delete mode 100644 CMake/qRestAPIConfig.cmake.in create mode 100644 qRestAPIConfig.cmake.in create mode 100644 qRestAPIInstallConfig.cmake.in diff --git a/CMake/GenerateqRestAPIConfig.cmake b/CMake/GenerateqRestAPIConfig.cmake deleted file mode 100644 index d82da7a..0000000 --- a/CMake/GenerateqRestAPIConfig.cmake +++ /dev/null @@ -1,20 +0,0 @@ - -configure_file( - ${qRestAPI_SOURCE_DIR}/CMake/UseqRestAPI.cmake.in - ${qRestAPI_BINARY_DIR}/UseqRestAPI.cmake COPYONLY) - -# Include directories -set(qRestAPI_INCLUDE_DIRS_CONFIG ${qRestAPI_INCLUDE_DIRS}) - -# Library directories -set(qRestAPI_LIBRARY_DIRS_CONFIG ${qRestAPI_BINARY_DIR}) - -# UseqRestAPI file -set(qRestAPI_USE_FILE_CONFIG ${qRestAPI_BINARY_DIR}/UseqRestAPI.cmake) - -export(TARGETS qRestAPI FILE ${qRestAPI_BINARY_DIR}/qRestAPIExports.cmake) - -# Configure qRestAPIConfig.cmake -configure_file( - ${qRestAPI_SOURCE_DIR}/CMake/qRestAPIConfig.cmake.in - ${qRestAPI_BINARY_DIR}/qRestAPIConfig.cmake @ONLY) diff --git a/CMake/UseqRestAPI.cmake.in b/CMake/UseqRestAPI.cmake.in deleted file mode 100644 index 4275caa..0000000 --- a/CMake/UseqRestAPI.cmake.in +++ /dev/null @@ -1,16 +0,0 @@ -# -# This module is provided as qCDashAPI_USE_FILE by qCDashAPIConfig.cmake. It can -# be INCLUDED in a project to load the needed compiler and linker -# settings to use qRestAPI. -# - -if(NOT qRestAPI_USE_FILE_INCLUDED) - set(qRestAPI_USE_FILE_INCLUDED 1) - - # Add include directories needed to use qRestAPI. - include_directories(${qRestAPI_INCLUDE_DIRS}) - - # Add link directories needed to use qRestAPI. - link_directories(${qRestAPI_LIBRARY_DIRS}) - -endif() diff --git a/CMake/qRestAPIConfig.cmake.in b/CMake/qRestAPIConfig.cmake.in deleted file mode 100644 index ee15dd2..0000000 --- a/CMake/qRestAPIConfig.cmake.in +++ /dev/null @@ -1,14 +0,0 @@ - -# Import qRestAPI targets -if(NOT qRestAPI_EXPORTS_INCLUDED) - include("@qRestAPI_BINARY_DIR@/qRestAPIExports.cmake") - set(qRestAPI_EXPORTS_INCLUDED 1) -endif() - -set(qRestAPI_LIBRARIES "qRestAPI") - -set(qRestAPI_INCLUDE_DIRS "@qRestAPI_INCLUDE_DIRS_CONFIG@") -set(qRestAPI_LIBRARY_DIRS "@qRestAPI_LIBRARY_DIRS_CONFIG@") - -# The location of the UseqRestAPI.cmake file. -set(qRestAPI_USE_FILE "@qRestAPI_USE_FILE_CONFIG@") diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c3e905..29fe52b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,13 +2,45 @@ cmake_minimum_required(VERSION 3.5.0) project(qRestAPI) +# -------------------------------------------------------------------------- +# CMake variables +# -------------------------------------------------------------------------- set(CMAKE_INCLUDE_CURRENT_DIR 1) set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE 1) set(CMAKE_POSITION_INDEPENDENT_CODE 1) +# -------------------------------------------------------------------------- +# Directories +# -------------------------------------------------------------------------- +# +# CMake +# +set(${PROJECT_NAME}_CMAKE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/CMake) +set(CMAKE_MODULE_PATH ${qRestAPI_CMAKE_DIR} ${CMAKE_MODULE_PATH}) +# +# Include +# +set(${PROJECT_NAME}_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} + CACHE INTERNAL "${PROJECT_NAME} include dirs" FORCE) +# +# Library +# +set(${PROJECT_NAME}_LIBRARY_DIRS ${CMAKE_CURRENT_BINARY_DIR} + CACHE INTERNAL "${PROJECT_NAME} library dirs" FORCE) + +# -------------------------------------------------------------------------- +# Options +# -------------------------------------------------------------------------- option(BUILD_SHARED_LIBS "Build shared library" ON) option(BUILD_TESTING "Test the project" ON) +# -------------------------------------------------------------------------- +# Dependencies +# -------------------------------------------------------------------------- + +# +# Qt +# set(qRestAPI_QT_VERSION "4" CACHE STRING "Expected Qt version") mark_as_advanced(qRestAPI_QT_VERSION) set_property(CACHE qRestAPI_QT_VERSION PROPERTY STRINGS 4 5 6) @@ -36,6 +68,9 @@ else() set(qRestAPI_STATIC ON) endif() +# -------------------------------------------------------------------------- +# Configure headers +# -------------------------------------------------------------------------- configure_file( qRestAPI_Export.h.in ${CMAKE_CURRENT_BINARY_DIR}/qRestAPI_Export.h @@ -53,6 +88,34 @@ set(KIT_SRCS qRestResult.h ) +# -------------------------------------------------------------------------- +# Install headers +# -------------------------------------------------------------------------- +if(NOT DEFINED ${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT) + set(${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT ON) +endif() + +if(NOT ${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT) + + if(NOT DEFINED ${PROJECT_NAME}_INSTALL_INCLUDE_DIR) + set(${PROJECT_NAME}_INSTALL_INCLUDE_DIR include/${PROJECT_NAME}) + endif() + + file(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h") + install( + FILES ${headers} + DESTINATION ${${PROJECT_NAME}_INSTALL_INCLUDE_DIR} COMPONENT Development) + + file(GLOB headers "${CMAKE_CURRENT_BINARY_DIR}/*.h") + install( + FILES ${headers} + DESTINATION ${${PROJECT_NAME}_INSTALL_INCLUDE_DIR} COMPONENT Development) +endif() + +# -------------------------------------------------------------------------- +# Sources +# -------------------------------------------------------------------------- + set(KIT_MOC_SRCS qGirderAPI.h qMidasAPI.h @@ -69,6 +132,9 @@ else() QT4_WRAP_CPP(KIT_MOC_OUTPUT ${KIT_MOC_SRCS}) endif() +# -------------------------------------------------------------------------- +# Build qRestAPI library +# -------------------------------------------------------------------------- add_library(${PROJECT_NAME} ${KIT_SRCS} ${KIT_MOC_OUTPUT}) if(qRestAPI_QT_VERSION VERSION_GREATER "4") target_link_libraries(${PROJECT_NAME} Qt${qRestAPI_QT_VERSION}::Gui Qt${qRestAPI_QT_VERSION}::Network Qt${qRestAPI_QT_VERSION}::Qml) @@ -76,9 +142,57 @@ else() target_link_libraries(${PROJECT_NAME} ${QT_LIBRARIES}) endif() -include(CTest) +# -------------------------------------------------------------------------- +# Install library +# -------------------------------------------------------------------------- +if(NOT DEFINED ${PROJECT_NAME}_INSTALL_BIN_DIR) + set(${PROJECT_NAME}_INSTALL_BIN_DIR bin) +endif() +if(NOT DEFINED ${PROJECT_NAME}_INSTALL_LIB_DIR) + set(${PROJECT_NAME}_INSTALL_LIB_DIR lib/${PROJECT_NAME}) +endif() + +install(TARGETS ${PROJECT_NAME} + RUNTIME DESTINATION ${${PROJECT_NAME}_INSTALL_BIN_DIR} COMPONENT RuntimeLibraries + LIBRARY DESTINATION ${${PROJECT_NAME}_INSTALL_LIB_DIR} COMPONENT RuntimeLibraries + ARCHIVE DESTINATION ${${PROJECT_NAME}_INSTALL_LIB_DIR} COMPONENT Development + ) + +# -------------------------------------------------------------------------- +# Configure support files +# -------------------------------------------------------------------------- +# Set qRestAPI_INSTALL_CMAKE_DIR +if(NOT DEFINED ${PROJECT_NAME}_INSTALL_CMAKE_DIR) + set(${PROJECT_NAME}_INSTALL_CMAKE_DIR cmake/${PROJECT_NAME}) +endif() + +export(TARGETS qRestAPI FILE ${qRestAPI_BINARY_DIR}/qRestAPIExports.cmake) + +# Configure qRestAPIConfig.cmake +configure_file( + ${qRestAPI_SOURCE_DIR}/qRestAPIConfig.cmake.in + ${qRestAPI_BINARY_DIR}/qRestAPIConfig.cmake @ONLY) + +# Configure qRestAPIConfig.cmake +configure_file( + ${qRestAPI_SOURCE_DIR}/qRestAPIInstallConfig.cmake.in + ${qRestAPI_BINARY_DIR}/install/qRestAPIConfig.cmake @ONLY) + +# -------------------------------------------------------------------------- +# Install configuration files +# -------------------------------------------------------------------------- + +# Install qRestAPIConfig cmake files +install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/install/qRestAPIConfig.cmake + DESTINATION ${${PROJECT_NAME}_INSTALL_CMAKE_DIR} COMPONENT Development + ) + +# -------------------------------------------------------------------------- +# Testing if(BUILD_TESTING) +include(CTest) add_subdirectory(Testing) endif() -include(CMake/GenerateqRestAPIConfig.cmake) diff --git a/qRestAPIConfig.cmake.in b/qRestAPIConfig.cmake.in new file mode 100644 index 0000000..627aca1 --- /dev/null +++ b/qRestAPIConfig.cmake.in @@ -0,0 +1,5 @@ +include("${CMAKE_CURRENT_BINARY_DIR}/qRestAPIExports.cmake") + +set(qRestAPI_CMAKE_DIR "@qRestAPI_CMAKE_DIR@") +set(qRestAPI_INCLUDE_DIRS "@qRestAPI_INCLUDE_DIRS@") +set(qRestAPI_LIBRARY_DIRS "@qRestAPI_LIBRARY_DIRS@") diff --git a/qRestAPIInstallConfig.cmake.in b/qRestAPIInstallConfig.cmake.in new file mode 100644 index 0000000..87be75d --- /dev/null +++ b/qRestAPIInstallConfig.cmake.in @@ -0,0 +1,3 @@ +set(qRestAPI_CMAKE_DIR "@CMAKE_INSTALL_PREFIX@/@qRestAPI_INSTALL_CMAKE_DIR@") +set(qRestAPI_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/@qRestAPI_INSTALL_INCLUDE_DIR@") +set(qRestAPI_LIB_DIR "@CMAKE_INSTALL_PREFIX@/@qRestAPI_INSTALL_LIB_DIR@") From cc96cad3dfcdf489dfeb642f2a0d703f38e4a96d Mon Sep 17 00:00:00 2001 From: Rafael Palomar Date: Mon, 13 Jul 2026 10:04:50 +0200 Subject: [PATCH 2/2] ENH: Adopt vtkAddon-level packaging (imported target, relocatable install) Export an imported qRestAPI target for both build and install trees via install(EXPORT), and generate the install-tree package config with configure_package_config_file() so the install is relocatable (no absolute CMAKE_INSTALL_PREFIX baked in). Declare include directories as PUBLIC usage requirements with BUILD_INTERFACE/INSTALL_INTERFACE and link Qt with explicit PUBLIC visibility. Legacy path variables (qRestAPI_INCLUDE_DIRS, qRestAPI_LIBRARY_DIRS, qRestAPI_LIBRARIES) are kept for backward compatibility. Config templates remain at the project root, matching the vtkAddon convention. --- CMakeLists.txt | 153 +++++++++++++++++++-------------- README.md | 26 ++++++ qRestAPIConfig.cmake.in | 16 +++- qRestAPIInstallConfig.cmake.in | 29 ++++++- 4 files changed, 156 insertions(+), 68 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 29fe52b..e3708d5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,6 @@ project(qRestAPI) # CMake variables # -------------------------------------------------------------------------- set(CMAKE_INCLUDE_CURRENT_DIR 1) -set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE 1) set(CMAKE_POSITION_INDEPENDENT_CODE 1) # -------------------------------------------------------------------------- @@ -20,7 +19,7 @@ set(CMAKE_MODULE_PATH ${qRestAPI_CMAKE_DIR} ${CMAKE_MODULE_PATH}) # # Include # -set(${PROJECT_NAME}_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} +set(${PROJECT_NAME}_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} CACHE INTERNAL "${PROJECT_NAME} include dirs" FORCE) # # Library @@ -34,6 +33,31 @@ set(${PROJECT_NAME}_LIBRARY_DIRS ${CMAKE_CURRENT_BINARY_DIR} option(BUILD_SHARED_LIBS "Build shared library" ON) option(BUILD_TESTING "Test the project" ON) +# -------------------------------------------------------------------------- +# Install directories +# -------------------------------------------------------------------------- +# These may be set by a parent project (e.g. a superbuild) before this project +# is added. When not set, sensible standalone defaults are used. +if(NOT DEFINED ${PROJECT_NAME}_INSTALL_BIN_DIR) + set(${PROJECT_NAME}_INSTALL_BIN_DIR bin) +endif() +if(NOT DEFINED ${PROJECT_NAME}_INSTALL_LIB_DIR) + set(${PROJECT_NAME}_INSTALL_LIB_DIR lib/${PROJECT_NAME}) +endif() +if(NOT DEFINED ${PROJECT_NAME}_INSTALL_INCLUDE_DIR) + set(${PROJECT_NAME}_INSTALL_INCLUDE_DIR include/${PROJECT_NAME}) +endif() +if(NOT DEFINED ${PROJECT_NAME}_INSTALL_CMAKE_DIR) + set(${PROJECT_NAME}_INSTALL_CMAKE_DIR cmake/${PROJECT_NAME}) +endif() + +# By default only runtime files are installed. Set to OFF to also install the +# development files (headers, CMake package config, exported targets), e.g. when +# creating a package or a standalone install tree. +if(NOT DEFINED ${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT) + set(${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT ON) +endif() + # -------------------------------------------------------------------------- # Dependencies # -------------------------------------------------------------------------- @@ -53,9 +77,13 @@ if(qRestAPI_QT_VERSION VERSION_GREATER "4") set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${QT${qRestAPI_QT_VERSION}_INSTALL_PREFIX}) endif() +# Qt components used through the public interface of the library. They are +# recorded here so the generated package config can re-resolve them through +# find_dependency() for downstream consumers. +set(qRestAPI_QT_COMPONENTS Gui Network Qml) + if(qRestAPI_QT_VERSION VERSION_GREATER "4") - set(qRestAPI_QT${qRestAPI_QT_VERSION}_COMPONENTS Core Gui Network Qml Test) - find_package(Qt${qRestAPI_QT_VERSION} COMPONENTS ${qRestAPI_QT${qRestAPI_QT_VERSION}_COMPONENTS} REQUIRED) + find_package(Qt${qRestAPI_QT_VERSION} COMPONENTS Core ${qRestAPI_QT_COMPONENTS} Test REQUIRED) else() # HACK: QtXml is required because of "http://www.richelbilderbeek.nl/CppLinkErrorUndefinedReferenceToQListData.htm" find_package(Qt4 4.6.2 COMPONENTS QtCore QtGui QtNetwork QtScript QtXml QtTest REQUIRED) @@ -88,34 +116,6 @@ set(KIT_SRCS qRestResult.h ) -# -------------------------------------------------------------------------- -# Install headers -# -------------------------------------------------------------------------- -if(NOT DEFINED ${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT) - set(${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT ON) -endif() - -if(NOT ${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT) - - if(NOT DEFINED ${PROJECT_NAME}_INSTALL_INCLUDE_DIR) - set(${PROJECT_NAME}_INSTALL_INCLUDE_DIR include/${PROJECT_NAME}) - endif() - - file(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h") - install( - FILES ${headers} - DESTINATION ${${PROJECT_NAME}_INSTALL_INCLUDE_DIR} COMPONENT Development) - - file(GLOB headers "${CMAKE_CURRENT_BINARY_DIR}/*.h") - install( - FILES ${headers} - DESTINATION ${${PROJECT_NAME}_INSTALL_INCLUDE_DIR} COMPONENT Development) -endif() - -# -------------------------------------------------------------------------- -# Sources -# -------------------------------------------------------------------------- - set(KIT_MOC_SRCS qGirderAPI.h qMidasAPI.h @@ -136,63 +136,88 @@ endif() # Build qRestAPI library # -------------------------------------------------------------------------- add_library(${PROJECT_NAME} ${KIT_SRCS} ${KIT_MOC_OUTPUT}) + +# Public usage requirements: consumers get the include directories through the +# imported target, resolved differently for the build tree and the install tree. +target_include_directories(${PROJECT_NAME} PUBLIC + $ + $ + $ + ) + if(qRestAPI_QT_VERSION VERSION_GREATER "4") - target_link_libraries(${PROJECT_NAME} Qt${qRestAPI_QT_VERSION}::Gui Qt${qRestAPI_QT_VERSION}::Network Qt${qRestAPI_QT_VERSION}::Qml) + target_link_libraries(${PROJECT_NAME} PUBLIC + Qt${qRestAPI_QT_VERSION}::Gui + Qt${qRestAPI_QT_VERSION}::Network + Qt${qRestAPI_QT_VERSION}::Qml) else() - target_link_libraries(${PROJECT_NAME} ${QT_LIBRARIES}) + target_link_libraries(${PROJECT_NAME} PUBLIC ${QT_LIBRARIES}) endif() # -------------------------------------------------------------------------- -# Install library +# Export targets for a build tree # -------------------------------------------------------------------------- -if(NOT DEFINED ${PROJECT_NAME}_INSTALL_BIN_DIR) - set(${PROJECT_NAME}_INSTALL_BIN_DIR bin) -endif() -if(NOT DEFINED ${PROJECT_NAME}_INSTALL_LIB_DIR) - set(${PROJECT_NAME}_INSTALL_LIB_DIR lib/${PROJECT_NAME}) -endif() +export(TARGETS ${PROJECT_NAME} + FILE ${qRestAPI_BINARY_DIR}/qRestAPITargets.cmake) +# -------------------------------------------------------------------------- +# Install library +# -------------------------------------------------------------------------- install(TARGETS ${PROJECT_NAME} + EXPORT qRestAPITargets RUNTIME DESTINATION ${${PROJECT_NAME}_INSTALL_BIN_DIR} COMPONENT RuntimeLibraries LIBRARY DESTINATION ${${PROJECT_NAME}_INSTALL_LIB_DIR} COMPONENT RuntimeLibraries ARCHIVE DESTINATION ${${PROJECT_NAME}_INSTALL_LIB_DIR} COMPONENT Development ) # -------------------------------------------------------------------------- -# Configure support files +# Configure package config file for the build tree # -------------------------------------------------------------------------- -# Set qRestAPI_INSTALL_CMAKE_DIR -if(NOT DEFINED ${PROJECT_NAME}_INSTALL_CMAKE_DIR) - set(${PROJECT_NAME}_INSTALL_CMAKE_DIR cmake/${PROJECT_NAME}) -endif() - -export(TARGETS qRestAPI FILE ${qRestAPI_BINARY_DIR}/qRestAPIExports.cmake) - -# Configure qRestAPIConfig.cmake configure_file( ${qRestAPI_SOURCE_DIR}/qRestAPIConfig.cmake.in ${qRestAPI_BINARY_DIR}/qRestAPIConfig.cmake @ONLY) -# Configure qRestAPIConfig.cmake -configure_file( - ${qRestAPI_SOURCE_DIR}/qRestAPIInstallConfig.cmake.in - ${qRestAPI_BINARY_DIR}/install/qRestAPIConfig.cmake @ONLY) - # -------------------------------------------------------------------------- -# Install configuration files +# Install development files # -------------------------------------------------------------------------- +if(NOT ${PROJECT_NAME}_INSTALL_NO_DEVELOPMENT) -# Install qRestAPIConfig cmake files -install( - FILES - ${CMAKE_CURRENT_BINARY_DIR}/install/qRestAPIConfig.cmake - DESTINATION ${${PROJECT_NAME}_INSTALL_CMAKE_DIR} COMPONENT Development - ) + # Headers + file(GLOB headers "${CMAKE_CURRENT_SOURCE_DIR}/*.h") + install( + FILES ${headers} + DESTINATION ${${PROJECT_NAME}_INSTALL_INCLUDE_DIR} COMPONENT Development) + + file(GLOB headers "${CMAKE_CURRENT_BINARY_DIR}/*.h") + install( + FILES ${headers} + DESTINATION ${${PROJECT_NAME}_INSTALL_INCLUDE_DIR} COMPONENT Development) + + # Relocatable package config file for the install tree + include(CMakePackageConfigHelpers) + configure_package_config_file( + ${qRestAPI_SOURCE_DIR}/qRestAPIInstallConfig.cmake.in + ${qRestAPI_BINARY_DIR}/install/qRestAPIConfig.cmake + INSTALL_DESTINATION ${${PROJECT_NAME}_INSTALL_CMAKE_DIR} + PATH_VARS ${PROJECT_NAME}_INSTALL_INCLUDE_DIR ${PROJECT_NAME}_INSTALL_LIB_DIR + ) + + install( + FILES ${qRestAPI_BINARY_DIR}/install/qRestAPIConfig.cmake + DESTINATION ${${PROJECT_NAME}_INSTALL_CMAKE_DIR} COMPONENT Development) + + # Exported targets for the install tree + install( + EXPORT qRestAPITargets + FILE qRestAPITargets.cmake + DESTINATION ${${PROJECT_NAME}_INSTALL_CMAKE_DIR} COMPONENT Development) + +endif() # -------------------------------------------------------------------------- # Testing +# -------------------------------------------------------------------------- if(BUILD_TESTING) -include(CTest) + include(CTest) add_subdirectory(Testing) endif() - diff --git a/README.md b/README.md index d1ec6a1..0db1192 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,32 @@ It provides the following interfaces: cmake -DQT6_INSTALL_PREFIX:PATH=/path/to/QtX.Y.Z/X.Y.Z/gcc_64 ../qRestAPI make -j4 +## Installing / packaging + +By default only the runtime library is installed. To also install the +development files (headers, exported CMake targets and the package config +file) — e.g. when building a package or a standalone install tree — set +`qRestAPI_INSTALL_NO_DEVELOPMENT` to `OFF`: + + cmake -DqRestAPI_INSTALL_NO_DEVELOPMENT=OFF -DCMAKE_INSTALL_PREFIX=/path/to/prefix ../qRestAPI + make install + +The install tree is relocatable. Downstream projects consume it with: + + find_package(qRestAPI REQUIRED) + target_link_libraries(MyTarget PRIVATE qRestAPI) + +The following variables let a parent project (typically a superbuild) override +the install layout; each defaults to a standalone-friendly value when unset: + +| Variable | Default | +|-----------------------------------|----------------------| +| `qRestAPI_INSTALL_NO_DEVELOPMENT` | `ON` | +| `qRestAPI_INSTALL_BIN_DIR` | `bin` | +| `qRestAPI_INSTALL_LIB_DIR` | `lib/qRestAPI` | +| `qRestAPI_INSTALL_INCLUDE_DIR` | `include/qRestAPI` | +| `qRestAPI_INSTALL_CMAKE_DIR` | `cmake/qRestAPI` | + ## Testing To run tests checking that queries can successfully be executed. diff --git a/qRestAPIConfig.cmake.in b/qRestAPIConfig.cmake.in index 627aca1..8692698 100644 --- a/qRestAPIConfig.cmake.in +++ b/qRestAPIConfig.cmake.in @@ -1,5 +1,19 @@ -include("${CMAKE_CURRENT_BINARY_DIR}/qRestAPIExports.cmake") +# qRestAPI package configuration file for use from a build tree. + +include("@CMAKE_CURRENT_BINARY_DIR@/qRestAPITargets.cmake") + +# Re-resolve the Qt dependency so the imported target is usable downstream. +include(CMakeFindDependencyMacro) +if("@qRestAPI_QT_VERSION@" VERSION_GREATER "4") + find_dependency(Qt@qRestAPI_QT_VERSION@ COMPONENTS @qRestAPI_QT_COMPONENTS@) +else() + find_dependency(Qt4 COMPONENTS QtGui QtNetwork) +endif() set(qRestAPI_CMAKE_DIR "@qRestAPI_CMAKE_DIR@") + +# Legacy variables (kept for backward compatibility; prefer the imported +# qRestAPI target). +set(qRestAPI_LIBRARIES qRestAPI) set(qRestAPI_INCLUDE_DIRS "@qRestAPI_INCLUDE_DIRS@") set(qRestAPI_LIBRARY_DIRS "@qRestAPI_LIBRARY_DIRS@") diff --git a/qRestAPIInstallConfig.cmake.in b/qRestAPIInstallConfig.cmake.in index 87be75d..d77fa4d 100644 --- a/qRestAPIInstallConfig.cmake.in +++ b/qRestAPIInstallConfig.cmake.in @@ -1,3 +1,26 @@ -set(qRestAPI_CMAKE_DIR "@CMAKE_INSTALL_PREFIX@/@qRestAPI_INSTALL_CMAKE_DIR@") -set(qRestAPI_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/@qRestAPI_INSTALL_INCLUDE_DIR@") -set(qRestAPI_LIB_DIR "@CMAKE_INSTALL_PREFIX@/@qRestAPI_INSTALL_LIB_DIR@") +# qRestAPI package configuration file for use from an install tree. +# +# Generated with configure_package_config_file(): PACKAGE_PREFIX_DIR is computed +# at load time from the location of this file, so the install tree is +# relocatable (no absolute paths are baked in). +@PACKAGE_INIT@ + +include("${CMAKE_CURRENT_LIST_DIR}/qRestAPITargets.cmake") + +# Re-resolve the Qt dependency so the imported target is usable downstream. +include(CMakeFindDependencyMacro) +if("@qRestAPI_QT_VERSION@" VERSION_GREATER "4") + find_dependency(Qt@qRestAPI_QT_VERSION@ COMPONENTS @qRestAPI_QT_COMPONENTS@) +else() + find_dependency(Qt4 COMPONENTS QtGui QtNetwork) +endif() + +set(qRestAPI_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}") + +# Legacy variables (kept for backward compatibility; prefer the imported +# qRestAPI target). +set(qRestAPI_LIBRARIES qRestAPI) +set_and_check(qRestAPI_INCLUDE_DIRS "@PACKAGE_qRestAPI_INSTALL_INCLUDE_DIR@") +set_and_check(qRestAPI_LIBRARY_DIRS "@PACKAGE_qRestAPI_INSTALL_LIB_DIR@") + +check_required_components(qRestAPI)