5f30267021f5b9018b9e3aeb6e1de7f57adcc8b4
[platform/upstream/glog.git] / cmake / DetermineGflagsNamespace.cmake
1 macro(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
16 int main(int argc, char**argv)
17 {
18   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}" -DGFLAGS_NAMESPACE=${_namespace}
37         LINK_LIBRARIES "${gflags_LIBRARIES}"
38         CMAKE_FLAGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} "-DINCLUDE_DIRECTORIES:STRING=${gflags_INCLUDE_DIR}"
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 ()
69 endmacro ()