OLD_COMPILE_FLAGS was set incorrectly in WebKitHelpers.cmake
[WebKit-https.git] / Source / cmake / WebKitHelpers.cmake
1 # Sets extra compile flags for a target, depending on the compiler being used.
2 # Currently, only GCC is supported.
3 MACRO(WEBKIT_SET_EXTRA_COMPILER_FLAGS _target)
4   IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
5     GET_TARGET_PROPERTY(OLD_COMPILE_FLAGS ${_target} COMPILE_FLAGS)
6     IF (${OLD_COMPILE_FLAGS} STREQUAL "OLD_COMPILE_FLAGS-NOTFOUND")
7         SET(OLD_COMPILE_FLAGS "")
8     ENDIF ()
9
10     INCLUDE(TestCXXAcceptsFlag)
11     CHECK_CXX_ACCEPTS_FLAG("-dumpversion" CMAKE_CXX_ACCEPTS_DUMPVERSION)
12     IF (CMAKE_CXX_ACCEPTS_DUMPVERSION)
13         EXEC_PROGRAM(${CMAKE_CXX_COMPILER} ARGS -dumpversion OUTPUT_VARIABLE COMPILER_VERSION)
14     ELSE ()
15         EXEC_PROGRAM("${CMAKE_CXX_COMPILER} -E -Wp,-dM - < /dev/null | grep '#define __VERSION__' | grep -E -o '[0-9]+\\.[0-9]+\\.?[0-9]+?'" OUTPUT_VARIABLE COMPILER_VERSION)
16     ENDIF ()
17
18     # Disable some optimizations on buggy compiler versions
19     # GCC 4.5.1 does not implement -ftree-sra correctly
20     IF (${COMPILER_VERSION} STREQUAL "4.5.1")
21         SET(OLD_COMPILE_FLAGS "${OLD_COMPILE_FLAGS} -fno-tree-sra")
22     ENDIF ()
23
24     IF (NOT SHARED_CORE)
25         SET(OLD_COMPILE_FLAGS "-fvisibility=hidden ${OLD_COMPILE_FLAGS}")
26     ENDIF ()
27
28     GET_TARGET_PROPERTY(TARGET_TYPE ${_target} TYPE)
29     IF (${TARGET_TYPE} STREQUAL "STATIC_LIBRARY") # -fPIC is automatically added to shared libraries
30         SET(OLD_COMPILE_FLAGS "-fPIC ${OLD_COMPILE_FLAGS}")
31     ENDIF ()
32
33     SET(OLD_COMPILE_FLAGS "-fno-exceptions -fno-strict-aliasing ${OLD_COMPILE_FLAGS}")
34
35     # Enable warnings by default
36     SET(OLD_COMPILE_FLAGS "-W -DANOTHER_BRICK_IN_THE -Wall -Wextra -Wcast-align -Wchar-subscripts -Wformat -Wformat-security -Wmissing-format-attribute -Wno-format-y2k -Wno-parentheses -Wno-unused-parameter -Wpointer-arith  -Wreturn-type -Wundef -Wwrite-strings ${OLD_COMPILE_FLAGS}")
37
38     # Disable C++0x compat warnings for GCC >= 4.6.0 until we build
39     # cleanly with that.
40     IF (NOT ${COMPILER_VERSION} VERSION_LESS "4.6.0")
41         SET(OLD_COMPILE_FLAGS "${OLD_COMPILE_FLAGS} -Wno-c++0x-compat")
42     ENDIF ()
43
44     SET_TARGET_PROPERTIES (${_target} PROPERTIES
45         COMPILE_FLAGS "${OLD_COMPILE_FLAGS}")
46
47     UNSET(OLD_COMPILE_FLAGS)
48   ENDIF ()
49 ENDMACRO()
50
51
52 # Append the given flag to the target property.
53 # Builds on top of GET_TARGET_PROPERTY() and SET_TARGET_PROPERTIES()
54 MACRO (ADD_TARGET_PROPERTIES _target _property _flags)
55   GET_TARGET_PROPERTY (_tmp ${_target} ${_property})
56   IF (NOT _tmp)
57     SET (_tmp "")
58   ENDIF (NOT _tmp)
59
60   FOREACH (f ${_flags})
61     SET (_tmp "${_tmp} ${f}")
62   ENDFOREACH (f ${_flags})
63
64   SET_TARGET_PROPERTIES (${_target} PROPERTIES ${_property} ${_tmp})
65   UNSET (_tmp)
66 ENDMACRO (ADD_TARGET_PROPERTIES _target _property _flags)
67
68
69 # Append the given dependencies to the source file
70 MACRO(ADD_SOURCE_DEPENDENCIES _source _deps)
71   GET_SOURCE_FILE_PROPERTY(_tmp ${_source} OBJECT_DEPENDS)
72   IF (NOT _tmp)
73     SET (_tmp "")
74   ENDIF ()
75
76   FOREACH (f ${_deps})
77     LIST(APPEND _tmp "${f}")
78   ENDFOREACH ()
79
80   SET_SOURCE_FILES_PROPERTIES(${_source} PROPERTIES OBJECT_DEPENDS "${_tmp}")
81   UNSET(_tmp)
82 ENDMACRO()
83
84
85 # Append the given dependencies to the source file
86 # This one consider the given dependencies are in ${DERIVED_SOURCES_WEBCORE_DIR}
87 # and prepends this to every member of dependencies list
88 MACRO(ADD_SOURCE_WEBCORE_DERIVED_DEPENDENCIES _source _deps)
89   SET(_tmp "")
90   FOREACH (f ${_deps})
91     LIST(APPEND _tmp "${DERIVED_SOURCES_WEBCORE_DIR}/${f}")
92   ENDFOREACH ()
93
94   ADD_SOURCE_DEPENDENCIES(${_source} ${_tmp})
95   UNSET(_tmp)
96 ENDMACRO()
97