Squashed 'third_party/gflags/' content from commit f0523f1
Change-Id: I7b525481a9f3ec3e48e6656735d06432c25dc3b9
git-subtree-dir: third_party/gflags
git-subtree-split: f0523f14a93cbb46fff9b318508aa1c6923158c7
diff --git a/cmake/README_runtime.txt b/cmake/README_runtime.txt
new file mode 100644
index 0000000..d2556b2
--- /dev/null
+++ b/cmake/README_runtime.txt
@@ -0,0 +1,4 @@
+This package contains runtime libraries only which are required
+by applications that use these libraries for the commandline flags
+processing. If you want to develop such application, download
+and install the development package instead.
diff --git a/cmake/config.cmake.in b/cmake/config.cmake.in
new file mode 100644
index 0000000..a7419c2
--- /dev/null
+++ b/cmake/config.cmake.in
@@ -0,0 +1,111 @@
+## gflags CMake configuration file
+
+# library version information
+set (@PACKAGE_NAME@_VERSION_STRING "@PACKAGE_VERSION@")
+set (@PACKAGE_NAME@_VERSION_MAJOR @PACKAGE_VERSION_MAJOR@)
+set (@PACKAGE_NAME@_VERSION_MINOR @PACKAGE_VERSION_MINOR@)
+set (@PACKAGE_NAME@_VERSION_PATCH @PACKAGE_VERSION_PATCH@)
+
+# import targets
+include ("${CMAKE_CURRENT_LIST_DIR}/@PACKAGE_NAME@-export.cmake")
+
+# installation prefix
+get_filename_component (CMAKE_CURRENT_LIST_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+get_filename_component (_INSTALL_PREFIX "${CMAKE_CURRENT_LIST_DIR}/@INSTALL_PREFIX_REL2CONFIG_DIR@" ABSOLUTE)
+
+# include directory
+#
+# Newer versions of CMake set the INTERFACE_INCLUDE_DIRECTORIES property
+# of the imported targets. It is hence not necessary to add this path
+# manually to the include search path for targets which link to gflags.
+set (@PACKAGE_NAME@_INCLUDE_DIR "${_INSTALL_PREFIX}/@INCLUDE_INSTALL_DIR@")
+
+# default settings
+if (NOT DEFINED @PACKAGE_NAME@_SHARED)
+ if (TARGET @PACKAGE_NAME@-static OR TARGET @PACKAGE_NAME@_nothreads-static)
+ set (@PACKAGE_NAME@_SHARED FALSE)
+ else ()
+ set (@PACKAGE_NAME@_SHARED TRUE)
+ endif ()
+endif ()
+if (NOT DEFINED @PACKAGE_NAME@_NOTHREADS)
+ if (TARGET @PACKAGE_NAME@-static OR TARGET @PACKAGE_NAME@-shared)
+ set (@PACKAGE_NAME@_NOTHREADS FALSE)
+ else ()
+ set (@PACKAGE_NAME@_NOTHREADS TRUE)
+ endif ()
+endif ()
+
+# choose imported library target
+if (NOT @PACKAGE_NAME@_TARGET)
+ if (@PACKAGE_NAME@_SHARED)
+ if (@PACKAGE_NAME@_NOTHREADS)
+ set (@PACKAGE_NAME@_TARGET @PACKAGE_NAME@_nothreads-shared)
+ else ()
+ set (@PACKAGE_NAME@_TARGET @PACKAGE_NAME@-shared)
+ endif ()
+ else ()
+ if (@PACKAGE_NAME@_NOTHREADS)
+ set (@PACKAGE_NAME@_TARGET @PACKAGE_NAME@_nothreads-static)
+ else ()
+ set (@PACKAGE_NAME@_TARGET @PACKAGE_NAME@-static)
+ endif ()
+ endif ()
+endif ()
+if (NOT TARGET ${@PACKAGE_NAME@_TARGET})
+ message (FATAL_ERROR "Your @PACKAGE_NAME@ installation does not contain a ${@PACKAGE_NAME@_TARGET} library target!"
+ " Try a different combination of @PACKAGE_NAME@_SHARED and @PACKAGE_NAME@_NOTHREADS.")
+endif ()
+
+# add more convenient "@PACKAGE_NAME@" import target
+if (NOT TARGET @PACKAGE_NAME@)
+ if (@PACKAGE_NAME@_SHARED)
+ add_library (@PACKAGE_NAME@ SHARED IMPORTED)
+ else ()
+ add_library (@PACKAGE_NAME@ STATIC IMPORTED)
+ endif ()
+ # INTERFACE_INCLUDE_DIRECTORIES
+ get_target_property (_@PACKAGE_NAME@_INCLUDES ${@PACKAGE_NAME@_TARGET} INTERFACE_INCLUDE_DIRECTORIES)
+ if (_@PACKAGE_NAME@_INCLUDES)
+ set_target_properties(@PACKAGE_NAME@ PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${_@PACKAGE_NAME@_INCLUDES}"
+ )
+ endif ()
+ unset (_@PACKAGE_NAME@_INCLUDES)
+ # set configuration specific properties
+ get_target_property (_@PACKAGE_NAME@_CONFIGURATIONS ${@PACKAGE_NAME@_TARGET} IMPORTED_CONFIGURATIONS)
+ set_target_properties (@PACKAGE_NAME@ PROPERTIES IMPORTED_CONFIGURATIONS "${_@PACKAGE_NAME@_CONFIGURATIONS}")
+ foreach (_@PACKAGE_NAME@_CONFIG IN LISTS _@PACKAGE_NAME@_CONFIGURATIONS)
+ # IMPORTED_LOCATION_<config>
+ get_target_property (_@PACKAGE_NAME@_LOCATION ${@PACKAGE_NAME@_TARGET} IMPORTED_LOCATION_${_@PACKAGE_NAME@_CONFIG})
+ if (_@PACKAGE_NAME@_LOCATION)
+ set_target_properties(@PACKAGE_NAME@ PROPERTIES
+ IMPORTED_LOCATION_${_@PACKAGE_NAME@_CONFIG} "${_@PACKAGE_NAME@_LOCATION}"
+ )
+ endif ()
+ unset (_@PACKAGE_NAME@_LOCATION)
+ # IMPORTED_LINK_INTERFACE_LANGUAGES_<config> (static)
+ get_target_property (_@PACKAGE_NAME@_LANGUAGES ${@PACKAGE_NAME@_TARGET} IMPORTED_LINK_INTERFACE_LANGUAGES_${_@PACKAGE_NAME@_CONFIG})
+ if (_@PACKAGE_NAME@_LANGUAGES)
+ set_target_properties(@PACKAGE_NAME@ PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_${_@PACKAGE_NAME@_CONFIG} "${_@PACKAGE_NAME@_LANGUAGES}"
+ )
+ endif ()
+ unset (_@PACKAGE_NAME@_LANGUAGES)
+ # IMPORTED_SONAME_<config> (shared)
+ get_target_property (_@PACKAGE_NAME@_SONAME ${@PACKAGE_NAME@_TARGET} IMPORTED_SONAME_${_@PACKAGE_NAME@_CONFIG})
+ if (_@PACKAGE_NAME@_SONAME)
+ set_target_properties(@PACKAGE_NAME@ PROPERTIES
+ IMPORTED_SONAME_${_@PACKAGE_NAME@_CONFIG} "${_@PACKAGE_NAME@_SONAME}"
+ )
+ endif ()
+ unset (_@PACKAGE_NAME@_SONAME)
+ endforeach ()
+ unset (_@PACKAGE_NAME@_CONFIGURATIONS)
+endif ()
+
+# alias for default import target to be compatible with older CMake package configurations
+set (@PACKAGE_NAME@_LIBRARIES "${@PACKAGE_NAME@_TARGET}")
+
+# unset private variables
+unset (_INSTALL_PREFIX)
diff --git a/cmake/execute_test.cmake b/cmake/execute_test.cmake
new file mode 100644
index 0000000..df008cf
--- /dev/null
+++ b/cmake/execute_test.cmake
@@ -0,0 +1,53 @@
+# ----------------------------------------------------------------------------
+# sanitize string stored in variable for use in regular expression.
+macro (sanitize_for_regex STRVAR)
+ string (REGEX REPLACE "([.+*?^$()])" "\\\\\\1" ${STRVAR} "${${STRVAR}}")
+endmacro ()
+
+# ----------------------------------------------------------------------------
+# script arguments
+if (NOT COMMAND)
+ message (FATAL_ERROR "Test command not specified!")
+endif ()
+if (NOT DEFINED EXPECTED_RC)
+ set (EXPECTED_RC 0)
+endif ()
+if (EXPECTED_OUTPUT)
+ sanitize_for_regex(EXPECTED_OUTPUT)
+endif ()
+if (UNEXPECTED_OUTPUT)
+ sanitize_for_regex(UNEXPECTED_OUTPUT)
+endif ()
+
+# ----------------------------------------------------------------------------
+# set a few environment variables (useful for --tryfromenv)
+set (ENV{FLAGS_undefok} "foo,bar")
+set (ENV{FLAGS_weirdo} "")
+set (ENV{FLAGS_version} "true")
+set (ENV{FLAGS_help} "false")
+
+# ----------------------------------------------------------------------------
+# execute test command
+execute_process(
+ COMMAND ${COMMAND}
+ RESULT_VARIABLE RC
+ OUTPUT_VARIABLE OUTPUT
+ ERROR_VARIABLE OUTPUT
+)
+
+if (OUTPUT)
+ message ("${OUTPUT}")
+endif ()
+
+# ----------------------------------------------------------------------------
+# check test result
+if (NOT RC EQUAL EXPECTED_RC)
+ string (REPLACE ";" " " COMMAND "${COMMAND}")
+ message (FATAL_ERROR "Command:\n\t${COMMAND}\nExit status is ${RC}, expected ${EXPECTED_RC}")
+endif ()
+if (EXPECTED_OUTPUT AND NOT OUTPUT MATCHES "${EXPECTED_OUTPUT}")
+ message (FATAL_ERROR "Test output does not match expected output: ${EXPECTED_OUTPUT}")
+endif ()
+if (UNEXPECTED_OUTPUT AND OUTPUT MATCHES "${UNEXPECTED_OUTPUT}")
+ message (FATAL_ERROR "Test output matches unexpected output: ${UNEXPECTED_OUTPUT}")
+endif ()
\ No newline at end of file
diff --git a/cmake/package.cmake.in b/cmake/package.cmake.in
new file mode 100644
index 0000000..aaec792
--- /dev/null
+++ b/cmake/package.cmake.in
@@ -0,0 +1,49 @@
+# Per-generator CPack configuration file. See CPACK_PROJECT_CONFIG_FILE documented at
+# http://www.cmake.org/cmake/help/v2.8.12/cpack.html#variable:CPACK_PROJECT_CONFIG_FILE
+#
+# All common CPACK_* variables are set in CMakeLists.txt already. This file only
+# overrides some of these to provide package generator specific settings.
+
+# whether package contains all development files or only runtime files
+set (DEVEL @INSTALL_HEADERS@)
+
+# ------------------------------------------------------------------------------
+# Mac OS X package
+if (CPACK_GENERATOR MATCHES "PackageMaker|DragNDrop")
+
+ set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}")
+ if (DEVEL)
+ set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}-devel")
+ endif ()
+ set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}-${CPACK_PACKAGE_VERSION}")
+
+# ------------------------------------------------------------------------------
+# Debian package
+elseif (CPACK_GENERATOR MATCHES "DEB")
+
+ set (CPACK_PACKAGE_FILE_NAME "lib${CPACK_PACKAGE_NAME}")
+ if (DEVEL)
+ set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}-dev")
+ else ()
+ set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}0")
+ endif ()
+ set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}_${CPACK_PACKAGE_VERSION}-1_${CPACK_PACKAGE_ARCHITECTURE}")
+
+ set (CPACK_DEBIAN_PACKAGE_DEPENDS)
+ set (CPACK_DEBIAN_PACKAGE_SECTION "devel")
+ set (CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
+ set (CPACK_DEBIAN_PACKAGE_HOMEPAGE "${CPACK_RPM_PACKAGE_URL}")
+ set (CPACK_DEBIAN_PACKAGE_MAINTAINER "${CPACK_PACKAGE_VENDOR}")
+ set (CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${CPACK_PACKAGE_ARCHITECTURE}")
+
+# ------------------------------------------------------------------------------
+# RPM package
+elseif (CPACK_GENERATOR MATCHES "RPM")
+
+ set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}")
+ if (DEVEL)
+ set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}-devel")
+ endif ()
+ set (CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}-${CPACK_PACKAGE_VERSION}-1.${CPACK_PACKAGE_ARCHITECTURE}")
+
+endif ()
diff --git a/cmake/utils.cmake b/cmake/utils.cmake
new file mode 100644
index 0000000..9cef463
--- /dev/null
+++ b/cmake/utils.cmake
@@ -0,0 +1,96 @@
+## Utility CMake functions.
+
+# ----------------------------------------------------------------------------
+## Convert boolean value to 0 or 1
+macro (bool_to_int VAR)
+ if (${VAR})
+ set (${VAR} 1)
+ else ()
+ set (${VAR} 0)
+ endif ()
+endmacro ()
+
+# ----------------------------------------------------------------------------
+## Extract version numbers from version string.
+function (version_numbers version major minor patch)
+ if (version MATCHES "([0-9]+)(\\.[0-9]+)?(\\.[0-9]+)?(rc[1-9][0-9]*|[a-z]+)?")
+ if (CMAKE_MATCH_1)
+ set (_major ${CMAKE_MATCH_1})
+ else ()
+ set (_major 0)
+ endif ()
+ if (CMAKE_MATCH_2)
+ set (_minor ${CMAKE_MATCH_2})
+ string (REGEX REPLACE "^\\." "" _minor "${_minor}")
+ else ()
+ set (_minor 0)
+ endif ()
+ if (CMAKE_MATCH_3)
+ set (_patch ${CMAKE_MATCH_3})
+ string (REGEX REPLACE "^\\." "" _patch "${_patch}")
+ else ()
+ set (_patch 0)
+ endif ()
+ else ()
+ set (_major 0)
+ set (_minor 0)
+ set (_patch 0)
+ endif ()
+ set ("${major}" "${_major}" PARENT_SCOPE)
+ set ("${minor}" "${_minor}" PARENT_SCOPE)
+ set ("${patch}" "${_patch}" PARENT_SCOPE)
+endfunction ()
+
+# ----------------------------------------------------------------------------
+## Configure public header files
+function (configure_headers out)
+ set (tmp)
+ foreach (src IN LISTS ARGN)
+ if (IS_ABSOLUTE "${src}")
+ list (APPEND tmp "${src}")
+ elseif (EXISTS "${PROJECT_SOURCE_DIR}/src/${src}.in")
+ configure_file ("${PROJECT_SOURCE_DIR}/src/${src}.in" "${PROJECT_BINARY_DIR}/include/${GFLAGS_INCLUDE_DIR}/${src}" @ONLY)
+ list (APPEND tmp "${PROJECT_BINARY_DIR}/include/${GFLAGS_INCLUDE_DIR}/${src}")
+ else ()
+ configure_file ("${PROJECT_SOURCE_DIR}/src/${src}" "${PROJECT_BINARY_DIR}/include/${GFLAGS_INCLUDE_DIR}/${src}" COPYONLY)
+ list (APPEND tmp "${PROJECT_BINARY_DIR}/include/${GFLAGS_INCLUDE_DIR}/${src}")
+ endif ()
+ endforeach ()
+ set (${out} "${tmp}" PARENT_SCOPE)
+endfunction ()
+
+# ----------------------------------------------------------------------------
+## Configure source files with .in suffix
+function (configure_sources out)
+ set (tmp)
+ foreach (src IN LISTS ARGN)
+ if (src MATCHES ".h$" AND EXISTS "${PROJECT_SOURCE_DIR}/src/${src}.in")
+ configure_file ("${PROJECT_SOURCE_DIR}/src/${src}.in" "${PROJECT_BINARY_DIR}/include/${GFLAGS_INCLUDE_DIR}/${src}" @ONLY)
+ list (APPEND tmp "${PROJECT_BINARY_DIR}/include/${GFLAGS_INCLUDE_DIR}/${src}")
+ else ()
+ list (APPEND tmp "${PROJECT_SOURCE_DIR}/src/${src}")
+ endif ()
+ endforeach ()
+ set (${out} "${tmp}" PARENT_SCOPE)
+endfunction ()
+
+# ----------------------------------------------------------------------------
+## Add usage test
+#
+# Using PASS_REGULAR_EXPRESSION and FAIL_REGULAR_EXPRESSION would
+# do as well, but CMake/CTest does not allow us to specify an
+# expected exit status. Moreover, the execute_test.cmake script
+# sets environment variables needed by the --fromenv/--tryfromenv tests.
+macro (add_gflags_test name expected_rc expected_output unexpected_output cmd)
+ set (args "--test_tmpdir=${PROJECT_BINARY_DIR}/Testing/Temporary"
+ "--srcdir=${PROJECT_SOURCE_DIR}/test")
+ add_test (
+ NAME ${name}
+ COMMAND "${CMAKE_COMMAND}" "-DCOMMAND:STRING=$<TARGET_FILE:${cmd}>;${args};${ARGN}"
+ "-DEXPECTED_RC:STRING=${expected_rc}"
+ "-DEXPECTED_OUTPUT:STRING=${expected_output}"
+ "-DUNEXPECTED_OUTPUT:STRING=${unexpected_output}"
+ -P "${PROJECT_SOURCE_DIR}/cmake/execute_test.cmake"
+ WORKING_DIRECTORY "${GFLAGS_FLAGFILES_DIR}"
+ )
+endmacro ()
diff --git a/cmake/version.cmake.in b/cmake/version.cmake.in
new file mode 100644
index 0000000..1e1af05
--- /dev/null
+++ b/cmake/version.cmake.in
@@ -0,0 +1,21 @@
+## gflags CMake configuration version file
+
+# -----------------------------------------------------------------------------
+# library version
+set (PACKAGE_VERSION "@PACKAGE_VERSION@")
+
+# -----------------------------------------------------------------------------
+# check compatibility
+
+# Perform compatibility check here using the input CMake variables.
+# See example in http://www.cmake.org/Wiki/CMake_2.6_Notes.
+
+set (PACKAGE_VERSION_COMPATIBLE TRUE)
+set (PACKAGE_VERSION_UNSUITABLE FALSE)
+
+if ("${PACKAGE_FIND_VERSION_MAJOR}" EQUAL "@PACKAGE_VERSION_MAJOR@" AND
+ "${PACKAGE_FIND_VERSION_MINOR}" EQUAL "@PACKAGE_VERSION_MINOR@")
+ set (PACKAGE_VERSION_EXACT TRUE)
+else ()
+ set (PACKAGE_VERSION_EXACT FALSE)
+endif ()