Allow overriding 3rd party libs/includes
So passwordfile can be told to use legacy OpenSSL header in accordance with Qt 5 which still requires OpenSSL 1.0
This commit is contained in:
parent
22c8e636dc
commit
6f146072ea
|
@ -47,12 +47,24 @@ if(NOT DEFINED THIRD_PARTY_MODULE_LOADED)
|
|||
set(USE_${NAME} ON)
|
||||
set(USE_STATIC_${NAME} ON)
|
||||
list(APPEND LIBRARIES ${${NAME}_STATIC_LIB})
|
||||
message(STATUS "Linking ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX} statically against external library ${NAME} (${${NAME}_STATIC_LIB}).")
|
||||
if(${NAME}_STATIC_INCLUDE_DIR)
|
||||
list(APPEND ADDITIONAL_STATIC_INCLUDE_DIRS ${${NAME}_STATIC_INCLUDE_DIR})
|
||||
message(STATUS "Adding include path for ${NAME} to ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}: ${${NAME}_STATIC_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
||||
if(${${NAME}_STATIC_LIB} IN_LIST META_PUBLIC_STATIC_LIB_DEPENDS)
|
||||
list(APPEND ${PUBLIC_LIBRARIES_VARNAME} ${${NAME}_STATIC_LIB})
|
||||
if(${NAME}_STATIC_INCLUDE_DIR)
|
||||
list(APPEND PRIVATE_STATIC_INCLUDE_DIRS ${${NAME}_STATIC_INCLUDE_DIR})
|
||||
endif()
|
||||
else()
|
||||
list(APPEND ${PRIVATE_LIBRARIES_VARNAME} ${${NAME}_STATIC_LIB})
|
||||
if(${NAME}_STATIC_INCLUDE_DIR)
|
||||
list(APPEND PRIVATE_STATIC_INCLUDE_DIRS ${${NAME}_STATIC_INCLUDE_DIR})
|
||||
endif()
|
||||
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")))
|
||||
set(USE_${NAME} ON)
|
||||
set(USE_SHARED_${NAME} ON)
|
||||
|
@ -60,12 +72,23 @@ if(NOT DEFINED THIRD_PARTY_MODULE_LOADED)
|
|||
set(${NAME}_DYNAMIC_LIB ${${NAME}_SHARED_LIB})
|
||||
endif()
|
||||
list(APPEND LIBRARIES ${${NAME}_DYNAMIC_LIB})
|
||||
message(STATUS "Linking ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX} dynamically against external library ${NAME} (${${NAME}_DYNAMIC_LIB}).")
|
||||
if(${NAME}_DYNAMIC_INCLUDE_DIR)
|
||||
list(APPEND ADDITIONAL_SHARED_INCLUDE_DIRS ${${NAME}_DYNAMIC_INCLUDE_DIR})
|
||||
message(STATUS "Adding include path for ${NAME} to ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}: ${${NAME}_DYNAMIC_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
||||
if(${${NAME}_DYNAMIC_LIB} IN_LIST META_PUBLIC_SHARED_LIB_DEPENDS)
|
||||
list(APPEND ${PUBLIC_LIBRARIES_VARNAME} ${${NAME}_DYNAMIC_LIB})
|
||||
if(${NAME}_DYNAMIC_INCLUDE_DIR)
|
||||
list(APPEND PUBLIC_SHARED_INCLUDE_DIRS ${${NAME}_DYNAMIC_INCLUDE_DIR})
|
||||
endif()
|
||||
else()
|
||||
list(APPEND ${PRIVATE_LIBRARIES_VARNAME} ${${NAME}_DYNAMIC_LIB})
|
||||
if(${NAME}_DYNAMIC_INCLUDE_DIR)
|
||||
list(APPEND PRIVATE_SHARED_INCLUDE_DIRS ${${NAME}_DYNAMIC_INCLUDE_DIR})
|
||||
endif()
|
||||
endif()
|
||||
message(STATUS "Linking ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX} dynamically against external library ${NAME} (${${NAME}_DYNAMIC_LIB}).")
|
||||
else()
|
||||
if(${NAME}_REQUIRED)
|
||||
message(FATAL_ERROR "External library ${NAME} required by ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX} is not available for the specified linkage ${LINKAGE}.")
|
||||
|
@ -77,12 +100,24 @@ if(NOT DEFINED THIRD_PARTY_MODULE_LOADED)
|
|||
# add library to list of libraries to be provided as transitive dependencies when building static libraries
|
||||
if(${NAME}_STATIC_LIB)
|
||||
list(APPEND STATIC_LIBRARIES ${${NAME}_STATIC_LIB})
|
||||
message(STATUS "Adding ${${NAME}_STATIC_LIB} to static library dependencies of ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}.")
|
||||
if(${NAME}_STATIC_INCLUDE_DIR)
|
||||
list(APPEND ADDITIONAL_STATIC_INCLUDE_DIRS ${${NAME}_STATIC_INCLUDE_DIR})
|
||||
message(STATUS "Adding include path for ${NAME} to static include directories of ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}: ${${NAME}_STATIC_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
||||
if(${${NAME}_STATIC_LIB} IN_LIST META_PUBLIC_STATIC_LIB_DEPENDS)
|
||||
list(APPEND ${PUBLIC_STATIC_LIBRARIES_VARNAME} ${${NAME}_STATIC_LIB})
|
||||
if(${NAME}_STATIC_INCLUDE_DIR)
|
||||
list(APPEND PUBLIC_STATIC_INCLUDE_DIRS ${${NAME}_STATIC_INCLUDE_DIR})
|
||||
endif()
|
||||
else()
|
||||
list(APPEND ${PRIVATE_STATIC_LIBRARIES_VARNAME} ${${NAME}_STATIC_LIB})
|
||||
if(${NAME}_STATIC_INCLUDE_DIR)
|
||||
list(APPEND PRIVATE_STATIC_INCLUDE_DIRS ${${NAME}_STATIC_INCLUDE_DIR})
|
||||
endif()
|
||||
endif()
|
||||
message(STATUS "Adding ${${NAME}_STATIC_LIB} to static library dependencies of ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}.")
|
||||
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
@ -99,11 +134,25 @@ if(NOT DEFINED THIRD_PARTY_MODULE_LOADED)
|
|||
endmacro()
|
||||
|
||||
macro(find_external_library NAME LINKAGE REQUIRED)
|
||||
set(${NAME}_DYNAMIC_INCLUDE_DIR NOTFOUND CACHE PATH "${NAME} include dir (dynamic)")
|
||||
set(${NAME}_DYNAMIC_LIB NOTFOUND CACHE FILEPATH "${NAME} lib (dynamic)")
|
||||
set(${NAME}_STATIC_INCLUDE_DIR NOTFOUND CACHE PATH "${NAME} include dir (static)")
|
||||
set(${NAME}_STATIC_LIB NOTFOUND CACHE FILEPATH "${NAME} lib (static)")
|
||||
|
||||
save_default_library_suffixes()
|
||||
configure_dynamic_library_suffixes()
|
||||
find_library(${NAME}_DYNAMIC_LIB ${NAME})
|
||||
configure_static_library_suffixes()
|
||||
find_library(${NAME}_STATIC_LIB ${NAME})
|
||||
|
||||
if(NOT ${NAME}_DYNAMIC_LIB)
|
||||
configure_dynamic_library_suffixes()
|
||||
find_library(DETECTED_${NAME}_DYNAMIC_LIB ${NAME})
|
||||
set(${NAME}_DYNAMIC_LIB ${DETECTED_${NAME}_DYNAMIC_LIB} CACHE FILEPATH "${NAME} lib (dynamic)")
|
||||
endif()
|
||||
|
||||
if(NOT ${NAME}_SHARED_LIB)
|
||||
configure_static_library_suffixes()
|
||||
find_library(${NAME}_STATIC_LIB ${NAME})
|
||||
set(${NAME}_STATIC_LIB ${DETECTED_${NAME}_STATIC_LIB} CACHE FILEPATH "${NAME} lib (static)")
|
||||
endif()
|
||||
|
||||
restore_default_library_suffixes()
|
||||
endmacro()
|
||||
|
||||
|
@ -116,21 +165,19 @@ if(NOT DEFINED THIRD_PARTY_MODULE_LOADED)
|
|||
# internally used by use_external_library_from_package to find dynamic libraries
|
||||
configure_dynamic_library_suffixes()
|
||||
find_package(${PKGNAME} ${COMPAT_VERSION})
|
||||
set(${NAME}_DYNAMIC_INCLUDE_DIR ${${INCLUDE_VAR}} PARENT_SCOPE)
|
||||
set(${NAME}_DYNAMIC_LIB ${${LIBRARY_VAR}} PARENT_SCOPE)
|
||||
set(${NAME}_DYNAMIC_INCLUDE_DIR ${${INCLUDE_VAR}} CACHE PATH "${NAME} include dir (dynamic)")
|
||||
set(${NAME}_DYNAMIC_LIB ${${LIBRARY_VAR}} CACHE FILEPATH "${NAME} lib (dynamic)")
|
||||
endfunction()
|
||||
|
||||
function(use_external_library_from_package_static NAME PKGNAME INCLUDE_VAR LIBRARY_VAR COMPAT_VERSION)
|
||||
# internally used by use_external_library_from_package to find static libraries
|
||||
configure_static_library_suffixes()
|
||||
find_package(${PKGNAME} ${COMPAT_VERSION})
|
||||
set(${NAME}_STATIC_INCLUDE_DIR ${${INCLUDE_VAR}} PARENT_SCOPE)
|
||||
set(${NAME}_STATIC_LIB ${${LIBRARY_VAR}} PARENT_SCOPE)
|
||||
set(${NAME}_STATIC_INCLUDE_DIR ${${INCLUDE_VAR}} CACHE PATH "${NAME} include dir (static)")
|
||||
set(${NAME}_STATIC_LIB ${${LIBRARY_VAR}} CACHE FILEPATH "${NAME} lib (static)")
|
||||
endfunction()
|
||||
|
||||
macro(find_external_library_from_package NAME PKGNAME VERSION INCLUDE_VAR LIBRARY_VAR LINKAGE REQUIRED)
|
||||
save_default_library_suffixes()
|
||||
|
||||
# handle specified VERSION
|
||||
if("${VERSION}" STREQUAL "ANY_VERSION")
|
||||
set(${NAME}_COMPATIBLE_VERSION "")
|
||||
|
@ -139,20 +186,17 @@ if(NOT DEFINED THIRD_PARTY_MODULE_LOADED)
|
|||
endif()
|
||||
|
||||
# use the find_library approach first because it is less buggy when trying to detect static libraries
|
||||
configure_dynamic_library_suffixes()
|
||||
find_library(${NAME}_DYNAMIC_LIB ${NAME})
|
||||
configure_static_library_suffixes()
|
||||
find_library(${NAME}_STATIC_LIB ${NAME})
|
||||
find_external_library("${NAME}" "${LINKAGE}" OPTIONAL)
|
||||
|
||||
# fall back to actual use of find_package
|
||||
# use separate functions to get a new scope
|
||||
save_default_library_suffixes()
|
||||
if(NOT ${NAME}_DYNAMIC_LIB)
|
||||
use_external_library_from_package_dynamic(${NAME} ${PKGNAME} ${INCLUDE_VAR} "${LIBRARY_VAR}" "${${NAME}_COMPATIBLE_VERSION}")
|
||||
endif()
|
||||
if(NOT ${NAME}_STATIC_LIB)
|
||||
use_external_library_from_package_static(${NAME} ${PKGNAME} ${INCLUDE_VAR} "${LIBRARY_VAR}" "${${NAME}_COMPATIBLE_VERSION}")
|
||||
endif()
|
||||
|
||||
restore_default_library_suffixes()
|
||||
endmacro()
|
||||
|
||||
|
|
|
@ -39,6 +39,10 @@ target_link_libraries(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}
|
|||
PUBLIC ${ACTUAL_ADDITIONAL_LINK_FLAGS} "${PUBLIC_LIBRARIES}"
|
||||
PRIVATE "${PRIVATE_LIBRARIES}"
|
||||
)
|
||||
target_include_directories(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}
|
||||
PUBLIC "${PUBLIC_SHARED_INCLUDE_DIRS}"
|
||||
PRIVATE "${PRIVATE_SHARED_INCLUDE_DIRS}"
|
||||
)
|
||||
target_compile_definitions(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}
|
||||
PUBLIC "${META_PUBLIC_SHARED_LIB_COMPILE_DEFINITIONS}"
|
||||
PRIVATE "${META_PRIVATE_SHARED_LIB_COMPILE_DEFINITIONS}"
|
||||
|
|
|
@ -120,6 +120,9 @@ if(BUILD_SHARED_LIBS)
|
|||
target_link_libraries(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}
|
||||
INTERFACE ${ACTUAL_ADDITIONAL_LINK_FLAGS} "${PUBLIC_LIBRARIES}" "${PRIVATE_LIBRARIES}"
|
||||
)
|
||||
target_include_directories(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}
|
||||
INTERFACE "${PUBLIC_SHARED_INCLUDE_DIRS}" "${PRIVATE_SHARED_INCLUDE_DIRS}"
|
||||
)
|
||||
target_compile_definitions(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}
|
||||
INTERFACE "${META_PUBLIC_SHARED_LIB_COMPILE_DEFINITIONS}" "${META_PRIVATE_SHARED_LIB_COMPILE_DEFINITIONS}"
|
||||
)
|
||||
|
@ -132,6 +135,10 @@ if(BUILD_SHARED_LIBS)
|
|||
PUBLIC ${ACTUAL_ADDITIONAL_LINK_FLAGS} "${PUBLIC_LIBRARIES}"
|
||||
PRIVATE "${PRIVATE_LIBRARIES}"
|
||||
)
|
||||
target_include_directories(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}
|
||||
PUBLIC "${PUBLIC_SHARED_INCLUDE_DIRS}"
|
||||
PRIVATE "${PRIVATE_SHARED_INCLUDE_DIRS}"
|
||||
)
|
||||
target_compile_definitions(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}
|
||||
PUBLIC "${META_PUBLIC_SHARED_LIB_COMPILE_DEFINITIONS}"
|
||||
PRIVATE "${META_PRIVATE_SHARED_LIB_COMPILE_DEFINITIONS}"
|
||||
|
@ -164,6 +171,9 @@ if(BUILD_STATIC_LIBS)
|
|||
target_link_libraries(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_static
|
||||
INTERFACE ${ACTUAL_ADDITIONAL_LINK_FLAGS} "${PUBLIC_STATIC_LIBRARIES}" "${PRIVATE_STATIC_LIBRARIES}"
|
||||
)
|
||||
target_include_directories(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_static
|
||||
INTERFACE "${PUBLIC_STATIC_INCLUDE_DIRS}" "${PRIVATE_STATIC_INCLUDE_DIRS}"
|
||||
)
|
||||
target_compile_definitions(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_static
|
||||
INTERFACE "${META_PUBLIC_STATIC_LIB_COMPILE_DEFINITIONS}" "${META_PRIVATE_STATIC_LIB_COMPILE_DEFINITIONS}"
|
||||
)
|
||||
|
@ -176,6 +186,10 @@ if(BUILD_STATIC_LIBS)
|
|||
PUBLIC "${PUBLIC_STATIC_LIBRARIES}"
|
||||
PRIVATE "${PRIVATE_STATIC_LIBRARIES}"
|
||||
)
|
||||
target_include_directories(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_static
|
||||
PUBLIC "${PUBLIC_STATIC_INCLUDE_DIRS}"
|
||||
PRIVATE "${PRIVATE_STATIC_INCLUDE_DIRS}"
|
||||
)
|
||||
target_compile_definitions(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_static
|
||||
PUBLIC "${META_PUBLIC_STATIC_LIB_COMPILE_DEFINITIONS}"
|
||||
PRIVATE "${META_PRIVATE_STATIC_LIB_COMPILE_DEFINITIONS}"
|
||||
|
|
|
@ -108,6 +108,10 @@ if(CPP_UNIT_LIB OR META_NO_CPP_UNIT)
|
|||
PUBLIC ${ACTUAL_ADDITIONAL_LINK_FLAGS} "${PUBLIC_LIBRARIES}"
|
||||
PRIVATE "${TEST_LIBRARIES}" "${PRIVATE_LIBRARIES}"
|
||||
)
|
||||
target_include_directories(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_tests
|
||||
PUBLIC "${PUBLIC_SHARED_INCLUDE_DIRS}"
|
||||
PRIVATE "${PRIVATE_SHARED_INCLUDE_DIRS}"
|
||||
)
|
||||
target_compile_definitions(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_tests
|
||||
PUBLIC "${META_PUBLIC_SHARED_LIB_COMPILE_DEFINITIONS}"
|
||||
PRIVATE "${META_PRIVATE_SHARED_LIB_COMPILE_DEFINITIONS}"
|
||||
|
|
Loading…
Reference in New Issue