Improve cmake configuration for use as a library (#121)

* Use freetype target if it already exists in cmake build

* Add cmake option controlling install targets
This commit is contained in:
Luminiscental 2021-03-05 17:15:54 +00:00 committed by GitHub
parent b681ec6527
commit ae7fc5e7a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 62 additions and 57 deletions

View File

@ -5,12 +5,15 @@ option(MSDFGEN_BUILD_MSDFGEN_STANDALONE "Build the msdfgen standalone executable
option(MSDFGEN_USE_OPENMP "Build with OpenMP support for multithreaded code" OFF) option(MSDFGEN_USE_OPENMP "Build with OpenMP support for multithreaded code" OFF)
option(MSDFGEN_USE_CPP11 "Build with C++11 enabled" ON) option(MSDFGEN_USE_CPP11 "Build with C++11 enabled" ON)
option(MSDFGEN_USE_SKIA "Build with the Skia library" OFF) option(MSDFGEN_USE_SKIA "Build with the Skia library" OFF)
option(MSDFGEN_INSTALL "Generate installation target" ON)
option(FREETYPE_WITH_PNG "Link libpng and zlib because FreeType is configured to require it" OFF) option(FREETYPE_WITH_PNG "Link libpng and zlib because FreeType is configured to require it" OFF)
option(FREETYPE_WITH_HARFBUZZ "Link HarfBuzz because FreeType is configured to require it" OFF) option(FREETYPE_WITH_HARFBUZZ "Link HarfBuzz because FreeType is configured to require it" OFF)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
find_package(Freetype REQUIRED) if(NOT TARGET Freetype::Freetype)
find_package(Freetype REQUIRED)
endif()
#---------------------------------------------------------------- #----------------------------------------------------------------
# Gathering File # Gathering File
@ -123,67 +126,69 @@ endif()
# Installation and exportation of the libraries # Installation and exportation of the libraries
#---------------------------------------------------------------- #----------------------------------------------------------------
include(CMakePackageConfigHelpers) if(MSDFGEN_INSTALL)
set(MSDFGEN_CONFIG_PATH "lib/cmake/msdfgen") include(CMakePackageConfigHelpers)
set(MSDFGEN_CONFIG_PATH "lib/cmake/msdfgen")
# install tree package config # install tree package config
write_basic_package_version_file( write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/msdfgenConfigVersion.cmake" "${CMAKE_CURRENT_BINARY_DIR}/msdfgenConfigVersion.cmake"
VERSION ${PROJECT_VERSION} VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion COMPATIBILITY SameMajorVersion
) )
configure_package_config_file( configure_package_config_file(
cmake/msdfgenConfig.cmake.in cmake/msdfgenConfig.cmake.in
${MSDFGEN_CONFIG_PATH}/msdfgenConfig.cmake ${MSDFGEN_CONFIG_PATH}/msdfgenConfig.cmake
INSTALL_DESTINATION ${MSDFGEN_CONFIG_PATH} INSTALL_DESTINATION ${MSDFGEN_CONFIG_PATH}
NO_CHECK_REQUIRED_COMPONENTS_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO
) )
# build tree package config # build tree package config
configure_file( configure_file(
cmake/msdfgenConfig.cmake.in cmake/msdfgenConfig.cmake.in
msdfgenConfig.cmake msdfgenConfig.cmake
@ONLY @ONLY
) )
install(TARGETS msdfgen EXPORT msdfgenTargets install(TARGETS msdfgen EXPORT msdfgenTargets
RUNTIME DESTINATION bin RUNTIME DESTINATION bin
LIBRARY DESTINATION lib LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib ARCHIVE DESTINATION lib
FRAMEWORK DESTINATION lib FRAMEWORK DESTINATION lib
PUBLIC_HEADER DESTINATION include/msdfgen/core PUBLIC_HEADER DESTINATION include/msdfgen/core
) )
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/msdfgen.h" "${CMAKE_CURRENT_SOURCE_DIR}/msdfgen-ext.h" DESTINATION include/msdfgen) install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/msdfgen.h" "${CMAKE_CURRENT_SOURCE_DIR}/msdfgen-ext.h" DESTINATION include/msdfgen)
install(TARGETS msdfgen-ext EXPORT msdfgenTargets install(TARGETS msdfgen-ext EXPORT msdfgenTargets
RUNTIME DESTINATION bin RUNTIME DESTINATION bin
LIBRARY DESTINATION lib LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib ARCHIVE DESTINATION lib
FRAMEWORK DESTINATION lib FRAMEWORK DESTINATION lib
PUBLIC_HEADER DESTINATION include/msdfgen/ext PUBLIC_HEADER DESTINATION include/msdfgen/ext
) )
if(MSDFGEN_BUILD_MSDFGEN_STANDALONE) if(MSDFGEN_BUILD_MSDFGEN_STANDALONE)
install(TARGETS msdfgen-standalone EXPORT msdfgenTargets RUNTIME DESTINATION bin) install(TARGETS msdfgen-standalone EXPORT msdfgenTargets RUNTIME DESTINATION bin)
endif()
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/${MSDFGEN_CONFIG_PATH}/msdfgenConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/msdfgenConfigVersion.cmake"
DESTINATION ${MSDFGEN_CONFIG_PATH}
)
export(
EXPORT msdfgenTargets
NAMESPACE msdfgen::
FILE "${CMAKE_CURRENT_BINARY_DIR}/msdfgenTargets.cmake"
)
install(
EXPORT msdfgenTargets FILE msdfgenTargets.cmake
NAMESPACE msdfgen::
DESTINATION ${MSDFGEN_CONFIG_PATH}
)
endif() endif()
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/${MSDFGEN_CONFIG_PATH}/msdfgenConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/msdfgenConfigVersion.cmake"
DESTINATION ${MSDFGEN_CONFIG_PATH}
)
export(
EXPORT msdfgenTargets
NAMESPACE msdfgen::
FILE "${CMAKE_CURRENT_BINARY_DIR}/msdfgenTargets.cmake"
)
install(
EXPORT msdfgenTargets FILE msdfgenTargets.cmake
NAMESPACE msdfgen::
DESTINATION ${MSDFGEN_CONFIG_PATH}
)