05c147f1a9
Update to 5.5.0 OBS-URL: https://build.opensuse.org/request/show/324146 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/libqt5-qtbase?expand=0&rev=46
111 lines
4.5 KiB
Diff
111 lines
4.5 KiB
Diff
From 38c28ad2420542d795a27c5359226260c886b112 Mon Sep 17 00:00:00 2001
|
|
From: Thiago Macieira <thiago.macieira@intel.com>
|
|
Date: Tue, 2 Jun 2015 11:10:22 -0700
|
|
Subject: [PATCH] Add a linker version script to Qt libraries
|
|
|
|
This linker script is only enabled for systems with GCC or GCC-like
|
|
compilers, though technically it should work on the BSDs too (will
|
|
enable after testing). For regular modules, this declares one ELF
|
|
version "Qt_5" and places all QtCore symbols inside, then it declares
|
|
unused ELF versions "Qt_5.x" for each older minor release. For modules
|
|
declared "internal_module", all symbols are placed in version
|
|
Qt_5_PRIVATE_API.
|
|
|
|
The big advantage of an ELF version is that, when we do Qt 6, both
|
|
versions of QtCore could be loaded in memory without conflicts and all
|
|
symbols would be resolved to the correct library. No module can talk to
|
|
both at the same time, but this avoids mistakes of loading them
|
|
indirectly by plugins.
|
|
|
|
The extra Qt_5.x versions will be used in the next commit.
|
|
|
|
Change-Id: I049a653beeb5454c9539ffff13e3fe6f050fdf31
|
|
---
|
|
mkspecs/common/gcc-base-unix.conf | 1 +
|
|
mkspecs/common/qcc-base-qnx.conf | 1 +
|
|
mkspecs/features/qt_module.prf | 22 ++++++++++++++++++++++
|
|
mkspecs/linux-icc/qmake.conf | 1 +
|
|
mkspecs/unsupported/linux-host-g++/qmake.conf | 1 +
|
|
5 files changed, 26 insertions(+)
|
|
|
|
diff --git a/mkspecs/common/gcc-base-unix.conf b/mkspecs/common/gcc-base-unix.conf
|
|
index 29e0521..3e0b3ba 100644
|
|
--- a/mkspecs/common/gcc-base-unix.conf
|
|
+++ b/mkspecs/common/gcc-base-unix.conf
|
|
@@ -22,3 +22,4 @@ QMAKE_LFLAGS_USE_GOLD = -fuse-ld=gold
|
|
# -Bsymbolic-functions (ld) support
|
|
QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions
|
|
QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,
|
|
+QMAKE_LFLAGS_VERSION_SCRIPT = -Wl,--version-script,
|
|
diff --git a/mkspecs/common/qcc-base-qnx.conf b/mkspecs/common/qcc-base-qnx.conf
|
|
index a0a88b9..cebbe06 100644
|
|
--- a/mkspecs/common/qcc-base-qnx.conf
|
|
+++ b/mkspecs/common/qcc-base-qnx.conf
|
|
@@ -19,6 +19,7 @@ QMAKE_LFLAGS_RPATHLINK = -Wl,-rpath-link,
|
|
# -Bsymbolic-functions (ld) support
|
|
QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions
|
|
QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,
|
|
+QMAKE_LFLAGS_VERSION_SCRIPT = -Wl,--version-script,
|
|
|
|
# Generic options for all BlackBerry/QNX qcc mkspecs
|
|
QMAKE_CFLAGS_THREAD = -D_REENTRANT
|
|
diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf
|
|
index 8919d41..3264740 100644
|
|
--- a/mkspecs/features/qt_module.prf
|
|
+++ b/mkspecs/features/qt_module.prf
|
|
@@ -185,6 +185,28 @@ equals(QT_ARCH, i386):contains(QT_CPU_FEATURES.$$QT_ARCH, sse2):compiler_support
|
|
QMAKE_CXXFLAGS += -mfpmath=sse
|
|
}
|
|
|
|
+!isEmpty(QMAKE_LFLAGS_VERSION_SCRIPT):!static {
|
|
+ verscript = $$OUT_PWD/$${TARGET}.version
|
|
+ QMAKE_LFLAGS += $${QMAKE_LFLAGS_VERSION_SCRIPT}$$verscript
|
|
+
|
|
+ internal_module {
|
|
+ verscript_content = "Qt_$${QT_MAJOR_VERSION}_PRIVATE_API { *; };"
|
|
+ } else {
|
|
+ current = Qt_$$QT_MAJOR_VERSION
|
|
+ verscript_content = "$$current { *; };"
|
|
+ for(i, 0..$$section(VERSION, ., 1, 1)) {
|
|
+ previous = $$current
|
|
+ current = Qt_$${QT_MAJOR_VERSION}.$$i
|
|
+ verscript_content += "$$current {} $$previous;"
|
|
+ }
|
|
+ }
|
|
+ write_file($$verscript, verscript_content)|error("Aborting.")
|
|
+ unset(current)
|
|
+ unset(previous)
|
|
+ unset(verscript)
|
|
+ unset(verscript_content)
|
|
+}
|
|
+
|
|
android: CONFIG += qt_android_deps
|
|
|
|
#install directives
|
|
diff --git a/mkspecs/linux-icc/qmake.conf b/mkspecs/linux-icc/qmake.conf
|
|
index 8119c8a..0cd55ee 100644
|
|
--- a/mkspecs/linux-icc/qmake.conf
|
|
+++ b/mkspecs/linux-icc/qmake.conf
|
|
@@ -97,6 +97,7 @@ QMAKE_CXXFLAGS_PRECOMPILE = -c -pch-create ${QMAKE_PCH_OUTPUT} -include ${QMAKE_
|
|
# -Bsymbolic-functions (ld) support
|
|
QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions
|
|
QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,
|
|
+QMAKE_LFLAGS_VERSION_SCRIPT = -Wl,--version-script,
|
|
|
|
# Symbol visibility control
|
|
QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
|
|
diff --git a/mkspecs/unsupported/linux-host-g++/qmake.conf b/mkspecs/unsupported/linux-host-g++/qmake.conf
|
|
index 1523126..546ff21 100644
|
|
--- a/mkspecs/unsupported/linux-host-g++/qmake.conf
|
|
+++ b/mkspecs/unsupported/linux-host-g++/qmake.conf
|
|
@@ -71,6 +71,7 @@ QMAKE_PCH_OUTPUT_EXT = .gch
|
|
# -Bsymbolic-functions (ld) support
|
|
QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions
|
|
QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,
|
|
+QMAKE_LFLAGS_VERSION_SCRIPT = -Wl,--version-script,
|
|
|
|
#
|
|
# qmake configuration for common linux
|
|
--
|
|
2.3.5
|