mirror of
https://github.com/gflags/gflags.git
synced 2025-04-06 14:05:03 +00:00
The first element in the GFLAGS_NAMESPACE list is used as primary/default namespace. The symbols are then imported from this primary namespace into each of the other alternative namespaces with the using keyword. This is in particular used to maintain backwards compatibility with previous gflags library versions that used the "google" namespace instead of the new default "gflags" namespace.
96 lines
3.6 KiB
CMake
96 lines
3.6 KiB
CMake
## 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 ()
|