blob: 3dde42b4b33258750f75c9a9d8f6c58f7029f1b4 [file] [log] [blame]
Austin Schuh906616c2019-01-21 20:25:11 -08001macro(determine_gflags_namespace VARIABLE)
2 if (NOT DEFINED "${VARIABLE}")
3 if (CMAKE_REQUIRED_INCLUDES)
4 set (CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS "-DINCLUDE_DIRECTORIES=${CMAKE_REQUIRED_INCLUDES}")
5 else ()
6 set (CHECK_INCLUDE_FILE_CXX_INCLUDE_DIRS)
7 endif ()
8
9 set(MACRO_CHECK_INCLUDE_FILE_FLAGS ${CMAKE_REQUIRED_FLAGS})
10
11 set(_NAMESPACES gflags google)
12 set(_check_code
13"
14#include <gflags/gflags.h>
15
16int main(int argc, char**argv)
17{
18 GLOG_GFLAGS_NAMESPACE::ParseCommandLineFlags(&argc, &argv, true);
19}
20")
21 if (NOT CMAKE_REQUIRED_QUIET)
22 message (STATUS "Looking for gflags namespace")
23 endif ()
24 if (${ARGC} EQUAL 3)
25 set (CMAKE_CXX_FLAGS_SAVE ${CMAKE_CXX_FLAGS})
26 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARGV2}")
27 endif ()
28
29 set (_check_file
30 ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/DetermineGflagsNamespace.cxx)
31
32 foreach (_namespace ${_NAMESPACES})
33 file (WRITE "${_check_file}" "${_check_code}")
34 try_compile (${VARIABLE}
35 "${CMAKE_BINARY_DIR}" "${_check_file}"
36 COMPILE_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS}" -DGLOG_GFLAGS_NAMESPACE=${_namespace}
37 LINK_LIBRARIES gflags
38 CMAKE_FLAGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
39 OUTPUT_VARIABLE OUTPUT)
40
41 if (${VARIABLE})
42 set (${VARIABLE} ${_namespace} CACHE INTERNAL "gflags namespace" FORCE)
43 break ()
44 else ()
45 file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
46 "Determining the gflags namespace ${_namespace} failed with the following output:\n"
47 "${OUTPUT}\n\n")
48 endif ()
49 endforeach (_namespace)
50
51 if (${ARGC} EQUAL 3)
52 set (CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS_SAVE})
53 endif ()
54
55 if (${VARIABLE})
56 if (NOT CMAKE_REQUIRED_QUIET)
57 message (STATUS "Looking for gflags namespace - ${${VARIABLE}}")
58 endif ()
59 file (APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
60 "Determining the gflags namespace passed with the following output:\n"
61 "${OUTPUT}\n\n")
62 else ()
63 if (NOT CMAKE_REQUIRED_QUIET)
64 message (STATUS "Looking for gflags namespace - failed")
65 endif ()
66 set (${VARIABLE} ${_namespace} CACHE INTERNAL "gflags namespace")
67 endif ()
68 endif ()
69endmacro ()