diff options
Diffstat (limited to '0018-Merge-shared-and-static-library-trees.patch')
-rw-r--r-- | 0018-Merge-shared-and-static-library-trees.patch | 203 |
1 files changed, 203 insertions, 0 deletions
diff --git a/0018-Merge-shared-and-static-library-trees.patch b/0018-Merge-shared-and-static-library-trees.patch new file mode 100644 index 000000000000..45ea3d0d2d51 --- /dev/null +++ b/0018-Merge-shared-and-static-library-trees.patch @@ -0,0 +1,203 @@ +From 8d8cfe560697425a01b786aee113082495d6c85f Mon Sep 17 00:00:00 2001 +From: Martchus <martchus@gmx.net> +Date: Sun, 18 Sep 2016 18:45:08 +0200 +Subject: [PATCH 18/33] Merge shared and static library trees + +Allow installation of shared and static build in the same prefix +--- + configure.pri | 16 +++++++++++++++- + mkspecs/features/default_post.prf | 11 +++++++++++ + mkspecs/features/device_config.prf | 9 ++++++++- + mkspecs/features/qt.prf | 17 +++++++++++++++++ + mkspecs/features/spec_pre.prf | 11 ++++++++--- + qmake/generators/makefile.cpp | 9 ++++++--- + qtbase.pro | 10 ++++++++-- + 7 files changed, 73 insertions(+), 10 deletions(-) + +diff --git a/configure.pri b/configure.pri +index 81133da3d7..927fcbe132 100644 +--- a/configure.pri ++++ b/configure.pri +@@ -657,7 +657,12 @@ defineTest(qtConfOutput_machineTuple) { + + defineTest(qtConfOutput_commitOptions) { + # qdevice.pri needs to be written early, because the compile tests require it. +- write_file($$QT_BUILD_TREE/mkspecs/qdevice.pri, $${currentConfig}.output.devicePro)|error() ++ shared|actually_a_shared_build { ++ DEVICE_PRI_SUFFIX = .pri ++ } else { ++ DEVICE_PRI_SUFFIX = .static.pri ++ } ++ write_file($$QT_BUILD_TREE/mkspecs/qdevice$$DEVICE_PRI_SUFFIX, $${currentConfig}.output.devicePro)|error() + } + + # type (empty or 'host'), option name, default value +@@ -1350,3 +1355,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 9df99b8648..9c1dd6a735 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/device_config.prf b/mkspecs/features/device_config.prf +index c15559e174..dd09ac749d 100644 +--- a/mkspecs/features/device_config.prf ++++ b/mkspecs/features/device_config.prf +@@ -4,7 +4,14 @@ + # supposed to be influenced by -device-option then. + host_build: return() + +-DEVICE_PRI = $$[QT_HOST_DATA/get]/mkspecs/qdevice.pri ++shared|actually_a_shared_build { ++ DEVICE_PRI = $$[QT_HOST_DATA/get]/mkspecs/qdevice.pri ++} else { ++ DEVICE_PRI = $$[QT_HOST_DATA/get]/mkspecs/qdevice.static.pri ++ !exists($$DEVICE_PRI) { ++ DEVICE_PRI = $$[QT_HOST_DATA/get]/mkspecs/qdevice.pri ++ } ++} + exists($$DEVICE_PRI):include($$DEVICE_PRI) + unset(DEVICE_PRI) + +diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf +index 3a71376029..bbada46c29 100644 +--- a/mkspecs/features/qt.prf ++++ b/mkspecs/features/qt.prf +@@ -232,6 +232,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 fedbaaf601..fd3b5c405a 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; +diff --git a/qtbase.pro b/qtbase.pro +index c0ce0972ef..5a2deaf31d 100644 +--- a/qtbase.pro ++++ b/qtbase.pro +@@ -20,6 +20,12 @@ CLEAN_DEPS += qmake-clean + # recursive distclean proceeds, including beyond qtbase. + DISTCLEAN_DEPS += qmake-clean + ++shared|actually_a_shared_build { ++ DEVICE_PRI_SUFFIX = .pri ++} else { ++ DEVICE_PRI_SUFFIX = .static.pri ++} ++ + # Files created by configure. + # config.status (and configure.cache, which is the same for Windows) + # are omitted for convenience of rebuilds. +@@ -27,7 +33,7 @@ QMAKE_DISTCLEAN += \ + config.summary \ + config.tests/.qmake.cache \ + mkspecs/qconfig.pri \ +- mkspecs/qdevice.pri \ ++ mkspecs/qdevice$$DEVICE_PRI_SUFFIX \ + mkspecs/qmodule.pri \ + src/corelib/global/qconfig.h \ + src/corelib/global/qconfig_p.h \ +@@ -78,7 +84,7 @@ prefix_build|!equals(PWD, $$OUT_PWD) { + mkspecs.path = $$[QT_HOST_DATA]/mkspecs + mkspecs.files = \ + $$OUT_PWD/mkspecs/qconfig.pri $$OUT_PWD/mkspecs/qmodule.pri \ +- $$OUT_PWD/mkspecs/qdevice.pri \ ++ $$OUT_PWD/mkspecs/qdevice$$DEVICE_PRI_SUFFIX \ + $$files($$PWD/mkspecs/*) + mkspecs.files -= $$PWD/mkspecs/modules $$PWD/mkspecs/modules-inst + INSTALLS += mkspecs +-- +2.22.0 + |