X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=CMakeLists.txt;h=ca2c1df21c7e838b66b9dfa3226c9f02092eaa4c;hb=cd7aece14e2aac0669292c95ab42de6e267a5034;hp=627877d5697b9e2959ea1dea0b9a52f6a97d6a5e;hpb=c6a9986fa0c8fc17626953e809f10f1eaacd567f;p=platform%2Fupstream%2Fgflags.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 627877d..ca2c1df 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,21 +1,19 @@ -cmake_minimum_required(VERSION 2.8 FATAL_ERROR) +cmake_minimum_required (VERSION 2.8.4 FATAL_ERROR) # ---------------------------------------------------------------------------- # includes set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") - include (utils) # ---------------------------------------------------------------------------- # package information -set (PROJECT_NAME "gflags") -set (PACKAGE_NAME "${PROJECT_NAME}") -set (PACKAGE_VERSION "2.1.0") -set (PACKAGE_STRING "${PROJECT_NAME} ${PACKAGE_VERSION}") -set (PACKAGE_TARNAME "${PROJECT_NAME}-${PACKAGE_VERSION}") +set (PACKAGE_NAME "gflags") +set (PACKAGE_VERSION "2.1.1") +set (PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") +set (PACKAGE_TARNAME "${PACKAGE_NAME}-${PACKAGE_VERSION}") set (PACKAGE_BUGREPORT "https://code.google.com/p/gflags/issues/") -project (${PROJECT_NAME} CXX) +project (${PACKAGE_NAME} CXX) version_numbers ( ${PACKAGE_VERSION} @@ -24,62 +22,108 @@ version_numbers ( PACKAGE_VERSION_PATCH ) -# ---------------------------------------------------------------------------- -# configure options -option (BUILD_SHARED_LIBS "Request build of shared libraries." OFF) -set (GFLAGS_SHARED_LIBS ${BUILD_SHARED_LIBS}) +set (PACKAGE_SOVERSION "${PACKAGE_VERSION_MAJOR}") -option (BUILD_gflags_LIB "Request build of the multi-threaded gflags library." ON) -option (BUILD_gflags_nothreads_LIB "Request build of the single-threaded gflags library." ON) +# ---------------------------------------------------------------------------- +# options +set (GFLAGS_NAMESPACE "${PACKAGE_NAME}" CACHE STRING "C++ namespace identifier of gflags library.") +set (GFLAGS_INCLUDE_DIR "${PACKAGE_NAME}" CACHE STRING "Include subdirectory of gflags header files.") -if (NOT BUILD_gflags_LIB AND NOT BUILD_gflags_nothreads_LIB) - message (FATAL_ERROR "At least one of BUILD_gflags_LIB and BUILD_gflags_nothreads_LIB must be ON.") +if (IS_ABSOLUTE GFLAGS_INCLUDE_DIR) + message (FATAL_ERROR "GFLAGS_INCLUDE_DIR must be a path relative to CMAKE_INSTALL_PREFIX/include") +endif () +if (GFLAGS_INCLUDE_DIR MATCHES "^\\.\\.[/\\]") + message (FATAL_ERROR "GFLAGS_INCLUDE_DIR must not start with parent directory reference (../)") endif () -option (BUILD_NEGATIVE_COMPILATION_TESTS "Request addition of negative compilation tests." OFF) -mark_as_advanced (BUILD_NEGATIVE_COMPILATION_TESTS) - -set (GFLAGS_NAMESPACE "gflags" CACHE STRING "C++ namespace identifier of gflags library.") -mark_as_advanced (GFLAGS_NAMESPACE) +option (BUILD_SHARED_LIBS "Request build of shared libraries." OFF) +option (BUILD_STATIC_LIBS "Request build of static libraries (default if BUILD_SHARED_LIBS is OFF)." OFF) +option (BUILD_gflags_LIB "Request build of the multi-threaded gflags library." ON) +option (BUILD_gflags_nothreads_LIB "Request build of the single-threaded gflags library." ON) +option (BUILD_PACKAGING "Enable build of distribution packages using CPack." OFF) +option (BUILD_TESTING "Enable build of the unit tests and their execution using CTest." OFF) +option (BUILD_NC_TESTS "Request addition of negative compilation tests." OFF) +option (INSTALL_HEADERS "Request packaging of headers and other development files." ON) mark_as_advanced (CLEAR CMAKE_INSTALL_PREFIX) -mark_as_advanced (CMAKE_CONFIGURATION_TYPES) -if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS AND NOT CMAKE_C_FLAGS) - set ( - CMAKE_BUILD_TYPE "Release" - CACHE STRING "Choose the type of build, options are: None (CMAKE_C_FLAGS and CMAKE_CXX_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." - FORCE - ) -endif () - +mark_as_advanced (CMAKE_CONFIGURATION_TYPES + GFLAGS_NAMESPACE + GFLAGS_INCLUDE_DIR + BUILD_STATIC_LIBS + BUILD_NC_TESTS + INSTALL_HEADERS) if (APPLE) mark_as_advanced(CMAKE_OSX_ARCHITECTURES CMAKE_OSX_DEPLOYMENT_TARGET CMAKE_OSX_SYSROOT) endif () +if (NOT BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS) + set (BUILD_STATIC_LIBS ON) +endif () +if (NOT BUILD_gflags_LIB AND NOT BUILD_gflags_nothreads_LIB) + message (FATAL_ERROR "At least one of BUILD_gflags_LIB and BUILD_gflags_nothreads_LIB must be ON.") +endif () + +if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CXX_FLAGS) + set_property (CACHE CMAKE_BUILD_TYPE PROPERTY VALUE Release) +endif () + # ---------------------------------------------------------------------------- # system checks include (CheckTypeSize) include (CheckIncludeFileCXX) include (CheckCXXSymbolExists) +if (WIN32 AND NOT CYGWIN) + set (OS_WINDOWS 1) +else () + set (OS_WINDOWS 0) +endif () + +if (MSVC) + set (HAVE_SYS_TYPES_H 1) + set (HAVE_STDINT_H 1) + set (HAVE_STDDEF_H 1) # used by CheckTypeSize module + set (HAVE_INTTYPES_H 0) + set (HAVE_UNISTD_H 0) + set (HAVE_SYS_STAT_H 1) + set (HAVE_SHLWAPI_H 1) +else () + foreach (fname IN ITEMS unistd stdint inttypes sys/types sys/stat fnmatch) + string (TOUPPER "${fname}" FNAME) + string (REPLACE "/" "_" FNAME "${FNAME}") + if (NOT HAVE_${FNAME}_H) + check_include_file_cxx ("${fname}.h" HAVE_${FNAME}_H) + endif () + endforeach () + # the following are used in #if directives not #ifdef + bool_to_int (HAVE_STDINT_H) + bool_to_int (HAVE_SYS_TYPES_H) + bool_to_int (HAVE_INTTYPES_H) + if (NOT HAVE_FNMATCH_H AND OS_WINDOWS) + check_include_file_cxx ("shlwapi.h" HAVE_SHLWAPI_H) + endif () +endif () + set (GFLAGS_INTTYPES_FORMAT "" CACHE STRING "Format of integer types: \"C99\" (uint32_t), \"BSD\" (u_int32_t), \"VC7\" (__int32)") +set_property (CACHE GFLAGS_INTTYPES_FORMAT PROPERTY STRINGS "C99;BSD;VC7") mark_as_advanced (GFLAGS_INTTYPES_FORMAT) if (NOT GFLAGS_INTTYPES_FORMAT) - foreach (type IN ITEMS uint32_t u_int32_t __int32) - check_type_size (${type} SIZE LANGUAGE CXX) - if (SIZE) - set (HAVE_${type} TRUE) - else () - set (HAVE_${type} FALSE) + set (TYPES uint32_t u_int32_t) + if (MSVC) + list (INSERT TYPES 0 __int32) + endif () + foreach (type IN LISTS TYPES) + check_type_size (${type} ${type} LANGUAGE CXX) + if (HAVE_${type}) + break () endif () endforeach () if (HAVE_uint32_t) set_property (CACHE GFLAGS_INTTYPES_FORMAT PROPERTY VALUE C99) elseif (HAVE_u_int32_t) set_property (CACHE GFLAGS_INTTYPES_FORMAT PROPERTY VALUE BSD) - set (GFLAGS_INTTYPES_FORMAT BSD) elseif (HAVE___int32) set_property (CACHE GFLAGS_INTTYPES_FORMAT PROPERTY VALUE VC7) else () @@ -89,32 +133,46 @@ if (NOT GFLAGS_INTTYPES_FORMAT) " Set GFLAGS_INTTYPES_FORMAT to either C99, BSD, or VC7 and try again.") endif () endif () -set ("GFLAGS_INTTYPES_FORMAT_${GFLAGS_INTTYPES_FORMAT}" TRUE) - -foreach (fname IN ITEMS stdint sys/types fnmatch inttypes unistd sys/stat) - string (TOUPPER "${fname}" FNAME) - string (REGEX REPLACE "/" "_" FNAME "${FNAME}") - check_include_file_cxx ("${fname}.h" GFLAGS_HAVE_${FNAME}_H) -endforeach () - -foreach (fname IN ITEMS strtoll strtoq) - string (TOUPPER "${fname}" FNAME) - check_cxx_symbol_exists ("${fname}" stdlib.h GFLAGS_HAVE_${FNAME}) -endforeach () +# use of special characters in strings to circumvent bug #0008226 +if ("^${GFLAGS_INTTYPES_FORMAT}$" STREQUAL "^WIN$") + set_property (CACHE GFLAGS_INTTYPES_FORMAT PROPERTY VALUE VC7) +endif () +if (NOT GFLAGS_INTTYPES_FORMAT MATCHES "^(C99|BSD|VC7)$") + message (FATAL_ERROR "Invalid value for GFLAGS_INTTYPES_FORMAT! Choose one of \"C99\", \"BSD\", or \"VC7\"") +endif () +set (GFLAGS_INTTYPES_FORMAT_C99 0) +set (GFLAGS_INTTYPES_FORMAT_BSD 0) +set (GFLAGS_INTTYPES_FORMAT_VC7 0) +set ("GFLAGS_INTTYPES_FORMAT_${GFLAGS_INTTYPES_FORMAT}" 1) + +if (MSVC) + set (HAVE_strtoll 0) + set (HAVE_strtoq 0) +else () + check_cxx_symbol_exists (strtoll stdlib.h HAVE_STRTOLL) + if (NOT HAVE_STRTOLL) + check_cxx_symbol_exists (strtoq stdlib.h HAVE_STRTOQ) + endif () +endif () set (CMAKE_THREAD_PREFER_PTHREAD TRUE) find_package (ThreadsCXX) if (Threads_FOUND AND CMAKE_USE_PTHREADS_INIT) - set (GFLAGS_HAVE_PTHREAD TRUE) - check_type_size (pthread_rwlock_t GFLAGS_HAVE_RWLOCK LANGUAGE CXX) + set (HAVE_PTHREAD 1) + check_type_size (pthread_rwlock_t RWLOCK LANGUAGE CXX) else () - set (GFLAGS_HAVE_PTHREAD FALSE) + set (HAVE_PTHREAD 0) endif () -if (UNIX AND NOT GFLAGS_HAVE_PTHREAD AND BUILD_gflags_LIB) - set_property (CACHE BUILD_gflags_LIB PROPERTY VALUE OFF) - message (WARNING "Could not find the header file." - " Disabling the build of the multi-threaded gflags library.") +if (UNIX AND NOT HAVE_PTHREAD AND BUILD_gflags_LIB) + if (CMAKE_HAVE_PTHREAD_H) + set (what "library") + else () + set (what ".h file") + endif () + message (FATAL_ERROR "Could not find pthread${what}. Check the log file" + "\n\t${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log" + "\nor disable the build of the multi-threaded gflags library (BUILD_gflags_LIB=OFF).") endif () # ---------------------------------------------------------------------------- @@ -127,6 +185,8 @@ set (PUBLIC_HDRS set (PRIVATE_HDRS "config.h" + "util.h" + "mutex.h" ) set (GFLAGS_SRCS @@ -135,7 +195,7 @@ set (GFLAGS_SRCS "gflags_completions.cc" ) -if (WIN32) +if (OS_WINDOWS) list (APPEND PRIVATE_HDRS "windows_port.h") list (APPEND GFLAGS_SRCS "windows_port.cc") endif () @@ -148,10 +208,23 @@ else () set (GFLAGS_ATTRIBUTE_UNUSED) endif () +# whenever we build a shared library (DLL on Windows), configure the public +# headers of the API for use of this library rather than the optionally +# also build statically linked library; users can override GFLAGS_DLL_DECL +if (BUILD_SHARED_LIBS) + set (GFLAGS_IS_A_DLL 1) +else () + set (GFLAGS_IS_A_DLL 0) +endif () + configure_headers (PUBLIC_HDRS ${PUBLIC_HDRS}) configure_sources (PRIVATE_HDRS ${PRIVATE_HDRS}) configure_sources (GFLAGS_SRCS ${GFLAGS_SRCS}) +include_directories ("${PROJECT_SOURCE_DIR}/src") +include_directories ("${PROJECT_BINARY_DIR}/include") +include_directories ("${PROJECT_BINARY_DIR}/include/${GFLAGS_INCLUDE_DIR}") + # ---------------------------------------------------------------------------- # output directories set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin") @@ -159,78 +232,228 @@ set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "lib") set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY "lib") # ---------------------------------------------------------------------------- -# add library target -include_directories ("${PROJECT_SOURCE_DIR}/src") -include_directories ("${PROJECT_BINARY_DIR}/include") -include_directories ("${PROJECT_BINARY_DIR}/include/${GFLAGS_NAMESPACE}") - -set (LIB_TARGETS) -if (BUILD_gflags_LIB) - add_library (gflags ${GFLAGS_SRCS} ${PRIVATE_HDRS} ${PUBLIC_HDRS}) - if (WIN32 AND BUILD_SHARED_LIBS) - set_target_properties (gflags PROPERTIES COMPILE_DEFINITIONS GFLAGS_DLL_EXPORT) - endif () - list (APPEND LIB_TARGETS gflags) -endif () -if (BUILD_gflags_nothreads_LIB) - add_library (gflags_nothreads ${GFLAGS_SRCS} ${PRIVATE_HDRS} ${PUBLIC_HDRS}) - if (WIN32 AND BUILD_SHARED_LIBS) - set_target_properties (gflags_nothreads PROPERTIES COMPILE_DEFINITIONS "GFLAGS_DLL_EXPORT;NO_THREADS") - else () - set_target_properties (gflags_nothreads PROPERTIES COMPILE_DEFINITIONS NO_THREADS) +# add library targets +set (TARGETS) +# static vs. shared +foreach (TYPE IN ITEMS STATIC SHARED) + if (BUILD_${TYPE}_LIBS) + # whether or not targets are a DLL + if (OS_WINDOWS AND "^${TYPE}$" STREQUAL "^SHARED$") + set (GFLAGS_IS_A_DLL 1) + else () + set (GFLAGS_IS_A_DLL 0) + endif () + string (TOLOWER "${TYPE}" type) + # 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}) + if (opts MATCHES "nothreads") + set (defines "GFLAGS_IS_A_DLL=${GFLAGS_IS_A_DLL};NOTHREADS") + 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}) + endif () + endif () + set_target_properties ( + gflags${opts}-${type} PROPERTIES COMPILE_DEFINITIONS "${defines}" + OUTPUT_NAME "gflags${opts}" + VERSION "${PACKAGE_VERSION}" + SOVERSION "${PACKAGE_SOVERSION}" + ) + if (HAVE_SHLWAPI_H) + target_link_libraries (gflags${opts}-${type} shlwapi.lib) + endif () + if (NOT TARGET gflags${opts}) + add_custom_target (gflags${opts}) + endif () + add_dependencies (gflags${opts} gflags${opts}-${type}) + list (APPEND TARGETS gflags${opts}-${type}) + endif () + endforeach () endif () - list (APPEND LIB_TARGETS gflags_nothreads) -endif () +endforeach () # ---------------------------------------------------------------------------- # installation -if (WIN32) +if (OS_WINDOWS) set (RUNTIME_INSTALL_DIR Bin) set (LIBRARY_INSTALL_DIR Lib) set (INCLUDE_INSTALL_DIR Include) set (CONFIG_INSTALL_DIR CMake) else () set (RUNTIME_INSTALL_DIR bin) - set (LIBRARY_INSTALL_DIR lib) + # The LIB_INSTALL_DIR and LIB_SUFFIX variables are used by the Fedora + # package maintainers. Also package maintainers of other distribution + # packages need to be able to specify the name of the library directory. + if (NOT LIB_INSTALL_DIR) + set (LIB_INSTALL_DIR "lib${LIB_SUFFIX}") + endif () + set (LIBRARY_INSTALL_DIR "${LIB_INSTALL_DIR}" + CACHE PATH "Directory of installed libraries, e.g., \"lib64\"" + ) + mark_as_advanced (LIBRARY_INSTALL_DIR) set (INCLUDE_INSTALL_DIR include) - set (CONFIG_INSTALL_DIR lib/cmake/${PACKAGE_NAME}) + set (CONFIG_INSTALL_DIR ${LIBRARY_INSTALL_DIR}/cmake/${PACKAGE_NAME}) endif () -install (TARGETS ${LIB_TARGETS} DESTINATION ${LIBRARY_INSTALL_DIR} EXPORT gflags-lib) -install (FILES ${PUBLIC_HDRS} DESTINATION ${INCLUDE_INSTALL_DIR}/${GFLAGS_NAMESPACE}) - file (RELATIVE_PATH INSTALL_PREFIX_REL2CONFIG_DIR "${CMAKE_INSTALL_PREFIX}/${CONFIG_INSTALL_DIR}" "${CMAKE_INSTALL_PREFIX}") configure_file (cmake/config.cmake.in "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-install.cmake" @ONLY) configure_file (cmake/version.cmake.in "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-version.cmake" @ONLY) -install ( - FILES "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-install.cmake" - RENAME ${PACKAGE_NAME}-config.cmake - DESTINATION ${CONFIG_INSTALL_DIR} -) - -install ( - 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) - -if (UNIX) - install (PROGRAMS src/gflags_completions.sh DESTINATION ${RUNTIME_INSTALL_DIR}) +install (TARGETS ${TARGETS} DESTINATION ${LIBRARY_INSTALL_DIR} EXPORT gflags-lib) +if (INSTALL_HEADERS) + install (FILES ${PUBLIC_HDRS} DESTINATION ${INCLUDE_INSTALL_DIR}/${GFLAGS_INCLUDE_DIR}) + install ( + FILES "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config-install.cmake" + RENAME ${PACKAGE_NAME}-config.cmake + DESTINATION ${CONFIG_INSTALL_DIR} + ) + install ( + 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) + if (UNIX) + install (PROGRAMS src/gflags_completions.sh DESTINATION ${RUNTIME_INSTALL_DIR}) + endif () endif () # ---------------------------------------------------------------------------- # support direct use of build tree set (INSTALL_PREFIX_REL2CONFIG_DIR .) -export (TARGETS ${LIB_TARGETS} FILE "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-export.cmake") +export (TARGETS ${TARGETS} FILE "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-export.cmake") export (PACKAGE gflags) configure_file (cmake/config.cmake.in "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-config.cmake" @ONLY) # ---------------------------------------------------------------------------- # testing - MUST follow the generation of the build tree config file -include (CTest) if (BUILD_TESTING) + include (CTest) enable_testing () add_subdirectory (test) endif () + +# ---------------------------------------------------------------------------- +# packaging +if (BUILD_PACKAGING) + + if (NOT BUILD_SHARED_LIBS AND NOT INSTALL_HEADERS) + message (WARNING "Package will contain static libraries without headers!" + "\nRecommended options for generation of runtime package:" + "\n BUILD_SHARED_LIBS=ON" + "\n BUILD_STATIC_LIBS=OFF" + "\n INSTALL_HEADERS=OFF" + "\nRecommended options for generation of development package:" + "\n BUILD_SHARED_LIBS=ON" + "\n BUILD_STATIC_LIBS=ON" + "\n INSTALL_HEADERS=ON") + endif () + + # default package generators + if (APPLE) + set (PACKAGE_GENERATOR "PackageMaker") + set (PACKAGE_SOURCE_GENERATOR "TGZ;ZIP") + elseif (UNIX) + set (PACKAGE_GENERATOR "DEB;RPM") + set (PACKAGE_SOURCE_GENERATOR "TGZ;ZIP") + else () + set (PACKAGE_GENERATOR "ZIP") + set (PACKAGE_SOURCE_GENERATOR "ZIP") + endif () + + # used package generators + set (CPACK_GENERATOR "${PACKAGE_GENERATOR}" CACHE STRING "List of binary package generators (CPack).") + set (CPACK_SOURCE_GENERATOR "${PACKAGE_SOURCE_GENERATOR}" CACHE STRING "List of source package generators (CPack).") + mark_as_advanced (CPACK_GENERATOR CPACK_SOURCE_GENERATOR) + + # common package information + set (CPACK_PACKAGE_VENDOR "Andreas Schuh") + set (CPACK_PACKAGE_CONTACT "google-gflags@googlegroups.com") + set (CPACK_PACKAGE_NAME "${PACKAGE_NAME}") + set (CPACK_PACKAGE_VERSION "${PACKAGE_VERSION}") + set (CPACK_PACKAGE_VERSION_MAJOR "${PACKAGE_VERSION_MAJOR}") + set (CPACK_PACKAGE_VERSION_MINOR "${PACKAGE_VERSION_MINOR}") + set (CPACK_PACKAGE_VERSION_PATCH "${PACKAGE_VERSION_PATCH}") + set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "A commandline flags library that allows for distributed flags.") + set (CPACK_RESOURCE_FILE_WELCOME "${CMAKE_CURRENT_LIST_DIR}/README.txt") + set (CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_LIST_DIR}/COPYING.txt") + set (CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_LIST_DIR}/README.txt") + set (CPACK_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + set (CPACK_OUTPUT_FILE_PREFIX packages) + set (CPACK_PACKAGE_RELOCATABLE TRUE) + set (CPACK_MONOLITHIC_INSTALL TRUE) + + # RPM package information -- used in cmake/package.cmake.in also for DEB + set (CPACK_RPM_PACKAGE_GROUP "Development/Libraries") + set (CPACK_RPM_PACKAGE_LICENSE "BSD") + set (CPACK_RPM_PACKAGE_URL "http://code.google.com/p/gflags") + set (CPACK_RPM_CHANGELOG_FILE "${CMAKE_CURRENT_LIST_DIR}/ChangeLog.txt") + + if (INSTALL_HEADERS) + set (CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_LIST_DIR}/doc/gflags.html") + else () + set (CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_LIST_DIR}/cmake/README_runtime.txt") + endif () + + # system/architecture + if (WINDOWS) + if (CMAKE_CL_64) + set (CPACK_SYSTEM_NAME "win64") + else () + set (CPACK_SYSTEM_NAME "win32") + endif () + set (CPACK_PACKAGE_ARCHITECTURE) + elseif (APPLE) + set (CPACK_PACKAGE_ARCHITECTURE darwin) + else () + string (TOLOWER "${CMAKE_SYSTEM_NAME}" CPACK_SYSTEM_NAME) + if (CMAKE_CXX_FLAGS MATCHES "-m32") + set (CPACK_PACKAGE_ARCHITECTURE i386) + else () + execute_process ( + COMMAND dpkg --print-architecture + RESULT_VARIABLE RV + OUTPUT_VARIABLE CPACK_PACKAGE_ARCHITECTURE + ) + if (RV EQUAL 0) + string (STRIP "${CPACK_PACKAGE_ARCHITECTURE}" CPACK_PACKAGE_ARCHITECTURE) + else () + execute_process (COMMAND uname -m OUTPUT_VARIABLE CPACK_PACKAGE_ARCHITECTURE) + if (CPACK_PACKAGE_ARCHITECTURE MATCHES "x86_64") + set (CPACK_PACKAGE_ARCHITECTURE amd64) + else () + set (CPACK_PACKAGE_ARCHITECTURE i386) + endif () + endif () + endif () + endif () + + # source package settings + set (CPACK_SOURCE_TOPLEVEL_TAG "source") + set (CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}") + set (CPACK_SOURCE_IGNORE_FILES "/\\\\.git/;\\\\.swp$;\\\\.#;/#;\\\\.*~;cscope\\\\.*;/[Bb]uild[.+-_a-zA-Z0-9]*/") + + # default binary package settings + set (CPACK_INCLUDE_TOPLEVEL_DIRECTORY TRUE) + set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}") + if (CPACK_PACKAGE_ARCHITECTURE) + set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}-${CPACK_PACKAGE_ARCHITECTURE}") + endif () + + # generator specific configuration file + # + # allow package maintainers to use their own configuration file + # $ cmake -DCPACK_PROJECT_CONFIG_FILE:FILE=/path/to/package/config + if (NOT CPACK_PROJECT_CONFIG_FILE) + configure_file ( + "${CMAKE_CURRENT_LIST_DIR}/cmake/package.cmake.in" + "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-package.cmake" @ONLY + ) + set (CPACK_PROJECT_CONFIG_FILE "${PROJECT_BINARY_DIR}/${PACKAGE_NAME}-package.cmake") + endif () + + include (CPack) + +endif () # BUILD_PACKAGING