1*08ab5237SOystein Eftevaag## CMake configuration file of gflags project 2*08ab5237SOystein Eftevaag## 3*08ab5237SOystein Eftevaag## This CMakeLists.txt defines some gflags specific configuration variables 4*08ab5237SOystein Eftevaag## using the "gflags_define" utility macro. The default values of these variables 5*08ab5237SOystein Eftevaag## can be overridden either on the CMake command-line using the -D option of 6*08ab5237SOystein Eftevaag## the cmake command or in a super-project which includes the gflags source 7*08ab5237SOystein Eftevaag## tree by setting the GFLAGS_<varname> CMake variables before adding the 8*08ab5237SOystein Eftevaag## gflags source directory via CMake's "add_subdirectory" command. Only when 9*08ab5237SOystein Eftevaag## the non-cached variable GFLAGS_IS_SUBPROJECT has a value equivalent to FALSE, 10*08ab5237SOystein Eftevaag## these configuration variables are added to the CMake cache so they can be 11*08ab5237SOystein Eftevaag## edited in the CMake GUI. By default, GFLAGS_IS_SUBPROJECT is set to TRUE when 12*08ab5237SOystein Eftevaag## the CMAKE_SOURCE_DIR is not identical to the directory of this CMakeLists.txt 13*08ab5237SOystein Eftevaag## file, i.e., the top-level directory of the gflags project source tree. 14*08ab5237SOystein Eftevaag## 15*08ab5237SOystein Eftevaag## When this project is a subproject (GFLAGS_IS_SUBPROJECT is TRUE), the default 16*08ab5237SOystein Eftevaag## settings are such that only the static single-threaded library is built without 17*08ab5237SOystein Eftevaag## installation of the gflags files. The "gflags::gflags" target is in this case an ALIAS 18*08ab5237SOystein Eftevaag## library target for the "gflags_nothreads_static" library target. Targets which 19*08ab5237SOystein Eftevaag## depend on the gflags library should link to the "gflags::gflags" library target. 20*08ab5237SOystein Eftevaag## 21*08ab5237SOystein Eftevaag## Example CMakeLists.txt of user project which requires separate gflags installation: 22*08ab5237SOystein Eftevaag## cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR) 23*08ab5237SOystein Eftevaag## 24*08ab5237SOystein Eftevaag## project(Foo) 25*08ab5237SOystein Eftevaag## 26*08ab5237SOystein Eftevaag## find_package(gflags REQUIRED) 27*08ab5237SOystein Eftevaag## 28*08ab5237SOystein Eftevaag## add_executable(foo src/foo.cc) 29*08ab5237SOystein Eftevaag## target_link_libraries(foo gflags::gflags) 30*08ab5237SOystein Eftevaag## 31*08ab5237SOystein Eftevaag## Example CMakeLists.txt of user project which requires separate single-threaded static gflags installation: 32*08ab5237SOystein Eftevaag## cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR) 33*08ab5237SOystein Eftevaag## 34*08ab5237SOystein Eftevaag## project(Foo) 35*08ab5237SOystein Eftevaag## 36*08ab5237SOystein Eftevaag## find_package(gflags COMPONENTS nothreads_static) 37*08ab5237SOystein Eftevaag## 38*08ab5237SOystein Eftevaag## add_executable(foo src/foo.cc) 39*08ab5237SOystein Eftevaag## target_link_libraries(foo gflags::gflags) 40*08ab5237SOystein Eftevaag## 41*08ab5237SOystein Eftevaag## Example CMakeLists.txt of super-project which contains gflags source tree: 42*08ab5237SOystein Eftevaag## cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR) 43*08ab5237SOystein Eftevaag## 44*08ab5237SOystein Eftevaag## project(Foo) 45*08ab5237SOystein Eftevaag## 46*08ab5237SOystein Eftevaag## add_subdirectory(gflags) 47*08ab5237SOystein Eftevaag## 48*08ab5237SOystein Eftevaag## add_executable(foo src/foo.cc) 49*08ab5237SOystein Eftevaag## target_link_libraries(foo gflags::gflags) 50*08ab5237SOystein Eftevaag## 51*08ab5237SOystein Eftevaag## Variables to configure the source files: 52*08ab5237SOystein Eftevaag## - GFLAGS_IS_A_DLL 53*08ab5237SOystein Eftevaag## - GFLAGS_NAMESPACE 54*08ab5237SOystein Eftevaag## - GFLAGS_ATTRIBUTE_UNUSED 55*08ab5237SOystein Eftevaag## - GFLAGS_INTTYPES_FORMAT 56*08ab5237SOystein Eftevaag## 57*08ab5237SOystein Eftevaag## Variables to configure the build: 58*08ab5237SOystein Eftevaag## - GFLAGS_SOVERSION 59*08ab5237SOystein Eftevaag## - GFLAGS_BUILD_SHARED_LIBS 60*08ab5237SOystein Eftevaag## - GFLAGS_BUILD_STATIC_LIBS 61*08ab5237SOystein Eftevaag## - GFLAGS_BUILD_gflags_LIB 62*08ab5237SOystein Eftevaag## - GFLAGS_BUILD_gflags_nothreads_LIB 63*08ab5237SOystein Eftevaag## - GFLAGS_BUILD_TESTING 64*08ab5237SOystein Eftevaag## - GFLAGS_BUILD_PACKAGING 65*08ab5237SOystein Eftevaag## 66*08ab5237SOystein Eftevaag## Variables to configure the installation: 67*08ab5237SOystein Eftevaag## - GFLAGS_INCLUDE_DIR 68*08ab5237SOystein Eftevaag## - GFLAGS_LIBRARY_INSTALL_DIR or LIB_INSTALL_DIR or LIB_SUFFIX 69*08ab5237SOystein Eftevaag## - GFLAGS_INSTALL_HEADERS 70*08ab5237SOystein Eftevaag## - GFLAGS_INSTALL_SHARED_LIBS 71*08ab5237SOystein Eftevaag## - GFLAGS_INSTALL_STATIC_LIBS 72*08ab5237SOystein Eftevaag 73*08ab5237SOystein Eftevaagcmake_minimum_required (VERSION 3.0.2 FATAL_ERROR) 74*08ab5237SOystein Eftevaag 75*08ab5237SOystein Eftevaagif (POLICY CMP0042) 76*08ab5237SOystein Eftevaag cmake_policy (SET CMP0042 NEW) 77*08ab5237SOystein Eftevaagendif () 78*08ab5237SOystein Eftevaag 79*08ab5237SOystein Eftevaagif (POLICY CMP0048) 80*08ab5237SOystein Eftevaag cmake_policy (SET CMP0048 NEW) 81*08ab5237SOystein Eftevaagendif () 82*08ab5237SOystein Eftevaag 83*08ab5237SOystein Eftevaag# ---------------------------------------------------------------------------- 84*08ab5237SOystein Eftevaag# includes 85*08ab5237SOystein Eftevaaginclude ("${CMAKE_CURRENT_SOURCE_DIR}/cmake/utils.cmake") 86*08ab5237SOystein Eftevaag 87*08ab5237SOystein Eftevaag# ---------------------------------------------------------------------------- 88*08ab5237SOystein Eftevaag# package information 89*08ab5237SOystein Eftevaagset (PACKAGE_NAME "gflags") 90*08ab5237SOystein Eftevaagset (PACKAGE_VERSION "2.2.2") 91*08ab5237SOystein Eftevaagset (PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") 92*08ab5237SOystein Eftevaagset (PACKAGE_TARNAME "${PACKAGE_NAME}-${PACKAGE_VERSION}") 93*08ab5237SOystein Eftevaagset (PACKAGE_BUGREPORT "https://github.com/gflags/gflags/issues") 94*08ab5237SOystein Eftevaagset (PACKAGE_DESCRIPTION "A commandline flags library that allows for distributed flags.") 95*08ab5237SOystein Eftevaagset (PACKAGE_URL "http://gflags.github.io/gflags") 96*08ab5237SOystein Eftevaag 97*08ab5237SOystein Eftevaagproject (${PACKAGE_NAME} VERSION ${PACKAGE_VERSION} LANGUAGES CXX) 98*08ab5237SOystein Eftevaagif (CMAKE_VERSION VERSION_LESS 3.4) 99*08ab5237SOystein Eftevaag # C language still needed because the following required CMake modules 100*08ab5237SOystein Eftevaag # (or their dependencies, respectively) are not correctly handling 101*08ab5237SOystein Eftevaag # the case where only CXX is enabled 102*08ab5237SOystein Eftevaag # - CheckTypeSize.cmake (fixed in CMake 3.1, cf. https://cmake.org/Bug/view.php?id=14056) 103*08ab5237SOystein Eftevaag # - FindThreads.cmake (fixed in CMake 3.4, cf. https://cmake.org/Bug/view.php?id=14905) 104*08ab5237SOystein Eftevaag enable_language (C) 105*08ab5237SOystein Eftevaagendif () 106*08ab5237SOystein Eftevaag 107*08ab5237SOystein Eftevaagversion_numbers ( 108*08ab5237SOystein Eftevaag ${PACKAGE_VERSION} 109*08ab5237SOystein Eftevaag PACKAGE_VERSION_MAJOR 110*08ab5237SOystein Eftevaag PACKAGE_VERSION_MINOR 111*08ab5237SOystein Eftevaag PACKAGE_VERSION_PATCH 112*08ab5237SOystein Eftevaag) 113*08ab5237SOystein Eftevaag 114*08ab5237SOystein Eftevaag# shared library ABI version number, can be overridden by package maintainers 115*08ab5237SOystein Eftevaag# using -DGFLAGS_SOVERSION=XXX on the command-line 116*08ab5237SOystein Eftevaagif (GFLAGS_SOVERSION) 117*08ab5237SOystein Eftevaag set (PACKAGE_SOVERSION "${GFLAGS_SOVERSION}") 118*08ab5237SOystein Eftevaagelse () 119*08ab5237SOystein Eftevaag # TODO: Change default SOVERSION back to PACKAGE_VERSION_MAJOR with the 120*08ab5237SOystein Eftevaag # next increase of major version number (i.e., 3.0.0 -> SOVERSION 3) 121*08ab5237SOystein Eftevaag # The <major>.<minor> SOVERSION should be used for the 2.x releases 122*08ab5237SOystein Eftevaag # versions only which temporarily broke the API by changing the default 123*08ab5237SOystein Eftevaag # namespace from "google" to "gflags". 124*08ab5237SOystein Eftevaag set (PACKAGE_SOVERSION "${PACKAGE_VERSION_MAJOR}.${PACKAGE_VERSION_MINOR}") 125*08ab5237SOystein Eftevaagendif () 126*08ab5237SOystein Eftevaag 127*08ab5237SOystein Eftevaag# when gflags is included as subproject (e.g., as Git submodule/subtree) in the source 128*08ab5237SOystein Eftevaag# tree of a project that uses it, no variables should be added to the CMake cache; 129*08ab5237SOystein Eftevaag# users may set the non-cached variable GFLAGS_IS_SUBPROJECT before add_subdirectory(gflags) 130*08ab5237SOystein Eftevaagif (NOT DEFINED GFLAGS_IS_SUBPROJECT) 131*08ab5237SOystein Eftevaag if ("^${CMAKE_SOURCE_DIR}$" STREQUAL "^${PROJECT_SOURCE_DIR}$") 132*08ab5237SOystein Eftevaag set (GFLAGS_IS_SUBPROJECT FALSE) 133*08ab5237SOystein Eftevaag else () 134*08ab5237SOystein Eftevaag set (GFLAGS_IS_SUBPROJECT TRUE) 135*08ab5237SOystein Eftevaag endif () 136*08ab5237SOystein Eftevaagendif () 137*08ab5237SOystein Eftevaag 138*08ab5237SOystein Eftevaag# prefix for package variables in CMake configuration file 139*08ab5237SOystein Eftevaagstring (TOUPPER "${PACKAGE_NAME}" PACKAGE_PREFIX) 140*08ab5237SOystein Eftevaag 141*08ab5237SOystein Eftevaag# convert file path on Windows with back slashes to path with forward slashes 142*08ab5237SOystein Eftevaag# otherwise this causes an issue with the cmake_install.cmake script 143*08ab5237SOystein Eftevaagfile (TO_CMAKE_PATH "${CMAKE_INSTALL_PREFIX}" CMAKE_INSTALL_PREFIX) 144*08ab5237SOystein Eftevaag 145*08ab5237SOystein Eftevaag# ---------------------------------------------------------------------------- 146*08ab5237SOystein Eftevaag# options 147*08ab5237SOystein Eftevaag 148*08ab5237SOystein Eftevaag# maintain binary backwards compatibility with gflags library version <= 2.0, 149*08ab5237SOystein Eftevaag# but at the same time enable the use of the preferred new "gflags" namespace 150*08ab5237SOystein Eftevaaggflags_define (STRING NAMESPACE "Name(s) of library namespace (separate multiple options by semicolon)" "google;${PACKAGE_NAME}" "${PACKAGE_NAME}") 151*08ab5237SOystein Eftevaaggflags_property (NAMESPACE ADVANCED TRUE) 152*08ab5237SOystein Eftevaagset (GFLAGS_NAMESPACE_SECONDARY "${NAMESPACE}") 153*08ab5237SOystein Eftevaaglist (REMOVE_DUPLICATES GFLAGS_NAMESPACE_SECONDARY) 154*08ab5237SOystein Eftevaagif (NOT GFLAGS_NAMESPACE_SECONDARY) 155*08ab5237SOystein Eftevaag message (FATAL_ERROR "GFLAGS_NAMESPACE must be set to one (or more) valid C++ namespace identifier(s separated by semicolon \";\").") 156*08ab5237SOystein Eftevaagendif () 157*08ab5237SOystein Eftevaagforeach (ns IN LISTS GFLAGS_NAMESPACE_SECONDARY) 158*08ab5237SOystein Eftevaag if (NOT ns MATCHES "^[a-zA-Z][a-zA-Z0-9_]*$") 159*08ab5237SOystein Eftevaag message (FATAL_ERROR "GFLAGS_NAMESPACE contains invalid namespace identifier: ${ns}") 160*08ab5237SOystein Eftevaag endif () 161*08ab5237SOystein Eftevaagendforeach () 162*08ab5237SOystein Eftevaaglist (GET GFLAGS_NAMESPACE_SECONDARY 0 GFLAGS_NAMESPACE) 163*08ab5237SOystein Eftevaaglist (REMOVE_AT GFLAGS_NAMESPACE_SECONDARY 0) 164*08ab5237SOystein Eftevaag 165*08ab5237SOystein Eftevaag# cached build options when gflags is not a subproject, otherwise non-cached CMake variables 166*08ab5237SOystein Eftevaag# usage: gflags_define(BOOL <name> <doc> <default> [<subproject default>]) 167*08ab5237SOystein Eftevaaggflags_define (BOOL BUILD_SHARED_LIBS "Request build of shared libraries." OFF OFF) 168*08ab5237SOystein Eftevaaggflags_define (BOOL BUILD_STATIC_LIBS "Request build of static libraries (default if BUILD_SHARED_LIBS is OFF)." OFF ON) 169*08ab5237SOystein Eftevaaggflags_define (BOOL BUILD_gflags_LIB "Request build of the multi-threaded gflags library." ON OFF) 170*08ab5237SOystein Eftevaaggflags_define (BOOL BUILD_gflags_nothreads_LIB "Request build of the single-threaded gflags library." ON ON) 171*08ab5237SOystein Eftevaaggflags_define (BOOL BUILD_PACKAGING "Enable build of distribution packages using CPack." OFF OFF) 172*08ab5237SOystein Eftevaaggflags_define (BOOL BUILD_TESTING "Enable build of the unit tests and their execution using CTest." OFF OFF) 173*08ab5237SOystein Eftevaaggflags_define (BOOL INSTALL_HEADERS "Request installation of headers and other development files." ON OFF) 174*08ab5237SOystein Eftevaaggflags_define (BOOL INSTALL_SHARED_LIBS "Request installation of shared libraries." ON ON) 175*08ab5237SOystein Eftevaaggflags_define (BOOL INSTALL_STATIC_LIBS "Request installation of static libraries." ON OFF) 176*08ab5237SOystein Eftevaaggflags_define (BOOL REGISTER_BUILD_DIR "Request entry of build directory in CMake's package registry." OFF OFF) 177*08ab5237SOystein Eftevaaggflags_define (BOOL REGISTER_INSTALL_PREFIX "Request entry of installed package in CMake's package registry." ON OFF) 178*08ab5237SOystein Eftevaag 179*08ab5237SOystein Eftevaaggflags_property (BUILD_STATIC_LIBS ADVANCED TRUE) 180*08ab5237SOystein Eftevaaggflags_property (INSTALL_HEADERS ADVANCED TRUE) 181*08ab5237SOystein Eftevaaggflags_property (INSTALL_SHARED_LIBS ADVANCED TRUE) 182*08ab5237SOystein Eftevaaggflags_property (INSTALL_STATIC_LIBS ADVANCED TRUE) 183*08ab5237SOystein Eftevaag 184*08ab5237SOystein Eftevaagif (NOT GFLAGS_IS_SUBPROJECT) 185*08ab5237SOystein Eftevaag foreach (varname IN ITEMS CMAKE_INSTALL_PREFIX) 186*08ab5237SOystein Eftevaag gflags_property (${varname} ADVANCED FALSE) 187*08ab5237SOystein Eftevaag endforeach () 188*08ab5237SOystein Eftevaag foreach (varname IN ITEMS CMAKE_CONFIGURATION_TYPES CMAKE_OSX_ARCHITECTURES CMAKE_OSX_DEPLOYMENT_TARGET CMAKE_OSX_SYSROOT) 189*08ab5237SOystein Eftevaag gflags_property (${varname} ADVANCED TRUE) 190*08ab5237SOystein Eftevaag endforeach () 191*08ab5237SOystein Eftevaag if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS) 192*08ab5237SOystein Eftevaag gflags_set (CMAKE_BUILD_TYPE Release) 193*08ab5237SOystein Eftevaag endif () 194*08ab5237SOystein Eftevaag if (CMAKE_CONFIGURATION_TYPES) 195*08ab5237SOystein Eftevaag gflags_property (CMAKE_BUILD_TYPE STRINGS "${CMAKE_CONFIGURATION_TYPES}") 196*08ab5237SOystein Eftevaag endif () 197*08ab5237SOystein Eftevaagendif () # NOT GFLAGS_IS_SUBPROJECT 198*08ab5237SOystein Eftevaag 199*08ab5237SOystein Eftevaagif (NOT BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS) 200*08ab5237SOystein Eftevaag set (BUILD_STATIC_LIBS ON) 201*08ab5237SOystein Eftevaagendif () 202*08ab5237SOystein Eftevaagif (NOT BUILD_gflags_LIB AND NOT BUILD_gflags_nothreads_LIB) 203*08ab5237SOystein Eftevaag message (FATAL_ERROR "At least one of [GFLAGS_]BUILD_gflags_LIB and [GFLAGS_]BUILD_gflags_nothreads_LIB must be ON.") 204*08ab5237SOystein Eftevaagendif () 205*08ab5237SOystein Eftevaag 206*08ab5237SOystein Eftevaaggflags_define (STRING INCLUDE_DIR "Name of include directory of installed header files relative to CMAKE_INSTALL_PREFIX/include/" "${PACKAGE_NAME}") 207*08ab5237SOystein Eftevaaggflags_property (INCLUDE_DIR ADVANCED TRUE) 208*08ab5237SOystein Eftevaagfile (TO_CMAKE_PATH "${INCLUDE_DIR}" INCLUDE_DIR) 209*08ab5237SOystein Eftevaagif (IS_ABSOLUTE INCLUDE_DIR) 210*08ab5237SOystein Eftevaag message (FATAL_ERROR "[GFLAGS_]INCLUDE_DIR must be a path relative to CMAKE_INSTALL_PREFIX/include/") 211*08ab5237SOystein Eftevaagendif () 212*08ab5237SOystein Eftevaagif (INCLUDE_DIR MATCHES "^\\.\\.[/\\]") 213*08ab5237SOystein Eftevaag message (FATAL_ERROR "[GFLAGS_]INCLUDE_DIR must not start with parent directory reference (../)") 214*08ab5237SOystein Eftevaagendif () 215*08ab5237SOystein Eftevaagset (GFLAGS_INCLUDE_DIR "${INCLUDE_DIR}") 216*08ab5237SOystein Eftevaag 217*08ab5237SOystein Eftevaag# ---------------------------------------------------------------------------- 218*08ab5237SOystein Eftevaag# system checks 219*08ab5237SOystein Eftevaaginclude (CheckTypeSize) 220*08ab5237SOystein Eftevaaginclude (CheckIncludeFileCXX) 221*08ab5237SOystein Eftevaaginclude (CheckCXXSymbolExists) 222*08ab5237SOystein Eftevaag 223*08ab5237SOystein Eftevaagif (WIN32 AND NOT CYGWIN) 224*08ab5237SOystein Eftevaag set (OS_WINDOWS 1) 225*08ab5237SOystein Eftevaagelse () 226*08ab5237SOystein Eftevaag set (OS_WINDOWS 0) 227*08ab5237SOystein Eftevaagendif () 228*08ab5237SOystein Eftevaag 229*08ab5237SOystein Eftevaagif (MSVC) 230*08ab5237SOystein Eftevaag set (HAVE_SYS_TYPES_H 1) 231*08ab5237SOystein Eftevaag set (HAVE_STDDEF_H 1) # used by CheckTypeSize module 232*08ab5237SOystein Eftevaag set (HAVE_UNISTD_H 0) 233*08ab5237SOystein Eftevaag set (HAVE_SYS_STAT_H 1) 234*08ab5237SOystein Eftevaag set (HAVE_SHLWAPI_H 1) 235*08ab5237SOystein Eftevaag if (MSVC_VERSION VERSION_LESS 1600) 236*08ab5237SOystein Eftevaag check_include_file_cxx ("stdint.h" HAVE_STDINT_H) 237*08ab5237SOystein Eftevaag bool_to_int (HAVE_STDINT_H) # used in #if directive 238*08ab5237SOystein Eftevaag else () 239*08ab5237SOystein Eftevaag set (HAVE_STDINT_H 1) 240*08ab5237SOystein Eftevaag endif () 241*08ab5237SOystein Eftevaag if (MSVC_VERSION VERSION_LESS 1800) 242*08ab5237SOystein Eftevaag check_include_file_cxx ("inttypes.h" HAVE_INTTYPES_H) 243*08ab5237SOystein Eftevaag bool_to_int (HAVE_INTTYPES_H) # used in #if directive 244*08ab5237SOystein Eftevaag else () 245*08ab5237SOystein Eftevaag set (HAVE_INTTYPES_H 1) 246*08ab5237SOystein Eftevaag endif () 247*08ab5237SOystein Eftevaagelse () 248*08ab5237SOystein Eftevaag foreach (fname IN ITEMS unistd stdint inttypes sys/types sys/stat fnmatch) 249*08ab5237SOystein Eftevaag string (TOUPPER "${fname}" FNAME) 250*08ab5237SOystein Eftevaag string (REPLACE "/" "_" FNAME "${FNAME}") 251*08ab5237SOystein Eftevaag if (NOT HAVE_${FNAME}_H) 252*08ab5237SOystein Eftevaag check_include_file_cxx ("${fname}.h" HAVE_${FNAME}_H) 253*08ab5237SOystein Eftevaag endif () 254*08ab5237SOystein Eftevaag endforeach () 255*08ab5237SOystein Eftevaag if (NOT HAVE_FNMATCH_H AND OS_WINDOWS) 256*08ab5237SOystein Eftevaag check_include_file_cxx ("shlwapi.h" HAVE_SHLWAPI_H) 257*08ab5237SOystein Eftevaag endif () 258*08ab5237SOystein Eftevaag # the following are used in #if directives not #ifdef 259*08ab5237SOystein Eftevaag bool_to_int (HAVE_STDINT_H) 260*08ab5237SOystein Eftevaag bool_to_int (HAVE_SYS_TYPES_H) 261*08ab5237SOystein Eftevaag bool_to_int (HAVE_INTTYPES_H) 262*08ab5237SOystein Eftevaagendif () 263*08ab5237SOystein Eftevaag 264*08ab5237SOystein Eftevaaggflags_define (STRING INTTYPES_FORMAT "Format of integer types: \"C99\" (uint32_t), \"BSD\" (u_int32_t), \"VC7\" (__int32)" "") 265*08ab5237SOystein Eftevaaggflags_property (INTTYPES_FORMAT STRINGS "C99;BSD;VC7") 266*08ab5237SOystein Eftevaaggflags_property (INTTYPES_FORMAT ADVANCED TRUE) 267*08ab5237SOystein Eftevaagif (NOT INTTYPES_FORMAT) 268*08ab5237SOystein Eftevaag set (TYPES uint32_t u_int32_t) 269*08ab5237SOystein Eftevaag if (MSVC) 270*08ab5237SOystein Eftevaag list (INSERT TYPES 0 __int32) 271*08ab5237SOystein Eftevaag endif () 272*08ab5237SOystein Eftevaag foreach (type IN LISTS TYPES) 273*08ab5237SOystein Eftevaag check_type_size (${type} ${type} LANGUAGE CXX) 274*08ab5237SOystein Eftevaag if (HAVE_${type}) 275*08ab5237SOystein Eftevaag break () 276*08ab5237SOystein Eftevaag endif () 277*08ab5237SOystein Eftevaag endforeach () 278*08ab5237SOystein Eftevaag if (HAVE_uint32_t) 279*08ab5237SOystein Eftevaag gflags_set (INTTYPES_FORMAT C99) 280*08ab5237SOystein Eftevaag elseif (HAVE_u_int32_t) 281*08ab5237SOystein Eftevaag gflags_set (INTTYPES_FORMAT BSD) 282*08ab5237SOystein Eftevaag elseif (HAVE___int32) 283*08ab5237SOystein Eftevaag gflags_set (INTTYPES_FORMAT VC7) 284*08ab5237SOystein Eftevaag else () 285*08ab5237SOystein Eftevaag gflags_property (INTTYPES_FORMAT ADVANCED FALSE) 286*08ab5237SOystein Eftevaag message (FATAL_ERROR "Do not know how to define a 32-bit integer quantity on your system!" 287*08ab5237SOystein Eftevaag " Neither uint32_t, u_int32_t, nor __int32 seem to be available." 288*08ab5237SOystein Eftevaag " Set [GFLAGS_]INTTYPES_FORMAT to either C99, BSD, or VC7 and try again.") 289*08ab5237SOystein Eftevaag endif () 290*08ab5237SOystein Eftevaagendif () 291*08ab5237SOystein Eftevaag# use of special characters in strings to circumvent bug #0008226 292*08ab5237SOystein Eftevaagif ("^${INTTYPES_FORMAT}$" STREQUAL "^WIN$") 293*08ab5237SOystein Eftevaag gflags_set (INTTYPES_FORMAT VC7) 294*08ab5237SOystein Eftevaagendif () 295*08ab5237SOystein Eftevaagif (NOT INTTYPES_FORMAT MATCHES "^(C99|BSD|VC7)$") 296*08ab5237SOystein Eftevaag message (FATAL_ERROR "Invalid value for [GFLAGS_]INTTYPES_FORMAT! Choose one of \"C99\", \"BSD\", or \"VC7\"") 297*08ab5237SOystein Eftevaagendif () 298*08ab5237SOystein Eftevaagset (GFLAGS_INTTYPES_FORMAT "${INTTYPES_FORMAT}") 299*08ab5237SOystein Eftevaagset (GFLAGS_INTTYPES_FORMAT_C99 0) 300*08ab5237SOystein Eftevaagset (GFLAGS_INTTYPES_FORMAT_BSD 0) 301*08ab5237SOystein Eftevaagset (GFLAGS_INTTYPES_FORMAT_VC7 0) 302*08ab5237SOystein Eftevaagset ("GFLAGS_INTTYPES_FORMAT_${INTTYPES_FORMAT}" 1) 303*08ab5237SOystein Eftevaag 304*08ab5237SOystein Eftevaagif (MSVC) 305*08ab5237SOystein Eftevaag set (HAVE_strtoll 0) 306*08ab5237SOystein Eftevaag set (HAVE_strtoq 0) 307*08ab5237SOystein Eftevaagelse () 308*08ab5237SOystein Eftevaag check_cxx_symbol_exists (strtoll stdlib.h HAVE_STRTOLL) 309*08ab5237SOystein Eftevaag if (NOT HAVE_STRTOLL) 310*08ab5237SOystein Eftevaag check_cxx_symbol_exists (strtoq stdlib.h HAVE_STRTOQ) 311*08ab5237SOystein Eftevaag endif () 312*08ab5237SOystein Eftevaagendif () 313*08ab5237SOystein Eftevaag 314*08ab5237SOystein Eftevaagif (BUILD_gflags_LIB) 315*08ab5237SOystein Eftevaag set (CMAKE_THREAD_PREFER_PTHREAD TRUE) 316*08ab5237SOystein Eftevaag find_package (Threads) 317*08ab5237SOystein Eftevaag if (Threads_FOUND AND CMAKE_USE_PTHREADS_INIT) 318*08ab5237SOystein Eftevaag set (HAVE_PTHREAD 1) 319*08ab5237SOystein Eftevaag check_type_size (pthread_rwlock_t RWLOCK LANGUAGE CXX) 320*08ab5237SOystein Eftevaag else () 321*08ab5237SOystein Eftevaag set (HAVE_PTHREAD 0) 322*08ab5237SOystein Eftevaag endif () 323*08ab5237SOystein Eftevaag if (UNIX AND NOT HAVE_PTHREAD) 324*08ab5237SOystein Eftevaag if (CMAKE_HAVE_PTHREAD_H) 325*08ab5237SOystein Eftevaag set (what "library") 326*08ab5237SOystein Eftevaag else () 327*08ab5237SOystein Eftevaag set (what ".h file") 328*08ab5237SOystein Eftevaag endif () 329*08ab5237SOystein Eftevaag message (FATAL_ERROR "Could not find pthread${what}. Check the log file" 330*08ab5237SOystein Eftevaag "\n\t${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log" 331*08ab5237SOystein Eftevaag "\nor disable the build of the multi-threaded gflags library (BUILD_gflags_LIB=OFF).") 332*08ab5237SOystein Eftevaag endif () 333*08ab5237SOystein Eftevaagelse () 334*08ab5237SOystein Eftevaag set (HAVE_PTHREAD 0) 335*08ab5237SOystein Eftevaagendif () 336*08ab5237SOystein Eftevaag 337*08ab5237SOystein Eftevaag# ---------------------------------------------------------------------------- 338*08ab5237SOystein Eftevaag# source files - excluding root subdirectory and/or .in suffix 339*08ab5237SOystein Eftevaagset (PUBLIC_HDRS 340*08ab5237SOystein Eftevaag "gflags.h" 341*08ab5237SOystein Eftevaag "gflags_declare.h" 342*08ab5237SOystein Eftevaag "gflags_completions.h" 343*08ab5237SOystein Eftevaag) 344*08ab5237SOystein Eftevaag 345*08ab5237SOystein Eftevaagif (GFLAGS_NAMESPACE_SECONDARY) 346*08ab5237SOystein Eftevaag set (INCLUDE_GFLAGS_NS_H "// Import gflags library symbols into alternative/deprecated namespace(s)") 347*08ab5237SOystein Eftevaag foreach (ns IN LISTS GFLAGS_NAMESPACE_SECONDARY) 348*08ab5237SOystein Eftevaag string (TOUPPER "${ns}" NS) 349*08ab5237SOystein Eftevaag set (gflags_ns_h "${PROJECT_BINARY_DIR}/include/${GFLAGS_INCLUDE_DIR}/gflags_${ns}.h") 350*08ab5237SOystein Eftevaag configure_file ("${PROJECT_SOURCE_DIR}/src/gflags_ns.h.in" "${gflags_ns_h}" @ONLY) 351*08ab5237SOystein Eftevaag list (APPEND PUBLIC_HDRS "${gflags_ns_h}") 352*08ab5237SOystein Eftevaag set (INCLUDE_GFLAGS_NS_H "${INCLUDE_GFLAGS_NS_H}\n#include \"gflags_${ns}.h\"") 353*08ab5237SOystein Eftevaag endforeach () 354*08ab5237SOystein Eftevaagelse () 355*08ab5237SOystein Eftevaag set (INCLUDE_GFLAGS_NS_H) 356*08ab5237SOystein Eftevaagendif () 357*08ab5237SOystein Eftevaag 358*08ab5237SOystein Eftevaagset (PRIVATE_HDRS 359*08ab5237SOystein Eftevaag "defines.h" 360*08ab5237SOystein Eftevaag "config.h" 361*08ab5237SOystein Eftevaag "util.h" 362*08ab5237SOystein Eftevaag "mutex.h" 363*08ab5237SOystein Eftevaag) 364*08ab5237SOystein Eftevaag 365*08ab5237SOystein Eftevaagset (GFLAGS_SRCS 366*08ab5237SOystein Eftevaag "gflags.cc" 367*08ab5237SOystein Eftevaag "gflags_reporting.cc" 368*08ab5237SOystein Eftevaag "gflags_completions.cc" 369*08ab5237SOystein Eftevaag) 370*08ab5237SOystein Eftevaag 371*08ab5237SOystein Eftevaagif (OS_WINDOWS) 372*08ab5237SOystein Eftevaag list (APPEND PRIVATE_HDRS "windows_port.h") 373*08ab5237SOystein Eftevaag list (APPEND GFLAGS_SRCS "windows_port.cc") 374*08ab5237SOystein Eftevaagendif () 375*08ab5237SOystein Eftevaag 376*08ab5237SOystein Eftevaag# ---------------------------------------------------------------------------- 377*08ab5237SOystein Eftevaag# configure source files 378*08ab5237SOystein Eftevaagif (NOT DEFINED GFLAGS_ATTRIBUTE_UNUSED) 379*08ab5237SOystein Eftevaag if (CMAKE_COMPILER_IS_GNUCXX) 380*08ab5237SOystein Eftevaag set (GFLAGS_ATTRIBUTE_UNUSED "__attribute((unused))") 381*08ab5237SOystein Eftevaag else () 382*08ab5237SOystein Eftevaag set (GFLAGS_ATTRIBUTE_UNUSED) 383*08ab5237SOystein Eftevaag endif () 384*08ab5237SOystein Eftevaagendif () 385*08ab5237SOystein Eftevaag 386*08ab5237SOystein Eftevaag# whenever we build a shared library (DLL on Windows), configure the public 387*08ab5237SOystein Eftevaag# headers of the API for use of this shared library rather than the optionally 388*08ab5237SOystein Eftevaag# also build statically linked library; users can override GFLAGS_DLL_DECL 389*08ab5237SOystein Eftevaag# in particular, this done by setting the INTERFACE_COMPILE_DEFINITIONS of 390*08ab5237SOystein Eftevaag# static libraries to include an empty definition for GFLAGS_DLL_DECL 391*08ab5237SOystein Eftevaagif (NOT DEFINED GFLAGS_IS_A_DLL) 392*08ab5237SOystein Eftevaag if (BUILD_SHARED_LIBS) 393*08ab5237SOystein Eftevaag set (GFLAGS_IS_A_DLL 1) 394*08ab5237SOystein Eftevaag else () 395*08ab5237SOystein Eftevaag set (GFLAGS_IS_A_DLL 0) 396*08ab5237SOystein Eftevaag endif () 397*08ab5237SOystein Eftevaagendif () 398*08ab5237SOystein Eftevaag 399*08ab5237SOystein Eftevaagconfigure_headers (PUBLIC_HDRS ${PUBLIC_HDRS}) 400*08ab5237SOystein Eftevaagconfigure_sources (PRIVATE_HDRS ${PRIVATE_HDRS}) 401*08ab5237SOystein Eftevaagconfigure_sources (GFLAGS_SRCS ${GFLAGS_SRCS}) 402*08ab5237SOystein Eftevaag 403*08ab5237SOystein Eftevaag# ---------------------------------------------------------------------------- 404*08ab5237SOystein Eftevaag# output directories 405*08ab5237SOystein Eftevaagif (NOT GFLAGS_IS_SUBPROJECT) 406*08ab5237SOystein Eftevaag set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin") 407*08ab5237SOystein Eftevaag set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "lib") 408*08ab5237SOystein Eftevaag set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "lib") 409*08ab5237SOystein Eftevaagendif () 410*08ab5237SOystein Eftevaag# Set postfixes for generated libraries based on buildtype. 411*08ab5237SOystein Eftevaagset(CMAKE_RELEASE_POSTFIX "") 412*08ab5237SOystein Eftevaagset(CMAKE_DEBUG_POSTFIX "_debug") 413*08ab5237SOystein Eftevaag 414*08ab5237SOystein Eftevaag# ---------------------------------------------------------------------------- 415*08ab5237SOystein Eftevaag# installation directories 416*08ab5237SOystein Eftevaagif (OS_WINDOWS) 417*08ab5237SOystein Eftevaag set (RUNTIME_INSTALL_DIR "bin") 418*08ab5237SOystein Eftevaag set (LIBRARY_INSTALL_DIR "lib") 419*08ab5237SOystein Eftevaag set (INCLUDE_INSTALL_DIR "include") 420*08ab5237SOystein Eftevaag set (CONFIG_INSTALL_DIR "lib/cmake/${PACKAGE_NAME}") 421*08ab5237SOystein Eftevaag set (PKGCONFIG_INSTALL_DIR) 422*08ab5237SOystein Eftevaagelse () 423*08ab5237SOystein Eftevaag set (RUNTIME_INSTALL_DIR bin) 424*08ab5237SOystein Eftevaag # The LIB_INSTALL_DIR and LIB_SUFFIX variables are used by the Fedora 425*08ab5237SOystein Eftevaag # package maintainers. Also package maintainers of other distribution 426*08ab5237SOystein Eftevaag # packages need to be able to specify the name of the library directory. 427*08ab5237SOystein Eftevaag if (NOT GFLAGS_LIBRARY_INSTALL_DIR AND LIB_INSTALL_DIR) 428*08ab5237SOystein Eftevaag set (GFLAGS_LIBRARY_INSTALL_DIR "${LIB_INSTALL_DIR}") 429*08ab5237SOystein Eftevaag endif () 430*08ab5237SOystein Eftevaag gflags_define (PATH LIBRARY_INSTALL_DIR "Directory of installed libraries, e.g., \"lib64\"" "lib${LIB_SUFFIX}") 431*08ab5237SOystein Eftevaag gflags_property (LIBRARY_INSTALL_DIR ADVANCED TRUE) 432*08ab5237SOystein Eftevaag set (INCLUDE_INSTALL_DIR include) 433*08ab5237SOystein Eftevaag set (CONFIG_INSTALL_DIR ${LIBRARY_INSTALL_DIR}/cmake/${PACKAGE_NAME}) 434*08ab5237SOystein Eftevaag set (PKGCONFIG_INSTALL_DIR ${LIBRARY_INSTALL_DIR}/pkgconfig) 435*08ab5237SOystein Eftevaagendif () 436*08ab5237SOystein Eftevaag 437*08ab5237SOystein Eftevaag# ---------------------------------------------------------------------------- 438*08ab5237SOystein Eftevaag# add library targets 439*08ab5237SOystein Eftevaagset (TARGETS) 440*08ab5237SOystein Eftevaag# static vs. shared 441*08ab5237SOystein Eftevaagforeach (TYPE IN ITEMS STATIC SHARED) 442*08ab5237SOystein Eftevaag if (BUILD_${TYPE}_LIBS) 443*08ab5237SOystein Eftevaag string (TOLOWER "${TYPE}" type) 444*08ab5237SOystein Eftevaag # whether or not targets are a DLL 445*08ab5237SOystein Eftevaag if (OS_WINDOWS AND "^${TYPE}$" STREQUAL "^SHARED$") 446*08ab5237SOystein Eftevaag set (GFLAGS_IS_A_DLL 1) 447*08ab5237SOystein Eftevaag else () 448*08ab5237SOystein Eftevaag set (GFLAGS_IS_A_DLL 0) 449*08ab5237SOystein Eftevaag endif () 450*08ab5237SOystein Eftevaag # filename suffix for static libraries on Windows 451*08ab5237SOystein Eftevaag if (OS_WINDOWS AND "^${TYPE}$" STREQUAL "^STATIC$") 452*08ab5237SOystein Eftevaag set (type_suffix "_${type}") 453*08ab5237SOystein Eftevaag else () 454*08ab5237SOystein Eftevaag set (type_suffix "") 455*08ab5237SOystein Eftevaag endif () 456*08ab5237SOystein Eftevaag # multi-threaded vs. single-threaded 457*08ab5237SOystein Eftevaag foreach (opts IN ITEMS "" _nothreads) 458*08ab5237SOystein Eftevaag if (BUILD_gflags${opts}_LIB) 459*08ab5237SOystein Eftevaag set (target_name "gflags${opts}_${type}") 460*08ab5237SOystein Eftevaag add_library (${target_name} ${TYPE} ${GFLAGS_SRCS} ${PRIVATE_HDRS} ${PUBLIC_HDRS}) 461*08ab5237SOystein Eftevaag set_target_properties (${target_name} PROPERTIES 462*08ab5237SOystein Eftevaag OUTPUT_NAME "gflags${opts}${type_suffix}" 463*08ab5237SOystein Eftevaag VERSION "${PACKAGE_VERSION}" 464*08ab5237SOystein Eftevaag SOVERSION "${PACKAGE_SOVERSION}" 465*08ab5237SOystein Eftevaag ) 466*08ab5237SOystein Eftevaag set (include_dirs "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>") 467*08ab5237SOystein Eftevaag if (INSTALL_HEADERS) 468*08ab5237SOystein Eftevaag list (APPEND include_dirs "$<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>") 469*08ab5237SOystein Eftevaag endif () 470*08ab5237SOystein Eftevaag target_include_directories (${target_name} 471*08ab5237SOystein Eftevaag PUBLIC "${include_dirs}" 472*08ab5237SOystein Eftevaag PRIVATE "${PROJECT_SOURCE_DIR}/src;${PROJECT_BINARY_DIR}/include/${GFLAGS_INCLUDE_DIR}" 473*08ab5237SOystein Eftevaag ) 474*08ab5237SOystein Eftevaag target_compile_definitions (${target_name} PUBLIC GFLAGS_IS_A_DLL=${GFLAGS_IS_A_DLL}) 475*08ab5237SOystein Eftevaag if (opts MATCHES "nothreads") 476*08ab5237SOystein Eftevaag target_compile_definitions (${target_name} PRIVATE NO_THREADS) 477*08ab5237SOystein Eftevaag elseif (CMAKE_USE_PTHREADS_INIT) 478*08ab5237SOystein Eftevaag target_link_libraries (${target_name} ${CMAKE_THREAD_LIBS_INIT}) 479*08ab5237SOystein Eftevaag endif () 480*08ab5237SOystein Eftevaag if (HAVE_SHLWAPI_H) 481*08ab5237SOystein Eftevaag target_link_libraries (${target_name} shlwapi.lib) 482*08ab5237SOystein Eftevaag endif () 483*08ab5237SOystein Eftevaag list (APPEND TARGETS ${target_name}) 484*08ab5237SOystein Eftevaag # add convenience make target for build of both shared and static libraries 485*08ab5237SOystein Eftevaag if (NOT GFLAGS_IS_SUBPROJECT) 486*08ab5237SOystein Eftevaag if (NOT TARGET gflags${opts}) 487*08ab5237SOystein Eftevaag add_custom_target (gflags${opts}) 488*08ab5237SOystein Eftevaag endif () 489*08ab5237SOystein Eftevaag add_dependencies (gflags${opts} ${target_name}) 490*08ab5237SOystein Eftevaag endif () 491*08ab5237SOystein Eftevaag endif () 492*08ab5237SOystein Eftevaag endforeach () 493*08ab5237SOystein Eftevaag endif () 494*08ab5237SOystein Eftevaagendforeach () 495*08ab5237SOystein Eftevaag 496*08ab5237SOystein Eftevaag# add ALIAS target for use in super-project, prefer static over shared, single-threaded over multi-threaded 497*08ab5237SOystein Eftevaagif (GFLAGS_IS_SUBPROJECT) 498*08ab5237SOystein Eftevaag foreach (type IN ITEMS static shared) 499*08ab5237SOystein Eftevaag foreach (opts IN ITEMS "_nothreads" "") 500*08ab5237SOystein Eftevaag if (TARGET gflags${opts}_${type}) 501*08ab5237SOystein Eftevaag # Define "gflags" alias for super-projects treating targets of this library as part of their own project 502*08ab5237SOystein Eftevaag # (also for backwards compatibility with gflags 2.2.1 which only defined this alias) 503*08ab5237SOystein Eftevaag add_library (gflags ALIAS gflags${opts}_${type}) 504*08ab5237SOystein Eftevaag # Define "gflags::gflags" alias for projects that support both find_package(gflags) and add_subdirectory(gflags) 505*08ab5237SOystein Eftevaag add_library (gflags::gflags ALIAS gflags${opts}_${type}) 506*08ab5237SOystein Eftevaag break () 507*08ab5237SOystein Eftevaag endif () 508*08ab5237SOystein Eftevaag endforeach () 509*08ab5237SOystein Eftevaag if (TARGET gflags::gflags) 510*08ab5237SOystein Eftevaag break () 511*08ab5237SOystein Eftevaag endif () 512*08ab5237SOystein Eftevaag endforeach () 513*08ab5237SOystein Eftevaagendif () 514*08ab5237SOystein Eftevaag 515*08ab5237SOystein Eftevaag# ---------------------------------------------------------------------------- 516*08ab5237SOystein Eftevaag# installation rules 517*08ab5237SOystein Eftevaagset (EXPORT_NAME ${PACKAGE_NAME}-targets) 518*08ab5237SOystein Eftevaagfile (RELATIVE_PATH INSTALL_PREFIX_REL2CONFIG_DIR "${CMAKE_INSTALL_PREFIX}/${CONFIG_INSTALL_DIR}" "${CMAKE_INSTALL_PREFIX}") 519*08ab5237SOystein Eftevaagconfigure_file (cmake/config.cmake.in "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-install.cmake" @ONLY) 520*08ab5237SOystein Eftevaagconfigure_file (cmake/version.cmake.in "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-version.cmake" @ONLY) 521*08ab5237SOystein Eftevaag 522*08ab5237SOystein Eftevaagif (BUILD_SHARED_LIBS AND INSTALL_SHARED_LIBS) 523*08ab5237SOystein Eftevaag foreach (opts IN ITEMS "" _nothreads) 524*08ab5237SOystein Eftevaag if (BUILD_gflags${opts}_LIB) 525*08ab5237SOystein Eftevaag install (TARGETS gflags${opts}_shared 526*08ab5237SOystein Eftevaag EXPORT ${EXPORT_NAME} 527*08ab5237SOystein Eftevaag RUNTIME DESTINATION ${RUNTIME_INSTALL_DIR} 528*08ab5237SOystein Eftevaag LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR} 529*08ab5237SOystein Eftevaag ARCHIVE DESTINATION ${LIBRARY_INSTALL_DIR} 530*08ab5237SOystein Eftevaag ) 531*08ab5237SOystein Eftevaag endif () 532*08ab5237SOystein Eftevaag endforeach () 533*08ab5237SOystein Eftevaagendif () 534*08ab5237SOystein Eftevaagif (BUILD_STATIC_LIBS AND INSTALL_STATIC_LIBS) 535*08ab5237SOystein Eftevaag foreach (opts IN ITEMS "" _nothreads) 536*08ab5237SOystein Eftevaag if (BUILD_gflags${opts}_LIB) 537*08ab5237SOystein Eftevaag install (TARGETS gflags${opts}_static 538*08ab5237SOystein Eftevaag EXPORT ${EXPORT_NAME} 539*08ab5237SOystein Eftevaag RUNTIME DESTINATION ${RUNTIME_INSTALL_DIR} 540*08ab5237SOystein Eftevaag LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR} 541*08ab5237SOystein Eftevaag ARCHIVE DESTINATION ${LIBRARY_INSTALL_DIR} 542*08ab5237SOystein Eftevaag ) 543*08ab5237SOystein Eftevaag endif () 544*08ab5237SOystein Eftevaag endforeach () 545*08ab5237SOystein Eftevaagendif () 546*08ab5237SOystein Eftevaag 547*08ab5237SOystein Eftevaagif (INSTALL_HEADERS) 548*08ab5237SOystein Eftevaag install (FILES ${PUBLIC_HDRS} DESTINATION ${INCLUDE_INSTALL_DIR}/${GFLAGS_INCLUDE_DIR}) 549*08ab5237SOystein Eftevaag install ( 550*08ab5237SOystein Eftevaag FILES "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-install.cmake" 551*08ab5237SOystein Eftevaag RENAME ${PACKAGE_NAME}-config.cmake 552*08ab5237SOystein Eftevaag DESTINATION ${CONFIG_INSTALL_DIR} 553*08ab5237SOystein Eftevaag ) 554*08ab5237SOystein Eftevaag install ( 555*08ab5237SOystein Eftevaag FILES "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-version.cmake" 556*08ab5237SOystein Eftevaag DESTINATION ${CONFIG_INSTALL_DIR} 557*08ab5237SOystein Eftevaag ) 558*08ab5237SOystein Eftevaag install ( 559*08ab5237SOystein Eftevaag EXPORT ${EXPORT_NAME} 560*08ab5237SOystein Eftevaag NAMESPACE ${PACKAGE_NAME}:: 561*08ab5237SOystein Eftevaag DESTINATION ${CONFIG_INSTALL_DIR} 562*08ab5237SOystein Eftevaag ) 563*08ab5237SOystein Eftevaag install ( 564*08ab5237SOystein Eftevaag EXPORT ${EXPORT_NAME} 565*08ab5237SOystein Eftevaag FILE ${PACKAGE_NAME}-nonamespace-targets.cmake 566*08ab5237SOystein Eftevaag DESTINATION ${CONFIG_INSTALL_DIR} 567*08ab5237SOystein Eftevaag ) 568*08ab5237SOystein Eftevaag if (UNIX) 569*08ab5237SOystein Eftevaag install (PROGRAMS src/gflags_completions.sh DESTINATION ${RUNTIME_INSTALL_DIR}) 570*08ab5237SOystein Eftevaag endif () 571*08ab5237SOystein Eftevaagendif () 572*08ab5237SOystein Eftevaag 573*08ab5237SOystein Eftevaagif (PKGCONFIG_INSTALL_DIR) 574*08ab5237SOystein Eftevaag configure_file ("cmake/package.pc.in" "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}.pc" @ONLY) 575*08ab5237SOystein Eftevaag install (FILES "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}.pc" DESTINATION "${PKGCONFIG_INSTALL_DIR}") 576*08ab5237SOystein Eftevaagendif () 577*08ab5237SOystein Eftevaag 578*08ab5237SOystein Eftevaag# ---------------------------------------------------------------------------- 579*08ab5237SOystein Eftevaag# support direct use of build tree 580*08ab5237SOystein Eftevaagset (INSTALL_PREFIX_REL2CONFIG_DIR .) 581*08ab5237SOystein Eftevaagexport ( 582*08ab5237SOystein Eftevaag TARGETS ${TARGETS} 583*08ab5237SOystein Eftevaag NAMESPACE ${PACKAGE_NAME}:: 584*08ab5237SOystein Eftevaag FILE "${PROJECT_BINARY_DIR}/${EXPORT_NAME}.cmake" 585*08ab5237SOystein Eftevaag) 586*08ab5237SOystein Eftevaagexport ( 587*08ab5237SOystein Eftevaag TARGETS ${TARGETS} 588*08ab5237SOystein Eftevaag FILE "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-nonamespace-targets.cmake" 589*08ab5237SOystein Eftevaag) 590*08ab5237SOystein Eftevaagif (REGISTER_BUILD_DIR) 591*08ab5237SOystein Eftevaag export (PACKAGE ${PACKAGE_NAME}) 592*08ab5237SOystein Eftevaagendif () 593*08ab5237SOystein Eftevaagif (REGISTER_INSTALL_PREFIX) 594*08ab5237SOystein Eftevaag register_gflags_package(${CONFIG_INSTALL_DIR}) 595*08ab5237SOystein Eftevaagendif () 596*08ab5237SOystein Eftevaagconfigure_file (cmake/config.cmake.in "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config.cmake" @ONLY) 597*08ab5237SOystein Eftevaag 598*08ab5237SOystein Eftevaag# ---------------------------------------------------------------------------- 599*08ab5237SOystein Eftevaag# testing - MUST follow the generation of the build tree config file 600*08ab5237SOystein Eftevaagif (BUILD_TESTING) 601*08ab5237SOystein Eftevaag include (CTest) 602*08ab5237SOystein Eftevaag add_subdirectory (test) 603*08ab5237SOystein Eftevaagendif () 604*08ab5237SOystein Eftevaag 605*08ab5237SOystein Eftevaag# ---------------------------------------------------------------------------- 606*08ab5237SOystein Eftevaag# packaging 607*08ab5237SOystein Eftevaagif (BUILD_PACKAGING) 608*08ab5237SOystein Eftevaag 609*08ab5237SOystein Eftevaag if (NOT BUILD_SHARED_LIBS AND NOT INSTALL_HEADERS) 610*08ab5237SOystein Eftevaag message (WARNING "Package will contain static libraries without headers!" 611*08ab5237SOystein Eftevaag "\nRecommended options for generation of runtime package:" 612*08ab5237SOystein Eftevaag "\n BUILD_SHARED_LIBS=ON" 613*08ab5237SOystein Eftevaag "\n BUILD_STATIC_LIBS=OFF" 614*08ab5237SOystein Eftevaag "\n INSTALL_HEADERS=OFF" 615*08ab5237SOystein Eftevaag "\n INSTALL_SHARED_LIBS=ON" 616*08ab5237SOystein Eftevaag "\nRecommended options for generation of development package:" 617*08ab5237SOystein Eftevaag "\n BUILD_SHARED_LIBS=ON" 618*08ab5237SOystein Eftevaag "\n BUILD_STATIC_LIBS=ON" 619*08ab5237SOystein Eftevaag "\n INSTALL_HEADERS=ON" 620*08ab5237SOystein Eftevaag "\n INSTALL_SHARED_LIBS=ON" 621*08ab5237SOystein Eftevaag "\n INSTALL_STATIC_LIBS=ON" 622*08ab5237SOystein Eftevaag ) 623*08ab5237SOystein Eftevaag endif () 624*08ab5237SOystein Eftevaag 625*08ab5237SOystein Eftevaag # default package generators 626*08ab5237SOystein Eftevaag if (APPLE) 627*08ab5237SOystein Eftevaag set (PACKAGE_GENERATOR "PackageMaker") 628*08ab5237SOystein Eftevaag set (PACKAGE_SOURCE_GENERATOR "TGZ;ZIP") 629*08ab5237SOystein Eftevaag elseif (UNIX) 630*08ab5237SOystein Eftevaag set (PACKAGE_GENERATOR "DEB;RPM") 631*08ab5237SOystein Eftevaag set (PACKAGE_SOURCE_GENERATOR "TGZ;ZIP") 632*08ab5237SOystein Eftevaag else () 633*08ab5237SOystein Eftevaag set (PACKAGE_GENERATOR "ZIP") 634*08ab5237SOystein Eftevaag set (PACKAGE_SOURCE_GENERATOR "ZIP") 635*08ab5237SOystein Eftevaag endif () 636*08ab5237SOystein Eftevaag 637*08ab5237SOystein Eftevaag # used package generators 638*08ab5237SOystein Eftevaag set (CPACK_GENERATOR "${PACKAGE_GENERATOR}" CACHE STRING "List of binary package generators (CPack).") 639*08ab5237SOystein Eftevaag set (CPACK_SOURCE_GENERATOR "${PACKAGE_SOURCE_GENERATOR}" CACHE STRING "List of source package generators (CPack).") 640*08ab5237SOystein Eftevaag mark_as_advanced (CPACK_GENERATOR CPACK_SOURCE_GENERATOR) 641*08ab5237SOystein Eftevaag 642*08ab5237SOystein Eftevaag # some package generators (e.g., PackageMaker) do not allow .md extension 643*08ab5237SOystein Eftevaag configure_file ("${CMAKE_CURRENT_LIST_DIR}/README.md" "${CMAKE_CURRENT_BINARY_DIR}/README.txt" COPYONLY) 644*08ab5237SOystein Eftevaag 645*08ab5237SOystein Eftevaag # common package information 646*08ab5237SOystein Eftevaag set (CPACK_PACKAGE_VENDOR "Andreas Schuh") 647*08ab5237SOystein Eftevaag set (CPACK_PACKAGE_CONTACT "[email protected]") 648*08ab5237SOystein Eftevaag set (CPACK_PACKAGE_NAME "${PACKAGE_NAME}") 649*08ab5237SOystein Eftevaag set (CPACK_PACKAGE_VERSION "${PACKAGE_VERSION}") 650*08ab5237SOystein Eftevaag set (CPACK_PACKAGE_VERSION_MAJOR "${PACKAGE_VERSION_MAJOR}") 651*08ab5237SOystein Eftevaag set (CPACK_PACKAGE_VERSION_MINOR "${PACKAGE_VERSION_MINOR}") 652*08ab5237SOystein Eftevaag set (CPACK_PACKAGE_VERSION_PATCH "${PACKAGE_VERSION_PATCH}") 653*08ab5237SOystein Eftevaag set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PACKAGE_DESCRIPTION}") 654*08ab5237SOystein Eftevaag set (CPACK_RESOURCE_FILE_WELCOME "${CMAKE_CURRENT_BINARY_DIR}/README.txt") 655*08ab5237SOystein Eftevaag set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_LIST_DIR}/COPYING.txt") 656*08ab5237SOystein Eftevaag set (CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_BINARY_DIR}/README.txt") 657*08ab5237SOystein Eftevaag set (CPACK_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") 658*08ab5237SOystein Eftevaag set (CPACK_OUTPUT_FILE_PREFIX packages) 659*08ab5237SOystein Eftevaag set (CPACK_PACKAGE_RELOCATABLE TRUE) 660*08ab5237SOystein Eftevaag set (CPACK_MONOLITHIC_INSTALL TRUE) 661*08ab5237SOystein Eftevaag 662*08ab5237SOystein Eftevaag # RPM package information -- used in cmake/package.cmake.in also for DEB 663*08ab5237SOystein Eftevaag set (CPACK_RPM_PACKAGE_GROUP "Development/Libraries") 664*08ab5237SOystein Eftevaag set (CPACK_RPM_PACKAGE_LICENSE "BSD") 665*08ab5237SOystein Eftevaag set (CPACK_RPM_PACKAGE_URL "${PACKAGE_URL}") 666*08ab5237SOystein Eftevaag set (CPACK_RPM_CHANGELOG_FILE "${CMAKE_CURRENT_LIST_DIR}/ChangeLog.txt") 667*08ab5237SOystein Eftevaag 668*08ab5237SOystein Eftevaag if (INSTALL_HEADERS) 669*08ab5237SOystein Eftevaag set (CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_LIST_DIR}/doc/index.html") 670*08ab5237SOystein Eftevaag else () 671*08ab5237SOystein Eftevaag set (CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_LIST_DIR}/cmake/README_runtime.txt") 672*08ab5237SOystein Eftevaag endif () 673*08ab5237SOystein Eftevaag 674*08ab5237SOystein Eftevaag # system/architecture 675*08ab5237SOystein Eftevaag if (WINDOWS) 676*08ab5237SOystein Eftevaag if (CMAKE_CL_64) 677*08ab5237SOystein Eftevaag set (CPACK_SYSTEM_NAME "win64") 678*08ab5237SOystein Eftevaag else () 679*08ab5237SOystein Eftevaag set (CPACK_SYSTEM_NAME "win32") 680*08ab5237SOystein Eftevaag endif () 681*08ab5237SOystein Eftevaag set (CPACK_PACKAGE_ARCHITECTURE) 682*08ab5237SOystein Eftevaag elseif (APPLE) 683*08ab5237SOystein Eftevaag set (CPACK_PACKAGE_ARCHITECTURE darwin) 684*08ab5237SOystein Eftevaag else () 685*08ab5237SOystein Eftevaag string (TOLOWER "${CMAKE_SYSTEM_NAME}" CPACK_SYSTEM_NAME) 686*08ab5237SOystein Eftevaag if (CMAKE_CXX_FLAGS MATCHES "-m32") 687*08ab5237SOystein Eftevaag set (CPACK_PACKAGE_ARCHITECTURE i386) 688*08ab5237SOystein Eftevaag else () 689*08ab5237SOystein Eftevaag execute_process ( 690*08ab5237SOystein Eftevaag COMMAND dpkg --print-architecture 691*08ab5237SOystein Eftevaag RESULT_VARIABLE RV 692*08ab5237SOystein Eftevaag OUTPUT_VARIABLE CPACK_PACKAGE_ARCHITECTURE 693*08ab5237SOystein Eftevaag ) 694*08ab5237SOystein Eftevaag if (RV EQUAL 0) 695*08ab5237SOystein Eftevaag string (STRIP "${CPACK_PACKAGE_ARCHITECTURE}" CPACK_PACKAGE_ARCHITECTURE) 696*08ab5237SOystein Eftevaag else () 697*08ab5237SOystein Eftevaag execute_process (COMMAND uname -m OUTPUT_VARIABLE CPACK_PACKAGE_ARCHITECTURE) 698*08ab5237SOystein Eftevaag if (CPACK_PACKAGE_ARCHITECTURE MATCHES "x86_64") 699*08ab5237SOystein Eftevaag set (CPACK_PACKAGE_ARCHITECTURE amd64) 700*08ab5237SOystein Eftevaag else () 701*08ab5237SOystein Eftevaag set (CPACK_PACKAGE_ARCHITECTURE i386) 702*08ab5237SOystein Eftevaag endif () 703*08ab5237SOystein Eftevaag endif () 704*08ab5237SOystein Eftevaag endif () 705*08ab5237SOystein Eftevaag endif () 706*08ab5237SOystein Eftevaag 707*08ab5237SOystein Eftevaag # source package settings 708*08ab5237SOystein Eftevaag set (CPACK_SOURCE_TOPLEVEL_TAG "source") 709*08ab5237SOystein Eftevaag set (CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}") 710*08ab5237SOystein Eftevaag set (CPACK_SOURCE_IGNORE_FILES "/\\\\.git/;\\\\.swp$;\\\\.#;/#;\\\\.*~;cscope\\\\.*;/[Bb]uild[.+-_a-zA-Z0-9]*/") 711*08ab5237SOystein Eftevaag 712*08ab5237SOystein Eftevaag # default binary package settings 713*08ab5237SOystein Eftevaag set (CPACK_INCLUDE_TOPLEVEL_DIRECTORY TRUE) 714*08ab5237SOystein Eftevaag set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}") 715*08ab5237SOystein Eftevaag if (CPACK_PACKAGE_ARCHITECTURE) 716*08ab5237SOystein Eftevaag set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}-${CPACK_PACKAGE_ARCHITECTURE}") 717*08ab5237SOystein Eftevaag endif () 718*08ab5237SOystein Eftevaag 719*08ab5237SOystein Eftevaag # generator specific configuration file 720*08ab5237SOystein Eftevaag # 721*08ab5237SOystein Eftevaag # allow package maintainers to use their own configuration file 722*08ab5237SOystein Eftevaag # $ cmake -DCPACK_PROJECT_CONFIG_FILE:FILE=/path/to/package/config 723*08ab5237SOystein Eftevaag if (NOT CPACK_PROJECT_CONFIG_FILE) 724*08ab5237SOystein Eftevaag configure_file ( 725*08ab5237SOystein Eftevaag "${CMAKE_CURRENT_LIST_DIR}/cmake/package.cmake.in" 726*08ab5237SOystein Eftevaag "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-package.cmake" @ONLY 727*08ab5237SOystein Eftevaag ) 728*08ab5237SOystein Eftevaag set (CPACK_PROJECT_CONFIG_FILE "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-package.cmake") 729*08ab5237SOystein Eftevaag endif () 730*08ab5237SOystein Eftevaag 731*08ab5237SOystein Eftevaag include (CPack) 732*08ab5237SOystein Eftevaag 733*08ab5237SOystein Eftevaagendif () # BUILD_PACKAGING 734*08ab5237SOystein Eftevaag 735*08ab5237SOystein Eftevaagif (NOT GFLAGS_IS_SUBPROJECT AND NOT TARGET uninstall) 736*08ab5237SOystein Eftevaag configure_file ( 737*08ab5237SOystein Eftevaag "${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in" 738*08ab5237SOystein Eftevaag "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" @ONLY 739*08ab5237SOystein Eftevaag ) 740*08ab5237SOystein Eftevaag add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") 741*08ab5237SOystein Eftevaagendif () 742