From 49b020db22028b3f4de96769d42fcc98ffb3f4e6 Mon Sep 17 00:00:00 2001
From: Peter Hartmann <phartmann@blackberry.com>
Date: Mon, 4 Nov 2013 14:56:18 +0100
Subject: [PATCH] make it possible to disable XML schema usage

Removing XML schema functionality reduces the size of
libQt5XmlPatterns.so considerably:

Linux desktop release mode:

with XML schema:    4.3 MB
without XML schema: 3.2 MB

BlackBerry10 release mode:

with XML schema:    2.6 MB
without XML schema: 1.9 MB

XML schema might not be used, especially on a mobile / embedded
device, as opposed to the rest of xmlpatterns (e.g. XPath through
QML XmlListModel).

Task-number: QTBUG-28068
Change-Id: I5024a822179e7241e592f079efe3adef8f661c70
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
---
 examples/xmlpatterns/xmlpatterns.pro |  7 ++++++-
 src/xmlpatterns/api/api.pri          | 18 +++++++++++-------
 src/xmlpatterns/xmlpatterns.pro      |  6 +++++-
 tests/auto/auto.pro                  | 12 ++++++++----
 tools/tools.pro                      |  9 ++++++++-
 5 files changed, 38 insertions(+), 14 deletions(-)

diff --git a/examples/xmlpatterns/xmlpatterns.pro b/examples/xmlpatterns/xmlpatterns.pro
index ca63f693..bfc3a3e6 100644
--- a/examples/xmlpatterns/xmlpatterns.pro
+++ b/examples/xmlpatterns/xmlpatterns.pro
@@ -1,6 +1,11 @@
 TEMPLATE = subdirs
 SUBDIRS += xquery
-qtHaveModule(widgets): SUBDIRS += filetree schema recipes
+qtHaveModule(widgets) {
+    SUBDIRS += recipes
+
+    load(qfeatures)
+    !contains(QT_DISABLED_FEATURES, xmlschema): SUBDIRS += filetree schema
+}
 
 EXAMPLE_FILES = \
     shared
diff --git a/src/xmlpatterns/api/api.pri b/src/xmlpatterns/api/api.pri
index 82d1c03f..2192d829 100644
--- a/src/xmlpatterns/api/api.pri
+++ b/src/xmlpatterns/api/api.pri
@@ -23,10 +23,6 @@ HEADERS += $$PWD/qabstractxmlforwarditerator_p.h \
     $$PWD/qxmlquery_p.h \
     $$PWD/qxmlresultitems.h \
     $$PWD/qxmlresultitems_p.h \
-    $$PWD/qxmlschema.h \
-    $$PWD/qxmlschema_p.h \
-    $$PWD/qxmlschemavalidator.h \
-    $$PWD/qxmlschemavalidator_p.h \
     $$PWD/qxmlserializer.h \
     $$PWD/qxmlserializer_p.h \
     $$PWD/qcoloringmessagehandler_p.h \
@@ -50,9 +46,17 @@ SOURCES += $$PWD/qvariableloader.cpp \
     $$PWD/qxmlnamepool.cpp \
     $$PWD/qxmlquery.cpp \
     $$PWD/qxmlresultitems.cpp \
-    $$PWD/qxmlschema.cpp \
-    $$PWD/qxmlschema_p.cpp \
-    $$PWD/qxmlschemavalidator.cpp \
     $$PWD/qxmlserializer.cpp \
     $$PWD/qcoloringmessagehandler.cpp \
     $$PWD/qcoloroutput.cpp
+
+load(qfeatures)
+!contains(QT_DISABLED_FEATURES, xmlschema) {
+    HEADERS += $$PWD/qxmlschema.h \
+        $$PWD/qxmlschema_p.h \
+        $$PWD/qxmlschemavalidator.h \
+        $$PWD/qxmlschemavalidator_p.h
+    SOURCES += $$PWD/qxmlschema.cpp \
+        $$PWD/qxmlschema_p.cpp \
+        $$PWD/qxmlschemavalidator.cpp
+}
diff --git a/src/xmlpatterns/xmlpatterns.pro b/src/xmlpatterns/xmlpatterns.pro
index 49543b61..7aac0c9a 100644
--- a/src/xmlpatterns/xmlpatterns.pro
+++ b/src/xmlpatterns/xmlpatterns.pro
@@ -20,7 +20,11 @@ include($$PWD/iterators/iterators.pri)
 include($$PWD/janitors/janitors.pri)
 include($$PWD/parser/parser.pri)
 include($$PWD/projection/projection.pri)
-include($$PWD/schema/schema.pri)
+
+load(qfeatures)
+!contains(QT_DISABLED_FEATURES, xmlschema) {
+    include($$PWD/schema/schema.pri)
+}
 include($$PWD/type/type.pri)
 include($$PWD/utils/utils.pri)
 include($$PWD/qobjectmodel/qobjectmodel.pri, "", true)
diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro
index 8f0a1e7e..df80f800 100644
--- a/tests/auto/auto.pro
+++ b/tests/auto/auto.pro
@@ -21,19 +21,23 @@ SUBDIRS=\
            qxmlnodemodelindex           \
            qxmlquery                    \
            qxmlresultitems              \
-           qxmlschema                   \
-           qxmlschemavalidator          \
            qxmlserializer               \
            xmlpatterns                  \
            xmlpatternsdiagnosticsts     \
-           xmlpatternsschema            \
-           xmlpatternsschemats          \
            xmlpatternssdk               \
            xmlpatternsvalidator         \
            xmlpatternsview              \
            xmlpatternsxqts              \
            xmlpatternsxslts             \
 
+load(qfeatures)
+!contains(QT_DISABLED_FEATURES, xmlschema) {
+    SUBDIRS += qxmlschema               \
+               qxmlschemavalidator      \
+               xmlpatternsschema        \
+               xmlpatternsschemats
+}
+
 xmlpatternsdiagnosticsts.depends = xmlpatternssdk
 xmlpatternsview.depends = xmlpatternssdk
 xmlpatternsxslts.depends = xmlpatternssdk
diff --git a/tools/tools.pro b/tools/tools.pro
index 121bed8d..92bbaca0 100644
--- a/tools/tools.pro
+++ b/tools/tools.pro
@@ -1,2 +1,9 @@
 TEMPLATE = subdirs
-!android|android_app: SUBDIRS +=  xmlpatterns xmlpatternsvalidator
+
+load(qfeatures)
+!android|android_app {
+    SUBDIRS += xmlpatterns
+    !contains(QT_DISABLED_FEATURES, xmlschema) {
+        SUBDIRS += xmlpatternsvalidator
+    }
+}
-- 
GitLab