From a7e58bf253d08b896df3bbf247bbbaae718e426d Mon Sep 17 00:00:00 2001
From: Konstantin Ritt <ritt.ks@gmail.com>
Date: Tue, 25 Feb 2014 15:33:43 +0200
Subject: [PATCH] Build bundled HarfBuzz-NG outside QtGui

Being a part of QtGui, HarfBuzz-NG breaks build with -Werror.
Instead of disabling a particular warnings-as-errors,
build a prefixed static library and make it a link-time dependency.

Change-Id: Id0be1f0e0034092d50f83cd364d5c65940fee869
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
---
 src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro | 126 +++++++++++++++++++++++
 src/3rdparty/harfbuzz.pri                | 120 ---------------------
 src/3rdparty/harfbuzzng.pri              |   6 ++
 src/gui/text/text.pri                    |   2 +-
 src/src.pro                              |  10 +-
 5 files changed, 142 insertions(+), 122 deletions(-)
 create mode 100644 src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro
 delete mode 100644 src/3rdparty/harfbuzz.pri
 create mode 100644 src/3rdparty/harfbuzzng.pri

diff --git a/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro b/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro
new file mode 100644
index 00000000000..d65520927b7
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/harfbuzz-ng.pro
@@ -0,0 +1,126 @@
+TARGET = qtharfbuzzng
+TEMPLATE = lib
+
+CONFIG += \
+    static \
+    hide_symbols \
+    exceptions_off rtti_off
+CONFIG -= qt
+
+DESTDIR = $$QT_BUILD_TREE/lib
+
+DEFINES += HAVE_CONFIG_H
+HEADERS += $$PWD/src/config.h
+
+INCLUDEPATH += $$PWD/include
+
+SOURCES += \
+    $$PWD/src/hb-blob.cc \
+    $$PWD/src/hb-buffer.cc \
+    $$PWD/src/hb-buffer-serialize.cc \
+    $$PWD/src/hb-common.cc \
+    $$PWD/src/hb-face.cc \
+    $$PWD/src/hb-font.cc \
+    $$PWD/src/hb-ot-tag.cc \
+    $$PWD/src/hb-set.cc \
+    $$PWD/src/hb-shape.cc \
+    $$PWD/src/hb-shape-plan.cc \
+    $$PWD/src/hb-shaper.cc \
+    $$PWD/src/hb-unicode.cc \
+    $$PWD/src/hb-warning.cc
+
+HEADERS += \
+    $$PWD/src/hb-atomic-private.hh \
+    $$PWD/src/hb-buffer-private.hh \
+    $$PWD/src/hb-buffer-deserialize-json.hh \
+    $$PWD/src/hb-buffer-deserialize-text.hh \
+    $$PWD/src/hb-cache-private.hh \
+    $$PWD/src/hb-face-private.hh \
+    $$PWD/src/hb-font-private.hh \
+    $$PWD/src/hb-mutex-private.hh \
+    $$PWD/src/hb-object-private.hh \
+    $$PWD/src/hb-open-file-private.hh \
+    $$PWD/src/hb-open-type-private.hh \
+    $$PWD/src/hb-ot-head-table.hh \
+    $$PWD/src/hb-ot-hhea-table.hh \
+    $$PWD/src/hb-ot-hmtx-table.hh \
+    $$PWD/src/hb-ot-maxp-table.hh \
+    $$PWD/src/hb-ot-name-table.hh \
+    $$PWD/src/hb-private.hh \
+    $$PWD/src/hb-set-private.hh \
+    $$PWD/src/hb-shape-plan-private.hh \
+    $$PWD/src/hb-shaper-impl-private.hh \
+    $$PWD/src/hb-shaper-list.hh \
+    $$PWD/src/hb-shaper-private.hh \
+    $$PWD/src/hb-unicode-private.hh \
+    $$PWD/src/hb-utf-private.hh
+
+HEADERS += \
+    $$PWD/src/hb.h \
+    $$PWD/src/hb-blob.h \
+    $$PWD/src/hb-buffer.h \
+    $$PWD/src/hb-common.h \
+    $$PWD/src/hb-face.h \
+    $$PWD/src/hb-font.h \
+    $$PWD/src/hb-set.h \
+    $$PWD/src/hb-shape.h \
+    $$PWD/src/hb-shape-plan.h \
+    $$PWD/src/hb-unicode.h \
+    $$PWD/src/hb-version.h
+
+# Open Type
+SOURCES += \
+    $$PWD/src/hb-ot-layout.cc \
+    $$PWD/src/hb-ot-map.cc \
+    $$PWD/src/hb-ot-shape.cc \
+    $$PWD/src/hb-ot-shape-complex-arabic.cc \
+    $$PWD/src/hb-ot-shape-complex-default.cc \
+    $$PWD/src/hb-ot-shape-complex-hangul.cc \
+    $$PWD/src/hb-ot-shape-complex-hebrew.cc \
+    $$PWD/src/hb-ot-shape-complex-indic.cc \
+    $$PWD/src/hb-ot-shape-complex-indic-table.cc \
+    $$PWD/src/hb-ot-shape-complex-myanmar.cc \
+    $$PWD/src/hb-ot-shape-complex-sea.cc \
+    $$PWD/src/hb-ot-shape-complex-thai.cc \
+    $$PWD/src/hb-ot-shape-complex-tibetan.cc \
+    $$PWD/src/hb-ot-shape-fallback.cc \
+    $$PWD/src/hb-ot-shape-normalize.cc
+
+HEADERS += \
+    $$PWD/src/hb-ot-layout-common-private.hh \
+    $$PWD/src/hb-ot-layout-gdef-table.hh \
+    $$PWD/src/hb-ot-layout-gpos-table.hh \
+    $$PWD/src/hb-ot-layout-gsubgpos-private.hh \
+    $$PWD/src/hb-ot-layout-gsub-table.hh \
+    $$PWD/src/hb-ot-layout-jstf-table.hh \
+    $$PWD/src/hb-ot-layout-private.hh \
+    $$PWD/src/hb-ot-map-private.hh \
+    $$PWD/src/hb-ot-shape-complex-arabic-fallback.hh \
+    $$PWD/src/hb-ot-shape-complex-arabic-table.hh \
+    $$PWD/src/hb-ot-shape-complex-indic-machine.hh \
+    $$PWD/src/hb-ot-shape-complex-indic-private.hh \
+    $$PWD/src/hb-ot-shape-complex-myanmar-machine.hh \
+    $$PWD/src/hb-ot-shape-complex-private.hh \
+    $$PWD/src/hb-ot-shape-complex-sea-machine.hh \
+    $$PWD/src/hb-ot-shape-fallback-private.hh \
+    $$PWD/src/hb-ot-shape-normalize-private.hh \
+    $$PWD/src/hb-ot-shape-private.hh
+
+HEADERS += \
+    $$PWD/src/hb-ot.h \
+    $$PWD/src/hb-ot-layout.h \
+    $$PWD/src/hb-ot-shape.h \
+    $$PWD/src/hb-ot-tag.h
+
+mac {
+    # Apple Advanced Typography
+    DEFINES += HAVE_CORETEXT
+
+    SOURCES += \
+        $$PWD/src/hb-coretext.cc
+
+    HEADERS += \
+        $$PWD/src/hb-coretext.h
+}
+
+TARGET = $$TARGET$$qtPlatformTargetSuffix()
diff --git a/src/3rdparty/harfbuzz.pri b/src/3rdparty/harfbuzz.pri
deleted file mode 100644
index 1b7f7b95e1b..00000000000
--- a/src/3rdparty/harfbuzz.pri
+++ /dev/null
@@ -1,120 +0,0 @@
-contains(QT_CONFIG, harfbuzz) {
-    QT_HARFBUZZ_DIR = $$QT_SOURCE_TREE/src/3rdparty/harfbuzz-ng
-
-    INCLUDEPATH += $$QT_HARFBUZZ_DIR/include
-
-    SOURCES += \
-        $$QT_HARFBUZZ_DIR/src/hb-blob.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-buffer.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-buffer-serialize.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-common.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-face.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-font.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-tag.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-set.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-shape.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-shape-plan.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-shaper.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-unicode.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-warning.cc
-
-    HEADERS += \
-        $$QT_HARFBUZZ_DIR/src/hb-atomic-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-buffer-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-buffer-deserialize-json.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-buffer-deserialize-text.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-cache-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-face-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-font-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-mutex-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-object-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-open-file-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-open-type-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-head-table.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-hhea-table.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-hmtx-table.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-maxp-table.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-name-table.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-set-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-shape-plan-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-shaper-impl-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-shaper-list.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-shaper-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-unicode-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-utf-private.hh
-
-    HEADERS += \
-        $$QT_HARFBUZZ_DIR/src/hb.h \
-        $$QT_HARFBUZZ_DIR/src/hb-blob.h \
-        $$QT_HARFBUZZ_DIR/src/hb-buffer.h \
-        $$QT_HARFBUZZ_DIR/src/hb-common.h \
-        $$QT_HARFBUZZ_DIR/src/hb-face.h \
-        $$QT_HARFBUZZ_DIR/src/hb-font.h \
-        $$QT_HARFBUZZ_DIR/src/hb-set.h \
-        $$QT_HARFBUZZ_DIR/src/hb-shape.h \
-        $$QT_HARFBUZZ_DIR/src/hb-shape-plan.h \
-        $$QT_HARFBUZZ_DIR/src/hb-unicode.h \
-        $$QT_HARFBUZZ_DIR/src/hb-version.h
-
-    # Open Type
-    SOURCES += \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-layout.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-map.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-arabic.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-default.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-hangul.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-hebrew.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-indic.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-indic-table.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-myanmar.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-sea.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-thai.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-tibetan.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-fallback.cc \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-normalize.cc
-
-    HEADERS += \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-layout-common-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-layout-gdef-table.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-layout-gpos-table.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-layout-gsubgpos-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-layout-gsub-table.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-layout-jstf-table.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-layout-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-map-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-arabic-fallback.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-arabic-table.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-indic-machine.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-indic-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-myanmar-machine.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-complex-sea-machine.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-fallback-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-normalize-private.hh \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape-private.hh
-
-    HEADERS += \
-        $$QT_HARFBUZZ_DIR/src/hb-ot.h \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-layout.h \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-shape.h \
-        $$QT_HARFBUZZ_DIR/src/hb-ot-tag.h
-
-    mac {
-        # Apple Advanced Typography
-        SOURCES += \
-            $$QT_HARFBUZZ_DIR/src/hb-coretext.cc
-
-        HEADERS += \
-            $$QT_HARFBUZZ_DIR/src/hb-coretext.h
-
-        DEFINES += HAVE_CORETEXT
-    }
-
-    DEFINES += HAVE_CONFIG_H
-
-    TR_EXCLUDE += $$QT_HARFBUZZ_DIR/*
-} else:contains(QT_CONFIG, system-harfbuzz) {
-    LIBS_PRIVATE += -lharfbuzz
-}
diff --git a/src/3rdparty/harfbuzzng.pri b/src/3rdparty/harfbuzzng.pri
new file mode 100644
index 00000000000..74433688f69
--- /dev/null
+++ b/src/3rdparty/harfbuzzng.pri
@@ -0,0 +1,6 @@
+contains(QT_CONFIG, harfbuzz) {
+    INCLUDEPATH += $$PWD/harfbuzz-ng/include
+    LIBS_PRIVATE += -L$$QT_BUILD_TREE/lib -lqtharfbuzzng$$qtPlatformTargetSuffix()
+} else:contains(QT_CONFIG, system-harfbuzz) {
+    LIBS_PRIVATE += -lharfbuzz
+}
diff --git a/src/gui/text/text.pri b/src/gui/text/text.pri
index 2a0e4eff32b..c67769ad482 100644
--- a/src/gui/text/text.pri
+++ b/src/gui/text/text.pri
@@ -88,7 +88,7 @@ HEADERS += \
 contains(QT_CONFIG, harfbuzz)|contains(QT_CONFIG, system-harfbuzz) {
     DEFINES += QT_ENABLE_HARFBUZZ_NG
 
-    include($$PWD/../../3rdparty/harfbuzz.pri)
+    include($$PWD/../../3rdparty/harfbuzzng.pri)
 
     SOURCES += text/qharfbuzzng.cpp
     HEADERS += text/qharfbuzzng_p.h
diff --git a/src/src.pro b/src/src.pro
index 114ee5e4240..687f2502ab5 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -80,6 +80,9 @@ src_testlib.subdir = $$PWD/testlib
 src_testlib.target = sub-testlib
 src_testlib.depends = src_corelib   # src_gui & src_widgets are not build-depends
 
+src_3rdparty_harfbuzzng.subdir = $$PWD/3rdparty/harfbuzz-ng
+src_3rdparty_harfbuzzng.target = sub-3rdparty-harfbuzzng
+
 src_angle.subdir = $$PWD/angle
 src_angle.target = sub-angle
 angle_d3d11: src_angle.depends = src_corelib
@@ -130,6 +133,10 @@ contains(QT_CONFIG, dbus) {
 }
 contains(QT_CONFIG, concurrent):SUBDIRS += src_concurrent
 !contains(QT_CONFIG, no-gui) {
+    contains(QT_CONFIG, harfbuzz) {
+        SUBDIRS += src_3rdparty_harfbuzzng
+        src_gui.depends += src_3rdparty_harfbuzzng
+    }
     win32:contains(QT_CONFIG, angle)|contains(QT_CONFIG, dynamicgl) {
         SUBDIRS += src_angle
         src_gui.depends += src_angle
@@ -159,7 +166,8 @@ android:!android-no-sdk: SUBDIRS += src_android
 
 TR_EXCLUDE = \
     src_tools_bootstrap src_tools_moc src_tools_rcc src_tools_uic src_tools_qlalr \
-    src_tools_bootstrap_dbus src_tools_qdbusxml2cpp src_tools_qdbuscpp2xml
+    src_tools_bootstrap_dbus src_tools_qdbusxml2cpp src_tools_qdbuscpp2xml \
+    src_3rdparty_harfbuzzng
 
 sub-tools.depends = $$TOOLS
 QMAKE_EXTRA_TARGETS = sub-tools
-- 
GitLab