158 lines
7.9 KiB
CMake
158 lines
7.9 KiB
CMake
@PACKAGE_INIT@
|
|
|
|
# provide meta-data
|
|
set(@META_PROJECT_NAME@_varname "@META_PROJECT_VARNAME_UPPER@")
|
|
set(@META_TARGET_NAME@_varname "@META_PROJECT_VARNAME_UPPER@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_DISPLAY_NAME "@META_APP_NAME@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_AUTHOR "@META_APP_AUTHOR@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_VERSION "@META_APP_VERSION@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_VERSION_MAJOR "@META_VERSION_MAJOR@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_VERSION_MINOR "@META_VERSION_MINOR@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_VERSION_PATCH "@META_VERSION_PATCH@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_GIT_REV_COUNT "@META_GIT_REV_COUNT@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_GIT_LAST_COMMIT_ID "@META_GIT_LAST_COMMIT_ID@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_URL "@META_APP_URL@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_DESCRIPTION "@META_APP_DESCRIPTION@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_LICENSE "@META_PROJECT_LICENSE@")
|
|
|
|
# define general config
|
|
set(@META_PROJECT_VARNAME_UPPER@_IS_HEADER_ONLY @META_HEADER_ONLY_LIB@)
|
|
set(@META_PROJECT_VARNAME_UPPER@_INCLUDE_DIRS "@PACKAGE_HEADER_INSTALL_DESTINATION@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_BIN_DIR "@PACKAGE_BIN_INSTALL_DESTINATION@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_LIB_DIR "@PACKAGE_LIB_INSTALL_DESTINATION@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_DATA_DIRS "@PACKAGE_META_DATA_DIR@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_MODULE_DIRS "@PACKAGE_CMAKE_MODULE_INSTALL_DESTINATION@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_CONFIG_DIRS "@PACKAGE_CMAKE_CONFIG_INSTALL_DESTINATION@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_PRIVATE_QT_MODULES "@QT_MODULES@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_PRIVATE_KF_MODULES "@KF_MODULES@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_PUBLIC_QT_MODULES "@META_PUBLIC_QT_MODULES@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_PUBLIC_KF_MODULES "@META_PUBLIC_KF_MODULES@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_REQUIRED_PACKAGES "@INTERFACE_REQUIRED_PACKAGES@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_REQUIRED_PKG_CONFIG_MODULES "@INTERFACE_REQUIRED_PKG_CONFIG_MODULES@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_HAS_QT_TRANSLATION_FILES @APP_SPECIFIC_QT_TRANSLATIONS_AVAILABLE@)
|
|
set(@META_PROJECT_VARNAME_UPPER@_QT_RESOURCES @QT_RESOURCES@)
|
|
|
|
# define mapping from CMake targets to pkg-config module names
|
|
@TARGET_TO_PKG_CONFIG_MODULE_NAME_MAPPING@
|
|
|
|
# define additional find_package arguments for required CMake-packages
|
|
@ADDITIONAL_ARGUMENTS_FOR_REQUIRED_CMAKE_PACKAGES@
|
|
# define library config, add imported target
|
|
set(@META_PROJECT_VARNAME_UPPER@_PACKAGE "@NAMESPACE_PREFIX@@META_PROJECT_NAME@@META_CONFIG_SUFFIX@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_LIB "@META_TARGET_NAME@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_LIB_IS_SHARED "@BUILD_SHARED_LIBS@")
|
|
set(@META_PROJECT_VARNAME_UPPER@_STATIC_LINKAGE "@STATIC_LINKAGE_CONFIGURED@")
|
|
if(NOT TARGET "${@META_PROJECT_VARNAME_UPPER@_LIB}")
|
|
# make dependencies of the library available
|
|
# caveat: This currently does *not* cover Qt and KF modules which are so far only handled
|
|
# separately when using the function use_@META_PROJECT_VARNAME@.
|
|
|
|
# prefer static libraries if @META_PROJECT_NAME@ was configured this way during its build
|
|
if (@META_PROJECT_VARNAME_UPPER@_STATIC_LINKAGE)
|
|
set(@META_PROJECT_VARNAME_UPPER@_DEFAULT_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
|
|
if (WIN32)
|
|
set(CMAKE_FIND_LIBRARY_SUFFIXES .a .lib)
|
|
else ()
|
|
set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
|
|
endif ()
|
|
set(@META_PROJECT_VARNAME_UPPER@_DEFAULT_PKG_CONFIG_USE_STATIC_LIBS ${PKG_CONFIG_USE_STATIC_LIBS})
|
|
set(PKG_CONFIG_USE_STATIC_LIBS ON)
|
|
endif ()
|
|
|
|
# find all required packages
|
|
foreach (_REQUIRED_PACKAGE ${@META_PROJECT_VARNAME_UPPER@_REQUIRED_PACKAGES})
|
|
string(REGEX MATCH _REQUIRED_PACKAGE_MATCH "(.*)-([^-]*)" "${_REQUIRED_PACKAGE}")
|
|
if (_REQUIRED_PACKAGE_MATCH)
|
|
set(_REQUIRED_PACKAGE "${CMAKE_MATCH_1}")
|
|
set(_REQUIRED_VERSION "${CMAKE_MATCH_2}")
|
|
else ()
|
|
unset(_REQUIRED_VERSION)
|
|
endif ()
|
|
string(REPLACE "::" "_" _REQUIRED_PACKAGE_VARNAME "${_REQUIRED_PACKAGE}")
|
|
if (@META_PROJECT_VARNAME_UPPER@_FIND_PACKAGE_ARGS_${_REQUIRED_PACKAGE_VARNAME})
|
|
set(_FIND_PACKAGE_ARGS ${@META_PROJECT_VARNAME_UPPER@_FIND_PACKAGE_ARGS_${_REQUIRED_PACKAGE_VARNAME}})
|
|
else ()
|
|
set(_FIND_PACKAGE_ARGS REQUIRED)
|
|
endif ()
|
|
if (_REQUIRED_VERSION)
|
|
find_package("${_REQUIRED_PACKAGE}" "${_REQUIRED_VERSION}" ${_FIND_PACKAGE_ARGS})
|
|
else ()
|
|
find_package("${_REQUIRED_PACKAGE}" ${_FIND_PACKAGE_ARGS})
|
|
endif()
|
|
endforeach()
|
|
|
|
# find all required pkg-config modules
|
|
if (@META_PROJECT_VARNAME_UPPER@_REQUIRED_PKG_CONFIG_MODULES)
|
|
include(3rdParty)
|
|
foreach (@META_PROJECT_VARNAME_UPPER@_REQUIRED_PKG_CONFIG_MODULE ${@META_PROJECT_VARNAME_UPPER@_REQUIRED_PKG_CONFIG_MODULES})
|
|
string(REPLACE "::" "_" @META_PROJECT_VARNAME_UPPER@_REQUIRED_PKG_CONFIG_MODULE_VARNAME "${@META_PROJECT_VARNAME_UPPER@_REQUIRED_PKG_CONFIG_MODULE}")
|
|
use_pkg_config_module(
|
|
TARGET_NAME "${@META_PROJECT_VARNAME_UPPER@_REQUIRED_PKG_CONFIG_MODULE}"
|
|
PKG_CONFIG_MODULES "${PKG_CONFIG_${@META_PROJECT_VARNAME_UPPER@_REQUIRED_PKG_CONFIG_MODULE_VARNAME}}"
|
|
LIBRARIES_VARIABLE DEV_NULL
|
|
PKG_CONFIG_MODULES_VARIABLE DEV_NULL
|
|
)
|
|
endforeach ()
|
|
endif ()
|
|
|
|
# restore preference of static libraries
|
|
if (@META_PROJECT_VARNAME_UPPER@_STATIC_LINKAGE)
|
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ${@META_PROJECT_VARNAME_UPPER@_DEFAULT_CMAKE_FIND_LIBRARY_SUFFIXES})
|
|
unset(@META_PROJECT_VARNAME_UPPER@_DEFAULT_CMAKE_FIND_LIBRARY_SUFFIXES)
|
|
set(PKG_CONFIG_USE_STATIC_LIBS ${@META_PROJECT_VARNAME_UPPER@_DEFAULT_PKG_CONFIG_USE_STATIC_LIBS})
|
|
unset(@META_PROJECT_VARNAME_UPPER@_DEFAULT_PKG_CONFIG_USE_STATIC_LIBS)
|
|
endif ()
|
|
|
|
# add target for the library itself
|
|
include("${CMAKE_CURRENT_LIST_DIR}/@NAMESPACE_PREFIX@@META_PROJECT_NAME@@META_CONFIG_SUFFIX@Targets.cmake")
|
|
endif()
|
|
|
|
# define function to ease use of library in projects following conventions of c++utilities' build script
|
|
function(use_@META_PROJECT_VARNAME@)
|
|
# make CMake modules of the project available
|
|
list(APPEND CMAKE_MODULE_PATH "${@META_PROJECT_VARNAME_UPPER@_MODULE_DIRS}")
|
|
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" PARENT_SCOPE)
|
|
|
|
# parse arguments
|
|
include(3rdParty)
|
|
parse_arguments_for_use_functions(${ARGN})
|
|
|
|
# link against library (also "link" against header-only libs to get compile defs and interface link libs)
|
|
link_directories(${@META_PROJECT_VARNAME_UPPER@_LIB_DIR})
|
|
if (ARGS_ONLY_HEADERS)
|
|
set(TARGET_NAME "${@META_PROJECT_VARNAME_UPPER@_LIB}-headers")
|
|
else ()
|
|
set(TARGET_NAME "${@META_PROJECT_VARNAME_UPPER@_LIB}")
|
|
endif ()
|
|
set("${ARGS_LIBRARIES_VARIABLE}" "${${ARGS_LIBRARIES_VARIABLE}};${TARGET_NAME}" PARENT_SCOPE)
|
|
set("${ARGS_PACKAGES_VARIABLE}" "${${ARGS_PACKAGES_VARIABLE}};${@META_PROJECT_VARNAME_UPPER@_PACKAGE}" PARENT_SCOPE)
|
|
|
|
if (ARGS_ONLY_HEADERS)
|
|
return ()
|
|
endif ()
|
|
|
|
# add required Qt and KF modules
|
|
set(IMPORTED_QT_MODULES
|
|
${IMPORTED_QT_MODULES}
|
|
${@META_PROJECT_VARNAME_UPPER@_PUBLIC_QT_MODULES}
|
|
${@META_PROJECT_VARNAME_UPPER@_PRIVATE_QT_MODULES}
|
|
PARENT_SCOPE
|
|
)
|
|
set(IMPORTED_KF_MODULES
|
|
${IMPORTED_KF_MODULES}
|
|
${@META_PROJECT_VARNAME_UPPER@_PUBLIC_KF_MODULES}
|
|
${@META_PROJECT_VARNAME_UPPER@_PRIVATE_KF_MODULES}
|
|
PARENT_SCOPE
|
|
)
|
|
|
|
# add required translations to APP_SPECIFIC_QT_TRANSLATION_FILES_ARRAY
|
|
if(@META_PROJECT_VARNAME_UPPER@_HAS_QT_TRANSLATION_FILES)
|
|
set(APP_SPECIFIC_QT_TRANSLATION_FILES "${APP_SPECIFIC_QT_TRANSLATION_FILES};@META_PROJECT_NAME@" PARENT_SCOPE)
|
|
endif()
|
|
|
|
# add Qt resources if it is a static library
|
|
if (NOT @META_PROJECT_VARNAME_UPPER@_LIB_IS_SHARED)
|
|
set(STATIC_LIBRARIES_QT_RESOURCES "${STATIC_LIBRARIES_QT_RESOURCES};${@META_PROJECT_VARNAME_UPPER@_QT_RESOURCES}" PARENT_SCOPE)
|
|
endif()
|
|
endfunction()
|