summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Kelly <steveire@gmail.com>2015-05-28 21:20:55 +0200
committerThiago Macieira <thiago.macieira@intel.com>2015-05-29 00:08:41 +0000
commite3983c87280ade48b243d9c60bed639713851be9 (patch)
treec370ee7f6fb9ffaad46501e89b528ed4a0558991
parent95b6c4fed6521aa2212cab67cb8a6e5553e86117 (diff)
Revert some changes in light of GCC 4 -fPIE reversalv5.4.2
The -fPIE option is now accepted when using GCC 4, which means it is available for backward compatibility for clients using CMake 2.8.11 or older which makes use of the POSITION_INDEPENDENT_CODE feature. Conditionally use that feature for old versions of cmake with GCC 4. Restore the tests for those versions, and clarify the situation in the ChangeLog. Change-Id: I5a06b155dda7db559d86841a2b34fd8ed95acbd0 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r--dist/changes-5.4.220
-rw-r--r--src/corelib/Qt5CoreConfigExtras.cmake.in8
-rw-r--r--src/corelib/Qt5CoreMacros.cmake6
-rw-r--r--tests/auto/cmake/CMakeLists.txt5
-rw-r--r--tests/auto/cmake/test_interface/CMakeLists.txt2
-rw-r--r--tests/auto/cmake/test_use_modules_function/CMakeLists.txt2
6 files changed, 31 insertions, 12 deletions
diff --git a/dist/changes-5.4.2 b/dist/changes-5.4.2
index 29d3c6346d..1a34898011 100644
--- a/dist/changes-5.4.2
+++ b/dist/changes-5.4.2
@@ -37,14 +37,20 @@ information about a particular change.
- On x86 and x86-64 systems with ELF binaries (especially Linux), due to
a new optimization in GCC 5.x in combination with a recent version of
GNU binutils, compiling Qt applications with -fPIE is no longer
- enough. Applications now need to be compiled with the -fPIC option if
- Qt's option "reduce relocations" is active. Note that Clang is known
- to generate incompatible code even with -fPIC if the -flto option is
- active.
+ enough with GCC 5.x. Applications now need to be compiled with
+ the -fPIC option if Qt's option "reduce relocations" is active. For
+ backward compatibility only, Qt accepts the use of -fPIE for GCC 4.x
+ versions.
+ Note that Clang is known to generate incompatible code even with -fPIC if
+ the -flto option is active.
Applications using qmake or cmake >= 2.8.12 as their build system will
- adapt automatically. Applications using an older release of cmake need to
- change their CMakeLists.txt to add Qt5Core_EXECUTABLE_COMPILE_FLAGS to
- CMAKE_CXX_FLAGS.
+ adapt automatically. Applications using an older release of cmake in
+ combination with GCC 5.x need to change their CMakeLists.txt to add
+ Qt5Core_EXECUTABLE_COMPILE_FLAGS to CMAKE_CXX_FLAGS. In particular,
+ applications using cmake >= 2.8.9 and < 2.8.11 will continue to build
+ with the -fPIE option and invoke the special compatibility mode if using
+ GCC 4.x.
+
****************************************************************************
* Library *
diff --git a/src/corelib/Qt5CoreConfigExtras.cmake.in b/src/corelib/Qt5CoreConfigExtras.cmake.in
index a5cab880ba..65fd1f9383 100644
--- a/src/corelib/Qt5CoreConfigExtras.cmake.in
+++ b/src/corelib/Qt5CoreConfigExtras.cmake.in
@@ -71,7 +71,13 @@ set(_qt5_corelib_extra_includes)
# macro to add it.
set(Qt5_POSITION_INDEPENDENT_CODE True)
set(Qt5Core_EXECUTABLE_COMPILE_FLAGS \"-fPIC\")
-set_property(TARGET Qt5::Core APPEND PROPERTY INTERFACE_COMPILE_OPTIONS $$QMAKE_CXXFLAGS_APP)
+if (CMAKE_VERSION VERSION_LESS 2.8.12
+ AND (NOT CMAKE_CXX_COMPILER_ID STREQUAL \"GNU\"
+ OR CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0))
+ set_property(TARGET Qt5::Core APPEND PROPERTY INTERFACE_POSITION_INDEPENDENT_CODE \"ON\")
+else()
+ set_property(TARGET Qt5::Core APPEND PROPERTY INTERFACE_COMPILE_OPTIONS $$QMAKE_CXXFLAGS_APP)
+endif()
!!IF !isEmpty(QT_NAMESPACE)
list(APPEND Qt5Core_DEFINITIONS -DQT_NAMESPACE=$$QT_NAMESPACE)
diff --git a/src/corelib/Qt5CoreMacros.cmake b/src/corelib/Qt5CoreMacros.cmake
index c10880f787..cfbb381df5 100644
--- a/src/corelib/Qt5CoreMacros.cmake
+++ b/src/corelib/Qt5CoreMacros.cmake
@@ -281,6 +281,12 @@ if (NOT CMAKE_VERSION VERSION_LESS 2.8.9)
set_property(TARGET ${_target} APPEND PROPERTY COMPILE_DEFINITIONS_RELEASE QT_NO_DEBUG)
set_property(TARGET ${_target} APPEND PROPERTY COMPILE_DEFINITIONS_RELWITHDEBINFO QT_NO_DEBUG)
set_property(TARGET ${_target} APPEND PROPERTY COMPILE_DEFINITIONS_MINSIZEREL QT_NO_DEBUG)
+ if (Qt5_POSITION_INDEPENDENT_CODE
+ AND (CMAKE_VERSION VERSION_LESS 2.8.12
+ AND (NOT CMAKE_CXX_COMPILER_ID STREQUAL \"GNU\"
+ OR CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)))
+ set_property(TARGET ${_target} PROPERTY POSITION_INDEPENDENT_CODE ${Qt5_POSITION_INDEPENDENT_CODE})
+ endif()
endforeach()
endmacro()
endif()
diff --git a/tests/auto/cmake/CMakeLists.txt b/tests/auto/cmake/CMakeLists.txt
index b68aafe956..87d8a802f3 100644
--- a/tests/auto/cmake/CMakeLists.txt
+++ b/tests/auto/cmake/CMakeLists.txt
@@ -126,8 +126,11 @@ if (QT_WITH_ANGLE OR (NOT WIN32 AND NOT APPLE AND NOT NO_EGL))
endif()
expect_pass(test_opengl_lib)
-if (NOT CMAKE_VERSION VERSION_LESS 2.8.12)
+if (NOT CMAKE_VERSION VERSION_LESS 2.8.11)
expect_pass(test_interface)
+endif()
+
+if (NOT CMAKE_VERSION VERSION_LESS 2.8.12)
expect_pass(test_interface_link_libraries)
expect_pass(test_moc_macro_target)
endif()
diff --git a/tests/auto/cmake/test_interface/CMakeLists.txt b/tests/auto/cmake/test_interface/CMakeLists.txt
index bd3217a497..a8af92da63 100644
--- a/tests/auto/cmake/test_interface/CMakeLists.txt
+++ b/tests/auto/cmake/test_interface/CMakeLists.txt
@@ -1,5 +1,5 @@
-cmake_minimum_required(VERSION 2.8.12)
+cmake_minimum_required(VERSION 2.8.11)
project(test_interface)
diff --git a/tests/auto/cmake/test_use_modules_function/CMakeLists.txt b/tests/auto/cmake/test_use_modules_function/CMakeLists.txt
index be05c75054..bfcdd9d1d7 100644
--- a/tests/auto/cmake/test_use_modules_function/CMakeLists.txt
+++ b/tests/auto/cmake/test_use_modules_function/CMakeLists.txt
@@ -12,7 +12,5 @@ add_executable(three three.cpp)
find_package(Qt5Core)
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
-
qt5_use_modules(two Test)
qt5_use_modules(three Gui Test)