From 2187bc3f1e51a225042cd0c33d0794d8515386ca Mon Sep 17 00:00:00 2001 From: kervala Date: Tue, 15 Dec 2015 13:41:07 +0100 Subject: [PATCH] Fixed: Include directories with Qt 5 CMake modules in PCH --- code/CMakeModules/PCHSupport.cmake | 62 +++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/code/CMakeModules/PCHSupport.cmake b/code/CMakeModules/PCHSupport.cmake index f3ac564a9..45353d924 100644 --- a/code/CMakeModules/PCHSupport.cmake +++ b/code/CMakeModules/PCHSupport.cmake @@ -40,12 +40,15 @@ MACRO(PCH_SET_COMPILE_FLAGS _target) GET_TARGET_PROPERTY(_targetType ${_target} TYPE) + SET(_USE_PIE OFF) + IF(${_targetType} STREQUAL "SHARED_LIBRARY" OR ${_targetType} STREQUAL "MODULE_LIBRARY") LIST(APPEND _FLAGS " ${CMAKE_SHARED_LIBRARY_CXX_FLAGS}") ELSE() GET_TARGET_PROPERTY(_pic ${_target} POSITION_INDEPENDENT_CODE) + MESSAGE(STATUS "Target ${_target} is using PIE") IF(_pic) - LIST(APPEND _FLAGS " ${CMAKE_CXX_COMPILE_OPTIONS_PIE}") + SET(_USE_PIE ON) ENDIF() ENDIF() @@ -70,6 +73,20 @@ MACRO(PCH_SET_COMPILE_FLAGS _target) ENDFOREACH() ENDIF() + GET_DIRECTORY_PROPERTY(DEFINITIONS DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS) + IF(DEFINITIONS) + FOREACH(item ${DEFINITIONS}) + LIST(APPEND GLOBAL_DEFINITIONS " -D${item}") + ENDFOREACH() + ENDIF() + + GET_DIRECTORY_PROPERTY(DEFINITIONS DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS_${_UPPER_BUILD}) + IF(DEFINITIONS) + FOREACH(item ${DEFINITIONS}) + LIST(APPEND GLOBAL_DEFINITIONS " -D${item}") + ENDFOREACH() + ENDIF() + GET_TARGET_PROPERTY(oldProps ${_target} COMPILE_FLAGS) IF(oldProps) LIST(APPEND _FLAGS " ${oldProps}") @@ -101,6 +118,49 @@ MACRO(PCH_SET_COMPILE_FLAGS _target) ENDFOREACH() ENDIF() + GET_TARGET_PROPERTY(_LIBS ${_target} INTERFACE_LINK_LIBRARIES) + IF(_LIBS) + FOREACH(_LIB ${_LIBS}) + IF(TARGET "${_LIB}") + # use same include directories + GET_TARGET_PROPERTY(_DIRS ${_LIB} INTERFACE_INCLUDE_DIRECTORIES) + + IF(_DIRS) + FOREACH(item ${_DIRS}) + LIST(APPEND GLOBAL_DEFINITIONS " -I\"${item}\"") + ENDFOREACH() + ENDIF() + + # use same compile definitions + GET_TARGET_PROPERTY(_DEFINITIONS ${_LIB} INTERFACE_COMPILE_DEFINITIONS) + + IF(_DEFINITIONS) + FOREACH(item ${_DEFINITIONS}) + # don't use dynamic expressions + IF(NOT item MATCHES "\\$<") + LIST(APPEND GLOBAL_DEFINITIONS " -D${item}") + ENDIF() + ENDFOREACH() + ENDIF() + ENDIF() + ENDFOREACH() + ENDIF() + + # Hack to define missing QT_NO_DEBUG with Qt 5.2 + IF(USE_QT5 AND _UPPER_BUILD STREQUAL "RELEASE") + LIST(APPEND GLOBAL_DEFINITIONS " -DQT_NO_DEBUG") + ENDIF() + + # Qt5_POSITION_INDEPENDENT_CODE should be true if Qt was compiled with PIE + IF(Qt5_POSITION_INDEPENDENT_CODE) + SET(_USE_PIE ON) + ENDIF() + + IF(_USE_PIE) + LIST(APPEND _FLAGS " ${CMAKE_CXX_COMPILE_OPTIONS_PIE}") + LIST(APPEND _FLAGS " ${CMAKE_CXX_COMPILE_OPTIONS_PIC}") + ENDIF() + LIST(APPEND _FLAGS " ${GLOBAL_DEFINITIONS}") IF(CMAKE_VERSION VERSION_LESS "3.3.0")