Revert some changes in light of GCC 4 -fPIE reversal

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>
This commit is contained in:
Stephen Kelly 2015-05-28 21:20:55 +02:00 committed by Thiago Macieira
parent 95b6c4fed6
commit e3983c8728
6 changed files with 31 additions and 12 deletions

20
dist/changes-5.4.2 vendored
View File

@ -37,14 +37,20 @@ information about a particular change.
- On x86 and x86-64 systems with ELF binaries (especially Linux), due to - 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 a new optimization in GCC 5.x in combination with a recent version of
GNU binutils, compiling Qt applications with -fPIE is no longer GNU binutils, compiling Qt applications with -fPIE is no longer
enough. Applications now need to be compiled with the -fPIC option if enough with GCC 5.x. Applications now need to be compiled with
Qt's option "reduce relocations" is active. Note that Clang is known the -fPIC option if Qt's option "reduce relocations" is active. For
to generate incompatible code even with -fPIC if the -flto option is backward compatibility only, Qt accepts the use of -fPIE for GCC 4.x
active. 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 Applications using qmake or cmake >= 2.8.12 as their build system will
adapt automatically. Applications using an older release of cmake need to adapt automatically. Applications using an older release of cmake in
change their CMakeLists.txt to add Qt5Core_EXECUTABLE_COMPILE_FLAGS to combination with GCC 5.x need to change their CMakeLists.txt to add
CMAKE_CXX_FLAGS. 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 * * Library *

View File

@ -71,7 +71,13 @@ set(_qt5_corelib_extra_includes)
# macro to add it. # macro to add it.
set(Qt5_POSITION_INDEPENDENT_CODE True) set(Qt5_POSITION_INDEPENDENT_CODE True)
set(Qt5Core_EXECUTABLE_COMPILE_FLAGS \"-fPIC\") 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) !!IF !isEmpty(QT_NAMESPACE)
list(APPEND Qt5Core_DEFINITIONS -DQT_NAMESPACE=$$QT_NAMESPACE) list(APPEND Qt5Core_DEFINITIONS -DQT_NAMESPACE=$$QT_NAMESPACE)

View File

@ -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_RELEASE QT_NO_DEBUG)
set_property(TARGET ${_target} APPEND PROPERTY COMPILE_DEFINITIONS_RELWITHDEBINFO 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) 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() endforeach()
endmacro() endmacro()
endif() endif()

View File

@ -126,8 +126,11 @@ if (QT_WITH_ANGLE OR (NOT WIN32 AND NOT APPLE AND NOT NO_EGL))
endif() endif()
expect_pass(test_opengl_lib) 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) expect_pass(test_interface)
endif()
if (NOT CMAKE_VERSION VERSION_LESS 2.8.12)
expect_pass(test_interface_link_libraries) expect_pass(test_interface_link_libraries)
expect_pass(test_moc_macro_target) expect_pass(test_moc_macro_target)
endif() endif()

View File

@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 2.8.12) cmake_minimum_required(VERSION 2.8.11)
project(test_interface) project(test_interface)

View File

@ -12,7 +12,5 @@ add_executable(three three.cpp)
find_package(Qt5Core) find_package(Qt5Core)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS}")
qt5_use_modules(two Test) qt5_use_modules(two Test)
qt5_use_modules(three Gui Test) qt5_use_modules(three Gui Test)