summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKonstantin Ritt <ritt.ks@gmail.com>2013-08-26 18:44:36 +0300
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-08-27 18:05:08 +0200
commit3aa163491c9c8f28c88ac87cafc6418f2c0e46c5 (patch)
treec64d8037250d83f900e64e205e501db704e5bc3d
parentc88f1492c69fc49e57bb6b9243c86af691c09b6c (diff)
Add configure options for [experimental] HarfBuzz-NG support
Change-Id: I15f49b56f49ae53c16db904e03f668c3135edaa5 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
-rw-r--r--config.tests/unix/harfbuzz/harfbuzz.cpp60
-rw-r--r--config.tests/unix/harfbuzz/harfbuzz.pro3
-rwxr-xr-xconfigure40
-rw-r--r--tools/configure/configureapp.cpp26
4 files changed, 121 insertions, 8 deletions
diff --git a/config.tests/unix/harfbuzz/harfbuzz.cpp b/config.tests/unix/harfbuzz/harfbuzz.cpp
new file mode 100644
index 0000000000..9e26b04499
--- /dev/null
+++ b/config.tests/unix/harfbuzz/harfbuzz.cpp
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the config.tests of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <harfbuzz/hb.h>
+
+#if ((HB_VERSION_MAJOR*10000 + HB_VERSION_MINOR*100 + HB_VERSION_MICRO) < 912)
+# error "This version of harfbuzz is too old."
+#endif
+
+int main(int, char **)
+{
+ hb_buffer_t *buffer = hb_buffer_create();
+
+ const uint16_t string[] = { 'A', 'b', 'c' };
+ hb_buffer_add_utf16(buffer, string, 3, 0, 3);
+ hb_buffer_guess_segment_properties(buffer);
+ hb_buffer_set_flags(buffer, hb_buffer_flags_t(HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES));
+
+ hb_buffer_destroy(buffer);
+
+ return 0;
+}
diff --git a/config.tests/unix/harfbuzz/harfbuzz.pro b/config.tests/unix/harfbuzz/harfbuzz.pro
new file mode 100644
index 0000000000..32edd6e358
--- /dev/null
+++ b/config.tests/unix/harfbuzz/harfbuzz.pro
@@ -0,0 +1,3 @@
+SOURCES = harfbuzz.cpp
+CONFIG -= qt dylib
+LIBS += -lharfbuzz
diff --git a/configure b/configure
index 88ddd25d8b..d140aef0d8 100755
--- a/configure
+++ b/configure
@@ -892,6 +892,7 @@ CFG_EGL=auto
CFG_SSE=auto
CFG_FONTCONFIG=auto
CFG_LIBFREETYPE=auto
+CFG_HARFBUZZ=no
CFG_SQL_AVAILABLE=
QT_ALL_BUILD_PARTS=" libs tools examples tests "
QT_DEFAULT_BUILD_PARTS="libs tools examples"
@@ -969,7 +970,6 @@ CFG_INOTIFY=auto
CFG_EVENTFD=auto
CFG_RPATH=yes
CFG_FRAMEWORK=auto
-CFG_MAC_HARFBUZZ=no
DEFINES=
D_FLAGS=
I_FLAGS=
@@ -1495,8 +1495,9 @@ while [ "$#" -gt 0 ]; do
OPT_OBSOLETE_HOST_ARG=yes
;;
harfbuzz)
- if ([ "$BUILD_ON_MAC" = "yes" ] && [ "$VAL" = "yes" ]) || [ "$VAL" = "no" ]; then
- CFG_MAC_HARFBUZZ="$VAL"
+ [ "$VAL" = "yes" ] && VAL=qt
+ if [ "$VAL" = "qt" ] || [ "$VAL" = "no" ] || [ "$VAL" = "system" ]; then
+ CFG_HARFBUZZ="$VAL"
else
UNKNOWN_OPT=yes
fi
@@ -3534,6 +3535,14 @@ Third Party Libraries:
+ -system-libjpeg .... Use libjpeg from the operating system.
See http://www.ijg.org
+ * -no-harfbuzz ....... Do not compile HarfBuzz-NG support.
+ -qt-harfbuzz ....... (experimental) Use HarfBuzz-NG bundled with Qt
+ to do text shaping. It can still be disabled
+ by setting QT_HARFBUZZ environment variable to "old".
+ -system-harfbuzz ... (experimental) Use HarfBuzz-NG from the operating system
+ to do text shaping. It can still be disabled
+ by setting QT_HARFBUZZ environment variable to "old".
+
-no-openssl ........ Do not compile support for OpenSSL.
+ -openssl ........... Enable run-time OpenSSL support.
-openssl-linked .... Enabled linked OpenSSL support.
@@ -3702,10 +3711,6 @@ Qt/Mac only:
-sdk <sdk> ......... Build Qt using Apple provided SDK <sdk>. The argument should be
one of the available SDKs as listed by 'xcodebuild -showsdks'.
- -harfbuzz .......... Use HarfBuzz to do text layout instead of Core Text when possible.
- * -no-harfbuzz ....... Disable HarfBuzz on Mac. It can still be enabled by setting
- QT_ENABLE_HARFBUZZ environment variable.
-
EOF
fi
@@ -5588,6 +5593,16 @@ if [ "$CFG_LIBFREETYPE" = "auto" ]; then
fi
fi
+# harfbuzz support
+[ "$XPLATFORM_MINGW" = "yes" ] && [ "$CFG_HARFBUZZ" = "auto" ] && CFG_HARFBUZZ=no
+if [ "$CFG_HARFBUZZ" = "auto" ]; then
+ if compileTest unix/harfbuzz "HarfBuzz"; then
+ CFG_HARFBUZZ=system
+ else
+ CFG_HARFBUZZ=yes
+ fi
+fi
+
if ! compileTest unix/stl "STL" &&
[ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then
echo "STL functionality check failed! Cannot build Qt with this STL library."
@@ -6002,6 +6017,14 @@ elif [ "$CFG_LIBFREETYPE" = "system" ]; then
else
QT_CONFIG="$QT_CONFIG freetype"
fi
+if [ "$CFG_HARFBUZZ" = "no" ]; then
+ QT_CONFIG="$QT_CONFIG no-harfbuzz"
+ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_HARFBUZZ"
+elif [ "$CFG_HARFBUZZ" = "system" ]; then
+ QT_CONFIG="$QT_CONFIG system-harfbuzz"
+else
+ QT_CONFIG="$QT_CONFIG harfbuzz"
+fi
if [ "$CFG_GUI" = "auto" ]; then
CFG_GUI="yes"
fi
@@ -6036,7 +6059,6 @@ fi
[ "$CFG_DBUS" = "linked" ] && QT_CONFIG="$QT_CONFIG dbus dbus-linked"
[ "$CFG_OPENSSL" = "yes" ] && QT_CONFIG="$QT_CONFIG openssl"
[ "$CFG_OPENSSL" = "linked" ] && QT_CONFIG="$QT_CONFIG openssl-linked"
-[ "$CFG_MAC_HARFBUZZ" = "yes" ] && QT_CONFIG="$QT_CONFIG harfbuzz"
[ "$CFG_XCB" != "no" ] && QT_CONFIG="$QT_CONFIG xcb"
[ "$CFG_XINPUT2" = "yes" ] && QT_CONFIG="$QT_CONFIG xinput2"
[ "$CFG_SYSTEM_PROXIES" = "yes" ] && QT_CONFIG="$QT_CONFIG system-proxies"
@@ -6849,6 +6871,8 @@ report_support " CUPS ..................." "$CFG_CUPS"
report_support " DirectWrite ............" "$CFG_DIRECTWRITE"
report_support " FontConfig ............." "$CFG_FONTCONFIG"
report_support " FreeType ..............." "$CFG_FREETYPE"
+[ "$CFG_HARFBUZZ" != "no" ] && \
+ report_support " HarfBuzz ..............." "$CFG_HARFBUZZ"
report_support " Iconv .................." "$CFG_ICONV"
report_support " ICU ...................." "$CFG_ICU"
report_support " Image formats:"
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index dc4ca24d83..e13de4f777 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -260,6 +260,7 @@ Configure::Configure(int& argc, char** argv)
dictionary[ "LIBJPEG" ] = "auto";
dictionary[ "LIBPNG" ] = "auto";
dictionary[ "FREETYPE" ] = "yes";
+ dictionary[ "HARFBUZZ" ] = "no";
dictionary[ "ACCESSIBILITY" ] = "yes";
dictionary[ "OPENGL" ] = "yes";
@@ -566,6 +567,13 @@ void Configure::parseCmdLine()
else if (configCmdLine.at(i) == "-system-freetype")
dictionary[ "FREETYPE" ] = "system";
+ else if (configCmdLine.at(i) == "-no-harfbuzz")
+ dictionary[ "HARFBUZZ" ] = "no";
+ else if (configCmdLine.at(i) == "-qt-harfbuzz")
+ dictionary[ "HARFBUZZ" ] = "yes";
+ else if (configCmdLine.at(i) == "-system-harfbuzz")
+ dictionary[ "HARFBUZZ" ] = "system";
+
// CE- C runtime --------------------------------------------
else if (configCmdLine.at(i) == "-crt") {
++i;
@@ -1821,6 +1829,14 @@ bool Configure::displayHelp()
desc("FREETYPE", "yes", "-qt-freetype", "Use the libfreetype bundled with Qt.");
desc("FREETYPE", "system","-system-freetype", "Use the libfreetype provided by the system.");
+ desc("HARFBUZZ", "no", "-no-harfbuzz", "Do not compile in HarfBuzz-NG support.");
+ desc("HARFBUZZ", "yes", "-qt-harfbuzz", "(experimental) Use HarfBuzz-NG bundled with Qt\n"
+ "to do text shaping. It can still be disabled\n"
+ "by setting QT_HARFBUZZ environment variable to \"old\".");
+ desc("HARFBUZZ", "system","-system-harfbuzz", "(experimental) Use HarfBuzz-NG from the operating system\n"
+ "to do text shaping. It can still be disabled\n"
+ "by setting QT_HARFBUZZ environment variable to \"old\".");
+
if ((platform() == QNX) || (platform() == BLACKBERRY)) {
desc("SLOG2", "yes", "-slog2", "Compile with slog2 support.");
desc("SLOG2", "no", "-no-slog2", "Do not compile with slog2 support.");
@@ -2071,6 +2087,9 @@ bool Configure::checkAvailability(const QString &part)
available = checkAngleAvailability();
}
+ else if (part == "HARFBUZZ")
+ available = tryCompileProject("unix/harfbuzz");
+
else if (part == "LIBJPEG")
available = findFile("jpeglib.h");
else if (part == "LIBPNG")
@@ -2487,6 +2506,11 @@ void Configure::generateOutputVars()
else if (dictionary[ "FREETYPE" ] == "system")
qtConfig += "system-freetype";
+ if (dictionary[ "HARFBUZZ" ] == "yes")
+ qtConfig += "harfbuzz";
+ else if (dictionary[ "HARFBUZZ" ] == "system")
+ qtConfig += "system-harfbuzz";
+
// Styles -------------------------------------------------------
if (dictionary[ "STYLE_WINDOWS" ] == "yes")
qmakeStyles += "windows";
@@ -3319,6 +3343,7 @@ void Configure::generateConfigfiles()
if (dictionary["DBUS"] == "no") qconfigList += "QT_NO_DBUS";
if (dictionary["QML_DEBUG"] == "no") qconfigList += "QT_QML_NO_DEBUGGER";
if (dictionary["FREETYPE"] == "no") qconfigList += "QT_NO_FREETYPE";
+ if (dictionary["HARFBUZZ"] == "no") qconfigList += "QT_NO_HARFBUZZ";
if (dictionary["NATIVE_GESTURES"] == "no") qconfigList += "QT_NO_NATIVE_GESTURES";
if (dictionary["OPENGL_ES_CM"] == "yes" ||
@@ -3488,6 +3513,7 @@ void Configure::displayConfig()
sout << " JPEG support............" << dictionary[ "JPEG" ] << endl;
sout << " PNG support............." << dictionary[ "PNG" ] << endl;
sout << " FreeType support........" << dictionary[ "FREETYPE" ] << endl;
+ sout << " HarfBuzz-NG support....." << dictionary[ "HARFBUZZ" ] << endl;
sout << " PCRE support............" << dictionary[ "PCRE" ] << endl;
sout << " ICU support............." << dictionary[ "ICU" ] << endl;
if ((platform() == QNX) || (platform() == BLACKBERRY))