From ec1f73124f89e1267afd1600666268f752e0f10b Mon Sep 17 00:00:00 2001 From: Rafael Palomar Date: Wed, 21 Dec 2022 11:14:58 +0100 Subject: [PATCH 1/3] ENH: Update cmake requirements --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 88a8d3f..bb05d12 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.5.0) +cmake_minimum_required(VERSION 3.16.3...3.19.7 FATAL_ERROR) project(qRestAPI) From 905fd3ff0e795865f77efca76fb8e810ace99393 Mon Sep 17 00:00:00 2001 From: Rafael Palomar Date: Wed, 21 Dec 2022 11:29:18 +0100 Subject: [PATCH 2/3] ENH: Remove the use of Qt4 --- CMakeLists.txt | 35 ++++++----------------------------- Testing/CMakeLists.txt | 11 ++--------- 2 files changed, 8 insertions(+), 38 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bb05d12..713c6fc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,26 +9,11 @@ set(CMAKE_POSITION_INDEPENDENT_CODE 1) option(BUILD_SHARED_LIBS "Build shared library" ON) option(BUILD_TESTING "Test the project" ON) -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) -if(NOT (qRestAPI_QT_VERSION VERSION_EQUAL "4" OR qRestAPI_QT_VERSION VERSION_EQUAL "5")) - message(FATAL_ERROR "Expected value for qRestAPI_QT_VERSION is either '4' or '5'") -endif() - -if(qRestAPI_QT_VERSION VERSION_GREATER "4") - set(QT5_INSTALL_PREFIX "" CACHE PATH "The install location of Qt5") - set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${QT5_INSTALL_PREFIX}) -endif() +set(QT5_INSTALL_PREFIX "" CACHE PATH "The install location of Qt5") +set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${QT5_INSTALL_PREFIX}) -if(qRestAPI_QT_VERSION VERSION_GREATER "4") - set(qRestAPI_QT5_COMPONENTS Core Gui Network Script Test) - find_package(Qt5 COMPONENTS ${qRestAPI_QT5_COMPONENTS} 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) - include(${QT_USE_FILE}) -endif() +set(qRestAPI_QT5_COMPONENTS Core Gui Network Script Test) +find_package(Qt5 COMPONENTS ${qRestAPI_QT5_COMPONENTS} REQUIRED) if(BUILD_SHARED_LIBS) set(qRestAPI_STATIC OFF) @@ -61,18 +46,10 @@ set(KIT_MOC_SRCS qRestResult.h ) -if(qRestAPI_QT_VERSION VERSION_GREATER "4") - qt5_wrap_cpp(KIT_MOC_OUTPUT ${KIT_MOC_SRCS}) -else() - QT4_WRAP_CPP(KIT_MOC_OUTPUT ${KIT_MOC_SRCS}) -endif() +qt5_wrap_cpp(KIT_MOC_OUTPUT ${KIT_MOC_SRCS}) add_library(${PROJECT_NAME} ${KIT_SRCS} ${KIT_MOC_OUTPUT}) -if(qRestAPI_QT_VERSION VERSION_GREATER "4") - target_link_libraries(${PROJECT_NAME} Qt5::Gui Qt5::Network Qt5::Script) -else() - target_link_libraries(${PROJECT_NAME} ${QT_LIBRARIES}) -endif() +target_link_libraries(${PROJECT_NAME} Qt5::Gui Qt5::Network Qt5::Script) include(CTest) if(BUILD_TESTING) diff --git a/Testing/CMakeLists.txt b/Testing/CMakeLists.txt index 7bd3213..30f0f81 100644 --- a/Testing/CMakeLists.txt +++ b/Testing/CMakeLists.txt @@ -16,21 +16,14 @@ foreach(file IN LISTS KIT_TEST_GENERATE_MOC_SRCS) get_filename_component(abs_file ${file} ABSOLUTE) get_filename_component(source_name ${file} NAME_WE) set(moc_file ${CMAKE_CURRENT_BINARY_DIR}/moc_${source_name}.cpp) - if(qRestAPI_QT_VERSION VERSION_GREATER "4") - QT5_GENERATE_MOC(${abs_file} ${moc_file}) - else() - QT4_GENERATE_MOC(${abs_file} ${moc_file}) - endif() + QT5_GENERATE_MOC(${abs_file} ${moc_file}) macro_add_file_dependencies(${abs_file} ${moc_file}) endforeach() add_definitions(-D_CRT_SECURE_NO_DEPRECATE) add_executable(qRestAPITests ${KIT_TESTDRIVER_SRCS}) -target_link_libraries(qRestAPITests qRestAPI) -if(qRestAPI_QT_VERSION VERSION_GREATER "4") - target_link_libraries(qRestAPITests Qt5::Test) -endif() +target_link_libraries(qRestAPITests qRestAPI Qt5::Test) macro(SIMPLE_TEST TESTNAME) add_test(NAME ${TESTNAME} COMMAND qRestAPITests ${TESTNAME}) From 8ca27867d250432e39fc539f74c00e346e06ca2f Mon Sep 17 00:00:00 2001 From: Rafael Palomar Date: Wed, 21 Dec 2022 13:41:42 +0100 Subject: [PATCH 3/3] ENH: Refactor CMake project definition This does a refactoring of the cmake project definition taking inspiration on the vtkAddon cmake project layout. The following changes have been introduced: - Remove the use UseqRestAPI.cmake.in and derivatives. Now everything is set in the `qRestAPIConfig.cmake.in` and derivatives - Integrate the generation of configuration files (earlier in `CMake/GenerateqRestAPIConfig.cmake`) into the main `CMakeLists.txt`. - Add generation of install-tree config template file `qRestAPIInstallConfig.cmake.in` - Add installation of cmake files, header files and libraries. --- CMake/GenerateqRestAPIConfig.cmake | 20 ----- CMake/UseqRestAPI.cmake.in | 16 ---- CMake/qRestAPIConfig.cmake.in | 14 ---- CMakeLists.txt | 121 +++++++++++++++++++++++++++-- qRestAPIConfig.cmake.in | 5 ++ qRestAPIInstallConfig.cmake.in | 3 + 6 files changed, 124 insertions(+), 55 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 713c6fc..2ba9158 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,26 +6,85 @@ set(CMAKE_INCLUDE_CURRENT_DIR 1) set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE 1) set(CMAKE_POSITION_INDEPENDENT_CODE 1) -option(BUILD_SHARED_LIBS "Build shared library" ON) -option(BUILD_TESTING "Test the project" ON) +# -------------------------------------------------------------------------- +# Set 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) +# -------------------------------------------------------------------------- +# Dependencies +# -------------------------------------------------------------------------- + +# +# Qt5 +# set(QT5_INSTALL_PREFIX "" CACHE PATH "The install location of Qt5") set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${QT5_INSTALL_PREFIX}) set(qRestAPI_QT5_COMPONENTS Core Gui Network Script Test) find_package(Qt5 COMPONENTS ${qRestAPI_QT5_COMPONENTS} REQUIRED) +# -------------------------------------------------------------------------- +# Options +# -------------------------------------------------------------------------- +option(BUILD_SHARED_LIBS "Build shared library" ON) +option(BUILD_TESTING "Test the project" ON) + if(BUILD_SHARED_LIBS) set(qRestAPI_STATIC OFF) else() set(qRestAPI_STATIC ON) endif() +# -------------------------------------------------------------------------- +# Configure headers +# -------------------------------------------------------------------------- configure_file( qRestAPI_Export.h.in ${CMAKE_CURRENT_BINARY_DIR}/qRestAPI_Export.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_SRCS qGirderAPI.cpp qGirderAPI.h @@ -48,12 +107,64 @@ set(KIT_MOC_SRCS qt5_wrap_cpp(KIT_MOC_OUTPUT ${KIT_MOC_SRCS}) +# -------------------------------------------------------------------------- +# Build library +# -------------------------------------------------------------------------- add_library(${PROJECT_NAME} ${KIT_SRCS} ${KIT_MOC_OUTPUT}) target_link_libraries(${PROJECT_NAME} Qt5::Gui Qt5::Network Qt5::Script) -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@")