diff --git a/cmake/modules/3rdParty.cmake b/cmake/modules/3rdParty.cmake index 90753c7..52aa2ff 100644 --- a/cmake/modules/3rdParty.cmake +++ b/cmake/modules/3rdParty.cmake @@ -31,7 +31,7 @@ if(NOT DEFINED THIRD_PARTY_MODULE_LOADED) endif() endmacro() - macro(link_against_library NAME LINKAGE REQUIRED) + macro(link_against_library_varnames NAME LINKAGE REQUIRED PRIVATE_LIBRARIES_VARNAME PUBLIC_LIBRARIES_VARNAME PRIVATE_STATIC_LIBRARIES_VARNAME PUBLIC_STATIC_LIBRARIES_VARNAME) # determine whether the library is required or optional # FIXME: improve passing required argument if("${REQUIRED}" STREQUAL "OPTIONAL") @@ -47,9 +47,9 @@ if(NOT DEFINED THIRD_PARTY_MODULE_LOADED) set(USE_STATIC_${NAME} ON) list(APPEND LIBRARIES ${${NAME}_STATIC_LIB}) if(${${NAME}_STATIC_LIB} IN_LIST META_PUBLIC_STATIC_LIB_DEPENDS) - list(APPEND PUBLIC_LIBRARIES ${${NAME}_STATIC_LIB}) + list(APPEND ${PUBLIC_LIBRARIES_VARNAME} ${${NAME}_STATIC_LIB}) else() - list(APPEND PRIVATE_LIBRARIES ${${NAME}_STATIC_LIB}) + list(APPEND ${PRIVATE_LIBRARIES_VARNAME} ${${NAME}_STATIC_LIB}) endif() message(STATUS "Linking ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX} statically against external library ${NAME} (${${NAME}_STATIC_LIB}).") elseif((${NAME}_DYNAMIC_LIB OR ${NAME}_SHARED_LIB) AND (("${LINKAGE}" STREQUAL "AUTO_LINKAGE") OR ("${LINKAGE}" STREQUAL "SHARED"))) @@ -59,9 +59,9 @@ if(NOT DEFINED THIRD_PARTY_MODULE_LOADED) endif() list(APPEND LIBRARIES ${${NAME}_DYNAMIC_LIB}) if(${${NAME}_DYNAMIC_LIB} IN_LIST META_PUBLIC_SHARED_LIB_DEPENDS) - list(APPEND PUBLIC_LIBRARIES ${${NAME}_DYNAMIC_LIB}) + list(APPEND ${PUBLIC_LIBRARIES_VARNAME} ${${NAME}_DYNAMIC_LIB}) else() - list(APPEND PRIVATE_LIBRARIES ${${NAME}_DYNAMIC_LIB}) + list(APPEND ${PRIVATE_LIBRARIES_VARNAME} ${${NAME}_DYNAMIC_LIB}) endif() message(STATUS "Linking ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX} dynamically against external library ${NAME} (${${NAME}_DYNAMIC_LIB}).") else() @@ -76,24 +76,40 @@ if(NOT DEFINED THIRD_PARTY_MODULE_LOADED) if(${NAME}_STATIC_LIB) list(APPEND STATIC_LIBRARIES ${${NAME}_STATIC_LIB}) if(${${NAME}_STATIC_LIB} IN_LIST META_PUBLIC_STATIC_LIB_DEPENDS) - list(APPEND PUBLIC_STATIC_LIBRARIES ${${NAME}_STATIC_LIB}) + list(APPEND ${PUBLIC_STATIC_LIBRARIES_VARNAME} ${${NAME}_STATIC_LIB}) else() - list(APPEND PRIVATE_STATIC_LIBRARIES ${${NAME}_STATIC_LIB}) + list(APPEND ${PRIVATE_STATIC_LIBRARIES_VARNAME} ${${NAME}_STATIC_LIB}) endif() message(STATUS "Adding ${${NAME}_STATIC_LIB} to static library dependencies of ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}.") endif() endmacro() - macro(use_external_library NAME LINKAGE REQUIRED) + macro(link_against_library NAME LINKAGE REQUIRED) + link_against_library_varnames("${NAME}" "${LINKAGE}" "${REQUIRED}" + PRIVATE_LIBRARIES PUBLIC_LIBRARIES PRIVATE_STATIC_LIBRARIES PUBLIC_STATIC_LIBRARIES + ) + endmacro() + + macro(link_tests_against_library NAME LINKAGE REQUIRED) + link_against_library_varnames("${NAME}" "${LINKAGE}" "${REQUIRED}" + TEST_LIBRARIES TEST_LIBRARIES STATIC_TEST_LIBRARIES STATIC_TEST_LIBRARIES + ) + endmacro() + + macro(find_external_library NAME LINKAGE REQUIRED) save_default_library_suffixes() configure_dynamic_library_suffixes() find_library(${NAME}_DYNAMIC_LIB ${NAME}) configure_static_library_suffixes() find_library(${NAME}_STATIC_LIB ${NAME}) - link_against_library(${NAME} ${LINKAGE} ${REQUIRED}) restore_default_library_suffixes() endmacro() + macro(use_external_library NAME LINKAGE REQUIRED) + find_external_library("${NAME}" "${LINKAGE}" "${REQUIRED}") + link_against_library("${NAME}" "${LINKAGE}" "${REQUIRED}") + endmacro() + function(use_external_library_from_package_dynamic NAME PKGNAME INCLUDE_VAR LIBRARY_VAR COMPAT_VERSION) # internally used by use_external_library_from_package to find dynamic libraries configure_dynamic_library_suffixes() @@ -110,7 +126,7 @@ if(NOT DEFINED THIRD_PARTY_MODULE_LOADED) set(${NAME}_STATIC_LIB ${${LIBRARY_VAR}} PARENT_SCOPE) endfunction() - macro(use_external_library_from_package NAME PKGNAME VERSION INCLUDE_VAR LIBRARY_VAR LINKAGE REQUIRED) + macro(find_external_library_from_package NAME PKGNAME VERSION INCLUDE_VAR LIBRARY_VAR LINKAGE REQUIRED) save_default_library_suffixes() # handle specified VERSION @@ -135,11 +151,14 @@ if(NOT DEFINED THIRD_PARTY_MODULE_LOADED) use_external_library_from_package_static(${NAME} ${PKGNAME} ${INCLUDE_VAR} "${LIBRARY_VAR}" "${${NAME}_COMPATIBLE_VERSION}") endif() - link_against_library(${NAME} ${LINKAGE} ${REQUIRED}) - restore_default_library_suffixes() endmacro() + macro(use_external_library_from_package NAME PKGNAME VERSION INCLUDE_VAR LIBRARY_VAR LINKAGE REQUIRED) + find_external_library_from_package("${NAME}" "${PKGNAME}" "${VERSION}" "${INCLUDE_VAR}" "${LIBRARY_VAR}" "${LINKAGE}" "${REQUIRED}") + link_against_library("${NAME}" "${LINKAGE}" "${REQUIRED}") + endmacro() + macro(use_iconv LINKAGE REQUIRED) # check whether iconv exists in the standard library include(CheckFunctionExists)