Skip to content

Commit 4d86993

Browse files
committed
Avoid duplicated code for preferring static libraries
1 parent 7c2b880 commit 4d86993

File tree

2 files changed

+34
-19
lines changed

2 files changed

+34
-19
lines changed

cmake/modules/3rdParty.cmake

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,23 @@ macro (restore_default_library_suffixes)
2121
unset(DEFAULT_CMAKE_FIND_LIBRARY_SUFFIXES)
2222
endmacro ()
2323

24+
macro (save_library_preference)
25+
save_default_library_suffixes()
26+
set(DEFAULT_OPENSSL_USE_STATIC_LIBS ${OPENSSL_USE_STATIC_LIBS})
27+
set(DEFAULT_Boost_USE_STATIC_LIBS ${Boost_USE_STATIC_LIBS})
28+
set(DEFAULT_PKG_CONFIG_USE_STATIC_LIBS ${PKG_CONFIG_USE_STATIC_LIBS})
29+
endmacro ()
30+
31+
macro (restore_library_preference)
32+
restore_default_library_suffixes()
33+
set(OPENSSL_USE_STATIC_LIBS ${DEFAULT_OPENSSL_USE_STATIC_LIBS})
34+
unset(DEFAULT_OPENSSL_USE_STATIC_LIBS)
35+
set(Boost_USE_STATIC_LIBS ${DEFAULT_Boost_USE_STATIC_LIBS})
36+
unset(DEFAULT_Boost_USE_STATIC_LIBS)
37+
set(PKG_CONFIG_USE_STATIC_LIBS ${DEFAULT_PKG_CONFIG_USE_STATIC_LIBS})
38+
unset(DEFAULT_PKG_CONFIG_USE_STATIC_LIBS)
39+
endmacro ()
40+
2441
macro (configure_static_library_suffixes)
2542
# allows to look for static libraries in particular NOTE: code duplicated in Config.cmake.in
2643
if (WIN32)
@@ -41,6 +58,13 @@ macro (configure_dynamic_library_suffixes)
4158
endif ()
4259
endmacro ()
4360

61+
macro (prefer_static_libraries)
62+
set(OPENSSL_USE_STATIC_LIBS ON)
63+
set(Boost_USE_STATIC_LIBS ON)
64+
set(PKG_CONFIG_USE_STATIC_LIBS ON)
65+
configure_static_library_suffixes()
66+
endmacro ()
67+
4468
function (validate_visibility VISIBILITY)
4569
if (NOT (VISIBILITY STREQUAL PUBLIC OR VISIBILITY STREQUAL PRIVATE))
4670
message(FATAL_ERROR "Specified visibility ${VISIBILITY} is invalid (must be either PUBLIC or PRIVATE).")
@@ -494,12 +518,7 @@ if ((STATIC_LINKAGE AND META_PROJECT_IS_APPLICATION) OR (STATIC_LIBRARY_LINKAGE
494518
endif ()
495519
list(APPEND META_ADDITIONAL_LINK_FLAGS_TEST_TARGET ${STATIC_LINKAGE_LINKER_FLAGS})
496520

497-
# prefer static libraries
498-
set(OPENSSL_USE_STATIC_LIBS ON)
499-
set(Boost_USE_STATIC_LIBS ON)
500-
set(PKG_CONFIG_USE_STATIC_LIBS ON)
501-
configure_static_library_suffixes()
502-
521+
prefer_static_libraries()
503522
else ()
504523
set(STATIC_LINKAGE_CONFIGURED OFF)
505524
endif ()

cmake/templates/Config.cmake.in

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,12 @@ if(NOT TARGET "${@META_PROJECT_VARNAME_UPPER@_LIB}")
5151
# separately when using the function use_@META_PROJECT_VARNAME@.
5252

5353
# prefer static libraries if @META_PROJECT_NAME@ was configured this way during its build
54+
set(@META_PROJECT_VARNAME_UPPER@_DEFAULT_CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}")
55+
list(APPEND CMAKE_MODULE_PATH "${@META_PROJECT_VARNAME_UPPER@_MODULE_DIRS}")
56+
include(3rdParty)
5457
if (@META_PROJECT_VARNAME_UPPER@_STATIC_LINKAGE)
55-
set(@META_PROJECT_VARNAME_UPPER@_DEFAULT_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
56-
if (WIN32)
57-
set(CMAKE_FIND_LIBRARY_SUFFIXES .a .lib)
58-
else ()
59-
set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
60-
endif ()
61-
set(@META_PROJECT_VARNAME_UPPER@_DEFAULT_PKG_CONFIG_USE_STATIC_LIBS ${PKG_CONFIG_USE_STATIC_LIBS})
62-
set(PKG_CONFIG_USE_STATIC_LIBS ON)
58+
save_library_preference()
59+
prefer_static_libraries()
6360
endif ()
6461

6562
# find all required packages
@@ -86,7 +83,6 @@ if(NOT TARGET "${@META_PROJECT_VARNAME_UPPER@_LIB}")
8683

8784
# find all required pkg-config modules
8885
if (@META_PROJECT_VARNAME_UPPER@_REQUIRED_PKG_CONFIG_MODULES)
89-
include(3rdParty)
9086
foreach (@META_PROJECT_VARNAME_UPPER@_REQUIRED_PKG_CONFIG_MODULE ${@META_PROJECT_VARNAME_UPPER@_REQUIRED_PKG_CONFIG_MODULES})
9187
string(REPLACE "::" "_" @META_PROJECT_VARNAME_UPPER@_REQUIRED_PKG_CONFIG_MODULE_VARNAME "${@META_PROJECT_VARNAME_UPPER@_REQUIRED_PKG_CONFIG_MODULE}")
9288
use_pkg_config_module(
@@ -100,14 +96,14 @@ if(NOT TARGET "${@META_PROJECT_VARNAME_UPPER@_LIB}")
10096

10197
# restore preference of static libraries
10298
if (@META_PROJECT_VARNAME_UPPER@_STATIC_LINKAGE)
103-
set(CMAKE_FIND_LIBRARY_SUFFIXES ${@META_PROJECT_VARNAME_UPPER@_DEFAULT_CMAKE_FIND_LIBRARY_SUFFIXES})
104-
unset(@META_PROJECT_VARNAME_UPPER@_DEFAULT_CMAKE_FIND_LIBRARY_SUFFIXES)
105-
set(PKG_CONFIG_USE_STATIC_LIBS ${@META_PROJECT_VARNAME_UPPER@_DEFAULT_PKG_CONFIG_USE_STATIC_LIBS})
106-
unset(@META_PROJECT_VARNAME_UPPER@_DEFAULT_PKG_CONFIG_USE_STATIC_LIBS)
99+
restore_library_preference()
107100
endif ()
108101

109102
# add target for the library itself
110103
include("${CMAKE_CURRENT_LIST_DIR}/@NAMESPACE_PREFIX@@META_PROJECT_NAME@@META_CONFIG_SUFFIX@Targets.cmake")
104+
105+
# restore module path
106+
set(CMAKE_MODULE_PATH "${@META_PROJECT_VARNAME_UPPER@_DEFAULT_CMAKE_MODULE_PATH}")
111107
endif()
112108

113109
# define function to ease use of library in projects following conventions of c++utilities' build script

0 commit comments

Comments
 (0)