Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 0 additions & 20 deletions CMake/GenerateqRestAPIConfig.cmake

This file was deleted.

16 changes: 0 additions & 16 deletions CMake/UseqRestAPI.cmake.in

This file was deleted.

14 changes: 0 additions & 14 deletions CMake/qRestAPIConfig.cmake.in

This file was deleted.

154 changes: 121 additions & 33 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,46 +1,90 @@
cmake_minimum_required(VERSION 3.5.0)
cmake_minimum_required(VERSION 3.16.3...3.19.7 FATAL_ERROR)

project(qRestAPI)

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)

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()
# --------------------------------------------------------------------------
# Dependencies
# --------------------------------------------------------------------------

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()
#
# Qt5
#
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)

# --------------------------------------------------------------------------
# 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
Expand All @@ -61,22 +105,66 @@ 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})

# --------------------------------------------------------------------------
# Build library
# --------------------------------------------------------------------------
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})
target_link_libraries(${PROJECT_NAME} Qt5::Gui Qt5::Network Qt5::Script)


# --------------------------------------------------------------------------
# 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)

include(CTest)
# 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)
11 changes: 2 additions & 9 deletions Testing/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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})
Expand Down
5 changes: 5 additions & 0 deletions qRestAPIConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -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@")
3 changes: 3 additions & 0 deletions qRestAPIInstallConfig.cmake.in
Original file line number Diff line number Diff line change
@@ -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@")