@ -44,8 +44,8 @@ endfunction ()
function ( parse_arguments_for_use_functions )
# p a r s e a r g u m e n t s
set ( OPTIONAL_ARGS OPTIONAL )
set ( ONE_VALUE_ARGS VISIBILITY LIBRARIES_VARIABLE PACKAGES_VARIABLE TARGET_NAME )
set ( MULTI_VALUE_ARGS )
set ( ONE_VALUE_ARGS VISIBILITY LIBRARIES_VARIABLE PACKAGES_VARIABLE PKG_CONFIG_MODULES_VARIABLE TARGET_NAME )
set ( MULTI_VALUE_ARGS PKG_CONFIG_MODULES )
cmake_parse_arguments ( ARGS "${OPTIONAL_ARGS}" "${ONE_VALUE_ARGS}" "${MULTI_VALUE_ARGS}" ${ ARGN } )
# v a l i d a t e v a l u e s
@ -58,20 +58,32 @@ function (parse_arguments_for_use_functions)
if ( NOT ARGS_LIBRARIES_VARIABLE )
set ( ARGS_LIBRARIES_VARIABLE "${ARGS_VISIBILITY}_LIBRARIES" )
endif ( )
if ( NOT ARGS_PACKAGES_VARIABLE AND ( NOT BUILD_SHARED_LIBS OR VISIBILITY STREQUAL PUBLIC ) )
set ( ARGS_PACKAGES_VARIABLE "INTERFACE_REQUIRED_PACKAGES" )
else ( )
set ( ARGS_PACKAGES_VARIABLE "REQUIRED_PACKAGES" )
if ( NOT ARGS_PACKAGES_VARIABLE )
if ( NOT BUILD_SHARED_LIBS OR VISIBILITY STREQUAL PUBLIC )
set ( ARGS_PACKAGES_VARIABLE "INTERFACE_REQUIRED_PACKAGES" )
else ( )
set ( ARGS_PACKAGES_VARIABLE "REQUIRED_PACKAGES" )
endif ( )
endif ( )
if ( NOT ARGS_PKG_CONFIG_MODULES_VARIABLE )
if ( NOT BUILD_SHARED_LIBS OR VISIBILITY STREQUAL PUBLIC )
set ( ARGS_PKG_CONFIG_MODULES_VARIABLE "INTERFACE_REQUIRED_PKG_CONFIG_MODULES" )
else ( )
set ( ARGS_PKG_CONFIG_MODULES_VARIABLE "REQUIRED_PKG_CONFIG_MODULES" )
endif ( )
endif ( )
# e x p o r t p a r s e d v a l u e s t o p a r e n t s c o p e
set ( ARGS_VISIBILITY "${ARGS_VISIBILITY}" PARENT_SCOPE )
set ( ARGS_LIBRARIES_VARIABLE "${ARGS_LIBRARIES_VARIABLE}" PARENT_SCOPE )
set ( ARGS_PACKAGES_VARIABLE "${ARGS_PACKAGES_VARIABLE}" PARENT_SCOPE )
set ( ARGS_PKG_CONFIG_MODULES_VARIABLE "${ARGS_PKG_CONFIG_MODULES_VARIABLE}" PARENT_SCOPE )
set ( ARGS_TARGET_NAME "${ARGS_TARGET_NAME}" PARENT_SCOPE )
set ( ARGS_PKG_CONFIG_MODULES "${ARGS_PKG_CONFIG_MODULES}" PARENT_SCOPE )
set ( ARGS_OPTIONAL "${ARGS_OPTIONAL}" PARENT_SCOPE )
if ( NOT ARGS_OPTIONAL )
set ( ARGS_FIND_PACKAGE "REQUIRED" PARENT_SCOPE )
set ( ARGS_PKG_CHECK_MODULES "REQUIRED" PARENT_SCOPE )
endif ( )
endfunction ( )
@ -160,6 +172,47 @@ function (use_target)
set ( "${ARGS_LIBRARIES_VARIABLE}" "${${ARGS_LIBRARIES_VARIABLE}};${ARGS_TARGET_NAME}" PARENT_SCOPE )
endfunction ( )
function ( use_pkg_config_module )
# p a r s e a n d v a l i d a t e a r g u m e n t s
parse_arguments_for_use_functions ( ${ ARGN } )
if ( NOT ARGS_PKG_CONFIG_MODULES )
message ( FATAL_ERROR "No pkg-config modules specified." )
endif ( )
if ( NOT ARGS_TARGET_NAME )
list ( LENGTH ARGS_PKG_CONFIG_MODULES ARGS_PKG_CONFIG_MODULES_LENGTH )
if ( ARGS_PKG_CONFIG_MODULES_LENGTH STREQUAL 1 )
list ( GET ARGS_PKG_CONFIG_MODULES 0 ARGS_TARGET_NAME )
else ( )
message ( FATAL_ERROR "No target name for multi-module pkg-config specified." )
endif ( )
endif ( )
# s k i p i f t a r g e t h a s a l r e a d y b e e n a d d e d
if ( TARGET "${ARGS_TARGET_NAME}" )
return ( )
endif ( )
find_package ( PkgConfig )
pkg_check_modules ( PKG_CHECK_MODULES_RESULT ${ ARGS_PKG_CHECK_MODULES } ${ ARGS_PKG_CONFIG_MODULES } )
# c r e a t e i n t e r f a c e l i b r a r y
add_library ( ${ ARGS_TARGET_NAME } INTERFACE IMPORTED )
if ( PKG_CONFIG_USE_STATIC_LIBS )
set ( PKG_CONFIG_CHECK_SUFFIX "_STATIC" )
else ( )
set ( PKG_CONFIG_CHECK_SUFFIX "" )
endif ( )
set_property ( TARGET ${ ARGS_TARGET_NAME } PROPERTY INTERFACE_LINK_LIBRARIES "${PKG_CHECK_MODULES_RESULT${PKG_CONFIG_CHECK_SUFFIX}_LINK_LIBRARIES}" )
set_property ( TARGET ${ ARGS_TARGET_NAME } PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${PKG_CHECK_MODULES_RESULT${PKG_CONFIG_CHECK_SUFFIX}_INCLUDE_DIRS}" )
set_property ( TARGET ${ ARGS_TARGET_NAME } PROPERTY INTERFACE_COMPILE_OPTIONS "${PKG_CHECK_MODULES_RESULT${PKG_CONFIG_CHECK_SUFFIX}_CFLAGS_OTHER}" )
set_property ( TARGET ${ ARGS_TARGET_NAME } PROPERTY INTERFACE_LINK_OPTIONS "${PKG_CHECK_MODULES_RESULT${PKG_CONFIG_CHECK_SUFFIX}_LDFLAGS_OTHER}" )
set ( "${ARGS_PKG_CONFIG_MODULES_VARIABLE}" "${${ARGS_PKG_CONFIG_MODULES_VARIABLE}};${ARGS_TARGET_NAME}" PARENT_SCOPE )
set ( "${ARGS_LIBRARIES_VARIABLE}" "${${ARGS_LIBRARIES_VARIABLE}};${ARGS_TARGET_NAME}" PARENT_SCOPE )
string ( REPLACE "::" "_" TARGET_VARNAME "${ARGS_TARGET_NAME}" )
set ( "PKG_CONFIG_${TARGET_VARNAME}" "${ARGS_PKG_CONFIG_MODULES}" PARENT_SCOPE )
endfunction ( )
# s k i p s u b s e q u e n t c o n f i g u r a t i o n i f o n l y t h e f u n c t i o n i n c l u d e s a r e w a n t e d
if ( META_NO_3RDPARTY_CONFIG )
return ( )
@ -200,6 +253,7 @@ if ((STATIC_LINKAGE AND META_PROJECT_IS_APPLICATION) OR (STATIC_LIBRARY_LINKAGE
# p r e f e r s t a t i c l i b r a r i e s
set ( OPENSSL_USE_STATIC_LIBS ON )
set ( BOOST_USE_STATIC_LIBS ON )
set ( PKG_CONFIG_USE_STATIC_LIBS ON )
configure_static_library_suffixes ( )
else ( )