Use the POSITION_INDEPENDENT_CODE property on targets using Qt.
authorStephen Kelly <stephen.kelly@kdab.com>
Wed, 13 Jun 2012 20:26:30 +0000 (22:26 +0200)
committerQt by Nokia <qt-info@nokia.com>
Wed, 20 Jun 2012 08:26:59 +0000 (10:26 +0200)
This property is only set if Qt is configured
with -reduce-relocations (which is the default).

Change-Id: If2f0ab92448f03bbc3f7c828d3bca60107229072
Reviewed-by: Brad King <brad.king@kitware.com>
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
src/corelib/Qt5CoreConfigExtras.cmake.in
src/corelib/Qt5CoreMacros.cmake

index cd330f5..246aa83 100644 (file)
@@ -18,6 +18,10 @@ list(APPEND Qt5Core_INCLUDE_DIRS \"$${CMAKE_DATA_DIR}mkspecs/default\")
 !!ENDIF
 
 !!IF !isEmpty(CMAKE_ADD_FPIE_FLAGS)
+# Targets using Qt need to use the POSITION_INDEPENDENT_CODE property. The
+# Qt5_POSITION_INDEPENDENT_CODE variable is used in the # qt5_use_module
+# macro to add it.
+set(Qt5_POSITION_INDEPENDENT_CODE True)
 set(Qt5Core_EXECUTABLE_COMPILE_FLAGS \"-fPIE\")
 !!ENDIF
 
index bc4c020..cbd141a 100644 (file)
@@ -223,16 +223,21 @@ if (NOT CMAKE_VERSION VERSION_LESS 2.8.8)
             set_property(TARGET ${_target} APPEND PROPERTY INCLUDE_DIRECTORIES ${Qt5${_module}_INCLUDE_DIRS})
             set_property(TARGET ${_target} APPEND PROPERTY COMPILE_DEFINITIONS ${Qt5${_module}_COMPILE_DEFINITIONS})
 
-            # We can't just append to the COMPILE_FLAGS property. That creats a ';' separated list
-            # which breaks the compile commmand line.
-            # Ensure non-duplication here manually instead.
-            get_property(_target_type TARGET ${_target} PROPERTY TYPE)
-            if ("${_target_type}" STREQUAL "EXECUTABLE" AND Qt5${_module}_EXECUTABLE_COMPILE_FLAGS)
-              get_target_property(_flags ${_target} COMPILE_FLAGS)
-              string(FIND "${_flags}" "${Qt5${_module}_EXECUTABLE_COMPILE_FLAGS}" _find_result)
-              if (NOT _find_result)
-                set_target_properties(${_target} PROPERTIES COMPILE_FLAGS "${_flags} ${Qt5${_module}_EXECUTABLE_COMPILE_FLAGS}")
-              endif()
+            if (Qt5_POSITION_INDEPENDENT_CODE)
+                set_property(TARGET ${_target} PROPERTY POSITION_INDEPENDENT_CODE ${Qt5_POSITION_INDEPENDENT_CODE})
+                if (CMAKE_VERSION VERSION_LESS 2.8.9)
+                    # We can't just append to the COMPILE_FLAGS property. That creats a ';' separated list
+                    # which breaks the compile commmand line.
+                    # Ensure non-duplication here manually instead.
+                    get_property(_target_type TARGET ${_target} PROPERTY TYPE)
+                    if ("${_target_type}" STREQUAL "EXECUTABLE" AND Qt5${_module}_EXECUTABLE_COMPILE_FLAGS)
+                        get_target_property(_flags ${_target} COMPILE_FLAGS)
+                        string(FIND "${_flags}" "${Qt5${_module}_EXECUTABLE_COMPILE_FLAGS}" _find_result)
+                        if (NOT _find_result)
+                            set_target_properties(${_target} PROPERTIES COMPILE_FLAGS "${_flags} ${Qt5${_module}_EXECUTABLE_COMPILE_FLAGS}")
+                        endif()
+                    endif()
+                endif()
             endif()
         endforeach()
     endfunction()