aboutsummarylogtreecommitdiffstats
path: root/0021-Merge-shared-and-static-library-trees.patch
blob: b100204767caeb37c309c90c91f952e2d0106abf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
From 4a2456d3e7372aaacf0aa25a116f85aebf21ef5b Mon Sep 17 00:00:00 2001
From: Martchus <martchus@gmx.net>
Date: Sun, 18 Sep 2016 18:45:08 +0200
Subject: [PATCH 21/26] Merge shared and static library trees

Allow installation of shared and static build in the same prefix
---
 configure                         |  6 ++++++
 mkspecs/features/default_post.prf |  8 ++++++++
 mkspecs/features/qt.prf           | 12 ++++++++++++
 mkspecs/features/spec_pre.prf     | 11 ++++++++---
 qmake/generators/makefile.cpp     |  9 ++++++---
 5 files changed, 40 insertions(+), 6 deletions(-)

diff --git a/configure b/configure
index af275de52c..9ecc7f9ada 100755
--- a/configure
+++ b/configure
@@ -7187,6 +7187,12 @@ host_build {
 }
 QT_CONFIG += $QT_CONFIG
 
+contains(CONFIG, static) {
+    CONFIG -= shared
+    QT_CONFIG += static jpeg gif
+    QT_CONFIG -= shared
+}
+
 #versioning
 QT_VERSION = $QT_VERSION
 QT_MAJOR_VERSION = $QT_MAJOR_VERSION
diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf
index e7e9a5bd87..799278d445 100644
--- a/mkspecs/features/default_post.prf
+++ b/mkspecs/features/default_post.prf
@@ -120,3 +120,11 @@ c++11|c++14|c++1z {
 
 QMAKE_INCDIR += $$QMAKE_INCDIR_POST
 QMAKE_LIBDIR += $$QMAKE_LIBDIR_POST
+
+win32:contains(CONFIG, static) {
+    DEFINES += QT_STATIC QT_DESIGNER_STATIC
+    DEFINES -= QT_SHARED
+    contains(QT_CONFIG, angle): DEFINES += QT_OPENGL_ES_2_ANGLE_STATIC
+    QMAKE_LFLAGS += -static -static-libstdc++ -static-libgcc
+    QMAKE_EXT_PRL=.static.prl # prevents qmake from finding the prl file for shared libs
+}
diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf
index bb52f23378..1815ba3241 100644
--- a/mkspecs/features/qt.prf
+++ b/mkspecs/features/qt.prf
@@ -150,6 +150,18 @@ for(ever) {
             !isEmpty(MODULE_WINRT_CAPABILITIES_DEVICE): \
                 WINRT_MANIFEST.capabilities_device_default += $$MODULE_WINRT_CAPABILITIES_DEVICE
         }
+
+        win32:CONFIG(static) {
+            isEqual(MODULE_NAME, QtCore) {
+                LIBS$$var_sfx += $$QMAKE_LIBS_CORE
+            } else:isEqual(MODULE_NAME, QtGui) {
+                LIBS$$var_sfx += $$QMAKE_LIBS_GUI
+            } else:isEqual(MODULE_NAME, QtNetwork) {
+                LIBS$$var_sfx += $$QMAKE_LIBS_NETWORK
+            } 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 090f348ebf..05d28636b9 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 04c0210eb9..f05a039d2f 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -3166,6 +3166,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()) {
@@ -3339,9 +3342,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.11.0