diff options
Diffstat (limited to '0018-Merge-shared-and-static-library-trees.patch')
-rw-r--r-- | 0018-Merge-shared-and-static-library-trees.patch | 208 |
1 files changed, 208 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..7e35a741d883 --- /dev/null +++ b/0018-Merge-shared-and-static-library-trees.patch @@ -0,0 +1,208 @@ +From 2029f79155af8b3fdff3b9a66ee25b7ff274c327 Mon Sep 17 00:00:00 2001 +From: Martchus <martchus@gmx.net> +Date: Sun, 18 Sep 2016 18:45:08 +0200 +Subject: [PATCH 18/32] Merge shared and static library trees + +Allow installation of shared and static build in the same prefix + +Change-Id: I1de08df42d83d411aae519691cd3cde1fd6f3d1d +--- + 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 | 11 +++++++---- + qtbase.pro | 10 ++++++++-- + 7 files changed, 74 insertions(+), 11 deletions(-) + +diff --git a/configure.pri b/configure.pri +index 365a16403eb..85acb3757aa 100644 +--- a/configure.pri ++++ b/configure.pri +@@ -668,7 +668,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() + } + + # Output is written after configuring each Qt module, +@@ -1430,3 +1435,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 ac799047ab8..60b63922670 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 c15559e1740..dd09ac749d8 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 da1f44a88a1..8096d01c341 100644 +--- a/mkspecs/features/qt.prf ++++ b/mkspecs/features/qt.prf +@@ -254,6 +254,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 51ea3a8321a..275e080ae4e 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 23ac736fc06..16531d556e0 100644 +--- a/qmake/generators/makefile.cpp ++++ b/qmake/generators/makefile.cpp +@@ -3259,6 +3259,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()) { +@@ -3435,11 +3438,11 @@ MakefileGenerator::writePkgConfigFile() + t << Qt::endl; + + // requires +- const QString requiresString = project->values("QMAKE_PKGCONFIG_REQUIRES").join(' '); +- if (!requiresString.isEmpty()) { +- t << "Requires: " << requiresString << Qt::endl; ++ t << "Requires:"; ++ const auto pkgconfigRequires = project->values("QMAKE_PKGCONFIG_REQUIRES"); ++ for (const auto &required : pkgconfigRequires) { ++ t << (project->isActiveConfig("staticlib") ? QStringLiteral(" Static") : QStringLiteral(" ")) << required.toQString(); + } +- + t << Qt::endl; + } + +diff --git a/qtbase.pro b/qtbase.pro +index c0ce0972ef4..5a2deaf31d2 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.44.0 + |