98 lines
3.5 KiB
CMake
98 lines
3.5 KiB
CMake
cmake_minimum_required(VERSION 3.5.1)
|
|
project(CrossGuid VERSION 0.2.3)
|
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake")
|
|
|
|
option(CROSSGUID_TESTS "Build test runner" ON)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
set(CMAKE_DEBUG_POSTFIX "-dgb")
|
|
|
|
# Set the build type if not set
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE "Release")
|
|
endif()
|
|
|
|
add_library(crossguid ${CMAKE_CURRENT_SOURCE_DIR}/src/guid.cpp)
|
|
set_property(TARGET crossguid PROPERTY POSITION_INDEPENDENT_CODE ON)
|
|
target_include_directories(crossguid PUBLIC
|
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
$<INSTALL_INTERFACE:include>)
|
|
|
|
if(WIN32)
|
|
target_compile_definitions(crossguid PRIVATE GUID_WINDOWS)
|
|
elseif(APPLE)
|
|
find_library(CFLIB CoreFoundation)
|
|
target_link_libraries(crossguid ${CFLIB})
|
|
target_compile_definitions(crossguid PRIVATE GUID_CFUUID)
|
|
elseif(ANDROID)
|
|
# GUID_ANDROID is used in the headers, so make PUBLIC
|
|
target_compile_definitions(crossguid PUBLIC GUID_ANDROID)
|
|
else()
|
|
find_package(Libuuid REQUIRED)
|
|
if (NOT LIBUUID_FOUND)
|
|
message(FATAL_ERROR
|
|
"You might need to run 'sudo apt-get install uuid-dev' or similar")
|
|
endif()
|
|
target_include_directories(crossguid PRIVATE ${LIBUUID_INCLUDE_DIR})
|
|
target_link_libraries(crossguid ${LIBUUID_LIBRARY})
|
|
target_compile_definitions(crossguid PRIVATE GUID_LIBUUID)
|
|
endif()
|
|
|
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
set(WARNINGS "-Werror" "-Wall")
|
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|
set(WARNINGS "-Werror" "-Wall")
|
|
elseif(MSVC)
|
|
set(WARNINGS "/WX" "/W4")
|
|
endif()
|
|
target_compile_options(crossguid PRIVATE ${WARNINGS})
|
|
|
|
set_target_properties(crossguid
|
|
PROPERTIES
|
|
VERSION ${PROJECT_VERSION}
|
|
SOVERSION ${PROJECT_VERSION_MAJOR}
|
|
DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
|
|
|
|
if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
|
|
include(GNUInstallDirs)
|
|
|
|
set(CROSSGUID_INC_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}")
|
|
set(CROSSGUID_RUNTIME_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}")
|
|
set(CROSSGUID_LIBRARY_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}")
|
|
set(CROSSGUID_ARCHIVE_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}")
|
|
set(CROSSGUID_FRAMEWORK_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}")
|
|
|
|
set(CROSSGUID_CMAKE_CONFIG_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/crossguid/cmake")
|
|
set(CROSSGUID_ADDITIONAL_FILES_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/crossguid")
|
|
|
|
# Install target
|
|
install(TARGETS crossguid EXPORT crossguidTargets
|
|
RUNTIME DESTINATION ${CROSSGUID_RUNTIME_INSTALL_DIR}
|
|
LIBRARY DESTINATION ${CROSSGUID_LIBRARY_INSTALL_DIR}
|
|
ARCHIVE DESTINATION ${CROSSGUID_ARCHIVE_INSTALL_DIR}
|
|
FRAMEWORK DESTINATION ${CROSSGUID_FRAMEWORK_INSTALL_DIR})
|
|
|
|
# Install headers
|
|
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/"
|
|
DESTINATION ${CROSSGUID_INC_INSTALL_DIR})
|
|
|
|
# Make cmake config files for all targets
|
|
install(EXPORT crossguidTargets
|
|
DESTINATION ${CROSSGUID_CMAKE_CONFIG_INSTALL_DIR}
|
|
FILE crossguid-config.cmake)
|
|
|
|
# Install readme and license
|
|
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE" "${CMAKE_CURRENT_SOURCE_DIR}/README.md"
|
|
DESTINATION ${CROSSGUID_ADDITIONAL_FILES_INSTALL_DIR})
|
|
|
|
configure_file(crossguid.pc.in ${PROJECT_BINARY_DIR}/crossguid.pc @ONLY)
|
|
install(FILES ${PROJECT_BINARY_DIR}/crossguid.pc DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig)
|
|
endif()
|
|
|
|
if (CROSSGUID_TESTS)
|
|
add_executable(crossguid-test test/TestMain.cpp test/Test.cpp)
|
|
target_link_libraries(crossguid-test crossguid)
|
|
endif()
|