cmake: Rename targets to gflags[_nothreads]_(static|shared), support
find_package COMPONENTS
diff --git a/CMakeLists.txt b/CMakeLists.txt
index bd81648..68f9ea3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -15,7 +15,7 @@
## When this project is a subproject (GFLAGS_IS_SUBPROJECT is TRUE), the default
## settings are such that only the static single-threaded library is built without
## installation of the gflags files. The "gflags" target is in this case an ALIAS
-## library target for the "gflags_nothreads-static" library target. Targets which
+## library target for the "gflags_nothreads_static" library target. Targets which
## depend on the gflags library should link to the "gflags" library target.
##
## Example CMakeLists.txt of user project which requires separate gflags installation:
@@ -28,6 +28,16 @@
## add_executable(foo src/foo.cc)
## target_link_libraries(foo gflags)
##
+## Example CMakeLists.txt of user project which requires separate single-threaded static gflags installation:
+## cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
+##
+## project(Foo)
+##
+## find_package(gflags COMPONENTS nothreads_static)
+##
+## add_executable(foo src/foo.cc)
+## target_link_libraries(foo gflags)
+##
## Example CMakeLists.txt of super-project which contains gflags source tree:
## cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
##
@@ -411,12 +421,12 @@
# multi-threaded vs. single-threaded
foreach (opts IN ITEMS "" _nothreads)
if (BUILD_gflags${opts}_LIB)
- add_library (gflags${opts}-${type} ${TYPE} ${GFLAGS_SRCS} ${PRIVATE_HDRS} ${PUBLIC_HDRS})
+ add_library (gflags${opts}_${type} ${TYPE} ${GFLAGS_SRCS} ${PRIVATE_HDRS} ${PUBLIC_HDRS})
set (include_dirs "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>")
if (INSTALL_HEADERS)
list (APPEND include_dirs "$<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>")
endif ()
- target_include_directories (gflags${opts}-${type}
+ target_include_directories (gflags${opts}_${type}
PUBLIC "${include_dirs}"
PRIVATE "${PROJECT_SOURCE_DIR}/src;${PROJECT_BINARY_DIR}/include/${GFLAGS_INCLUDE_DIR}"
)
@@ -425,25 +435,25 @@
else ()
set (defines "GFLAGS_IS_A_DLL=${GFLAGS_IS_A_DLL}")
if (CMAKE_USE_PTHREADS_INIT)
- target_link_libraries (gflags${opts}-${type} ${CMAKE_THREAD_LIBS_INIT})
+ target_link_libraries (gflags${opts}_${type} ${CMAKE_THREAD_LIBS_INIT})
endif ()
endif ()
set_target_properties (
- gflags${opts}-${type} PROPERTIES COMPILE_DEFINITIONS "${defines}"
+ gflags${opts}_${type} PROPERTIES COMPILE_DEFINITIONS "${defines}"
OUTPUT_NAME "gflags${opts}${type_suffix}"
VERSION "${PACKAGE_VERSION}"
SOVERSION "${PACKAGE_SOVERSION}"
)
if (HAVE_SHLWAPI_H)
- target_link_libraries (gflags${opts}-${type} shlwapi.lib)
+ target_link_libraries (gflags${opts}_${type} shlwapi.lib)
endif ()
- list (APPEND TARGETS gflags${opts}-${type})
+ list (APPEND TARGETS gflags${opts}_${type})
# add convenience make target for build of both shared and static libraries
if (NOT GFLAGS_IS_SUBPROJECT)
if (NOT TARGET gflags${opts})
add_custom_target (gflags${opts})
endif ()
- add_dependencies (gflags${opts} gflags${opts}-${type})
+ add_dependencies (gflags${opts} gflags${opts}_${type})
endif ()
endif ()
endforeach ()
@@ -454,8 +464,8 @@
if (GFLAGS_IS_SUBPROJECT)
foreach (type IN ITEMS static shared)
foreach (opts IN ITEMS "_nothreads" "")
- if (TARGET gflags${opts}-${type})
- add_library (gflags ALIAS gflags${opts}-${type})
+ if (TARGET gflags${opts}_${type})
+ add_library (gflags ALIAS gflags${opts}_${type})
break ()
endif ()
endforeach ()
@@ -474,14 +484,14 @@
if (BUILD_SHARED_LIBS AND INSTALL_SHARED_LIBS)
foreach (opts IN ITEMS "" _nothreads)
if (BUILD_gflags${opts}_LIB)
- install (TARGETS gflags${opts}-shared DESTINATION ${LIBRARY_INSTALL_DIR} EXPORT gflags-lib)
+ install (TARGETS gflags${opts}_shared DESTINATION ${LIBRARY_INSTALL_DIR} EXPORT gflags-lib)
endif ()
endforeach ()
endif ()
if (BUILD_STATIC_LIBS AND INSTALL_STATIC_LIBS)
foreach (opts IN ITEMS "" _nothreads)
if (BUILD_gflags${opts}_LIB)
- install (TARGETS gflags${opts}-static DESTINATION ${LIBRARY_INSTALL_DIR} EXPORT gflags-lib)
+ install (TARGETS gflags${opts}_static DESTINATION ${LIBRARY_INSTALL_DIR} EXPORT gflags-lib)
endif ()
endforeach ()
endif ()
@@ -497,7 +507,7 @@
FILES "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-version.cmake"
DESTINATION ${CONFIG_INSTALL_DIR}
)
- install (EXPORT gflags-lib DESTINATION ${CONFIG_INSTALL_DIR} FILE ${PACKAGE_NAME}-export.cmake)
+ install (EXPORT gflags-lib DESTINATION ${CONFIG_INSTALL_DIR} FILE ${PACKAGE_NAME}-targets.cmake)
if (UNIX)
install (PROGRAMS src/gflags_completions.sh DESTINATION ${RUNTIME_INSTALL_DIR})
endif ()
@@ -506,7 +516,7 @@
# ----------------------------------------------------------------------------
# support direct use of build tree
set (INSTALL_PREFIX_REL2CONFIG_DIR .)
-export (TARGETS ${TARGETS} FILE "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-export.cmake")
+export (TARGETS ${TARGETS} FILE "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-targets.cmake")
export (PACKAGE gflags)
configure_file (cmake/config.cmake.in "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config.cmake" @ONLY)
diff --git a/cmake/config.cmake.in b/cmake/config.cmake.in
index 8703b30..6b55990 100644
--- a/cmake/config.cmake.in
+++ b/cmake/config.cmake.in
@@ -7,7 +7,7 @@
set (@PACKAGE_PREFIX@_VERSION_PATCH @PACKAGE_VERSION_PATCH@)
# import targets
-include ("${CMAKE_CURRENT_LIST_DIR}/@PACKAGE_NAME@-export.cmake")
+include ("${CMAKE_CURRENT_LIST_DIR}/@PACKAGE_NAME@-targets.cmake")
# installation prefix
get_filename_component (CMAKE_CURRENT_LIST_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
@@ -20,20 +20,51 @@
# manually to the include search path for targets which link to gflags.
set (@PACKAGE_PREFIX@_INCLUDE_DIR "${_INSTALL_PREFIX}/@INCLUDE_INSTALL_DIR@")
-# default settings
+if (@PACKAGE_NAME@_FIND_COMPONENTS)
+ foreach (@PACKAGE_NAME@_FIND_COMPONENT IN LISTS @PACKAGE_NAME@_FIND_COMPONENTS)
+ if (@PACKAGE_NAME@_FIND_REQUIRED_${@PACKAGE_NAME@_FIND_COMPONENT} AND NOT TARGET @PACKAGE_NAME@_${@PACKAGE_NAME@_FIND_COMPONENT})
+ message (FATAL_ERROR "Package @PACKAGE_NAME@ was installed without required component ${@PACKAGE_NAME@_FIND_COMPONENT}!")
+ endif ()
+ endforeach ()
+ list (GET @PACKAGE_NAME@_FIND_COMPONENTS 0 @PACKAGE_NAME@_FIND_COMPONENT)
+else ()
+ set (@PACKAGE_NAME@_FIND_COMPONENT)
+endif ()
+
+# default settings of @PACKAGE_PREFIX@_SHARED and @PACKAGE_PREFIX@_NOTHREADS
+#
+# It is recommended to use either one of the following find_package commands
+# instead of setting the @PACKAGE_PREFIX@_(SHARED|NOTHREADS) variables:
+# - find_package(@PACKAGE_NAME@ REQUIRED)
+# - find_package(@PACKAGE_NAME@ COMPONENTS nothreads_static)
+# - find_package(@PACKAGE_NAME@ COMPONENTS nothreads_shared)
+# - find_package(@PACKAGE_NAME@ COMPONENTS static)
+# - find_package(@PACKAGE_NAME@ COMPONENTS shared)
if (NOT DEFINED @PACKAGE_PREFIX@_SHARED)
if (DEFINED @PACKAGE_NAME@_SHARED)
set (@PACKAGE_PREFIX@_SHARED ${@PACKAGE_NAME@_SHARED})
- elseif (TARGET @PACKAGE_NAME@-static OR TARGET @PACKAGE_NAME@_nothreads-static)
- set (@PACKAGE_PREFIX@_SHARED FALSE)
- else ()
+ elseif (@PACKAGE_NAME@_FIND_COMPONENT)
+ if (@PACKAGE_NAME@_FIND_COMPONENT MATCHES "shared")
+ set (@PACKAGE_PREFIX@_SHARED TRUE)
+ else ()
+ set (@PACKAGE_PREFIX@_SHARED FALSE)
+ endif ()
+ elseif (TARGET @PACKAGE_NAME@_shared OR TARGET @PACKAGE_NAME@_nothreads_shared)
set (@PACKAGE_PREFIX@_SHARED TRUE)
+ else ()
+ set (@PACKAGE_PREFIX@_SHARED FALSE)
endif ()
endif ()
if (NOT DEFINED @PACKAGE_PREFIX@_NOTHREADS)
if (DEFINED @PACKAGE_NAME@_NOTHREADS)
set (@PACKAGE_PREFIX@_NOTHREADS ${@PACKAGE_NAME@_NOTHREADS})
- elseif (TARGET @PACKAGE_NAME@-static OR TARGET @PACKAGE_NAME@-shared)
+ elseif (@PACKAGE_NAME@_FIND_COMPONENT)
+ if (@PACKAGE_NAME@_FIND_COMPONENT MATCHES "nothreads")
+ set (@PACKAGE_PREFIX@_NOTHREADS TRUE)
+ else ()
+ set (@PACKAGE_PREFIX@_NOTHREADS FALSE)
+ endif ()
+ elseif (TARGET @PACKAGE_NAME@_static OR TARGET @PACKAGE_NAME@_shared)
set (@PACKAGE_PREFIX@_NOTHREADS FALSE)
else ()
set (@PACKAGE_PREFIX@_NOTHREADS TRUE)
@@ -46,15 +77,15 @@
set (@PACKAGE_PREFIX@_TARGET ${@PACKAGE_NAME@_TARGET})
elseif (@PACKAGE_PREFIX@_SHARED)
if (@PACKAGE_PREFIX@_NOTHREADS)
- set (@PACKAGE_PREFIX@_TARGET @PACKAGE_NAME@_nothreads-shared)
+ set (@PACKAGE_PREFIX@_TARGET @PACKAGE_NAME@_nothreads_shared)
else ()
- set (@PACKAGE_PREFIX@_TARGET @PACKAGE_NAME@-shared)
+ set (@PACKAGE_PREFIX@_TARGET @PACKAGE_NAME@_shared)
endif ()
else ()
if (@PACKAGE_PREFIX@_NOTHREADS)
- set (@PACKAGE_PREFIX@_TARGET @PACKAGE_NAME@_nothreads-static)
+ set (@PACKAGE_PREFIX@_TARGET @PACKAGE_NAME@_nothreads_static)
else ()
- set (@PACKAGE_PREFIX@_TARGET @PACKAGE_NAME@-static)
+ set (@PACKAGE_PREFIX@_TARGET @PACKAGE_NAME@_static)
endif ()
endif ()
endif ()
@@ -133,4 +164,5 @@
endif ()
# unset private variables
+unset (@PACKAGE_NAME@_FIND_COMPONENT)
unset (_INSTALL_PREFIX)
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 77b582f..2119943 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -22,9 +22,9 @@
set (type static)
endif ()
if (BUILD_gflags_LIB)
- link_libraries (gflags-${type})
+ link_libraries (gflags_${type})
else ()
- link_libraries (gflags_nothreads-${type})
+ link_libraries (gflags_nothreads_${type})
endif ()
# ----------------------------------------------------------------------------