Merge branch 'dbus-1.10'
[platform/upstream/dbus.git] / cmake / modules / Macros.cmake
1 if(DBUS_BUILD_TESTS AND CMAKE_CROSSCOMPILING AND CMAKE_SYSTEM_NAME STREQUAL "Windows")
2     if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
3         find_file(WINE_EXECUTABLE
4             NAMES wine
5             PATHS /usr/bin /usr/local/bin
6             NO_CMAKE_FIND_ROOT_PATH
7         )
8         find_file(BINFMT_WINE_SUPPORT_FILE
9             NAMES DOSWin wine Wine windows Windows
10             PATHS /proc/sys/fs/binfmt_misc
11             NO_SYSTEM_PATH NO_CMAKE_FIND_ROOT_PATH
12         )
13         if(BINFMT_WINE_SUPPORT_FILE)
14             file(READ ${BINFMT_WINE_SUPPORT_FILE} CONTENT)
15             if(${CONTENT} MATCHES "enabled")
16                 set(HAVE_BINFMT_WINE_SUPPORT 1)
17             endif()
18         endif()
19         if(WINE_EXECUTABLE)
20             list(APPEND FOOTNOTES "NOTE: The requirements to run cross compiled applications on your host system are achieved. You may run 'make check'.")
21         endif()
22         if(NOT WINE_EXECUTABLE)
23             list(APPEND FOOTNOTES "NOTE: You may install the Windows emulator 'wine' to be able to run cross compiled test applications.")
24         endif()
25         if(NOT HAVE_BINFMT_WINE_SUPPORT)
26             list(APPEND FOOTNOTES "NOTE: You may activate binfmt_misc support for wine to be able to run cross compiled test applications directly.")
27         endif()
28     else()
29         list(APPEND FOOTNOTES "NOTE: You will not be able to run cross compiled applications on your host system.")
30     endif()
31 endif()
32
33 MACRO(TIMESTAMP RESULT)
34     if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
35         EXECUTE_PROCESS(COMMAND "cmd" " /C date /T" OUTPUT_VARIABLE DATE)
36         string(REGEX REPLACE "(..)[/.](..)[/.](....).*" "\\3\\2\\1" DATE ${DATE})
37         EXECUTE_PROCESS(COMMAND "cmd" " /C time /T" OUTPUT_VARIABLE TIME)
38         string(REGEX REPLACE "(..):(..)" "\\1\\2" TIME ${TIME})
39         set (${RESULT} "${DATE}${TIME}")
40     else ()
41         EXECUTE_PROCESS(COMMAND "date" "+%Y%m%d%H%M" OUTPUT_VARIABLE ${RESULT})
42     endif ()
43 ENDMACRO()
44
45 macro(add_test_executable _target _source)
46     add_executable(${_target} ${_source})
47     target_link_libraries(${_target} ${ARGN})
48     if (CMAKE_CROSSCOMPILING AND CMAKE_SYSTEM_NAME STREQUAL "Windows")
49         # run tests with binfmt_misc
50         set(PREFIX "z:")
51         set(_env "DBUS_TEST_DAEMON=${PREFIX}${CMAKE_BINARY_DIR}/bin/dbus-daemon${EXEEXT}")
52         if(HAVE_BINFMT_WINE_SUPPORT)
53             add_test(NAME ${_target} COMMAND $<TARGET_FILE:${_target}> --tap)
54         else()
55             add_test(NAME ${_target} COMMAND ${WINE_EXECUTABLE} ${PREFIX}$<TARGET_FILE:${_target}> --tap)
56         endif()
57     else()
58         set(PREFIX)
59         set(_env "DBUS_TEST_DAEMON=${CMAKE_BINARY_DIR}/bin/dbus-daemon${EXEEXT}")
60         add_test(NAME ${_target} COMMAND $<TARGET_FILE:${_target}> --tap)
61     endif()
62     list(APPEND _env "DBUS_SESSION_BUS_ADDRESS=")
63     list(APPEND _env "DBUS_FATAL_WARNINGS=1")
64     list(APPEND _env "DBUS_TEST_DATA=${PREFIX}${CMAKE_BINARY_DIR}/test/data")
65     list(APPEND _env "DBUS_TEST_DBUS_LAUNCH=${PREFIX}${CMAKE_BINARY_DIR}/bin/dbus-launch${EXEEXT}")
66     list(APPEND _env "DBUS_TEST_HOMEDIR=${PREFIX}${CMAKE_BINARY_DIR}/dbus")
67     set_tests_properties(${_target} PROPERTIES ENVIRONMENT "${_env}")
68 endmacro(add_test_executable)
69
70 macro(add_helper_executable _target _source)
71     add_executable(${_target} ${_source})
72     target_link_libraries(${_target} ${ARGN})
73 endmacro(add_helper_executable)
74
75
76 #
77 # generate compiler flags from MSVC warning identifiers (e.g. '4114') or gcc warning keys (e.g. 'pointer-sign')
78 #
79 # @param target the variable name which will contain the warnings flags
80 # @param warnings a string with space delimited warnings
81 # @param disabled_warnings a string with space delimited disabled warnings
82 # @param error_warnings a string with space delimited warnings which should result into compile errors
83 #
84 macro(generate_warning_cflags target warnings disabled_warnings error_warnings)
85     if(DEBUG_MACROS)
86         message("generate_warning_cflags got: ${warnings} - ${disabled_warnings} - ${error_warnings}")
87     endif()
88     if(MSVC)
89         # level 1 is default
90         set(enabled_prefix "/w1")
91         set(error_prefix "/we")
92         set(disabled_prefix "/wd")
93     else()
94         set(enabled_prefix "-W")
95         set(error_prefix "-Werror=")
96         set(disabled_prefix "-Wno-")
97     endif()
98
99     set(temp)
100     string(REPLACE " " ";" warnings_list "${warnings}")
101     foreach(warning ${warnings_list})
102         string(STRIP ${warning} _warning)
103         if(_warning)
104             set(temp "${temp} ${enabled_prefix}${_warning}")
105         endif()
106     endforeach()
107
108     string(REPLACE " " ";" disabled_warnings_list "${disabled_warnings}")
109     foreach(warning ${disabled_warnings_list})
110         string(STRIP ${warning} _warning)
111         if(_warning)
112             set(temp "${temp} ${disabled_prefix}${_warning}")
113         endif()
114     endforeach()
115
116     string(REPLACE " " ";" error_warnings_list "${error_warnings}")
117     foreach(warning ${error_warnings_list})
118         string(STRIP ${warning} _warning)
119         if(_warning)
120             set(temp "${temp} ${error_prefix}${_warning}")
121         endif()
122     endforeach()
123     set(${target} "${temp}")
124     if(DEBUG_MACROS)
125         message("generate_warning_cflags return: ${${target}}")
126     endif()
127 endmacro()