PKGBUILDs/qt5-base/mingw-w64-dynamic/0021-Merge-shared-and-stati...

133 lines
5.0 KiB
Diff

From 814b3a23dd94818101265df95b1051987faf440d Mon Sep 17 00:00:00 2001
From: Martchus <martchus@gmx.net>
Date: Sun, 18 Sep 2016 18:45:08 +0200
Subject: [PATCH 21/34] Merge shared and static library trees
Allow installation of shared and static build in the same prefix
---
configure.pri | 9 +++++++++
mkspecs/features/default_post.prf | 11 +++++++++++
mkspecs/features/qt.prf | 17 +++++++++++++++++
mkspecs/features/spec_pre.prf | 11 ++++++++---
qmake/generators/makefile.cpp | 9 ++++++---
5 files changed, 51 insertions(+), 6 deletions(-)
diff --git a/configure.pri b/configure.pri
index 131aa868c2..75203c4572 100644
--- a/configure.pri
+++ b/configure.pri
@@ -1318,3 +1318,12 @@ defineTest(createConfigStatus) {
QMAKE_POST_CONFIGURE += \
"createConfigStatus()"
+
+# merge shared and static library trees
+contains(CONFIG, static) {
+ CONFIG -= shared
+ QT_CONFIG += static jpeg gif
+ QT_CONFIG -= shared
+ # prevent smart library merge from messing cyclic dependency between freetype2 and harfbuzz
+ CONFIG += no_smart_library_merge
+}
diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf
index fbf1f3b8df..c261c46e72 100644
--- a/mkspecs/features/default_post.prf
+++ b/mkspecs/features/default_post.prf
@@ -1,5 +1,16 @@
# This file is loaded by qmake right after loading the actual project file.
+win32:contains(CONFIG, static) {
+ # Ensure defines are set correctly for static build
+ DEFINES -= QT_SHARED
+ DEFINES *= QT_STATIC QT_DESIGNER_STATIC
+ contains(QT_CONFIG, angle): DEFINES *= QT_OPENGL_ES_2_ANGLE_STATIC
+ # Ensure we link against all dependencies statically
+ QMAKE_LFLAGS += -static -static-libstdc++ -static-libgcc
+ # Prevent qmake from finding the prl file for shared libs
+ QMAKE_EXT_PRL = .static.prl
+}
+
contains(TEMPLATE, ".*(lib|app)"):CONFIG += have_target
!have_target:!force_qt: CONFIG -= qt
diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf
index d8d5acaafd..167b8dbf2c 100644
--- a/mkspecs/features/qt.prf
+++ b/mkspecs/features/qt.prf
@@ -238,6 +238,23 @@ for(ever) {
!isEmpty(MODULE_WINRT_CAPABILITIES_DEVICE): \
WINRT_MANIFEST.capabilities_device_default += $$MODULE_WINRT_CAPABILITIES_DEVICE
}
+
+ # Ensure linking against all required static libraries as defined in mingw-w64-g++ mkspec
+ win32:contains(CONFIG, static) {
+ isEqual(MODULE_NAME, QtCore) {
+ LIBS$$var_sfx += $$QMAKE_LIBS_CORE
+ } else:isEqual(MODULE_NAME, QtGui) {
+ LIBS$$var_sfx += $$QMAKE_LIBS_GUI_STATIC
+ } else:isEqual(MODULE_NAME, QtNetwork) {
+ LIBS$$var_sfx += $$QMAKE_LIBS_NETWORK_STATIC
+ } else:isEqual(MODULE_NAME, QtDBus) {
+ LIBS$$var_sfx += $$QMAKE_LIBS_DBUS_STATIC
+ } else:isEqual(MODULE_NAME, QtWidgets) {
+ LIBS$$var_sfx += $$QMAKE_LIBS_WIDGETS_STATIC
+ } else:isEqual(MODULE_NAME, QtOpenGL) {
+ LIBS$$var_sfx += $$QMAKE_LIBS_OPENGL
+ }
+ }
}
!isEmpty(BAD_QT):error("Unknown module(s) in QT$$var_sfx: $$replace(BAD_QT, _private$, -private)")
diff --git a/mkspecs/features/spec_pre.prf b/mkspecs/features/spec_pre.prf
index 51ea3a8321..275e080ae4 100644
--- a/mkspecs/features/spec_pre.prf
+++ b/mkspecs/features/spec_pre.prf
@@ -14,9 +14,14 @@ QMAKE_EXT_H = .h .hpp .hh .hxx
QMAKE_EXT_H_MOC = .cpp
QMAKE_EXT_JS = .js
QMAKE_EXT_LEX = .l
-QMAKE_EXT_LIBTOOL = .la
-QMAKE_EXT_PKGCONFIG = .pc
-QMAKE_EXT_PRL = .prl
+QMAKE_EXT_PKGCONFIG = .pc
+contains(CONFIG, static) {
+ QMAKE_EXT_LIBTOOL = .static.la
+ QMAKE_EXT_PRL = .static.prl
+} else {
+ QMAKE_EXT_LIBTOOL = .la
+ QMAKE_EXT_PRL = .prl
+}
QMAKE_EXT_UI = .ui
QMAKE_EXT_YACC = .y
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index b005da931e..e0c42131f8 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -3247,6 +3247,9 @@ MakefileGenerator::pkgConfigFileName(bool fixify, bool onlyPrependDestdir)
if (project->isActiveConfig("debug")) {
ret += "d";
}
+ if (project->isActiveConfig("staticlib")) {
+ ret.insert(0, QStringLiteral("Static"));
+ }
ret += Option::pkgcfg_ext;
QString subdir = project->first("QMAKE_PKGCONFIG_DESTDIR").toQString();
if(!subdir.isEmpty()) {
@@ -3421,9 +3424,9 @@ MakefileGenerator::writePkgConfigFile()
t << endl;
// requires
- const QString requires = project->values("QMAKE_PKGCONFIG_REQUIRES").join(' ');
- if (!requires.isEmpty()) {
- t << "Requires: " << requires << endl;
+ t << "Requires:";
+ for (const auto &required : project->values("QMAKE_PKGCONFIG_REQUIRES")) {
+ t << (project->isActiveConfig("staticlib") ? QStringLiteral(" Static") : QStringLiteral(" ")) << required.toQString();
}
t << endl;
--
2.21.0