summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore7
-rw-r--r--config.tests/arch/arch.cpp20
-rw-r--r--config.tests/arch/arch.pro1
-rw-r--r--config.tests/common/avx/avx.pro1
-rw-r--r--config.tests/common/avx2/avx2.pro1
-rw-r--r--config.tests/common/c++11/c++11.pro2
-rw-r--r--config.tests/common/sse2/sse2.pro1
-rw-r--r--config.tests/common/sse3/sse3.pro1
-rw-r--r--config.tests/common/sse4_1/sse4_1.pro1
-rw-r--r--config.tests/common/sse4_2/sse4_2.pro1
-rw-r--r--config.tests/common/ssse3/ssse3.pro1
-rw-r--r--config.tests/mac/coreservices/coreservices.pro2
-rw-r--r--config.tests/mac/corewlan/corewlan.pro2
-rw-r--r--config.tests/qpa/directfb/directfb.pro1
-rw-r--r--config.tests/unix/alsa/alsa.pro1
-rwxr-xr-xconfig.tests/unix/arch.test2
-rw-r--r--config.tests/unix/clock-gettime/clock-gettime.pro1
-rw-r--r--config.tests/unix/clock-monotonic/clock-monotonic.pro1
-rwxr-xr-xconfig.tests/unix/compile.test2
-rw-r--r--config.tests/unix/cups/cups.pro1
-rw-r--r--config.tests/unix/db2/db2.pro1
-rw-r--r--config.tests/unix/dbus/dbus.pro1
-rw-r--r--config.tests/unix/eventfd/eventfd.pro1
-rw-r--r--config.tests/unix/fontconfig/fontconfig.pro2
-rw-r--r--config.tests/unix/getaddrinfo/getaddrinfo.pro1
-rw-r--r--config.tests/unix/getifaddrs/getifaddrs.pro1
-rw-r--r--config.tests/unix/glib/glib.pro2
-rw-r--r--config.tests/unix/gnu-libiconv/gnu-libiconv.pro1
-rw-r--r--config.tests/unix/harfbuzz/harfbuzz.cpp60
-rw-r--r--config.tests/unix/harfbuzz/harfbuzz.pro3
-rw-r--r--config.tests/unix/ibase/ibase.pro1
-rw-r--r--config.tests/unix/iconv/iconv.pro2
-rw-r--r--config.tests/unix/icu/icu.pro2
-rw-r--r--config.tests/unix/inotify/inotify.pro1
-rw-r--r--config.tests/unix/iodbc/iodbc.pro1
-rw-r--r--config.tests/unix/ipv6ifname/ipv6ifname.pro1
-rw-r--r--config.tests/unix/libjpeg/libjpeg.pro1
-rw-r--r--config.tests/unix/libpng/libpng.pro1
-rw-r--r--config.tests/unix/mremap/mremap.pro1
-rw-r--r--config.tests/unix/mysql/mysql.pro1
-rw-r--r--config.tests/unix/mysql_r/mysql_r.pro1
-rw-r--r--config.tests/unix/nis/nis.pro1
-rw-r--r--config.tests/unix/oci/oci.pro1
-rw-r--r--config.tests/unix/odbc/odbc.pro1
-rw-r--r--config.tests/unix/opengldesktop/opengldesktop.pro1
-rw-r--r--config.tests/unix/opengles1/opengles1.pro1
-rw-r--r--config.tests/unix/opengles2/opengles2.pro1
-rw-r--r--config.tests/unix/openssl/openssl.pro1
-rw-r--r--config.tests/unix/pcre/pcre.pro2
-rw-r--r--config.tests/unix/psql/psql.pro1
-rwxr-xr-xconfig.tests/unix/ptrsize.test2
-rw-r--r--config.tests/unix/ptrsize/ptrsizetest.pro1
-rw-r--r--config.tests/unix/slog2/slog2.pro1
-rw-r--r--config.tests/unix/sqlite/sqlite.pro1
-rw-r--r--config.tests/unix/sqlite2/sqlite2.pro1
-rw-r--r--config.tests/unix/stdint/stdint.pro1
-rw-r--r--config.tests/unix/stl/stl.pro1
-rw-r--r--config.tests/unix/sun-libiconv/sun-libiconv.pro2
-rw-r--r--config.tests/unix/tds/tds.pro1
-rw-r--r--config.tests/unix/zlib/zlib.pro1
-rwxr-xr-xconfigure258
-rw-r--r--dist/changes-5.2.045
-rw-r--r--doc/global/compat.qdocconf2
-rw-r--r--doc/global/config.qdocconf12
-rw-r--r--doc/global/externalsites/rfc.qdoc15
-rw-r--r--doc/global/fileextensions.qdocconf12
-rw-r--r--doc/global/html-config.qdocconf29
-rw-r--r--doc/global/html-footer.qdocconf30
-rw-r--r--doc/global/html-header-offline.qdocconf31
-rw-r--r--doc/global/html-header-online.qdocconf64
-rw-r--r--doc/global/qt-cpp-defines.qdocconf (renamed from doc/global/qt-cpp-ignore.qdocconf)32
-rw-r--r--doc/global/qt-defines.qdocconf17
-rw-r--r--doc/global/qt-html-templates-offline.qdocconf45
-rw-r--r--doc/global/qt-html-templates-online.qdocconf79
-rw-r--r--doc/global/qt-module-defaults-offline.qdocconf13
-rw-r--r--doc/global/qt-module-defaults-online.qdocconf40
-rw-r--r--doc/global/qt-module-defaults.qdocconf35
-rw-r--r--doc/global/template/images/Qt-dark_gradient.pngbin0 -> 1032 bytes
-rw-r--r--doc/global/template/images/Qt-footer-bg.jpgbin0 -> 3843 bytes
-rw-r--r--doc/global/template/images/Qt-footer_shadow.pngbin0 -> 3181 bytes
-rw-r--r--doc/global/template/images/Qt-gradient.pngbin0 -> 956 bytes
-rw-r--r--doc/global/template/images/Qt-header-bg.jpgbin0 -> 11264 bytes
-rw-r--r--doc/global/template/images/Qt-logo.pngbin0 -> 4344 bytes
-rw-r--r--doc/global/template/images/arrow_bc.pngbin0 -> 1071 bytes
-rw-r--r--doc/global/template/images/logo.pngbin0 -> 2205 bytes
-rw-r--r--doc/global/template/style/offline.css980
-rw-r--r--doc/global/template/style/online.css1472
-rw-r--r--examples/widgets/dialogs/standarddialogs/dialog.cpp20
-rw-r--r--examples/widgets/dialogs/standarddialogs/dialog.h2
-rw-r--r--examples/widgets/doc/src/addressbook-tutorial.qdoc14
-rw-r--r--examples/widgets/itemviews/spreadsheet/main.cpp3
-rw-r--r--examples/widgets/itemviews/spreadsheet/spreadsheet.cpp1
-rw-r--r--examples/widgets/widgets/spinboxes/window.cpp10
-rw-r--r--mkspecs/blackberry-armv7le-qcc/qmake.conf1
-rw-r--r--mkspecs/common/clang.conf10
-rw-r--r--mkspecs/common/ios/qmake.conf3
-rw-r--r--mkspecs/common/mac.conf2
-rw-r--r--mkspecs/common/macx.conf2
-rw-r--r--mkspecs/darwin-g++/qmake.conf2
-rw-r--r--mkspecs/devices/linux-imx6-g++/qeglfshooks_imx6.cpp6
-rw-r--r--mkspecs/features/configure.prf3
-rw-r--r--mkspecs/features/create_cmake.prf6
-rw-r--r--mkspecs/features/gcov.prf31
-rw-r--r--mkspecs/features/ios/default_post.prf95
-rw-r--r--mkspecs/features/ios/default_pre.prf2
-rw-r--r--mkspecs/features/ios/qt.prf24
-rw-r--r--mkspecs/features/java.prf9
-rw-r--r--mkspecs/features/qt_common.prf31
-rw-r--r--mkspecs/features/qt_docs.prf2
-rw-r--r--mkspecs/features/qt_functions.prf9
-rw-r--r--mkspecs/features/simd.prf3
-rw-r--r--mkspecs/features/spec_post.prf10
-rw-r--r--mkspecs/macx-clang-libc++-32/qmake.conf23
-rw-r--r--mkspecs/macx-clang-libc++/qmake.conf22
-rwxr-xr-xmkspecs/macx-xcode/Info.plist.app22
-rw-r--r--mkspecs/macx-xcode/Info.plist.lib18
-rw-r--r--mkspecs/macx-xcode/features/default_post.prf7
-rw-r--r--qmake/Makefile.unix7
-rw-r--r--qmake/Makefile.win324
-rw-r--r--qmake/doc/images/qmake-precompile-ui.png (renamed from qmake/doc/src/images/qmake-precompile-ui.png)bin89070 -> 89070 bytes
-rw-r--r--qmake/doc/qmake.qdocconf6
-rw-r--r--qmake/doc/snippets/code/doc_src_qmake-manual.cpp (renamed from qmake/doc/src/snippets/code/doc_src_qmake-manual.cpp)0
-rw-r--r--qmake/doc/snippets/code/doc_src_qmake-manual.pro (renamed from qmake/doc/src/snippets/code/doc_src_qmake-manual.pro)0
-rw-r--r--qmake/doc/snippets/qmake/comments.pro (renamed from qmake/doc/src/snippets/qmake/comments.pro)0
-rw-r--r--qmake/doc/snippets/qmake/configscopes.pro (renamed from qmake/doc/src/snippets/qmake/configscopes.pro)0
-rw-r--r--qmake/doc/snippets/qmake/debug_and_release.pro (renamed from qmake/doc/src/snippets/qmake/debug_and_release.pro)0
-rw-r--r--qmake/doc/snippets/qmake/delegate.h (renamed from qmake/doc/src/snippets/qmake/delegate.h)0
-rw-r--r--qmake/doc/snippets/qmake/dereferencing.pro (renamed from qmake/doc/src/snippets/qmake/dereferencing.pro)0
-rw-r--r--qmake/doc/snippets/qmake/destdir.pro (renamed from qmake/doc/src/snippets/qmake/destdir.pro)0
-rw-r--r--qmake/doc/snippets/qmake/dirname.pro (renamed from qmake/doc/src/snippets/qmake/dirname.pro)0
-rw-r--r--qmake/doc/snippets/qmake/environment.pro (renamed from qmake/doc/src/snippets/qmake/environment.pro)0
-rw-r--r--qmake/doc/snippets/qmake/functions.pro (renamed from qmake/doc/src/snippets/qmake/functions.pro)0
-rw-r--r--qmake/doc/snippets/qmake/include.pro (renamed from qmake/doc/src/snippets/qmake/include.pro)0
-rw-r--r--qmake/doc/snippets/qmake/main.cpp (renamed from qmake/doc/src/snippets/qmake/main.cpp)0
-rw-r--r--qmake/doc/snippets/qmake/model.cpp (renamed from qmake/doc/src/snippets/qmake/model.cpp)0
-rw-r--r--qmake/doc/snippets/qmake/model.h (renamed from qmake/doc/src/snippets/qmake/model.h)0
-rw-r--r--qmake/doc/snippets/qmake/other.pro (renamed from qmake/doc/src/snippets/qmake/other.pro)0
-rw-r--r--qmake/doc/snippets/qmake/paintwidget_mac.cpp (renamed from qmake/doc/src/snippets/qmake/paintwidget_mac.cpp)0
-rw-r--r--qmake/doc/snippets/qmake/paintwidget_unix.cpp (renamed from qmake/doc/src/snippets/qmake/paintwidget_unix.cpp)0
-rw-r--r--qmake/doc/snippets/qmake/paintwidget_win.cpp (renamed from qmake/doc/src/snippets/qmake/paintwidget_win.cpp)0
-rw-r--r--qmake/doc/snippets/qmake/precompile-stable.h (renamed from qmake/doc/src/snippets/qmake/precompile-stable.h)0
-rw-r--r--qmake/doc/snippets/qmake/project_location.pro (renamed from qmake/doc/src/snippets/qmake/project_location.pro)0
-rw-r--r--qmake/doc/snippets/qmake/qtconfiguration.pro (renamed from qmake/doc/src/snippets/qmake/qtconfiguration.pro)0
-rw-r--r--qmake/doc/snippets/qmake/quoting.pro (renamed from qmake/doc/src/snippets/qmake/quoting.pro)0
-rw-r--r--qmake/doc/snippets/qmake/replace.pro (renamed from qmake/doc/src/snippets/qmake/replace.pro)0
-rw-r--r--qmake/doc/snippets/qmake/replacefunction.pro (renamed from qmake/doc/src/snippets/qmake/replacefunction.pro)0
-rw-r--r--qmake/doc/snippets/qmake/scopes.pro (renamed from qmake/doc/src/snippets/qmake/scopes.pro)0
-rw-r--r--qmake/doc/snippets/qmake/shared_or_static.pro (renamed from qmake/doc/src/snippets/qmake/shared_or_static.pro)0
-rw-r--r--qmake/doc/snippets/qmake/spaces.pro (renamed from qmake/doc/src/snippets/qmake/spaces.pro)0
-rw-r--r--qmake/doc/snippets/qmake/specifications.pro (renamed from qmake/doc/src/snippets/qmake/specifications.pro)0
-rw-r--r--qmake/doc/snippets/qmake/testfunction.pro (renamed from qmake/doc/src/snippets/qmake/testfunction.pro)0
-rw-r--r--qmake/doc/snippets/qmake/variables.pro (renamed from qmake/doc/src/snippets/qmake/variables.pro)0
-rw-r--r--qmake/doc/snippets/qmake/view.h (renamed from qmake/doc/src/snippets/qmake/view.h)0
-rw-r--r--qmake/doc/src/qmake-manual.qdoc382
-rw-r--r--qmake/generators/mac/pbuilder_pbx.cpp98
-rw-r--r--qmake/generators/mac/pbuilder_pbx.h1
-rw-r--r--qmake/generators/makefile.cpp3
-rw-r--r--qmake/generators/makefiledeps.cpp11
-rw-r--r--qmake/library/ioutils.cpp5
-rw-r--r--qmake/library/ioutils.h1
-rw-r--r--qmake/library/qmake_global.h4
-rw-r--r--qmake/library/qmakebuiltins.cpp91
-rw-r--r--qmake/library/qmakeevaluator.cpp167
-rw-r--r--qmake/library/qmakeevaluator.h23
-rw-r--r--qmake/library/qmakeglobals.cpp52
-rw-r--r--qmake/library/qmakeparser.cpp34
-rw-r--r--qmake/library/qmakeparser.h17
-rw-r--r--qmake/library/qmakevfs.cpp192
-rw-r--r--qmake/library/qmakevfs.h (renamed from src/plugins/platforms/kms/qkmsudevlistener.h)55
-rw-r--r--qmake/main.cpp4
-rw-r--r--qmake/option.cpp1
-rw-r--r--qmake/option.h2
-rw-r--r--qmake/project.cpp4
-rw-r--r--qmake/property.cpp4
-rw-r--r--qmake/qmake.pri4
-rw-r--r--qmake/qmake.pro2
-rw-r--r--qtbase.pro2
-rw-r--r--src/3rdparty/harfbuzz-ng/AUTHORS8
-rw-r--r--src/3rdparty/harfbuzz-ng/COPYING36
-rw-r--r--src/3rdparty/harfbuzz-ng/NEWS749
-rw-r--r--src/3rdparty/harfbuzz-ng/README7
-rw-r--r--src/3rdparty/harfbuzz-ng/THANKS7
-rw-r--r--src/3rdparty/harfbuzz-ng/TODO81
-rw-r--r--src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-blob.h1
-rw-r--r--src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-buffer.h1
-rw-r--r--src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-common.h1
-rw-r--r--src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-font.h1
-rw-r--r--src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-ot-layout.h1
-rw-r--r--src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-ot-tag.h1
-rw-r--r--src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-ot.h1
-rw-r--r--src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-set.h1
-rw-r--r--src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-shape-plan.h1
-rw-r--r--src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-shape.h1
-rw-r--r--src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-unicode.h1
-rw-r--r--src/3rdparty/harfbuzz-ng/include/harfbuzz/hb-version.h1
-rw-r--r--src/3rdparty/harfbuzz-ng/include/harfbuzz/hb.h9
-rw-r--r--src/3rdparty/harfbuzz-ng/src/config.h24
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-atomic-private.hh132
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-blob.cc328
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-blob.h127
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-buffer-deserialize-json.hh643
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-buffer-deserialize-text.hh571
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-buffer-private.hh202
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-buffer-serialize.cc336
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-buffer.cc1077
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-buffer.h323
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-cache-private.hh74
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-common.cc434
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-common.h336
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-fallback-shape.cc128
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-font-private.hh478
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-font.cc1008
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-font.h454
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-mutex-private.hh130
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-object-private.hh227
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-open-file-private.hh261
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-open-type-private.hh981
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-head-table.hh149
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-hhea-table.hh97
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-hmtx-table.hh92
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout-common-private.hh1170
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gdef-table.hh431
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gpos-table.hh1629
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gsub-table.hh1427
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout-gsubgpos-private.hh2449
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout-private.hh296
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout.cc910
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-layout.h293
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-map-private.hh247
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-map.cc275
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-maxp-table.hh69
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-name-table.hh134
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic-fallback.hh260
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic-table.hh942
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-arabic.cc356
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-default.cc220
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-machine.hh1443
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-private.hh151
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic-table.cc869
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-indic.cc1673
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar-machine.hh391
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-myanmar.cc534
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-private.hh359
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-sea-machine.hh224
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-sea.cc384
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-complex-thai.cc378
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-fallback-private.hh49
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-fallback.cc456
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-normalize-private.hh70
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-normalize.cc408
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape-private.hh87
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-shape.cc667
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-tag.cc722
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot-tag.h59
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-ot.h49
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-private.hh909
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-set-private.hh335
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-set.cc227
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-set.h152
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-shape-plan-private.hh60
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-shape-plan.cc314
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-shape-plan.h89
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-shape.cc275
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-shape.h81
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-shaper-impl-private.hh43
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-shaper-list.hh55
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-shaper-private.hh109
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-shaper.cc109
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-unicode-private.hh317
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-unicode.cc435
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-unicode.h357
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-utf-private.hh204
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-version.h66
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb-warning.cc66
-rw-r--r--src/3rdparty/harfbuzz-ng/src/hb.h45
-rw-r--r--src/3rdparty/harfbuzz.pri103
-rw-r--r--src/android/accessibility/accessibility.pro2
-rw-r--r--src/android/accessibility/jar/AndroidManifest.xml7
-rw-r--r--src/android/accessibility/jar/bundledjar.pro3
-rw-r--r--src/android/accessibility/jar/distributedjar.pro2
-rw-r--r--src/android/accessibility/jar/jar.pri14
-rw-r--r--src/android/accessibility/jar/jar.pro2
-rw-r--r--src/android/accessibility/jar/src/org/qtproject/qt5/android/accessibility/QtAccessibilityDelegate.java343
-rw-r--r--src/android/accessibility/jar/src/org/qtproject/qt5/android/accessibility/QtNativeAccessibility.java58
-rw-r--r--src/android/android.pro2
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtActivityDelegate.java2
-rw-r--r--src/android/jar/src/org/qtproject/qt5/android/QtSurface.java46
-rw-r--r--src/android/java/AndroidManifest.xml1
-rw-r--r--src/concurrent/doc/qtconcurrent.qdocconf3
-rw-r--r--src/concurrent/doc/src/qtconcurrent-module.qdoc1
-rw-r--r--src/corelib/Qt5CoreConfigExtras.cmake.in7
-rw-r--r--src/corelib/Qt5CoreConfigExtrasMkspecDir.cmake.in6
-rw-r--r--src/corelib/Qt5CoreConfigExtrasMkspecDirForInstall.cmake.in6
-rw-r--r--src/corelib/corelib.pro30
-rw-r--r--src/corelib/doc/qtcore.qdocconf5
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_io_qurl.cpp6
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_kernel_qvariant.cpp58
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_tools_qcommandlineoption.cpp44
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_tools_qcommandlineparser.cpp141
-rw-r--r--src/corelib/doc/src/qtcore.qdoc1
-rw-r--r--src/corelib/global/qcompilerdetection.h22
-rw-r--r--src/corelib/global/qglobal.cpp10
-rw-r--r--src/corelib/global/qglobal.h15
-rw-r--r--src/corelib/global/qlibraryinfo.cpp23
-rw-r--r--src/corelib/global/qlibraryinfo.h2
-rw-r--r--src/corelib/global/qnamespace.h18
-rw-r--r--src/corelib/global/qnamespace.qdoc25
-rw-r--r--src/corelib/global/qprocessordetection.h26
-rw-r--r--src/corelib/global/qsystemdetection.h11
-rw-r--r--src/corelib/io/qdatastream.cpp5
-rw-r--r--src/corelib/io/qdatastream.h5
-rw-r--r--src/corelib/io/qdir.cpp57
-rw-r--r--src/corelib/io/qipaddress.cpp60
-rw-r--r--src/corelib/io/qipaddress_p.h2
-rw-r--r--src/corelib/io/qprocess_unix.cpp55
-rw-r--r--src/corelib/io/qsettings.cpp2
-rw-r--r--src/corelib/io/qstandardpaths.cpp11
-rw-r--r--src/corelib/io/qstandardpaths.h5
-rw-r--r--src/corelib/io/qurl.cpp874
-rw-r--r--src/corelib/io/qurl.h26
-rw-r--r--src/corelib/io/qurl_p.h3
-rw-r--r--src/corelib/io/qurlidna.cpp5
-rw-r--r--src/corelib/io/qurlquery.cpp57
-rw-r--r--src/corelib/io/qurlrecode.cpp114
-rw-r--r--src/corelib/itemmodels/qabstractitemmodel.cpp170
-rw-r--r--src/corelib/itemmodels/qabstractitemmodel.h5
-rw-r--r--src/corelib/json/qjson_p.h2
-rw-r--r--src/corelib/json/qjsonvalue.cpp25
-rw-r--r--src/corelib/json/qjsonvalue.h3
-rw-r--r--src/corelib/json/qjsonwriter.cpp9
-rw-r--r--src/corelib/kernel/qcore_mac_p.h6
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp61
-rw-r--r--src/corelib/kernel/qeventdispatcher_blackberry.cpp82
-rw-r--r--src/corelib/kernel/qmetatype.cpp283
-rw-r--r--src/corelib/kernel/qmetatype.h1058
-rw-r--r--src/corelib/kernel/qobject.cpp60
-rw-r--r--src/corelib/kernel/qobject_p.h7
-rw-r--r--src/corelib/kernel/qobjectdefs.h1
-rw-r--r--src/corelib/kernel/qsocketnotifier.cpp9
-rw-r--r--src/corelib/kernel/qvariant.cpp589
-rw-r--r--src/corelib/kernel/qvariant.h295
-rw-r--r--src/corelib/plugin/plugin.pri6
-rw-r--r--src/corelib/plugin/qlibrary.cpp141
-rw-r--r--src/corelib/plugin/qmachparser.cpp218
-rw-r--r--src/corelib/plugin/qmachparser_p.h79
-rw-r--r--src/corelib/thread/qmutex_linux.cpp26
-rw-r--r--src/corelib/thread/qthreadpool.cpp65
-rw-r--r--src/corelib/thread/qthreadpool.h2
-rw-r--r--src/corelib/thread/qthreadpool_p.h1
-rw-r--r--src/corelib/tools/qalgorithms.h67
-rw-r--r--src/corelib/tools/qalgorithms.qdoc31
-rw-r--r--src/corelib/tools/qbitarray.cpp11
-rw-r--r--src/corelib/tools/qbitarray.h1
-rw-r--r--src/corelib/tools/qbytearray.cpp1
-rw-r--r--src/corelib/tools/qchar.cpp61
-rw-r--r--src/corelib/tools/qcommandlineoption.cpp308
-rw-r--r--src/corelib/tools/qcommandlineoption.h92
-rw-r--r--src/corelib/tools/qcommandlineparser.cpp896
-rw-r--r--src/corelib/tools/qcommandlineparser.h106
-rw-r--r--src/corelib/tools/qdatetime.cpp205
-rw-r--r--src/corelib/tools/qdatetime.h3
-rw-r--r--src/corelib/tools/qeasingcurve.cpp10
-rw-r--r--src/corelib/tools/qharfbuzz_p.h14
-rw-r--r--src/corelib/tools/qhash.h32
-rw-r--r--src/corelib/tools/qlinkedlist.h37
-rw-r--r--src/corelib/tools/qlist.h38
-rw-r--r--src/corelib/tools/qlocale.cpp14
-rw-r--r--src/corelib/tools/qlocale.h3
-rw-r--r--src/corelib/tools/qlocale.qdoc3
-rw-r--r--src/corelib/tools/qlocale_data_p.h2521
-rw-r--r--src/corelib/tools/qlocale_p.h2
-rw-r--r--src/corelib/tools/qmap.h39
-rw-r--r--src/corelib/tools/qpair.h13
-rw-r--r--src/corelib/tools/qpair.qdoc20
-rw-r--r--src/corelib/tools/qscopedpointer.cpp30
-rw-r--r--src/corelib/tools/qscopedpointer.h24
-rw-r--r--src/corelib/tools/qset.h22
-rw-r--r--src/corelib/tools/qsimd.cpp2
-rw-r--r--src/corelib/tools/qstring.cpp38
-rw-r--r--src/corelib/tools/qstring.h4
-rw-r--r--src/corelib/tools/qunicodetables.cpp13108
-rw-r--r--src/corelib/tools/qunicodetables_p.h5
-rw-r--r--src/corelib/tools/qunicodetools.cpp17
-rw-r--r--src/corelib/tools/qvarlengtharray.h10
-rw-r--r--src/corelib/tools/qvector.h26
-rw-r--r--src/corelib/tools/tools.pri4
-rw-r--r--src/dbus/doc/qtdbus.qdocconf5
-rw-r--r--src/dbus/doc/src/qtdbus-module.qdoc1
-rw-r--r--src/dbus/qdbusabstractadaptor.cpp11
-rw-r--r--src/dbus/qdbusconnection_p.h4
-rw-r--r--src/dbus/qdbusintegrator.cpp6
-rw-r--r--src/dbus/qdbusmisc.cpp22
-rw-r--r--src/dbus/qdbusxmlgenerator.cpp16
-rw-r--r--src/gui/accessible/qaccessible2_p.h6
-rw-r--r--src/gui/accessible/qaccessiblecache.cpp4
-rw-r--r--src/gui/doc/qtgui.qdocconf3
-rw-r--r--src/gui/doc/src/qtgui.qdoc9
-rw-r--r--src/gui/image/qbmphandler.cpp3
-rw-r--r--src/gui/image/qicon.cpp1
-rw-r--r--src/gui/image/qicon.h4
-rw-r--r--src/gui/image/qiconloader.cpp12
-rw-r--r--src/gui/image/qimage.cpp689
-rw-r--r--src/gui/image/qimage.h8
-rw-r--r--src/gui/image/qimage_p.h3
-rw-r--r--src/gui/image/qppmhandler.cpp3
-rw-r--r--src/gui/image/qxpmhandler.cpp2
-rw-r--r--src/gui/kernel/qevent.cpp87
-rw-r--r--src/gui/kernel/qevent.h9
-rw-r--r--src/gui/kernel/qguiapplication.cpp120
-rw-r--r--src/gui/kernel/qguiapplication_p.h2
-rw-r--r--src/gui/kernel/qkeysequence.cpp227
-rw-r--r--src/gui/kernel/qkeysequence.h4
-rw-r--r--src/gui/kernel/qkeysequence_p.h5
-rw-r--r--src/gui/kernel/qplatformdialoghelper.cpp36
-rw-r--r--src/gui/kernel/qplatformdialoghelper.h49
-rw-r--r--src/gui/kernel/qplatformintegration.cpp4
-rw-r--r--src/gui/kernel/qplatformintegration.h6
-rw-r--r--src/gui/kernel/qplatformintegrationfactory.cpp20
-rw-r--r--src/gui/kernel/qplatformintegrationfactory_p.h2
-rw-r--r--src/gui/kernel/qplatformintegrationplugin.cpp14
-rw-r--r--src/gui/kernel/qplatformintegrationplugin.h5
-rw-r--r--src/gui/kernel/qplatformservices.cpp5
-rw-r--r--src/gui/kernel/qplatformtheme.cpp278
-rw-r--r--src/gui/kernel/qplatformtheme.h15
-rw-r--r--src/gui/kernel/qplatformtheme_p.h6
-rw-r--r--src/gui/kernel/qshortcutmap.cpp3
-rw-r--r--src/gui/kernel/qstylehints.cpp11
-rw-r--r--src/gui/kernel/qstylehints.h1
-rw-r--r--src/gui/kernel/qtouchdevice.cpp19
-rw-r--r--src/gui/kernel/qtouchdevice.h2
-rw-r--r--src/gui/kernel/qtouchdevice_p.h4
-rw-r--r--src/gui/kernel/qwindowsysteminterface.cpp27
-rw-r--r--src/gui/kernel/qwindowsysteminterface.h7
-rw-r--r--src/gui/kernel/qwindowsysteminterface_p.h6
-rw-r--r--src/gui/math3d/qvector2d.cpp19
-rw-r--r--src/gui/math3d/qvector2d.h15
-rw-r--r--src/gui/math3d/qvector3d.cpp19
-rw-r--r--src/gui/math3d/qvector3d.h15
-rw-r--r--src/gui/math3d/qvector4d.cpp19
-rw-r--r--src/gui/math3d/qvector4d.h15
-rw-r--r--src/gui/opengl/qopenglframebufferobject.cpp21
-rw-r--r--src/gui/opengl/qopenglfunctions.cpp12
-rw-r--r--src/gui/opengl/qopenglfunctions.h3
-rw-r--r--src/gui/painting/painting.pri9
-rw-r--r--src/gui/painting/qblendfunctions.cpp465
-rw-r--r--src/gui/painting/qcolor.cpp43
-rw-r--r--src/gui/painting/qcolor.h3
-rw-r--r--src/gui/painting/qcolor_p.cpp12
-rw-r--r--src/gui/painting/qdrawhelper.cpp206
-rw-r--r--src/gui/painting/qdrawhelper_p.h24
-rw-r--r--src/gui/painting/qimagescale.cpp2
-rw-r--r--src/gui/painting/qmemrotate.cpp5
-rw-r--r--src/gui/painting/qpaintbuffer.cpp6
-rw-r--r--src/gui/painting/qpaintengine_raster.cpp4
-rw-r--r--src/gui/text/qfontdatabase.cpp49
-rw-r--r--src/gui/text/qfontdatabase.h10
-rw-r--r--src/gui/text/qfontdatabase_qpa.cpp2
-rw-r--r--src/gui/text/qfontengine.cpp93
-rw-r--r--src/gui/text/qfontengine_ft.cpp63
-rw-r--r--src/gui/text/qfontengine_ft_p.h4
-rw-r--r--src/gui/text/qfontengine_p.h9
-rw-r--r--src/gui/text/qfontengine_qpf.cpp3
-rw-r--r--src/gui/text/qplatformfontdatabase.cpp13
-rw-r--r--src/gui/text/qplatformfontdatabase.h2
-rw-r--r--src/gui/text/qtextengine.cpp233
-rw-r--r--src/gui/text/qtextengine_p.h47
-rw-r--r--src/network/access/qhttpnetworkconnection.cpp36
-rw-r--r--src/network/access/qhttpnetworkconnection_p.h4
-rw-r--r--src/network/access/qhttpnetworkconnectionchannel.cpp14
-rw-r--r--src/network/access/qhttpnetworkreply.cpp5
-rw-r--r--src/network/access/qhttpnetworkrequest.cpp22
-rw-r--r--src/network/access/qhttpnetworkrequest_p.h4
-rw-r--r--src/network/access/qhttpthreaddelegate.cpp8
-rw-r--r--src/network/access/qnetworkaccessbackend.cpp17
-rw-r--r--src/network/access/qnetworkaccessbackend_p.h2
-rw-r--r--src/network/access/qnetworkaccessdebugpipebackend.cpp6
-rw-r--r--src/network/access/qnetworkaccessdebugpipebackend_p.h1
-rw-r--r--src/network/access/qnetworkaccessfilebackend.cpp11
-rw-r--r--src/network/access/qnetworkaccessfilebackend_p.h1
-rw-r--r--src/network/access/qnetworkaccessftpbackend.cpp6
-rw-r--r--src/network/access/qnetworkaccessftpbackend_p.h1
-rw-r--r--src/network/access/qnetworkaccessmanager.cpp171
-rw-r--r--src/network/access/qnetworkaccessmanager.h16
-rw-r--r--src/network/access/qnetworkaccessmanager_p.h16
-rw-r--r--src/network/access/qnetworkreplyhttpimpl.cpp7
-rw-r--r--src/network/bearer/qnetworkconfiguration.cpp183
-rw-r--r--src/network/bearer/qnetworkconfiguration.h7
-rw-r--r--src/network/doc/qtnetwork.qdocconf3
-rw-r--r--src/network/doc/src/qtnetwork.qdoc1
-rw-r--r--src/network/kernel/qhostaddress.cpp2
-rw-r--r--src/network/socket/qhttpsocketengine.cpp92
-rw-r--r--src/network/socket/qhttpsocketengine_p.h5
-rw-r--r--src/network/ssl/qssl.cpp10
-rw-r--r--src/network/ssl/qssl.h4
-rw-r--r--src/network/ssl/qsslconfiguration.cpp65
-rw-r--r--src/network/ssl/qsslconfiguration.h4
-rw-r--r--src/network/ssl/qsslconfiguration_p.h6
-rw-r--r--src/network/ssl/qsslcontext.cpp41
-rw-r--r--src/network/ssl/qsslcontext_p.h5
-rw-r--r--src/network/ssl/qsslsocket.cpp2
-rw-r--r--src/network/ssl/qsslsocket_openssl.cpp38
-rw-r--r--src/network/ssl/qsslsocket_openssl_symbols.cpp6
-rw-r--r--src/network/ssl/qsslsocket_openssl_symbols_p.h2
-rw-r--r--src/network/ssl/qsslsocket_p.h4
-rw-r--r--src/opengl/doc/qtopengl.qdocconf5
-rw-r--r--src/opengl/doc/src/qtopengl-module.qdoc1
-rw-r--r--src/platformsupport/devicediscovery/qdevicediscovery_p.h3
-rw-r--r--src/platformsupport/devicediscovery/qdevicediscovery_udev.cpp12
-rw-r--r--src/platformsupport/eglconvenience/qeglplatformcontext.cpp8
-rw-r--r--src/platformsupport/eglconvenience/qxlibeglintegration.cpp17
-rw-r--r--src/platformsupport/eventdispatchers/eventdispatchers.pri8
-rw-r--r--src/platformsupport/eventdispatchers/qeventdispatcher_cf.mm (renamed from src/plugins/platforms/ios/qioseventdispatcher.mm)203
-rw-r--r--src/platformsupport/eventdispatchers/qeventdispatcher_cf_p.h (renamed from src/plugins/platforms/ios/qioseventdispatcher.h)115
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp4
-rw-r--r--src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm173
-rw-r--r--src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h20
-rw-r--r--src/platformsupport/linuxaccessibility/atspiadaptor.cpp7
-rw-r--r--src/platformsupport/services/genericunix/qgenericunixservices.cpp26
-rw-r--r--src/platformsupport/themes/genericunix/qgenericunixthemes.cpp52
-rw-r--r--src/plugins/accessible/widgets/itemviews.cpp9
-rw-r--r--src/plugins/accessible/widgets/itemviews.h1
-rw-r--r--src/plugins/bearer/blackberry/qbbengine.cpp7
-rw-r--r--src/plugins/platforms/android/src/androidjniaccessibility.cpp260
-rw-r--r--src/plugins/platforms/android/src/androidjniaccessibility.h (renamed from src/plugins/platforms/kms/qkmsudevhandler.cpp)16
-rw-r--r--src/plugins/platforms/android/src/androidjniinput.cpp18
-rw-r--r--src/plugins/platforms/android/src/androidjnimain.cpp4
-rw-r--r--src/plugins/platforms/android/src/androidplatformplugin.cpp2
-rw-r--r--src/plugins/platforms/android/src/qandroidplatformaccessibility.cpp58
-rw-r--r--src/plugins/platforms/android/src/qandroidplatformaccessibility.h (renamed from src/plugins/platforms/kms/qkmsudevdrmhandler.h)23
-rw-r--r--src/plugins/platforms/android/src/qandroidplatformintegration.cpp18
-rw-r--r--src/plugins/platforms/android/src/qandroidplatformintegration.h10
-rw-r--r--src/plugins/platforms/android/src/qandroidsystemlocale.cpp179
-rw-r--r--src/plugins/platforms/android/src/qandroidsystemlocale.h (renamed from src/plugins/platforms/kms/qkmsudevdrmhandler.cpp)31
-rw-r--r--src/plugins/platforms/android/src/src.pri10
-rw-r--r--src/plugins/platforms/cocoa/main.mm2
-rw-r--r--src/plugins/platforms/cocoa/qcocoaapplication.h4
-rw-r--r--src/plugins/platforms/cocoa/qcocoaapplication.mm10
-rw-r--r--src/plugins/platforms/cocoa/qcocoaapplicationdelegate.h3
-rw-r--r--src/plugins/platforms/cocoa/qcocoaapplicationdelegate.mm12
-rw-r--r--src/plugins/platforms/cocoa/qcocoacolordialoghelper.mm9
-rw-r--r--src/plugins/platforms/cocoa/qcocoafiledialoghelper.h8
-rw-r--r--src/plugins/platforms/cocoa/qcocoafiledialoghelper.mm128
-rw-r--r--src/plugins/platforms/cocoa/qcocoafontdialoghelper.h11
-rw-r--r--src/plugins/platforms/cocoa/qcocoafontdialoghelper.mm265
-rw-r--r--src/plugins/platforms/cocoa/qcocoahelpers.mm26
-rw-r--r--src/plugins/platforms/cocoa/qcocoaintegration.mm8
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenu.mm10
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenubar.mm4
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenuitem.mm8
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenuloader.h4
-rw-r--r--src/plugins/platforms/cocoa/qcocoamenuloader.mm4
-rw-r--r--src/plugins/platforms/cocoa/qcocoaservices.mm4
-rw-r--r--src/plugins/platforms/cocoa/qcocoasystemsettings.mm4
-rwxr-xr-xsrc/plugins/platforms/cocoa/qcocoasystemtrayicon.mm18
-rw-r--r--src/plugins/platforms/cocoa/qcocoatheme.h4
-rw-r--r--src/plugins/platforms/cocoa/qcocoatheme.mm4
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.h2
-rw-r--r--src/plugins/platforms/cocoa/qcocoawindow.mm3
-rw-r--r--src/plugins/platforms/cocoa/qnsview.h4
-rw-r--r--src/plugins/platforms/cocoa/qnsview.mm207
-rw-r--r--src/plugins/platforms/cocoa/qpaintengine_mac.mm10
-rw-r--r--src/plugins/platforms/directfb/main.cpp2
-rw-r--r--src/plugins/platforms/directfb/qdirectfbconvenience.cpp8
-rw-r--r--src/plugins/platforms/eglfs/main.cpp2
-rw-r--r--src/plugins/platforms/eglfs/qeglfsintegration.cpp36
-rw-r--r--src/plugins/platforms/eglfs/qeglfsintegration.h3
-rw-r--r--src/plugins/platforms/eglfs/qeglfsscreen.cpp6
-rw-r--r--src/plugins/platforms/eglfs/qeglfsscreen.h7
-rw-r--r--src/plugins/platforms/eglfs/qeglfswindow.cpp31
-rw-r--r--src/plugins/platforms/eglfs/qeglfswindow.h4
-rw-r--r--src/plugins/platforms/ios/ios.pro40
-rw-r--r--src/plugins/platforms/ios/plugin.mm6
-rw-r--r--src/plugins/platforms/ios/plugin.pro36
-rw-r--r--src/plugins/platforms/ios/qiosapplicationdelegate.h4
-rw-r--r--src/plugins/platforms/ios/qiosapplicationdelegate.mm59
-rw-r--r--src/plugins/platforms/ios/qiosapplicationstate.h (renamed from src/plugins/platforms/kms/qkmsudevhandler.h)24
-rw-r--r--src/plugins/platforms/ios/qiosapplicationstate.mm162
-rw-r--r--src/plugins/platforms/ios/qioscontext.mm12
-rw-r--r--src/plugins/platforms/ios/qiosinputcontext.h1
-rw-r--r--src/plugins/platforms/ios/qiosinputcontext.mm11
-rw-r--r--src/plugins/platforms/ios/qiosintegration.h3
-rw-r--r--src/plugins/platforms/ios/qiosintegration.mm12
-rw-r--r--src/plugins/platforms/ios/qiosmain_dummy.mm56
-rw-r--r--src/plugins/platforms/ios/qiosmain_wrapper.mm60
-rw-r--r--src/plugins/platforms/ios/qioswindow.mm32
-rw-r--r--src/plugins/platforms/ios/qtmain.mm94
-rw-r--r--src/plugins/platforms/ios/qtmain.pro8
-rw-r--r--src/plugins/platforms/kms/kms.pro6
-rw-r--r--src/plugins/platforms/kms/main.cpp2
-rw-r--r--src/plugins/platforms/kms/qkmsintegration.cpp43
-rw-r--r--src/plugins/platforms/kms/qkmsintegration.h14
-rw-r--r--src/plugins/platforms/linuxfb/main.cpp2
-rw-r--r--src/plugins/platforms/minimal/main.cpp2
-rw-r--r--src/plugins/platforms/minimalegl/main.cpp2
-rw-r--r--src/plugins/platforms/offscreen/main.cpp2
-rw-r--r--src/plugins/platforms/offscreen/offscreen.pro1
-rw-r--r--src/plugins/platforms/openwfd/main.cpp2
-rw-r--r--src/plugins/platforms/qnx/main.cpp3
-rw-r--r--src/plugins/platforms/qnx/main.h2
-rw-r--r--src/plugins/platforms/qnx/qnx.pro31
-rw-r--r--src/plugins/platforms/qnx/qqnxbpseventfilter.cpp12
-rw-r--r--src/plugins/platforms/qnx/qqnxbpseventfilter.h2
-rw-r--r--src/plugins/platforms/qnx/qqnxfiledialoghelper.h28
-rw-r--r--src/plugins/platforms/qnx/qqnxfiledialoghelper_bb10.cpp217
-rw-r--r--src/plugins/platforms/qnx/qqnxfiledialoghelper_playbook.cpp (renamed from src/plugins/platforms/qnx/qqnxfiledialoghelper.cpp)36
-rw-r--r--src/plugins/platforms/qnx/qqnxfilepicker.cpp289
-rw-r--r--src/plugins/platforms/qnx/qqnxfilepicker.h (renamed from src/plugins/platforms/kms/qkmsudevlistener.cpp)113
-rw-r--r--src/plugins/platforms/qnx/qqnxglcontext.cpp154
-rw-r--r--src/plugins/platforms/qnx/qqnxglcontext.h15
-rw-r--r--src/plugins/platforms/qnx/qqnxintegration.cpp34
-rw-r--r--src/plugins/platforms/qnx/qqnxintegration.h15
-rw-r--r--src/plugins/platforms/qnx/qqnxrasterbackingstore.cpp27
-rw-r--r--src/plugins/platforms/qnx/qqnxscreen.cpp27
-rw-r--r--src/plugins/platforms/qnx/qqnxscreen.h1
-rw-r--r--src/plugins/platforms/qnx/qqnxscreeneventhandler.cpp6
-rw-r--r--src/plugins/platforms/qnx/qqnxtheme.cpp4
-rw-r--r--src/plugins/platforms/qnx/qqnxwindow.cpp148
-rw-r--r--src/plugins/platforms/qnx/qqnxwindow.h19
-rw-r--r--src/plugins/platforms/windows/accessible/iaccessible2.cpp8
-rw-r--r--src/plugins/platforms/windows/main.cpp6
-rw-r--r--src/plugins/platforms/windows/qtwindowsglobal.h7
-rw-r--r--src/plugins/platforms/windows/qwindowscontext.cpp40
-rw-r--r--src/plugins/platforms/windows/qwindowscontext.h3
-rw-r--r--src/plugins/platforms/windows/qwindowsdialoghelpers.cpp229
-rw-r--r--src/plugins/platforms/windows/qwindowsdialoghelpers.h1
-rw-r--r--src/plugins/platforms/windows/qwindowsfontdatabase.cpp4
-rw-r--r--src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp4
-rw-r--r--src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp141
-rw-r--r--src/plugins/platforms/windows/qwindowsfontenginedirectwrite.h2
-rw-r--r--src/plugins/platforms/windows/qwindowstabletsupport.cpp473
-rw-r--r--src/plugins/platforms/windows/qwindowstabletsupport.h142
-rw-r--r--src/plugins/platforms/windows/qwindowstheme.cpp28
-rw-r--r--src/plugins/platforms/windows/qwindowstheme.h3
-rw-r--r--src/plugins/platforms/windows/windows.pro6
-rw-r--r--src/plugins/platforms/xcb/main.cpp8
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection.cpp33
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection.h15
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection_xi2.cpp290
-rw-r--r--src/plugins/platforms/xcb/qxcbintegration.cpp30
-rw-r--r--src/plugins/platforms/xcb/qxcbintegration.h3
-rw-r--r--src/plugins/platforms/xcb/qxcbkeyboard.cpp8
-rw-r--r--src/plugins/platforms/xcb/qxcbnativeinterface.cpp47
-rw-r--r--src/plugins/platforms/xcb/qxcbnativeinterface.h13
-rw-r--r--src/plugins/platforms/xcb/qxcbscreen.cpp1
-rw-r--r--src/plugins/platforms/xcb/qxcbsystemtraytracker.cpp180
-rw-r--r--src/plugins/platforms/xcb/qxcbsystemtraytracker.h87
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.cpp11
-rw-r--r--src/plugins/platforms/xcb/xcb-plugin.pro6
-rw-r--r--src/plugins/platformthemes/gtk2/qgtk2dialoghelpers.cpp28
-rw-r--r--src/plugins/platformthemes/gtk2/qgtk2dialoghelpers.h12
-rw-r--r--src/printsupport/doc/qtprintsupport.qdocconf3
-rw-r--r--src/printsupport/doc/src/qtprintsupport-module.qdoc1
-rw-r--r--src/sql/doc/qtsql.qdocconf3
-rw-r--r--src/sql/doc/src/qtsql.qdoc1
-rw-r--r--src/sql/drivers/db2/qsql_db2.cpp18
-rw-r--r--src/sql/drivers/odbc/qsql_odbc.cpp28
-rw-r--r--src/src.pro6
-rw-r--r--src/testlib/doc/qttestlib.qdocconf3
-rw-r--r--src/testlib/doc/src/qttest.qdoc1
-rw-r--r--src/testlib/doc/src/qttestlib-manual.qdoc3
-rw-r--r--src/testlib/qabstracttestlogger.cpp10
-rw-r--r--src/testlib/qtestcase.cpp35
-rw-r--r--src/testlib/qtestresult.cpp8
-rw-r--r--src/tools/qdbuscpp2xml/qdbuscpp2xml.cpp12
-rw-r--r--src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp4
-rw-r--r--src/tools/qdoc/codemarker.cpp2
-rw-r--r--src/tools/qdoc/codeparser.cpp57
-rw-r--r--src/tools/qdoc/codeparser.h2
-rw-r--r--src/tools/qdoc/config.cpp43
-rw-r--r--src/tools/qdoc/config.h9
-rw-r--r--src/tools/qdoc/cppcodemarker.cpp59
-rw-r--r--src/tools/qdoc/cppcodeparser.cpp381
-rw-r--r--src/tools/qdoc/cppcodeparser.h14
-rw-r--r--src/tools/qdoc/ditaxmlgenerator.cpp70
-rw-r--r--src/tools/qdoc/doc.cpp66
-rw-r--r--src/tools/qdoc/doc.h11
-rw-r--r--src/tools/qdoc/doc/config/qdoc.qdocconf2
-rw-r--r--src/tools/qdoc/generator.cpp78
-rw-r--r--src/tools/qdoc/generator.h27
-rw-r--r--src/tools/qdoc/helpprojectwriter.cpp67
-rw-r--r--src/tools/qdoc/htmlgenerator.cpp588
-rw-r--r--src/tools/qdoc/htmlgenerator.h20
-rw-r--r--src/tools/qdoc/main.cpp24
-rw-r--r--src/tools/qdoc/node.cpp160
-rw-r--r--src/tools/qdoc/node.h67
-rw-r--r--src/tools/qdoc/puredocparser.cpp81
-rw-r--r--src/tools/qdoc/qdocdatabase.cpp2
-rw-r--r--src/tools/qdoc/qdocindexfiles.cpp59
-rw-r--r--src/tools/qdoc/qdoctagfiles.cpp10
-rw-r--r--src/tools/qdoc/qmlcodeparser.cpp67
-rw-r--r--src/tools/qdoc/qmlcodeparser.h4
-rw-r--r--src/tools/qdoc/qmlvisitor.cpp219
-rw-r--r--src/tools/qdoc/qmlvisitor.h11
-rw-r--r--src/tools/qdoc/tree.cpp2
-rw-r--r--src/tools/uic/main.cpp7
-rw-r--r--src/tools/uic/option.h1
-rw-r--r--src/widgets/dialogs/qcolordialog.cpp240
-rw-r--r--src/widgets/dialogs/qcolordialog.h4
-rw-r--r--src/widgets/dialogs/qcolordialog_p.h8
-rw-r--r--src/widgets/dialogs/qdialog.cpp4
-rw-r--r--src/widgets/dialogs/qdialog_p.h2
-rw-r--r--src/widgets/dialogs/qfiledialog.cpp417
-rw-r--r--src/widgets/dialogs/qfiledialog.h64
-rw-r--r--src/widgets/dialogs/qfiledialog_p.h40
-rw-r--r--src/widgets/dialogs/qfileinfogatherer.cpp2
-rw-r--r--src/widgets/dialogs/qfileinfogatherer_p.h8
-rw-r--r--src/widgets/dialogs/qfilesystemmodel.cpp2
-rw-r--r--src/widgets/dialogs/qfilesystemmodel_p.h2
-rw-r--r--src/widgets/dialogs/qfontdialog.cpp28
-rw-r--r--src/widgets/dialogs/qfontdialog.h6
-rw-r--r--src/widgets/dialogs/qinputdialog.cpp112
-rw-r--r--src/widgets/dialogs/qinputdialog.h9
-rw-r--r--src/widgets/dialogs/qmessagebox.cpp124
-rw-r--r--src/widgets/doc/qtwidgets.qdocconf3
-rw-r--r--src/widgets/doc/src/qtwidgets-examples.qdoc2
-rw-r--r--src/widgets/doc/src/qtwidgets.qdoc1
-rw-r--r--src/widgets/graphicsview/qgridlayoutengine.cpp9
-rw-r--r--src/widgets/itemviews/itemviews.pri1
-rw-r--r--src/widgets/itemviews/qabstractitemview.cpp20
-rw-r--r--src/widgets/itemviews/qabstractitemview_p.h2
-rw-r--r--src/widgets/itemviews/qcolumnview.cpp11
-rw-r--r--src/widgets/itemviews/qfileiconprovider.cpp93
-rw-r--r--src/widgets/itemviews/qfileiconprovider.h14
-rw-r--r--src/widgets/itemviews/qfileiconprovider_p.h87
-rw-r--r--src/widgets/itemviews/qheaderview.cpp105
-rw-r--r--src/widgets/itemviews/qheaderview.h5
-rw-r--r--src/widgets/itemviews/qheaderview_p.h19
-rw-r--r--src/widgets/itemviews/qlistview.cpp6
-rw-r--r--src/widgets/itemviews/qlistwidget.cpp4
-rw-r--r--src/widgets/itemviews/qtableview.cpp223
-rw-r--r--src/widgets/itemviews/qtableview.h2
-rw-r--r--src/widgets/itemviews/qtableview_p.h2
-rw-r--r--src/widgets/itemviews/qtreeview.cpp199
-rw-r--r--src/widgets/itemviews/qtreeview.h5
-rw-r--r--src/widgets/itemviews/qtreeview_p.h14
-rw-r--r--src/widgets/itemviews/qtreewidget.cpp6
-rw-r--r--src/widgets/kernel/qapplication.cpp73
-rw-r--r--src/widgets/kernel/qapplication_p.h4
-rw-r--r--src/widgets/kernel/qapplication_qpa.cpp1
-rw-r--r--src/widgets/kernel/qlayout.cpp4
-rw-r--r--src/widgets/kernel/qlayoutitem.cpp2
-rw-r--r--src/widgets/kernel/qsizepolicy.h5
-rw-r--r--src/widgets/kernel/qsizepolicy.qdoc17
-rw-r--r--src/widgets/kernel/qtooltip.cpp36
-rw-r--r--src/widgets/kernel/qtooltip.h2
-rw-r--r--src/widgets/kernel/qwidget.cpp63
-rw-r--r--src/widgets/kernel/qwidget.h3
-rw-r--r--src/widgets/kernel/qwidget_p.h2
-rw-r--r--src/widgets/kernel/qwidgetwindow.cpp2
-rw-r--r--src/widgets/styles/images/cleartext-16.pngbin0 -> 760 bytes
-rw-r--r--src/widgets/styles/qcommonstyle.cpp35
-rw-r--r--src/widgets/styles/qgtkstyle_p.cpp3
-rw-r--r--src/widgets/styles/qstyle.cpp14
-rw-r--r--src/widgets/styles/qstyle.h5
-rw-r--r--src/widgets/styles/qstyle.qrc1
-rw-r--r--src/widgets/util/qsystemtrayicon_x11.cpp150
-rw-r--r--src/widgets/util/util.pri1
-rw-r--r--src/widgets/widgets/qabstractscrollarea.cpp96
-rw-r--r--src/widgets/widgets/qabstractscrollarea.h12
-rw-r--r--src/widgets/widgets/qabstractscrollarea_p.h4
-rw-r--r--src/widgets/widgets/qcombobox.cpp33
-rw-r--r--src/widgets/widgets/qcombobox.h3
-rw-r--r--src/widgets/widgets/qcombobox_p.h4
-rw-r--r--src/widgets/widgets/qdialogbuttonbox.cpp15
-rw-r--r--src/widgets/widgets/qdialogbuttonbox.h3
-rw-r--r--src/widgets/widgets/qfontcombobox.cpp99
-rw-r--r--src/widgets/widgets/qlineedit.cpp124
-rw-r--r--src/widgets/widgets/qlineedit.h25
-rw-r--r--src/widgets/widgets/qlineedit_p.cpp171
-rw-r--r--src/widgets/widgets/qlineedit_p.h82
-rw-r--r--src/widgets/widgets/qpushbutton_p.h5
-rw-r--r--src/widgets/widgets/qscrollarea.cpp12
-rw-r--r--src/widgets/widgets/qscrollarea.h2
-rw-r--r--src/widgets/widgets/qscrollbar.cpp5
-rw-r--r--src/widgets/widgets/qspinbox.cpp64
-rw-r--r--src/widgets/widgets/qspinbox.h3
-rw-r--r--src/widgets/widgets/qsplashscreen.cpp16
-rw-r--r--src/widgets/widgets/qsplashscreen.h1
-rw-r--r--src/widgets/widgets/qsplitter.cpp19
-rw-r--r--src/widgets/widgets/qsplitter_p.h3
-rw-r--r--src/widgets/widgets/qtabbar.cpp46
-rw-r--r--src/widgets/widgets/qtabbar.h3
-rw-r--r--src/widgets/widgets/qtabbar_p.h5
-rw-r--r--src/widgets/widgets/qtabwidget.cpp24
-rw-r--r--src/widgets/widgets/qtabwidget.h2
-rw-r--r--src/widgets/widgets/qtextedit.cpp36
-rw-r--r--src/widgets/widgets/qtextedit.h4
-rw-r--r--src/widgets/widgets/qtextedit_p.h2
-rw-r--r--src/widgets/widgets/qwidgetanimator.cpp28
-rw-r--r--src/widgets/widgets/qwidgetlinecontrol.cpp4
-rw-r--r--src/widgets/widgets/qwidgettextcontrol.cpp13
-rw-r--r--src/xml/doc/qtxml.qdocconf3
-rw-r--r--src/xml/doc/src/qtxml.qdoc1
-rwxr-xr-xtests/auto/android/runtests.pl11
-rw-r--r--tests/auto/android/src/org/qtproject/qt5/android/QtActivity.java10
-rw-r--r--tests/auto/android/src/org/qtproject/qt5/android/QtNative.java13
-rw-r--r--tests/auto/corelib/io/qipaddress/tst_qipaddress.cpp4
-rw-r--r--tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp4
-rw-r--r--tests/auto/corelib/io/qtextstream/readAllStdinProcess/main.cpp8
-rw-r--r--tests/auto/corelib/io/qtextstream/stdinProcess/main.cpp11
-rw-r--r--tests/auto/corelib/io/qtextstream/tst_qtextstream.cpp3
-rw-r--r--tests/auto/corelib/io/qurl/tst_qurl.cpp456
-rw-r--r--tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp23
-rw-r--r--tests/auto/corelib/json/tst_qtjson.cpp108
-rw-r--r--tests/auto/corelib/kernel/qeventloop/tst_qeventloop.cpp30
-rw-r--r--tests/auto/corelib/kernel/qmetatype/qmetatype.pro1
-rw-r--r--tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp450
-rw-r--r--tests/auto/corelib/kernel/qobject/tst_qobject.cpp51
-rw-r--r--tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp314
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/fakeplugin.cpp (renamed from mkspecs/macx-clang-libc++-32/qplatformdefs.h)12
-rwxr-xr-xtests/auto/corelib/plugin/qpluginloader/machtest/generate-bad.pl209
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/machtest/machtest.pro56
-rwxr-xr-xtests/auto/corelib/plugin/qpluginloader/machtest/ppcconverter.pl112
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/qpluginloader.pro1
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/tst/tst.pro5
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp78
-rw-r--r--tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp117
-rw-r--r--tests/auto/corelib/tools/qalgorithms/tst_qalgorithms.cpp80
-rw-r--r--tests/auto/corelib/tools/qcommandlineparser/qcommandlineparser.pro3
-rw-r--r--tests/auto/corelib/tools/qcommandlineparser/testhelper/qcommandlineparser_test_helper.cpp93
-rw-r--r--tests/auto/corelib/tools/qcommandlineparser/testhelper/qcommandlineparser_test_helper.pro6
-rw-r--r--tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp531
-rw-r--r--tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.pro4
-rw-r--r--tests/auto/corelib/tools/qdate/tst_qdate.cpp56
-rw-r--r--tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp138
-rw-r--r--tests/auto/corelib/tools/qeasingcurve/tst_qeasingcurve.cpp14
-rw-r--r--tests/auto/corelib/tools/qhash/tst_qhash.cpp30
-rw-r--r--tests/auto/corelib/tools/qlinkedlist/qlinkedlist.pro5
-rw-r--r--tests/auto/corelib/tools/qlinkedlist/tst_qlinkedlist.cpp (renamed from tests/auto/dbus/qdbusabstractinterface/pinger.cpp)67
-rw-r--r--tests/auto/corelib/tools/qlist/tst_qlist.cpp49
-rw-r--r--tests/auto/corelib/tools/qmap/tst_qmap.cpp57
-rw-r--r--tests/auto/corelib/tools/qscopedpointer/qscopedpointer.pro1
-rw-r--r--tests/auto/corelib/tools/qscopedpointer/tst_qscopedpointer.cpp155
-rw-r--r--tests/auto/corelib/tools/qtime/tst_qtime.cpp84
-rw-r--r--tests/auto/corelib/tools/tools.pro2
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/interface.h3
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/org.qtproject.QtDBus.Pinger.xml4
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/pinger.h152
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/test/test.pro8
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp34
-rw-r--r--tests/auto/gui/image/qimage/tst_qimage.cpp49
-rw-r--r--tests/auto/gui/kernel/qbackingstore/qbackingstore.pro1
-rw-r--r--tests/auto/gui/kernel/qinputmethod/qinputmethod.pro1
-rw-r--r--tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp9
-rw-r--r--tests/auto/gui/math3d/qvectornd/tst_qvectornd.cpp80
-rw-r--r--tests/auto/gui/painting/qcolor/tst_qcolor.cpp81
-rw-r--r--tests/auto/gui/painting/qpainter/tst_qpainter.cpp81
-rw-r--r--tests/auto/gui/text/qcssparser/tst_qcssparser.cpp5
-rw-r--r--tests/auto/gui/text/qfontdatabase/qfontdatabase.pro3
-rw-r--r--tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp13
-rw-r--r--tests/auto/network/access/qnetworkaccessmanager/tst_qnetworkaccessmanager.cpp35
-rw-r--r--tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp63
-rw-r--r--tests/auto/network/socket/platformsocketengine/tst_platformsocketengine.cpp4
-rw-r--r--tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp2
-rw-r--r--tests/auto/other/exceptionsafety/.gitignore1
-rw-r--r--tests/auto/other/exceptionsafety/exceptionsafety.pro6
-rw-r--r--tests/auto/other/exceptionsafety/tst_exceptionsafety.cpp846
-rw-r--r--tests/auto/other/exceptionsafety_objects/3rdparty/memcheck.h319
-rw-r--r--tests/auto/other/exceptionsafety_objects/3rdparty/valgrind.h3924
-rw-r--r--tests/auto/other/exceptionsafety_objects/exceptionsafety_objects.pro6
-rw-r--r--tests/auto/other/exceptionsafety_objects/oomsimulator.h293
-rw-r--r--tests/auto/other/exceptionsafety_objects/tst_exceptionsafety_objects.cpp803
-rw-r--r--tests/auto/other/other.pro3
-rw-r--r--tests/auto/testlib/selftests/expected_cmptest.lightxml8
-rw-r--r--tests/auto/testlib/selftests/expected_cmptest.txt8
-rw-r--r--tests/auto/testlib/selftests/expected_cmptest.xml8
-rw-r--r--tests/auto/testlib/selftests/expected_cmptest.xunitxml8
-rw-r--r--tests/auto/testlib/selftests/expected_datetime.lightxml2
-rw-r--r--tests/auto/testlib/selftests/expected_datetime.txt2
-rw-r--r--tests/auto/testlib/selftests/expected_datetime.xml2
-rw-r--r--tests/auto/testlib/selftests/expected_datetime.xunitxml2
-rw-r--r--tests/auto/testlib/selftests/expected_float.txt6
-rw-r--r--tests/auto/testlib/selftests/expected_strcmp.lightxml4
-rw-r--r--tests/auto/testlib/selftests/expected_strcmp.txt4
-rw-r--r--tests/auto/testlib/selftests/expected_strcmp.xml4
-rw-r--r--tests/auto/testlib/selftests/expected_strcmp.xunitxml4
-rw-r--r--tests/auto/testlib/selftests/expected_subtest.lightxml4
-rw-r--r--tests/auto/testlib/selftests/expected_subtest.txt4
-rw-r--r--tests/auto/testlib/selftests/expected_subtest.xml4
-rw-r--r--tests/auto/testlib/selftests/expected_subtest.xunitxml4
-rw-r--r--tests/auto/tools/moc/interface-from-include.h (renamed from mkspecs/macx-clang-libc++/qplatformdefs.h)16
-rw-r--r--tests/auto/tools/moc/tst_moc.cpp41
-rw-r--r--tests/auto/tools/qmake/tst_qmake.cpp2
-rw-r--r--tests/auto/widgets/dialogs/qdialog/qdialog.pro2
-rw-r--r--tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp33
-rw-r--r--tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp48
-rw-r--r--tests/auto/widgets/graphicsview/graphicsview.pro4
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsanchorlayout/qgraphicsanchorlayout.pro1
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicseffectsource/qgraphicseffectsource.pro1
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsgridlayout/qgraphicsgridlayout.pro1
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp38
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicslinearlayout/qgraphicslinearlayout.pro2
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp12
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicssceneindex/qgraphicssceneindex.pro1
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicswidget/qgraphicswidget.pro1
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp3
-rw-r--r--tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp8
-rw-r--r--tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp34
-rw-r--r--tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp2
-rw-r--r--tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp43
-rw-r--r--tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp146
-rw-r--r--tests/auto/widgets/widgets/qdialogbuttonbox/tst_qdialogbuttonbox.cpp37
-rw-r--r--tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp91
-rw-r--r--tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp58
-rw-r--r--tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp2
-rw-r--r--tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp42
-rw-r--r--tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp42
-rw-r--r--tests/benchmarks/corelib/io/qfile/main.cpp4
-rw-r--r--tests/benchmarks/corelib/thread/qthreadpool/qthreadpool.pro5
-rw-r--r--tests/benchmarks/corelib/thread/qthreadpool/tst_qthreadpool.cpp92
-rw-r--r--tests/benchmarks/corelib/thread/thread.pro3
-rw-r--r--tests/benchmarks/corelib/tools/qset/main.cpp141
-rw-r--r--tests/benchmarks/corelib/tools/qset/qset.pro4
-rw-r--r--tests/benchmarks/gui/itemviews/qtableview/tst_qtableview.cpp21
-rw-r--r--tests/benchmarks/network/access/qnetworkreply/qnetworkreply.pro2
-rw-r--r--tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp127
-rw-r--r--tests/manual/corelib/tools/qhash/main.cpp85
-rw-r--r--tests/manual/corelib/tools/qhash/main.pro1
-rw-r--r--tests/manual/corelib/tools/qlist/main.cpp71
-rw-r--r--tests/manual/corelib/tools/qlist/main.pro1
-rw-r--r--tests/manual/corelib/tools/qmap/main.cpp111
-rw-r--r--tests/manual/corelib/tools/qmap/qmaptest.pro2
-rw-r--r--tests/manual/corelib/tools/qset/main.cpp63
-rw-r--r--tests/manual/corelib/tools/qset/main.pro1
-rw-r--r--tests/manual/corelib/tools/qvarlengtharray/main.cpp76
-rw-r--r--tests/manual/corelib/tools/qvarlengtharray/main.pro1
-rw-r--r--tests/manual/corelib/tools/qvector/main.cpp76
-rw-r--r--tests/manual/corelib/tools/qvector/main.pro1
-rw-r--r--tests/manual/dialogs/colordialogpanel.h2
-rw-r--r--tests/manual/dialogs/dialogs.pro4
-rw-r--r--tests/manual/dialogs/filedialogpanel.cpp75
-rw-r--r--tests/manual/dialogs/filedialogpanel.h9
-rw-r--r--tests/manual/dialogs/fontdialogpanel.cpp12
-rw-r--r--tests/manual/dialogs/fontdialogpanel.h6
-rw-r--r--tests/manual/dialogs/main.cpp2
-rw-r--r--tests/manual/dialogs/messageboxpanel.cpp181
-rw-r--r--tests/manual/dialogs/messageboxpanel.h84
-rw-r--r--tests/manual/dialogs/wizardpanel.h2
-rw-r--r--tests/manual/manual.pro1
-rw-r--r--tests/manual/qdesktopservices/tst_qdesktopservices.cpp7
-rw-r--r--tests/manual/qnetworkconfiguration/main.cpp139
-rw-r--r--tests/manual/qnetworkconfiguration/qnetworkconfiguration.pro7
-rw-r--r--tests/manual/qpainfo/main.cpp14
-rw-r--r--tests/manual/qtabletevent/regular_widgets/main.cpp83
-rw-r--r--tests/manual/widgets/itemviews/autoResizePrecision/tablehorz/testtable1.cpp115
-rw-r--r--tests/manual/widgets/itemviews/autoResizePrecision/tablehorz/testtable1.pro2
-rw-r--r--tests/manual/widgets/itemviews/autoResizePrecision/tablevert/testtable2.cpp125
-rw-r--r--tests/manual/widgets/itemviews/autoResizePrecision/tablevert/testtable2.pro2
-rw-r--r--tests/manual/widgets/itemviews/autoResizePrecision/treeview/testtree.cpp132
-rw-r--r--tests/manual/widgets/itemviews/autoResizePrecision/treeview/testtree.pro2
-rw-r--r--tests/manual/widgets/itemviews/delegate/example.cpp41
-rw-r--r--tests/manual/widgets/itemviews/itemviews.pro2
-rw-r--r--tests/manual/widgets/itemviews/qtreeview/main.cpp35
-rw-r--r--tests/manual/widgets/itemviews/qtreewidget/main.cpp152
-rw-r--r--tests/manual/widgets/itemviews/qtreewidget/qtreewidgettest.pro4
-rw-r--r--tests/manual/widgets/kernel/kernel.pro2
-rw-r--r--tests/manual/widgets/kernel/qtooltip/main.cpp161
-rw-r--r--tests/manual/widgets/kernel/qtooltip/main.pro2
-rw-r--r--tests/manual/widgets/kernel/sizeonhide/main.cpp134
-rw-r--r--tests/manual/widgets/kernel/sizeonhide/sizeonhide.pro3
-rw-r--r--tests/manual/widgets/qgraphicsview/rubberband/rubberbandtest.cpp4
-rw-r--r--tests/manual/widgets/widgets.pro3
-rw-r--r--tools/configure/configureapp.cpp96
-rw-r--r--util/local_database/enumdata.py3
-rw-r--r--util/unicode/main.cpp51
965 files changed, 70060 insertions, 21370 deletions
diff --git a/.gitignore b/.gitignore
index 5f9854a674..cc6102b64e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -61,6 +61,8 @@ Makefile*
*.pro.user*
*.qmlproject.user*
*.gcov
+*.gcda
+*.gcno
bin/Qt*.dll
bin/assistant*
bin/designer*
@@ -71,7 +73,6 @@ bin/linguist*
bin/lrelease*
bin/lupdate*
bin/lconvert*
-bin/mkv8snapshot*
bin/moc*
bin/makeqpf*
bin/pixeltool*
@@ -118,6 +119,8 @@ qmake/qmake_pch.pch
src/corelib/global/qconfig.cpp
src/corelib/global/qconfig.h
src/corelib/global/qconfig.h.qmake
+src/platformsupport/*_interface.*
+src/platformsupport/*_adaptor.*
ui_*.h
tests/auto/qprocess/test*/*.exe
tests/auto/qtcpsocket/stressTest/*.exe
@@ -308,8 +311,10 @@ tests/auto/corelib/io/qresourceengine/qresourceengine
tests/auto/corelib/codecs/qtextcodec/echo/echo
tests/auto/corelib/plugin/quuid/testProcessUniqueness/testProcessUniqueness
tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper
+tests/auto/corelib/tools/qcommandlineparser/testhelper/qcommandlineparser_test_helper
tests/auto/dbus/qdbusabstractadaptor/qmyserver/qmyserver
tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger
+tests/auto/dbus/qdbusabstractinterface/test/pinger_interface.*
tests/auto/dbus/qdbusinterface/qmyserver/qmyserver
tests/auto/gui/kernel/qfileopenevent/qfileopeneventexternal/qfileopeneventexternal
tests/auto/network/bearer/qnetworksession/lackey/lackey
diff --git a/config.tests/arch/arch.cpp b/config.tests/arch/arch.cpp
index b9c244e29e..b3c0d3b7d2 100644
--- a/config.tests/arch/arch.cpp
+++ b/config.tests/arch/arch.cpp
@@ -106,6 +106,22 @@ const char msg2[] = "==Qt=magic=Qt== Sub-architecture:"
// AVX 2, Intel Core 4th Generation ("Haswell")
" avx2"
#endif
+#ifdef __AVX512F__
+// AVX512 Foundation, Intel Xeon Phi codename "Knights Landing"
+" avx512f"
+#endif
+#ifdef __AVX512CD__
+// AVX512 Conflict Detection, Intel Xeon Phi codename "Knights Landing"
+" avx512cd"
+#endif
+#ifdef __AVX512ER__
+// AVX512 Exponentiation & Reciprocal, Intel Xeon Phi codename "Knights Landing"
+" avx512ef"
+#endif
+#ifdef __AVX512PF__
+// AVX512 Prefetch, Intel Xeon Phi codename "Knights Landing"
+" avx512pf"
+#endif
#ifdef __BMI__
// Bit Manipulation Instructions 1, Intel Core 4th Generation ("Haswell"), AMD "Bulldozer 2"
" bmi"
@@ -169,6 +185,10 @@ const char msg2[] = "==Qt=magic=Qt== Sub-architecture:"
// Random number generator, Intel Core 3rd Generation ("Ivy Bridge")
" rdrnd"
#endif
+#ifdef __SHA__
+// SHA-1 and SHA-256 instructions, Intel processor TBA
+" sha"
+#endif
#if defined(__SSE__) || (defined(_M_IX86_FP) && _M_IX86_FP >= 1) || defined(_M_X64)
// Streaming SIMD Extensions, Intel Pentium III, AMD Athlon
" sse"
diff --git a/config.tests/arch/arch.pro b/config.tests/arch/arch.pro
index fda4acc601..d89d70b1ee 100644
--- a/config.tests/arch/arch.pro
+++ b/config.tests/arch/arch.pro
@@ -2,4 +2,3 @@ TARGET = arch
SOURCES = arch.cpp
CONFIG -= qt dylib release debug_and_release
CONFIG += debug console
-mac:CONFIG -= app_bundle
diff --git a/config.tests/common/avx/avx.pro b/config.tests/common/avx/avx.pro
index ba7fd96e43..8d1b9702bc 100644
--- a/config.tests/common/avx/avx.pro
+++ b/config.tests/common/avx/avx.pro
@@ -1,6 +1,5 @@
SOURCES = avx.cpp
CONFIG -= qt dylib release debug_and_release
CONFIG += debug console
-mac:CONFIG -= app_bundle
isEmpty(QMAKE_CFLAGS_AVX):error("This compiler does not support AVX")
else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_AVX
diff --git a/config.tests/common/avx2/avx2.pro b/config.tests/common/avx2/avx2.pro
index 5aa9429d68..927f64efc8 100644
--- a/config.tests/common/avx2/avx2.pro
+++ b/config.tests/common/avx2/avx2.pro
@@ -1,6 +1,5 @@
SOURCES = avx2.cpp
CONFIG -= qt dylib release debug_and_release
CONFIG += debug console
-mac:CONFIG -= app_bundle
isEmpty(QMAKE_CFLAGS_AVX2):error("This compiler does not support AVX2")
else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_AVX2
diff --git a/config.tests/common/c++11/c++11.pro b/config.tests/common/c++11/c++11.pro
index dd4042b8d6..dbe764ba84 100644
--- a/config.tests/common/c++11/c++11.pro
+++ b/config.tests/common/c++11/c++11.pro
@@ -1,3 +1,3 @@
SOURCES = c++11.cpp
CONFIG += c++11
-CONFIG -= qt app_bundle
+CONFIG -= qt
diff --git a/config.tests/common/sse2/sse2.pro b/config.tests/common/sse2/sse2.pro
index c8d0861170..b4031f13fa 100644
--- a/config.tests/common/sse2/sse2.pro
+++ b/config.tests/common/sse2/sse2.pro
@@ -1,6 +1,5 @@
SOURCES = sse2.cpp
CONFIG -= qt dylib release debug_and_release
CONFIG += debug console
-mac:CONFIG -= app_bundle
isEmpty(QMAKE_CFLAGS_SSE2):error("This compiler does not support SSE2")
else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE2
diff --git a/config.tests/common/sse3/sse3.pro b/config.tests/common/sse3/sse3.pro
index 90f61d2065..f704c40c75 100644
--- a/config.tests/common/sse3/sse3.pro
+++ b/config.tests/common/sse3/sse3.pro
@@ -1,6 +1,5 @@
SOURCES = sse3.cpp
CONFIG -= qt dylib release debug_and_release
CONFIG += debug console
-mac:CONFIG -= app_bundle
isEmpty(QMAKE_CFLAGS_SSE3):error("This compiler does not support SSE3")
else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE3
diff --git a/config.tests/common/sse4_1/sse4_1.pro b/config.tests/common/sse4_1/sse4_1.pro
index d92be9dc43..5cc04e7c5c 100644
--- a/config.tests/common/sse4_1/sse4_1.pro
+++ b/config.tests/common/sse4_1/sse4_1.pro
@@ -1,6 +1,5 @@
SOURCES = sse4_1.cpp
CONFIG -= qt dylib release debug_and_release
CONFIG += debug console
-mac:CONFIG -= app_bundle
isEmpty(QMAKE_CFLAGS_SSE4_1):error("This compiler does not support SSE4.1")
else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE4_1
diff --git a/config.tests/common/sse4_2/sse4_2.pro b/config.tests/common/sse4_2/sse4_2.pro
index 744098dce8..6a04b1f9a5 100644
--- a/config.tests/common/sse4_2/sse4_2.pro
+++ b/config.tests/common/sse4_2/sse4_2.pro
@@ -1,6 +1,5 @@
SOURCES = sse4_2.cpp
CONFIG -= qt dylib release debug_and_release
CONFIG += debug console
-mac:CONFIG -= app_bundle
isEmpty(QMAKE_CFLAGS_SSE4_2):error("This compiler does not support SSE4.2")
else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE4_2
diff --git a/config.tests/common/ssse3/ssse3.pro b/config.tests/common/ssse3/ssse3.pro
index e3984bd1cd..5b207e78ce 100644
--- a/config.tests/common/ssse3/ssse3.pro
+++ b/config.tests/common/ssse3/ssse3.pro
@@ -1,6 +1,5 @@
SOURCES = ssse3.cpp
CONFIG -= qt dylib release debug_and_release
CONFIG += debug console
-mac:CONFIG -= app_bundle
isEmpty(QMAKE_CFLAGS_SSSE3):error("This compiler does not support SSSE3")
else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSSE3
diff --git a/config.tests/mac/coreservices/coreservices.pro b/config.tests/mac/coreservices/coreservices.pro
index 6f7c07a487..64936eb974 100644
--- a/config.tests/mac/coreservices/coreservices.pro
+++ b/config.tests/mac/coreservices/coreservices.pro
@@ -1,3 +1,3 @@
OBJECTIVE_SOURCES = coreservices.mm
LIBS += -framework CoreServices
-CONFIG -= app_bundle qt
+CONFIG -= qt
diff --git a/config.tests/mac/corewlan/corewlan.pro b/config.tests/mac/corewlan/corewlan.pro
index a9c256043c..8db0c8c1e7 100644
--- a/config.tests/mac/corewlan/corewlan.pro
+++ b/config.tests/mac/corewlan/corewlan.pro
@@ -1,3 +1,3 @@
OBJECTIVE_SOURCES = corewlantest.mm
LIBS += -framework CoreWLAN -framework Foundation
-CONFIG -= app_bundle qt
+CONFIG -= qt
diff --git a/config.tests/qpa/directfb/directfb.pro b/config.tests/qpa/directfb/directfb.pro
index 958ced7bea..b138fd0109 100644
--- a/config.tests/qpa/directfb/directfb.pro
+++ b/config.tests/qpa/directfb/directfb.pro
@@ -1,3 +1,2 @@
SOURCES = directfb.cpp
CONFIG -= qt
-mac:CONFIG -= app_bundle
diff --git a/config.tests/unix/alsa/alsa.pro b/config.tests/unix/alsa/alsa.pro
index 4931d38ea8..6d5d55bcfd 100644
--- a/config.tests/unix/alsa/alsa.pro
+++ b/config.tests/unix/alsa/alsa.pro
@@ -1,4 +1,3 @@
SOURCES = alsatest.cpp
LIBS+=-lasound
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
diff --git a/config.tests/unix/arch.test b/config.tests/unix/arch.test
index 3efd6f4f25..529ed5e547 100755
--- a/config.tests/unix/arch.test
+++ b/config.tests/unix/arch.test
@@ -26,7 +26,7 @@ CXXFLAGS="$SYSROOT_FLAG"
test -d "$OUTDIR/config.tests/arch" || mkdir -p "$OUTDIR/config.tests/arch"
cd "$OUTDIR/config.tests/arch"
[ -f Makefile ] && $MAKE distclean >/dev/null 2>&1
-OUTDIR=$OUTDIR "$OUTDIR/bin/qmake" -nocache -spec "$QMKSPEC" "QT_BUILD_TREE=$OUTDIR" "LIBS+=$LFLAGS" "QMAKE_CXXFLAGS+=$CXXFLAGS" "$SRCDIR/config.tests/arch/arch$PROSUFFIX.pro" >/dev/null 2>&1 || echo "qmake is broken" >&2
+OUTDIR=$OUTDIR "$OUTDIR/bin/qmake" -nocache -spec "$QMKSPEC" "QT_BUILD_TREE=$OUTDIR" "LIBS+=$LFLAGS" "QMAKE_CXXFLAGS+=$CXXFLAGS" "CONFIG-=app_bundle" "$SRCDIR/config.tests/arch/arch$PROSUFFIX.pro" >/dev/null 2>&1 || echo "qmake is broken" >&2
ARCH=""
diff --git a/config.tests/unix/clock-gettime/clock-gettime.pro b/config.tests/unix/clock-gettime/clock-gettime.pro
index c527535183..bdbb1c2a82 100644
--- a/config.tests/unix/clock-gettime/clock-gettime.pro
+++ b/config.tests/unix/clock-gettime/clock-gettime.pro
@@ -1,4 +1,3 @@
SOURCES = clock-gettime.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
include(clock-gettime.pri)
diff --git a/config.tests/unix/clock-monotonic/clock-monotonic.pro b/config.tests/unix/clock-monotonic/clock-monotonic.pro
index 961e3a848d..253a9f7346 100644
--- a/config.tests/unix/clock-monotonic/clock-monotonic.pro
+++ b/config.tests/unix/clock-monotonic/clock-monotonic.pro
@@ -1,4 +1,3 @@
SOURCES = clock-monotonic.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
include(../clock-gettime/clock-gettime.pri)
diff --git a/config.tests/unix/compile.test b/config.tests/unix/compile.test
index 6b90044009..22064b85e9 100755
--- a/config.tests/unix/compile.test
+++ b/config.tests/unix/compile.test
@@ -67,7 +67,7 @@ test -r Makefile && $MAKE distclean >/dev/null 2>&1
# Make sure output from possible previous tests is gone
rm -f "$EXE" "${EXE}.exe"
-set -- "$OUTDIR/bin/qmake" -nocache -spec "$QMKSPEC" "CONFIG+=$QMAKE_CONFIG" "CONFIG+=android_app" "CONFIG-=debug_and_release" "LIBS*=$LFLAGS" "LIBS+=$MAC_ARCH_LFLAGS" "INCLUDEPATH*=$INCLUDEPATH" "QMAKE_CXXFLAGS*=$CXXFLAGS" "QMAKE_CXXFLAGS+=$MAC_ARCH_CXXFLAGS" "QT_BUILD_TREE=$OUTDIR" "$SRCDIR/$TEST/$EXE.pro" -o "$OUTDIR/$TEST/Makefile"
+set -- "$OUTDIR/bin/qmake" -nocache -spec "$QMKSPEC" "CONFIG+=$QMAKE_CONFIG" "CONFIG+=android_app" "CONFIG-=debug_and_release app_bundle lib_bundle" "LIBS*=$LFLAGS" "LIBS+=$MAC_ARCH_LFLAGS" "INCLUDEPATH*=$INCLUDEPATH" "QMAKE_CXXFLAGS*=$CXXFLAGS" "QMAKE_CXXFLAGS+=$MAC_ARCH_CXXFLAGS" "QT_BUILD_TREE=$OUTDIR" "$SRCDIR/$TEST/$EXE.pro" -o "$OUTDIR/$TEST/Makefile"
if [ "$VERBOSE" = "yes" ]; then
OUTDIR=$OUTDIR "$@"
$MAKE
diff --git a/config.tests/unix/cups/cups.pro b/config.tests/unix/cups/cups.pro
index d7b78c877f..3f8ca99d0f 100644
--- a/config.tests/unix/cups/cups.pro
+++ b/config.tests/unix/cups/cups.pro
@@ -1,4 +1,3 @@
SOURCES = cups.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
LIBS += -lcups
diff --git a/config.tests/unix/db2/db2.pro b/config.tests/unix/db2/db2.pro
index 0fa39a8242..b7316051f9 100644
--- a/config.tests/unix/db2/db2.pro
+++ b/config.tests/unix/db2/db2.pro
@@ -1,4 +1,3 @@
SOURCES = db2.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
LIBS += -ldb2
diff --git a/config.tests/unix/dbus/dbus.pro b/config.tests/unix/dbus/dbus.pro
index 1e4aea73e4..c2a01ea269 100644
--- a/config.tests/unix/dbus/dbus.pro
+++ b/config.tests/unix/dbus/dbus.pro
@@ -1,3 +1,2 @@
SOURCES = dbus.cpp
CONFIG -= qt
-mac:CONFIG -= app_bundle
diff --git a/config.tests/unix/eventfd/eventfd.pro b/config.tests/unix/eventfd/eventfd.pro
index c41204f49f..de99717750 100644
--- a/config.tests/unix/eventfd/eventfd.pro
+++ b/config.tests/unix/eventfd/eventfd.pro
@@ -1,3 +1,2 @@
SOURCES = main.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
diff --git a/config.tests/unix/fontconfig/fontconfig.pro b/config.tests/unix/fontconfig/fontconfig.pro
index 5989586751..8360774035 100644
--- a/config.tests/unix/fontconfig/fontconfig.pro
+++ b/config.tests/unix/fontconfig/fontconfig.pro
@@ -1,4 +1,4 @@
SOURCES = fontconfig.cpp
-CONFIG -= qt app_bundle
+CONFIG -= qt
LIBS += -lfreetype -lfontconfig
include(../../unix/freetype/freetype.pri)
diff --git a/config.tests/unix/getaddrinfo/getaddrinfo.pro b/config.tests/unix/getaddrinfo/getaddrinfo.pro
index c9121db9b4..cc739118fa 100644
--- a/config.tests/unix/getaddrinfo/getaddrinfo.pro
+++ b/config.tests/unix/getaddrinfo/getaddrinfo.pro
@@ -1,4 +1,3 @@
SOURCES = getaddrinfotest.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
LIBS += $$QMAKE_LIBS_NETWORK
diff --git a/config.tests/unix/getifaddrs/getifaddrs.pro b/config.tests/unix/getifaddrs/getifaddrs.pro
index c3fead6354..14a89f87b8 100644
--- a/config.tests/unix/getifaddrs/getifaddrs.pro
+++ b/config.tests/unix/getifaddrs/getifaddrs.pro
@@ -1,5 +1,4 @@
SOURCES = getifaddrs.cpp
CONFIG -= qt
-mac:CONFIG -= app_bundle
QT =
LIBS += $$QMAKE_LIBS_NETWORK
diff --git a/config.tests/unix/glib/glib.pro b/config.tests/unix/glib/glib.pro
index c7cd53d116..15d059df77 100644
--- a/config.tests/unix/glib/glib.pro
+++ b/config.tests/unix/glib/glib.pro
@@ -1,2 +1,2 @@
SOURCES = glib.cpp
-CONFIG -= qt app_bundle
+CONFIG -= qt
diff --git a/config.tests/unix/gnu-libiconv/gnu-libiconv.pro b/config.tests/unix/gnu-libiconv/gnu-libiconv.pro
index d879b205f1..1ecf94390a 100644
--- a/config.tests/unix/gnu-libiconv/gnu-libiconv.pro
+++ b/config.tests/unix/gnu-libiconv/gnu-libiconv.pro
@@ -1,4 +1,3 @@
SOURCES = gnu-libiconv.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
LIBS += -liconv
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/config.tests/unix/ibase/ibase.pro b/config.tests/unix/ibase/ibase.pro
index 01e7429733..58787851e1 100644
--- a/config.tests/unix/ibase/ibase.pro
+++ b/config.tests/unix/ibase/ibase.pro
@@ -1,4 +1,3 @@
SOURCES = ibase.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
LIBS += -lgds
diff --git a/config.tests/unix/iconv/iconv.pro b/config.tests/unix/iconv/iconv.pro
index 39375a5714..1ef6aa7207 100644
--- a/config.tests/unix/iconv/iconv.pro
+++ b/config.tests/unix/iconv/iconv.pro
@@ -1,3 +1,3 @@
SOURCES = iconv.cpp
-CONFIG -= qt dylib app_bundle
+CONFIG -= qt dylib
mac|win32-g++*|qnx:LIBS += -liconv
diff --git a/config.tests/unix/icu/icu.pro b/config.tests/unix/icu/icu.pro
index 8e583348bb..002c4840d5 100644
--- a/config.tests/unix/icu/icu.pro
+++ b/config.tests/unix/icu/icu.pro
@@ -1,4 +1,4 @@
SOURCES = icu.cpp
-CONFIG -= qt dylib app_bundle
+CONFIG -= qt dylib
unix:LIBS += -licuuc -licui18n
win32:LIBS += -licuin
diff --git a/config.tests/unix/inotify/inotify.pro b/config.tests/unix/inotify/inotify.pro
index e2e1560a47..35880de3c0 100644
--- a/config.tests/unix/inotify/inotify.pro
+++ b/config.tests/unix/inotify/inotify.pro
@@ -1,3 +1,2 @@
SOURCES = inotifytest.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
diff --git a/config.tests/unix/iodbc/iodbc.pro b/config.tests/unix/iodbc/iodbc.pro
index 465a9a7a1b..68a0bd0ef4 100644
--- a/config.tests/unix/iodbc/iodbc.pro
+++ b/config.tests/unix/iodbc/iodbc.pro
@@ -1,4 +1,3 @@
SOURCES = iodbc.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
LIBS += -liodbc
diff --git a/config.tests/unix/ipv6ifname/ipv6ifname.pro b/config.tests/unix/ipv6ifname/ipv6ifname.pro
index ed62869cb9..88203a782c 100644
--- a/config.tests/unix/ipv6ifname/ipv6ifname.pro
+++ b/config.tests/unix/ipv6ifname/ipv6ifname.pro
@@ -1,5 +1,4 @@
SOURCES = ipv6ifname.cpp
CONFIG -= qt
-mac:CONFIG -= app_bundle
QT =
LIBS += $$QMAKE_LIBS_NETWORK
diff --git a/config.tests/unix/libjpeg/libjpeg.pro b/config.tests/unix/libjpeg/libjpeg.pro
index d06888c57d..01329a11fe 100644
--- a/config.tests/unix/libjpeg/libjpeg.pro
+++ b/config.tests/unix/libjpeg/libjpeg.pro
@@ -1,4 +1,3 @@
SOURCES = libjpeg.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
LIBS += -ljpeg
diff --git a/config.tests/unix/libpng/libpng.pro b/config.tests/unix/libpng/libpng.pro
index f03838663e..4e50fe26e5 100644
--- a/config.tests/unix/libpng/libpng.pro
+++ b/config.tests/unix/libpng/libpng.pro
@@ -1,4 +1,3 @@
SOURCES = libpng.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
LIBS += -lpng
diff --git a/config.tests/unix/mremap/mremap.pro b/config.tests/unix/mremap/mremap.pro
index a36d756db3..1dbd3b7a7e 100644
--- a/config.tests/unix/mremap/mremap.pro
+++ b/config.tests/unix/mremap/mremap.pro
@@ -1,3 +1,2 @@
SOURCES = mremap.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
diff --git a/config.tests/unix/mysql/mysql.pro b/config.tests/unix/mysql/mysql.pro
index a22579e1bd..06d1880f08 100644
--- a/config.tests/unix/mysql/mysql.pro
+++ b/config.tests/unix/mysql/mysql.pro
@@ -1,4 +1,3 @@
SOURCES = mysql.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
LIBS += -lmysqlclient
diff --git a/config.tests/unix/mysql_r/mysql_r.pro b/config.tests/unix/mysql_r/mysql_r.pro
index 8c06067305..096da69487 100644
--- a/config.tests/unix/mysql_r/mysql_r.pro
+++ b/config.tests/unix/mysql_r/mysql_r.pro
@@ -1,4 +1,3 @@
SOURCES = ../mysql/mysql.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
LIBS += -lmysqlclient_r
diff --git a/config.tests/unix/nis/nis.pro b/config.tests/unix/nis/nis.pro
index 1f985b2049..b7f5693b60 100644
--- a/config.tests/unix/nis/nis.pro
+++ b/config.tests/unix/nis/nis.pro
@@ -1,5 +1,4 @@
SOURCES = nis.cpp
CONFIG -= qt dylib
-mac: CONFIG -= app_bundle
solaris-*:LIBS += -lnsl
else:LIBS += $$QMAKE_LIBS_NIS
diff --git a/config.tests/unix/oci/oci.pro b/config.tests/unix/oci/oci.pro
index 4add225f5d..3ffda1ddd7 100644
--- a/config.tests/unix/oci/oci.pro
+++ b/config.tests/unix/oci/oci.pro
@@ -1,4 +1,3 @@
SOURCES = oci.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
LIBS += -lclntsh
diff --git a/config.tests/unix/odbc/odbc.pro b/config.tests/unix/odbc/odbc.pro
index 06a548fd71..418a0e0d54 100644
--- a/config.tests/unix/odbc/odbc.pro
+++ b/config.tests/unix/odbc/odbc.pro
@@ -1,5 +1,4 @@
SOURCES = odbc.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
win32-g++*:LIBS += -lodbc32
else:LIBS += -lodbc
diff --git a/config.tests/unix/opengldesktop/opengldesktop.pro b/config.tests/unix/opengldesktop/opengldesktop.pro
index fbf36a0c67..c3e700c50a 100644
--- a/config.tests/unix/opengldesktop/opengldesktop.pro
+++ b/config.tests/unix/opengldesktop/opengldesktop.pro
@@ -9,4 +9,3 @@ CONFIG -= qt
LIBS += $$QMAKE_LIBS_OPENGL
mac:DEFINES += Q_OS_MAC
-CONFIG -= app_bundle
diff --git a/config.tests/unix/opengles1/opengles1.pro b/config.tests/unix/opengles1/opengles1.pro
index 9e6012474d..58817e6a6e 100644
--- a/config.tests/unix/opengles1/opengles1.pro
+++ b/config.tests/unix/opengles1/opengles1.pro
@@ -9,5 +9,4 @@ CONFIG -= qt
LIBS += $$QMAKE_LIBS_OPENGL_ES1
mac {
DEFINES += BUILD_ON_MAC
- CONFIG -= app_bundle
}
diff --git a/config.tests/unix/opengles2/opengles2.pro b/config.tests/unix/opengles2/opengles2.pro
index 34d77371b4..c4d76895a8 100644
--- a/config.tests/unix/opengles2/opengles2.pro
+++ b/config.tests/unix/opengles2/opengles2.pro
@@ -9,5 +9,4 @@ CONFIG -= qt
LIBS += $$QMAKE_LIBS_OPENGL_ES2
mac {
DEFINES += BUILD_ON_MAC
- CONFIG -= app_bundle
}
diff --git a/config.tests/unix/openssl/openssl.pro b/config.tests/unix/openssl/openssl.pro
index 1c537cb2b1..a023aee4aa 100644
--- a/config.tests/unix/openssl/openssl.pro
+++ b/config.tests/unix/openssl/openssl.pro
@@ -1,3 +1,2 @@
SOURCES = openssl.cpp
CONFIG -= x11 qt
-mac:CONFIG -= app_bundle
diff --git a/config.tests/unix/pcre/pcre.pro b/config.tests/unix/pcre/pcre.pro
index b29c55da47..7b8bfc6545 100644
--- a/config.tests/unix/pcre/pcre.pro
+++ b/config.tests/unix/pcre/pcre.pro
@@ -1,3 +1,3 @@
SOURCES = pcre.cpp
-CONFIG -= qt dylib app_bundle
+CONFIG -= qt dylib
LIBS += -lpcre16
diff --git a/config.tests/unix/psql/psql.pro b/config.tests/unix/psql/psql.pro
index 38bfb3ed70..d0f3761bfb 100644
--- a/config.tests/unix/psql/psql.pro
+++ b/config.tests/unix/psql/psql.pro
@@ -1,4 +1,3 @@
SOURCES = psql.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
LIBS *= -lpq
diff --git a/config.tests/unix/ptrsize.test b/config.tests/unix/ptrsize.test
index c78c73f7a2..3ad15dbd2b 100755
--- a/config.tests/unix/ptrsize.test
+++ b/config.tests/unix/ptrsize.test
@@ -10,7 +10,7 @@ OUTDIR=$4
# build and run a test program
test -d "$OUTDIR/config.tests/unix/ptrsize" || mkdir -p "$OUTDIR/config.tests/unix/ptrsize"
-"$OUTDIR/bin/qmake" -nocache -spec "$QMKSPEC" "QT_BUILD_TREE=$OUTDIR" "$SRCDIR/config.tests/unix/ptrsize/ptrsizetest.pro" -o "$OUTDIR/config.tests/unix/ptrsize/Makefile" >/dev/null 2>&1
+"$OUTDIR/bin/qmake" -nocache -spec "$QMKSPEC" "QT_BUILD_TREE=$OUTDIR" "CONFIG-=app_bundle" "$SRCDIR/config.tests/unix/ptrsize/ptrsizetest.pro" -o "$OUTDIR/config.tests/unix/ptrsize/Makefile" >/dev/null 2>&1
cd "$OUTDIR/config.tests/unix/ptrsize"
if [ "$VERBOSE" = "yes" ]; then
diff --git a/config.tests/unix/ptrsize/ptrsizetest.pro b/config.tests/unix/ptrsize/ptrsizetest.pro
index 41aba86dd9..045a759ec9 100644
--- a/config.tests/unix/ptrsize/ptrsizetest.pro
+++ b/config.tests/unix/ptrsize/ptrsizetest.pro
@@ -1,3 +1,2 @@
SOURCES = ptrsizetest.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
diff --git a/config.tests/unix/slog2/slog2.pro b/config.tests/unix/slog2/slog2.pro
index 9f5b34d664..e65460bb94 100644
--- a/config.tests/unix/slog2/slog2.pro
+++ b/config.tests/unix/slog2/slog2.pro
@@ -1,4 +1,3 @@
SOURCES = slog2.cpp
CONFIG -= qt
-mac:CONFIG -= app_bundle
LIBS += -lslog2
diff --git a/config.tests/unix/sqlite/sqlite.pro b/config.tests/unix/sqlite/sqlite.pro
index ba2cac1465..4b24e014ba 100644
--- a/config.tests/unix/sqlite/sqlite.pro
+++ b/config.tests/unix/sqlite/sqlite.pro
@@ -1,3 +1,2 @@
SOURCES = sqlite.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
diff --git a/config.tests/unix/sqlite2/sqlite2.pro b/config.tests/unix/sqlite2/sqlite2.pro
index 14a64d5db9..7e69fdf2f3 100644
--- a/config.tests/unix/sqlite2/sqlite2.pro
+++ b/config.tests/unix/sqlite2/sqlite2.pro
@@ -1,4 +1,3 @@
SOURCES = sqlite2.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
LIBS += -lsqlite
diff --git a/config.tests/unix/stdint/stdint.pro b/config.tests/unix/stdint/stdint.pro
index 79a0d9cd3a..9975484889 100644
--- a/config.tests/unix/stdint/stdint.pro
+++ b/config.tests/unix/stdint/stdint.pro
@@ -1,4 +1,3 @@
SOURCES = main.cpp
CONFIG -= x11 qt
-mac:CONFIG -= app_bundle
diff --git a/config.tests/unix/stl/stl.pro b/config.tests/unix/stl/stl.pro
index a2feab431c..7303e8d31c 100644
--- a/config.tests/unix/stl/stl.pro
+++ b/config.tests/unix/stl/stl.pro
@@ -1,3 +1,2 @@
SOURCES = stltest.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
diff --git a/config.tests/unix/sun-libiconv/sun-libiconv.pro b/config.tests/unix/sun-libiconv/sun-libiconv.pro
index 00df8653c8..923afc7dd2 100644
--- a/config.tests/unix/sun-libiconv/sun-libiconv.pro
+++ b/config.tests/unix/sun-libiconv/sun-libiconv.pro
@@ -1,2 +1,2 @@
SOURCES = ../gnu-libiconv/gnu-libiconv.cpp
-CONFIG -= qt dylib app_bundle
+CONFIG -= qt dylib
diff --git a/config.tests/unix/tds/tds.pro b/config.tests/unix/tds/tds.pro
index 5516a14c8f..6712779d58 100644
--- a/config.tests/unix/tds/tds.pro
+++ b/config.tests/unix/tds/tds.pro
@@ -1,4 +1,3 @@
SOURCES = tds.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
LIBS += -lsybdb
diff --git a/config.tests/unix/zlib/zlib.pro b/config.tests/unix/zlib/zlib.pro
index 67cc870516..d9bd03e5df 100644
--- a/config.tests/unix/zlib/zlib.pro
+++ b/config.tests/unix/zlib/zlib.pro
@@ -1,4 +1,3 @@
SOURCES = zlib.cpp
CONFIG -= qt dylib
-mac:CONFIG -= app_bundle
LIBS += -lz
diff --git a/configure b/configure
index 8ea494d4ff..886e7239dd 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"
@@ -901,7 +902,6 @@ CFG_SKIP_MODULES=""
CFG_COMPILE_EXAMPLES=yes
CFG_RELEASE_QMAKE=no
CFG_AUDIO_BACKEND=auto
-CFG_V8SNAPSHOT=auto
CFG_QML_DEBUG=yes
CFG_JAVASCRIPTCORE_JIT=auto
CFG_PKGCONFIG=auto
@@ -970,7 +970,6 @@ CFG_INOTIFY=auto
CFG_EVENTFD=auto
CFG_RPATH=yes
CFG_FRAMEWORK=auto
-CFG_MAC_HARFBUZZ=no
DEFINES=
D_FLAGS=
I_FLAGS=
@@ -1496,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
@@ -1533,6 +1533,11 @@ while [ "$#" -gt 0 ]; do
QTCONFIG_CONFIG="$QTCONFIG_CONFIG testcocoon"
fi
;;
+ gcov)
+ if [ "$VAL" = "yes" ]; then
+ QTCONFIG_CONFIG="$QTCONFIG_CONFIG gcov"
+ fi
+ ;;
platform)
PLATFORM="$VAL"
# keep compatibility with old platform names
@@ -2472,47 +2477,7 @@ if [ "$OPT_SHADOW" = "yes" ]; then
[ -d "$outpath/bin" ] || mkdir -p "$outpath/bin"
- # save a pre-existing mkspecs/modules dir
- test -d "$outpath/mkspecs/modules" && \
- mv "$outpath/mkspecs/modules" "$outpath/mkspecs-modules"
- # ditto for mkspecs/modules-inst
- test -d "$outpath/mkspecs/modules-inst" && \
- mv "$outpath/mkspecs/modules-inst" "$outpath/mkspecs-modules-inst"
-
- # symlink the mkspecs directory
mkdir -p "$outpath/mkspecs"
- rm -rf "$outpath"/mkspecs/*
- ln -s "$relpath"/mkspecs/* "$outpath/mkspecs"
-
- ShadowMkspecs()
- {
- rm -rf "$outpath/mkspecs/$1"
- find "$relpath/mkspecs/$1" -type d | sed "s,^$relpath,$outpath," | xargs mkdir -p
- find "$relpath/mkspecs/$1" -type f | sed "s,^$relpath/,," | while read f; do ln -s "$relpath/$f" "$outpath/$f"; done
- }
-
- # Special case for mkspecs/features directory.
- # To be able to place .prf files into a shadow build directory,
- # we're creating links for files only. The directory structure is reproduced.
- ShadowMkspecs features
-
- # The modules dir is special, too.
- if test -d "$outpath/mkspecs-modules"; then
- rm -rf "$outpath/mkspecs/modules"
- mv "$outpath/mkspecs-modules" "$outpath/mkspecs/modules"
- else
- ShadowMkspecs modules
- fi
-
- # The modules-inst dir is not quite as special, but still.
- if test -d "$outpath/mkspecs-modules-inst"; then
- rm -rf "$outpath/mkspecs/modules-inst"
- mv "$outpath/mkspecs-modules-inst" "$outpath/mkspecs/modules-inst"
- fi
-
- # Prepare doc directory
- mkdir -p "$outpath/doc"
- ln -f -s "$relpath"/doc/global "$outpath/doc"
fi
# symlink fonts to be able to run application from build directory
@@ -2816,9 +2781,9 @@ if [ "$BUILD_ON_MAC" = "yes" ]; then
if [ `basename $QMAKESPEC` = "macx-xcode" ] || [ `basename $XQMAKESPEC` = "macx-xcode" ]; then
echo >&2
echo " Platform 'macx-xcode' should not be used when building Qt/Mac." >&2
- echo " Please build Qt/Mac with 'macx-g++', then if you would like to" >&2
- echo " use mac-xcode on your application code it can link to a Qt/Mac" >&2
- echo " built with 'macx-g++'" >&2
+ echo " Please build Qt/Mac with 'macx-clang' or 'macx-g++', then use" >&2
+ echo " the 'macx-xcode' spec for your application, and it will link to" >&2
+ echo " the Qt/Mac build using the settings of the original mkspec." >&2
echo >&2
exit 2
fi
@@ -2909,7 +2874,7 @@ if [ "$XPLATFORM_IOS" = "yes" ]; then
CFG_NOBUILD_PARTS="$CFG_NOBUILD_PARTS examples tests"
CFG_SHARED="no" # iOS builds should be static to be able to submit to the App Store
CFG_CXX11="no" # C++11 support disabled for now
- CFG_SKIP_MODULES="$CFG_SKIP_MODULES qtdeclarative qtquickcontrols qtwebkit qtgraphicaleffects qtdoc qtmultimedia qtwebkit-examples qttools"
+ CFG_SKIP_MODULES="$CFG_SKIP_MODULES qtquickcontrols qtwebkit qtgraphicaleffects qtdoc qtmultimedia qtwebkit-examples qttools"
fi
# disable GTK style support auto-detection on Mac
@@ -3054,21 +3019,44 @@ else
fi
# auto-detect default include and library search paths
-gccout=`LC_ALL=C $TEST_COMPILER $SYSROOT_FLAG $TEST_COMPILER_CXXFLAGS -xc++ -E -v - < /dev/null 2>&1 > /dev/null`
-# extract from one line like 'LIBRARY_PATH=/one/path:/another/path:...'
-libdirs=`echo "$gccout" | sed -n -e 's/^LIBRARY_PATH=\(.*\)/\1/p'`
-DEFAULT_LIBDIRS=`IFS=${HOST_DIRLIST_SEP}; for i in $libdirs; do test -d "$i" && cd "$i" && pwd; done`
-# extract from indented lines between '#include <...> search starts here:' and 'End of search list.'
-DEFAULT_INCDIRS=`echo "$gccout" | $AWK '
-/^End of search/ { yup=0 }
+unset tty
+[ "$OPT_VERBOSE" = "yes" ] && tty=/dev/stderr
+
+eval `LC_ALL=C $TEST_COMPILER $SYSROOT_FLAG $TEST_COMPILER_CXXFLAGS -xc++ -E -v - < /dev/null 2>&1 > /dev/null | $AWK '
+BEGIN { ORS = ""; FS = "="; incs = 0; libs = 0; }
+function quote(s)
+{
+ # We only handle spaces
+ if (match(s, " ") != 0)
+ return "\\\\\"" s "\\\\\"";
+ return s;
+}
+
+# extract include paths from indented lines between
+# #include <...> search starts here:
+# and
+# End of search list.
+/^\#include </ { yup=1; print "DEFAULT_INCDIRS=\""; next }
+/^End of search/ { yup=0; print "\"\n" }
/ \(framework directory\)$/ { next }
-yup { print substr($0, 2) }
-/^\#include </ { yup=1 }
-'`
-test -z "$DEFAULT_LIBDIRS" && DEFAULT_LIBDIRS="/lib
-/usr/lib"
-test -z "$DEFAULT_INCDIRS" && DEFAULT_INCDIRS="/usr/include
-/usr/local/include"
+yup { print quote(substr($0, 2)) " "; ++incs }
+
+# extract from one line like LIBRARY_PATH=/one/path:/another/path:...
+$1 == "LIBRARY_PATH" {
+ libs = split($2, library_paths, ":");
+ print "DEFAULT_LIBDIRS=\"";
+ for (lib in library_paths)
+ print quote(library_paths[lib]) " ";
+ print "\"\n"
+}
+
+END {
+ if (incs == 0)
+ print "DEFAULT_INCDIRS=\"/usr/include /usr/local/include\"\n";
+ if (libs == 0)
+ print "DEFAULT_LIBDIRS=\"/lib /usr/lib\"\n";
+}' | tee $tty`
+unset tty
#setup the build parts
if [ -z "$CFG_BUILD_PARTS" ]; then
@@ -3514,6 +3502,7 @@ Configure options:
-qtlibinfix <infix> Renames all libQt*.so to libQt*<infix>.so.
-testcocoon ........ Instrument Qt with the TestCocoon code coverage tool.
+ -gcov .............. Instrument Qt with the GCov code coverage tool.
-D <string> ........ Add an explicit define to the preprocessor.
-I <string> ........ Add an explicit include path.
@@ -3546,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.
@@ -3714,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
@@ -4200,6 +4193,12 @@ cat > "$QTCONFFILE" <<EOF
[EffectivePaths]
Prefix=..
EOF
+if [ x"$relpath" != x"$outpath" ]; then
+ cat >> "$QTCONFFILE" <<EOF
+[EffectiveSourcePaths]
+Prefix=$relpath
+EOF
+fi
#-------------------------------------------------------------------------------
# write out device config before we run the test.
@@ -4474,8 +4473,7 @@ fi
# detect neon support
if [ "$CFG_ARCH" = "arm" ] && [ "${CFG_NEON}" = "auto" ]; then
- # The iOS toolchain has trouble building the pixman NEON draw-helpers
- if [ "$XPLATFORM_IOS" != "yes" ] && compileTest unix/neon "neon"; then
+ if compileTest unix/neon "neon"; then
CFG_NEON=yes
else
CFG_NEON=no
@@ -5274,29 +5272,6 @@ if [ "$CFG_TSLIB" != "no" ]; then
fi
fi
-# Check we actually have X11 :-)
-if compileTest x11/xlib "XLib"; then
- QT_CONFIG="$QT_CONFIG xlib"
-fi
-
-# auto-detect Xrender support
-if [ "$CFG_XRENDER" != "no" ]; then
- if compileTest x11/xrender "Xrender"; then
- CFG_XRENDER=yes
- QT_CONFIG="$QT_CONFIG xrender"
- else
- if [ "$CFG_XRENDER" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then
- echo "Xrender support cannot be enabled due to functionality tests!"
- echo " Turn on verbose messaging (-v) to $0 to see the final report."
- echo " If you believe this message is in error you may use the continue"
- echo " switch (-continue) to $0 to continue."
- exit 101
- else
- CFG_XRENDER=no
- fi
- fi
-fi
-
if [ "$CFG_XCB" != "no" ]; then
if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists "xcb >= 1.5" 2>/dev/null; then
QMAKE_CFLAGS_XCB="`$PKG_CONFIG --cflags xcb 2>/dev/null`"
@@ -5342,10 +5317,39 @@ if [ "$CFG_XCB" != "no" ]; then
fi
fi
+ # Check for X11. Eventually we should port everything to XCB,
+ # but for now the port is incomplete and Xlib is a requirement.
+ if compileTest x11/xlib "XLib"; then
+ QT_CONFIG="$QT_CONFIG xlib"
+ else
+ echo "The test for linking against Xlib failed!"
+ echo " You might need to install dependency packages."
+ echo " See src/plugins/platforms/xcb/README."
+ exit 1
+ fi
+
if compileTest qpa/xcb-xlib "xcb-xlib" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then
QT_CONFIG="$QT_CONFIG xcb-xlib"
fi
+ # auto-detect Xrender support
+ if [ "$CFG_XRENDER" != "no" ]; then
+ if compileTest x11/xrender "Xrender"; then
+ CFG_XRENDER=yes
+ QT_CONFIG="$QT_CONFIG xrender"
+ else
+ if [ "$CFG_XRENDER" = "yes" ] && [ "$CFG_CONFIGURE_EXIT_ON_ERROR" = "yes" ]; then
+ echo "Xrender support cannot be enabled due to functionality tests!"
+ echo " Turn on verbose messaging (-v) to $0 to see the final report."
+ echo " If you believe this message is in error you may use the continue"
+ echo " switch (-continue) to $0 to continue."
+ exit 101
+ else
+ CFG_XRENDER=no
+ fi
+ fi
+ fi
+
# auto-detect XInput2 support. Needed by xcb too.
if [ "$CFG_XINPUT2" != "no" ]; then
if compileTest x11/xinput2 "XInput2"; then
@@ -5589,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."
@@ -6003,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
@@ -6037,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"
@@ -6122,7 +6143,6 @@ fi
# supported and on which compilers.
#
canBuildQtConcurrent="yes"
-canUseV8Snapshot="yes"
case "$XPLATFORM" in
hpux-g++*)
@@ -6258,33 +6278,6 @@ if [ "$CFG_WEBKIT" = "debug" ]; then
fi
# ### Vestige
-QT_CONFIG="$QT_CONFIG v8"
-# Detect snapshot support
-if [ "$CFG_ARCH" != "$CFG_HOST_ARCH" ]; then
- case "$CFG_HOST_ARCH,$CFG_ARCH" in
- i386,arm)
- ;;
- *) canUseV8Snapshot="no"
- ;;
- esac
-else
- if [ -n "$_SBOX_DIR" -a "$CFG_ARCH" = "arm" ]; then
- # QEMU crashes when building inside Scratchbox with an ARM target
- canUseV8Snapshot="no"
- fi
-fi
-if [ "$CFG_V8SNAPSHOT" = "auto" ]; then
- CFG_V8SNAPSHOT="$canUseV8Snapshot"
-fi
-if [ "$CFG_V8SNAPSHOT" = "yes" -a "$canUseV8Snapshot" = "no" ]; then
- echo "Error: V8 snapshot was requested, but is not supported on this platform."
- exit 1
-fi
-if [ "$CFG_V8SNAPSHOT" = "yes" ]; then
- QT_CONFIG="$QT_CONFIG v8snapshot"
-fi
-
-# ### Vestige
if [ "$CFG_QML_DEBUG" = "no" ]; then
QCONFIG_FLAGS="$QCONFIG_FLAGS QT_QML_NO_DEBUGGER"
fi
@@ -6610,12 +6603,14 @@ fi
cat >>"$QTCONFIG.tmp" <<EOF
#configuration
CONFIG += $QTCONFIG_CONFIG
-QT_ARCH = $CFG_ARCH
-QT_HOST_ARCH = $CFG_HOST_ARCH
-QT_CPU_FEATURES = $CFG_CPUFEATURES
-QT_HOST_CPU_FEATURES = $CFG_HOST_CPUFEATURES
-QMAKE_DEFAULT_LIBDIRS = `echo "$DEFAULT_LIBDIRS" | sed 's,^,",;s,$,",' | tr '\n' ' '`
-QMAKE_DEFAULT_INCDIRS = `echo "$DEFAULT_INCDIRS" | sed 's,^,",;s,$,",' | tr '\n' ' '`
+host_build {
+ QT_ARCH = $CFG_HOST_ARCH
+ QT_TARGET_ARCH = $CFG_ARCH
+} else {
+ QT_ARCH = $CFG_ARCH
+ QMAKE_DEFAULT_LIBDIRS = $DEFAULT_LIBDIRS
+ QMAKE_DEFAULT_INCDIRS = $DEFAULT_INCDIRS
+}
QT_EDITION = $Edition
QT_CONFIG += $QT_CONFIG
@@ -6697,6 +6692,14 @@ if [ -n "$CFG_SKIP_MODULES" ]; then
echo "QT_SKIP_MODULES += $CFG_SKIP_MODULES" >> "$QTMODULE.tmp"
fi
+cat >>"$QTMODULE.tmp" <<EOF
+host_build {
+ QT_CPU_FEATURES.$CFG_HOST_ARCH = $CFG_HOST_CPUFEATURES
+} else {
+ QT_CPU_FEATURES.$CFG_ARCH = $CFG_CPUFEATURES
+}
+EOF
+
if [ -n "$QT_CFLAGS_PSQL" ]; then
echo "QT_CFLAGS_PSQL = $QT_CFLAGS_PSQL" >> "$QTMODULE.tmp"
fi
@@ -6867,6 +6870,9 @@ report_support " CUPS ..................." "$CFG_CUPS"
[ "$XPLATFORM_MINGW" = "yes" ] && \
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/dist/changes-5.2.0 b/dist/changes-5.2.0
new file mode 100644
index 0000000000..89d1a2d8c7
--- /dev/null
+++ b/dist/changes-5.2.0
@@ -0,0 +1,45 @@
+Qt 5.2 introduces many new features and improvements as well as bugfixes
+over the 5.1.x series. For more details, refer to the online documentation
+included in this distribution. The documentation is also available online:
+
+ http://qt-project.org/doc/qt-5.2
+
+The Qt version 5.2 series is binary compatible with the 5.1.x series.
+Applications compiled for 5.1 will continue to run with 5.2.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker:
+
+ http://bugreports.qt-project.org/
+
+Each of these identifiers can be entered in the bug tracker to obtain more
+information about a particular change.
+
+****************************************************************************
+* Library *
+****************************************************************************
+
+QtWidgets
+---------
+
+- QAbstractScrollArea now has a SizeAdjustPolicy. If it is set to AdjustToContents
+ it will make use of the new protected viewportSizeHint() (binary compatible since it
+ was reserved in Qt5). This function returns a suggested size based on contents.
+
+- QTreeView now has setTreePosition to allow the treestructure to show data from other
+ columns than logicalindex zero.
+
+- [QTBUG-4206] QTableView resizeToContents will now adjust to actual contents
+ and not just visible area. QHeaderView::setAutoResizePrecision() has been
+ introduced to control how precise the autoResize should be.
+
+- QFileDialog::setDefaultSuffix() removes leading dot characters.
+
+- QSizePolicy got a retainSizeWhenHidden attribute.
+
+QtCore
+------
+- [QTBUG-30250] QTime, QDateTime:
+ When calling QTime::toString(Qt::TextDate) and QTime::toString(Qt::ISODate),
+ milliseconds are now included in the returned string. This also applies to
+ QDateTime::toString(Qt::TextDate) and QDateTime::toString(ISODate).
diff --git a/doc/global/compat.qdocconf b/doc/global/compat.qdocconf
index ec4cfaa7c8..12d061a28a 100644
--- a/doc/global/compat.qdocconf
+++ b/doc/global/compat.qdocconf
@@ -1,5 +1,3 @@
-alias.include = input
-
macro.0 = "\\\\0"
macro.n = "\\\\n"
macro.r = "\\\\r"
diff --git a/doc/global/config.qdocconf b/doc/global/config.qdocconf
new file mode 100644
index 0000000000..2b3ca1d6ba
--- /dev/null
+++ b/doc/global/config.qdocconf
@@ -0,0 +1,12 @@
+#Include this file to inherit configuration related to Qt Project based modules.
+
+dita.metadata.default.author = Qt Project
+dita.metadata.default.permissions = all
+dita.metadata.default.publisher = Qt Project
+dita.metadata.default.copyryear = 2013
+dita.metadata.default.copyrholder = Digia Plc
+dita.metadata.default.audience = programmer
+
+#Set the main Qt index.html
+navigation.homepage = "Qt $QT_VER"
+buildversion = "Qt $QT_VERSION Reference Documentation"
diff --git a/doc/global/externalsites/rfc.qdoc b/doc/global/externalsites/rfc.qdoc
index bc6a1d66a2..37c71ab73e 100644
--- a/doc/global/externalsites/rfc.qdoc
+++ b/doc/global/externalsites/rfc.qdoc
@@ -77,3 +77,18 @@
\externalpage http://www.rfc-editor.org/rfc/rfc3986.txt
\title RFC 3986
*/
+
+/*!
+ \externalpage http://www.rfc-editor.org/rfc/rfc2822.txt
+ \title RFC 2822
+*/
+
+/*!
+ \externalpage http://www.rfc-editor.org/rfc/rfc1036.txt
+ \title RFC 1036
+*/
+
+/*!
+ \externalpage http://www.rfc-editor.org/rfc/rfc850.txt
+ \title RFC 850
+*/
diff --git a/doc/global/fileextensions.qdocconf b/doc/global/fileextensions.qdocconf
new file mode 100644
index 0000000000..ec47dc9c7f
--- /dev/null
+++ b/doc/global/fileextensions.qdocconf
@@ -0,0 +1,12 @@
+naturallanguage = en_US
+outputencoding = UTF-8
+sourceencoding = UTF-8
+
+examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp *.qml *.css"
+examples.imageextensions = "*.png *.jpg *.gif"
+
+headers.fileextensions = "*.ch *.h *.h++ *.hh *.hpp *.hxx"
+sources.fileextensions = "*.c++ *.cc *.cpp *.cxx *.mm *.qml *.qdoc"
+
+#include the external websites
+sourcedirs += externalsites
diff --git a/doc/global/html-config.qdocconf b/doc/global/html-config.qdocconf
new file mode 100644
index 0000000000..1560db8d98
--- /dev/null
+++ b/doc/global/html-config.qdocconf
@@ -0,0 +1,29 @@
+#Additional HTML settings
+
+HTML.nonavigationbar = "false"
+
+HTML.extraimages += template/images/arrow_bc.png \
+ template/images/home.png \
+ template/images/ico_out.png \
+ template/images/ico_note.png \
+ template/images/ico_note_attention.png \
+ template/images/btn_prev.png \
+ template/images/btn_next.png \
+ template/images/bullet_dn.png \
+ template/images/bullet_sq.png \
+ template/images/bgrContent.png \
+ template/images/logo.png
+
+#specify which files in the output directory should be packed into the qch file.
+#these files are assumed to be in each module's output directory."qtquick/images/ico_out.png" for example.
+qhp.extraFiles += images/arrow_bc.png \
+ images/home.png \
+ images/ico_out.png \
+ images/ico_note.png \
+ images/ico_note_attention.png \
+ images/btn_prev.png \
+ images/btn_next.png \
+ images/bullet_dn.png \
+ images/bullet_sq.png \
+ images/bgrContent.png \
+ images/logo.png
diff --git a/doc/global/html-footer.qdocconf b/doc/global/html-footer.qdocconf
new file mode 100644
index 0000000000..6c26dc7c29
--- /dev/null
+++ b/doc/global/html-footer.qdocconf
@@ -0,0 +1,30 @@
+#Default HTML footer for QDoc builds.
+
+HTML.footer = \
+ " </div>\n" \
+ " </div>\n" \
+ " </div>\n" \
+ " </div>\n" \
+ "</div>\n" \
+ "<div class=\"footer\">\n" \
+ " <div class=\"qt13a-copyright\" id=\"copyright\">\n" \
+ " <div class=\"qt13a-container\">\n" \
+ " <p>\n" \
+ " <acronym title=\"Copyright\">&copy;</acronym> 2013 Digia Plc and/or its\n" \
+ " subsidiaries. Documentation contributions included herein are the copyrights of\n" \
+ " their respective owners.</p>\n" \
+ " <p>\n" \
+ " The documentation provided herein is licensed under the terms of the\n" \
+ " <a href=\"http://www.gnu.org/licenses/fdl.html\">GNU Free Documentation\n" \
+ " License version 1.3</a> as published by the Free Software Foundation.</p>\n" \
+ " <p>\n" \
+ " Documentation sources may be obtained from <a href=\"http://www.qt-project.org\">\n" \
+ " www.qt-project.org</a>.</p>\n" \
+ " <p>\n" \
+ " Digia, Qt and their respective logos are trademarks of Digia Plc \n" \
+ " in Finland and/or other countries worldwide. All other trademarks are property\n" \
+ " of their respective owners. <a title=\"Privacy Policy\"\n" \
+ " href=\"http://en.gitorious.org/privacy_policy/\">Privacy Policy</a></p>\n" \
+ " </div>\n" \
+ " </div>\n" \
+ "</div>\n" \
diff --git a/doc/global/html-header-offline.qdocconf b/doc/global/html-header-offline.qdocconf
new file mode 100644
index 0000000000..d84f38fef8
--- /dev/null
+++ b/doc/global/html-header-offline.qdocconf
@@ -0,0 +1,31 @@
+#Default HTML header for QDoc builds.
+
+#specify the CSS file used by this template
+HTML.stylesheets = template/style/offline.css
+
+#for including files into the qch file
+qhp.extraFiles += style/offline.css
+
+HTML.headerstyles = \
+ " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/offline.css\" />\n"
+
+HTML.endheader = \
+ "</head>\n"
+
+HTML.postheader = \
+ "<body>\n" \
+ "<div class=\"header\" id=\"qtdocheader\">\n"\
+ " <div class=\"main\">\n" \
+ " <div class=\"main-rounded\">\n" \
+ " <div class=\"navigationbar\">\n"\
+ " <ul>\n"\
+
+
+
+HTML.postpostheader = \
+ " </ul>\n"\
+ " </div>\n" \
+ "</div>\n" \
+ "<div class=\"content\">\n" \
+ "<div class=\"line\">\n" \
+ "<div class=\"content mainContent\">\n" \
diff --git a/doc/global/html-header-online.qdocconf b/doc/global/html-header-online.qdocconf
new file mode 100644
index 0000000000..5c21644a39
--- /dev/null
+++ b/doc/global/html-header-online.qdocconf
@@ -0,0 +1,64 @@
+#HTML Header with Qt Project branding and online links
+
+HTML.stylesheets = template/style/online.css
+
+#for including files into the qch file. Relative to the outputdir of a QDoc build.
+# $QT_INSTALL_DOCS/qtquick/style/online.css for example
+qhp.extraFiles += style/online.css
+
+HTML.headerstyles = \
+ " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/online.css\" />\n"
+
+HTML.endheader = \
+ "</head>\n"
+
+HTML.postheader = \
+ "<body>\n" \
+ "<div class=\"header\" id=\"qtdocheader\"></div>\n" \
+ " <div class=\"nav\" id=\"qt13a-header\">\n" \
+ " <div class=\"qt13a-gradient\">\n" \
+ " <div class=\"qt13a-container qt13a-dynamicREMOVE\" >\n" \
+ " <div id=\"qt13a-register\">\n" \
+ " <a href=\"http://qt-project.org/\">Qt Home</a>\n" \
+ " <a href=\"https://bugreports.qt-project.org/\">Bug Tracker</a>\n" \
+ " <a href=\"https://codereview.qt-project.org/\">Code Review</a>\n" \
+ " </div>\n" \
+ " <div class=\"qt13a-sixCol\">\n" \
+ " <div id=\"qt13a-logo\">\n" \
+ " <a href=\"http://qt-project.org/\" class=\"qt13a-site-logo\">\n" \
+ " <img src=\"images/Qt-logo.png\" alt=\"Qt\"></img>\n" \
+ " </a>\n" \
+ " </div>\n" \
+ " <div id=\"qt13a-title_nav\">\n" \
+ " <div id=\"qt13a-title\">\n" \
+ " <p class=\"qt13a-title\">Qt Documentation Snapshots</p>\n" \
+ " </div>\n" \
+ " <div class=\"qt13a-nav\">\n" \
+ " <ul>\n" \
+ " <li>\n" \
+ " <a href=\"http://doc-snapshot.qt-project.org\">Snapshots</a>\n" \
+ " </li>\n" \
+ " <li>\n" \
+ " <a href=\"http://qt-project.org/doc\">Released</a>\n" \
+ " </li>\n" \
+ " <li>\n" \
+ " <a href=\"http://doc.qt.digia.com\">Archives</a>\n" \
+ " </li>\n" \
+ " </ul>\n" \
+ " </div>\n" \
+ " </div>\n" \
+ " </div>\n" \
+ " </div>\n" \
+ " </div>\n" \
+ " </div>\n" \
+ " <div class=\"main\">\n" \
+ " <div class=\"main-rounded\">\n" \
+ " <div class=\"navigationbar\">\n" \
+ " <ul>\n" \
+
+HTML.postpostheader = \
+ " </ul>\n" \
+ " </div>\n" \
+ "<div class=\"content\">\n" \
+ " <div class=\"line\">\n" \
+ " <div class=\"content mainContent\">\n" \
diff --git a/doc/global/qt-cpp-ignore.qdocconf b/doc/global/qt-cpp-defines.qdocconf
index 1f34f366cb..2e795e1439 100644
--- a/doc/global/qt-cpp-ignore.qdocconf
+++ b/doc/global/qt-cpp-defines.qdocconf
@@ -1,3 +1,21 @@
+versionsym = QT_VERSION_STR
+
+defines += Q_QDOC \
+ QT_.*_SUPPORT \
+ QT_.*_LIB \
+ QT_COMPAT \
+ QT_KEYPAD_NAVIGATION \
+ QT_NO_EGL \
+ QT3_SUPPORT \
+ Q_WS_.* \
+ Q_OS_.* \
+ Q_BYTE_ORDER \
+ QT_DEPRECATED \
+ QT_DEPRECATED_* \
+ Q_NO_USING_KEYWORD \
+ __cplusplus \
+ Q_COMPILER_INITIALIZER_LISTS
+
Cpp.ignoretokens += \
PHONON_EXPORT \
Q_AUTOTEST_EXPORT \
@@ -37,11 +55,13 @@ Cpp.ignoretokens += \
Q_LOCATION_EXPORT \
Q_MULTIMEDIA_EXPORT \
Q_NETWORK_EXPORT \
+ Q_NORETURN \
Q_OPENGL_EXPORT \
Q_OPENVG_EXPORT \
Q_OUTOFLINE_TEMPLATE \
Q_PRINTSUPPORT_EXPORT \
Q_QML_EXPORT \
+ Q_REQUIRED_RESULT \
Q_SCRIPT_EXPORT \
Q_SCRIPTTOOLS_EXPORT \
Q_SQL_EXPORT \
@@ -84,13 +104,15 @@ Cpp.ignoretokens += \
QT_END_NAMESPACE \
QT_FASTCALL \
QT_WIDGET_PLUGIN_EXPORT \
- QTBLUETOOTH_BEGIN_NAMESPACE \
- QTBLUETOOTH_END_NAMESAPCE \
- QTNFC_BEGIN_NAMESPACE \
- QTNFC_END_NAMESPACE \
+ QT_BEGIN_NAMESPACE_NFC \
+ QT_END_NAMESPACE_NFC \
+ QT_USE_NAMESPACE_NFC \
+ QT_BEGIN_NAMESPACE_BLUETOOTH \
+ QT_END_NAMESPACE_BLUETOOTH \
+ QT_USE_NAMESPACE_BLUETOOTH \
QWEBKIT_EXPORT
-Cpp.ignoredirectives = \
+Cpp.ignoredirectives += \
__attribute__ \
K_DECLARE_PRIVATE \
PHONON_HEIR \
diff --git a/doc/global/qt-defines.qdocconf b/doc/global/qt-defines.qdocconf
deleted file mode 100644
index 79b13eee92..0000000000
--- a/doc/global/qt-defines.qdocconf
+++ /dev/null
@@ -1,17 +0,0 @@
-versionsym = QT_VERSION_STR
-
-defines += Q_QDOC \
- QT_.*_SUPPORT \
- QT_.*_LIB \
- QT_COMPAT \
- QT_KEYPAD_NAVIGATION \
- QT_NO_EGL \
- QT3_SUPPORT \
- Q_WS_.* \
- Q_OS_.* \
- Q_BYTE_ORDER \
- QT_DEPRECATED \
- QT_DEPRECATED_* \
- Q_NO_USING_KEYWORD \
- __cplusplus \
- Q_COMPILER_INITIALIZER_LISTS
diff --git a/doc/global/qt-html-templates-offline.qdocconf b/doc/global/qt-html-templates-offline.qdocconf
index e9b2c6a7a8..cd8315aa9a 100644
--- a/doc/global/qt-html-templates-offline.qdocconf
+++ b/doc/global/qt-html-templates-offline.qdocconf
@@ -1,4 +1,10 @@
-HTML.nobreadcrumbs = "true"
+#include standard set of HTML header and footer.
+include(html-config.qdocconf)
+include(html-header-offline.qdocconf)
+include(html-footer.qdocconf)
+
+#uncomment if navigation bar is not wanted
+#HTML.nonavigationbar = "true"
HTML.stylesheets = template/style/offline.css
HTML.extraimages += template/images/ico_out.png \
@@ -20,40 +26,3 @@ qhp.extraFiles += style/offline.css \
images/bullet_dn.png \
images/bullet_sq.png \
images/bgrContent.png
-
-
-HTML.headerstyles = \
- " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/offline.css\" />\n"
-
-HTML.endheader = \
- "</head>\n" \
- "<body>\n" \
- "<div class=\"header\" id=\"qtdocheader\"></div>\n"\
- "<div class=\"content\">\n" \
- "<div class=\"line\">\n" \
- "<div class=\"content mainContent\">\n" \
-
-HTML.footer = \
- "</div>\n" \
- "</div>\n" \
- "</div>\n" \
- "<div class=\"footer\">\n" \
- " <p>\n" \
- " <acronym title=\"Copyright\">&copy;</acronym> 2013 Digia Plc and/or its\n" \
- " subsidiaries. Documentation contributions included herein are the copyrights of\n" \
- " their respective owners.</p>\n" \
- " <br />\n" \
- " <p>\n" \
- " The documentation provided herein is licensed under the terms of the\n" \
- " <a href=\"http://www.gnu.org/licenses/fdl.html\">GNU Free Documentation\n" \
- " License version 1.3</a> as published by the Free Software Foundation.</p>\n" \
- " <p>\n" \
- " Documentation sources may be obtained from <a href=\"http://www.qt-project.org\">\n" \
- " www.qt-project.org</a>.</p>\n" \
- " <br />\n" \
- " <p>\n" \
- " Digia, Qt and their respective logos are trademarks of Digia Plc \n" \
- " in Finland and/or other countries worldwide. All other trademarks are property\n" \
- " of their respective owners. <a title=\"Privacy Policy\"\n" \
- " href=\"http://en.gitorious.org/privacy_policy/\">Privacy Policy</a></p>\n" \
- "</div>\n" \
diff --git a/doc/global/qt-html-templates-online.qdocconf b/doc/global/qt-html-templates-online.qdocconf
index c794c47679..88abc3429b 100644
--- a/doc/global/qt-html-templates-online.qdocconf
+++ b/doc/global/qt-html-templates-online.qdocconf
@@ -1,4 +1,10 @@
-HTML.nobreadcrumbs = "true"
+#include standard set of HTML header and footer.
+include(html-config.qdocconf)
+include(html-header-online.qdocconf)
+include(html-footer.qdocconf)
+
+#uncomment if navigation bar is not wanted
+#HTML.nonavigationbar = "true"
HTML.stylesheets = template/style/online.css
HTML.extraimages += template/images/ico_out.png \
@@ -8,67 +14,10 @@ HTML.extraimages += template/images/ico_out.png \
template/images/btn_next.png \
template/images/bullet_dn.png \
template/images/bullet_sq.png \
- template/images/bgrContent.png
-
-HTML.headerstyles = \
- " <link rel=\"stylesheet\" type=\"text/css\" href=\"style/online.css\" />\n"
-
-HTML.endheader = \
- "</head>\n" \
- "<body>\n" \
- "<div class=\"header\" id=\"qtdocheader\"></div>\n" \
- " <header>\n" \
- " <div class=\"nav\">\n" \
- " <a href=\"http://qt-project.org/\">Qt Home</a>\n" \
- " <a href=\"https://bugreports.qt-project.org/\">Bug Tracker</a>\n" \
- " <a href=\"https://codereview.qt-project.org/\">Code Review</a>\n" \
- " </div>\n" \
- " <a href=\"http://qt-project.org/\">\n" \
- " <img src=\"http://doc-snapshot.qt-project.org/images/logo.png\" alt=\"Qt\"></img>\n" \
- " </a>\n" \
- " <div class=\"nav-title\">\n" \
- " <h1 >Qt Documentation Snapshots</h1>\n" \
- " <div class=\"nav-subtitle\">\n" \
- " --snapshots of unreleased Qt documentation\n" \
- " </div>\n" \
- " </div>\n" \
- " <div class=\"nav-main\">\n" \
- " <div class=\"nav-main-content\">\n" \
- " <a href=\"http://doc-snapshot.qt-project.org\">All Modules</a>\n" \
- " </div>\n" \
- " <div class=\"nav-main-content\">\n" \
- " <a href=\"http://qt-project.org/doc\">Qt Releases</a>\n" \
- " </div>\n" \
- " <div class=\"nav-main-content\">\n" \
- " <a href=\"http://doc.qt.digia.com\">Archives</a>\n" \
- " </div>\n" \
- " </div>\n" \
- "</header>\n" \
- "<div class=\"content\">\n" \
- " <div class=\"line\">\n" \
- " <div class=\"content mainContent\">\n" \
-
-HTML.footer = \
- " </div>\n" \
- " </div>\n" \
- "</div>\n" \
- "<div class=\"footer\">\n" \
- " <p>\n" \
- " <acronym title=\"Copyright\">&copy;</acronym> 2013 Digia Plc and/or its\n" \
- " subsidiaries. Documentation contributions included herein are the copyrights of\n" \
- " their respective owners.</p>\n" \
- " <br />\n" \
- " <p>\n" \
- " The documentation provided herein is licensed under the terms of the\n" \
- " <a href=\"http://www.gnu.org/licenses/fdl.html\">GNU Free Documentation\n" \
- " License version 1.3</a> as published by the Free Software Foundation.</p>\n" \
- " <p>\n" \
- " Documentation sources may be obtained from <a href=\"http://www.qt-project.org\">\n" \
- " www.qt-project.org</a>.</p>\n" \
- " <br />\n" \
- " <p>\n" \
- " Digia, Qt and their respective logos are trademarks of Digia Plc \n" \
- " in Finland and/or other countries worldwide. All other trademarks are property\n" \
- " of their respective owners. <a title=\"Privacy Policy\"\n" \
- " href=\"http://en.gitorious.org/privacy_policy/\">Privacy Policy</a></p>\n" \
- "</div>\n" \
+ template/images/bgrContent.png \
+ template/images/Qt-logo.png \
+ template/images/Qt-dark_gradient.png \
+ template/images/Qt-footer-bg.jpg \
+ template/images/Qt-footer_shadow.png \
+ template/images/Qt-gradient.png \
+ template/images/Qt-header-bg.jpg
diff --git a/doc/global/qt-module-defaults-offline.qdocconf b/doc/global/qt-module-defaults-offline.qdocconf
new file mode 100644
index 0000000000..bdca212960
--- /dev/null
+++ b/doc/global/qt-module-defaults-offline.qdocconf
@@ -0,0 +1,13 @@
+#The default configuration for a Qt 5 module, including Add-Ons and Tools.
+#Include this file for a standard Qt 5 module; builds with the offline style.
+
+#include standard set of macros and C++ defines and ignores
+include(macros.qdocconf)
+include(qt-cpp-defines.qdocconf)
+include(compat.qdocconf)
+include(manifest-meta.qdocconf)
+include(fileextensions.qdocconf)
+include(qt-html-templates-offline.qdocconf)
+
+#extra configuration data such as file extensions
+include(config.qdocconf)
diff --git a/doc/global/qt-module-defaults-online.qdocconf b/doc/global/qt-module-defaults-online.qdocconf
index 93ecae16fa..258295b4f9 100644
--- a/doc/global/qt-module-defaults-online.qdocconf
+++ b/doc/global/qt-module-defaults-online.qdocconf
@@ -1,32 +1,14 @@
+#The online onfiguration for a Qt 5 module, including Add-Ons and Tools.
+#Online version contains a different header.
+#Include this file for a standard Qt 5 module; builds with the online style.
+
+#include standard set of macros and C++ defines and ignores
include(macros.qdocconf)
-include(qt-cpp-ignore.qdocconf)
-include(qt-defines.qdocconf)
-include(qt-html-templates-online.qdocconf)
+include(qt-cpp-defines.qdocconf)
include(compat.qdocconf)
+include(manifest-meta.qdocconf)
+include(fileextensions.qdocconf)
+include(qt-html-templates-online.qdocconf)
-dita.metadata.default.author = Qt Project
-dita.metadata.default.permissions = all
-dita.metadata.default.publisher = Qt Project
-dita.metadata.default.copyryear = 2013
-dita.metadata.default.copyrholder = Digia Plc
-dita.metadata.default.audience = programmer
-
-naturallanguage = en_US
-outputencoding = UTF-8
-sourceencoding = UTF-8
-
-examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp *.qml *.css"
-examples.imageextensions = "*.png *.jpg *.gif"
-
-headers.fileextensions = "*.ch *.h *.h++ *.hh *.hpp *.hxx"
-sources.fileextensions = "*.c++ *.cc *.cpp *.cxx *.mm *.qml *.qdoc"
-
-versionsym = QT_VERSION_STR
-
-macro.raisedaster.HTML = "<sup>*</sup>"
-
-#for including files into the qch file
-qhp.extraFiles += template/style/online.css
-
-#include the external websites
-sourcedirs += externalsites
+#extra configuration data DITA information
+include(config.qdocconf)
diff --git a/doc/global/qt-module-defaults.qdocconf b/doc/global/qt-module-defaults.qdocconf
index 0365d5a6cd..8d0665ef41 100644
--- a/doc/global/qt-module-defaults.qdocconf
+++ b/doc/global/qt-module-defaults.qdocconf
@@ -1,30 +1,7 @@
-include(macros.qdocconf)
-include(qt-cpp-ignore.qdocconf)
-include(qt-defines.qdocconf)
-include(qt-html-templates-offline.qdocconf)
-include(compat.qdocconf)
-include(manifest-meta.qdocconf)
+#The default configuration for a Qt 5 module, including Add-Ons and Tools.
+#Include this file for a standard Qt 5 module. This file is provided for
+#compatibility reasons.
-dita.metadata.default.author = Qt Project
-dita.metadata.default.permissions = all
-dita.metadata.default.publisher = Qt Project
-dita.metadata.default.copyryear = 2013
-dita.metadata.default.copyrholder = Digia Plc
-dita.metadata.default.audience = programmer
-
-naturallanguage = en_US
-outputencoding = UTF-8
-sourceencoding = UTF-8
-
-examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp *.qml *.css"
-examples.imageextensions = "*.png *.jpg *.gif"
-
-headers.fileextensions = "*.ch *.h *.h++ *.hh *.hpp *.hxx"
-sources.fileextensions = "*.c++ *.cc *.cpp *.cxx *.mm *.qml *.qdoc"
-
-versionsym = QT_VERSION_STR
-
-macro.raisedaster.HTML = "<sup>*</sup>"
-
-#include the external websites
-sourcedirs += externalsites
+#The default is the offline style. The alternate style is in
+#qt-module-defaults-online.qdocconf
+include(qt-module-defaults-offline.qdocconf)
diff --git a/doc/global/template/images/Qt-dark_gradient.png b/doc/global/template/images/Qt-dark_gradient.png
new file mode 100644
index 0000000000..6ae10f37bf
--- /dev/null
+++ b/doc/global/template/images/Qt-dark_gradient.png
Binary files differ
diff --git a/doc/global/template/images/Qt-footer-bg.jpg b/doc/global/template/images/Qt-footer-bg.jpg
new file mode 100644
index 0000000000..c0ff209b7e
--- /dev/null
+++ b/doc/global/template/images/Qt-footer-bg.jpg
Binary files differ
diff --git a/doc/global/template/images/Qt-footer_shadow.png b/doc/global/template/images/Qt-footer_shadow.png
new file mode 100644
index 0000000000..5a7063dfee
--- /dev/null
+++ b/doc/global/template/images/Qt-footer_shadow.png
Binary files differ
diff --git a/doc/global/template/images/Qt-gradient.png b/doc/global/template/images/Qt-gradient.png
new file mode 100644
index 0000000000..aa38227cbb
--- /dev/null
+++ b/doc/global/template/images/Qt-gradient.png
Binary files differ
diff --git a/doc/global/template/images/Qt-header-bg.jpg b/doc/global/template/images/Qt-header-bg.jpg
new file mode 100644
index 0000000000..c9a6d96db4
--- /dev/null
+++ b/doc/global/template/images/Qt-header-bg.jpg
Binary files differ
diff --git a/doc/global/template/images/Qt-logo.png b/doc/global/template/images/Qt-logo.png
new file mode 100644
index 0000000000..64c1c4aaa3
--- /dev/null
+++ b/doc/global/template/images/Qt-logo.png
Binary files differ
diff --git a/doc/global/template/images/arrow_bc.png b/doc/global/template/images/arrow_bc.png
new file mode 100644
index 0000000000..f2a83a5740
--- /dev/null
+++ b/doc/global/template/images/arrow_bc.png
Binary files differ
diff --git a/doc/global/template/images/logo.png b/doc/global/template/images/logo.png
new file mode 100644
index 0000000000..1e7ed4cf21
--- /dev/null
+++ b/doc/global/template/images/logo.png
Binary files differ
diff --git a/doc/global/template/style/offline.css b/doc/global/template/style/offline.css
index 0e4dd5e9a4..f573633331 100644
--- a/doc/global/template/style/offline.css
+++ b/doc/global/template/style/offline.css
@@ -1,43 +1,55 @@
-body{
-font: normal 400 14px/1.2 Arial;
-margin-top:85px;
-font-family: Arial, Helvetica;
-color:#313131;
-text-align:justify;
-margin-left:5px;
-margin-right:5px;
+body {
+ font: normal 400 14px/1.2 Arial;
+ margin-top: 85px;
+ font-family: Arial, Helvetica;
+ color: #313131;
+ text-align: justify;
+ margin-left: 5px;
+ margin-right: 5px;
}
p {
-line-height: 20px;
+ line-height: 20px
}
-img{
--moz-box-shadow: 3px 3px 3px #ccc;
--webkit-box-shadow: 3px 3px 3px #ccc;
-box-shadow: 3px 3px 3px #ccc;
-border:#8E8D8D 2px solid;
-margin-left:0px;
-max-width: 800px;
-height: auto
+
+img {
+ -moz-box-shadow: 3px 3px 3px #ccc;
+ -webkit-box-shadow: 3px 3px 3px #ccc;
+ box-shadow: 3px 3px 3px #ccc;
+ border: #8E8D8D 2px solid;
+ margin-left: 0px;
+ max-width: 800px;
+ height: auto;
}
-.content{}
+.content {
-.descr{
-margin-top:35px;
-/*max-width: 75%;*/
-margin-left:5px;
-text-align:justify;
-vertical-align:top;
}
-.name{
-max-width: 75%;
-font-weight:100;
+.content .indexboxcont li {
+ font: normal bold 13px/1 Verdana
+ }
+
+.content .normallist li {
+ font: normal 13px/1 Verdana
+ }
+
+.descr {
+ margin-top: 35px;
+ /*max-width: 75%;*/
+ margin-left: 5px;
+ text-align: justify;
+ vertical-align: top;
}
-tt{
-text-align:left;}
+.name {
+ max-width: 75%;
+ font-weight: 100;
+}
+
+tt {
+ text-align: left
+}
/*
-----------
@@ -45,25 +57,25 @@ links
-----------
*/
-a:link{
-color: #007330;
-text-decoration: none;
-text-align:left;
+a:link {
+ color: #007330;
+ text-decoration: none;
+ text-align: left;
}
-a:hover{
-color: #44a51c;
-text-align:left;
+a:hover {
+ color: #44a51c;
+ text-align: left;
}
-a:visited{
-color: #007330;
-text-align:left;
+a:visited {
+ color: #007330;
+ text-align: left;
}
-a:visited:hover{
-color: #44a51c;
-text-align:left;
+a:visited:hover {
+ color: #44a51c;
+ text-align: left;
}
/*
@@ -71,19 +83,19 @@ text-align:left;
offline viewing: HTML links display an icon
-----------
*/
-a[href*="http://"], a[href*="ftp://"],a[href*="https://"]
-{
-text-decoration: none;
-background-image:url(../images/ico_out.png);
-background-repeat:no-repeat;
-background-position:left;
-padding-left:20px;
-text-align:left;
+
+a[href*="http://"], a[href*="ftp://"], a[href*="https://"] {
+ text-decoration: none;
+ background-image: url(../images/ico_out.png);
+ background-repeat: no-repeat;
+ background-position: left;
+ padding-left: 20px;
+ text-align: left;
}
-.flags{
-text-decoration:none;
-text-height:24px;
+.flags {
+ text-decoration: none;
+ text-height: 24px;
}
/*
@@ -91,36 +103,37 @@ text-height:24px;
NOTE styles
-------------------------------
*/
-.notetitle, .tiptitle, .fastpathtitle{
-font-weight:bold;
+
+.notetitle, .tiptitle, .fastpathtitle {
+ font-weight: bold
}
-.attentiontitle,.cautiontitle,.dangertitle,.importanttitle,.remembertitle,.restrictiontitle{
-font-weight:bold;
+.attentiontitle, .cautiontitle, .dangertitle, .importanttitle, .remembertitle, .restrictiontitle {
+ font-weight: bold
}
-.note,.tip,.fastpath{
-background: #F2F2F2 url(../images/ico_note.png);
-background-repeat: no-repeat;
-background-position: top left;
-padding:5px;
-padding-left:40px;
-padding-bottom:10px;
-border:#999 1px dotted;
-color:#666666;
-margin:5px;
+.note, .tip, .fastpath {
+ background: #F2F2F2 url(../images/ico_note.png);
+ background-repeat: no-repeat;
+ background-position: top left;
+ padding: 5px;
+ padding-left: 40px;
+ padding-bottom: 10px;
+ border: #999 1px dotted;
+ color: #666666;
+ margin: 5px;
}
-.attention,.caution,.danger,.important,.remember,.restriction{
-background: #F2F2F2 url(../images/ico_note_attention.png);
-background-repeat:no-repeat;
-background-position:top left;
-padding:5px;
-padding-left:40px;
-padding-bottom:10px;
-border:#999 1px dotted;
-color:#666666;
-margin:5px;
+.attention, .caution, .danger, .important, .remember, .restriction {
+ background: #F2F2F2 url(../images/ico_note_attention.png);
+ background-repeat: no-repeat;
+ background-position: top left;
+ padding: 5px;
+ padding-left: 40px;
+ padding-bottom: 10px;
+ border: #999 1px dotted;
+ color: #666666;
+ margin: 5px;
}
/*
@@ -129,58 +142,127 @@ Top navigation
-------------------------------
*/
-.qtref{
-display: block;
-position: relative;
-height:15px;
-z-index: 1;
-font-size:11px;
-padding-right:10px;
-float:right;
-}
-
-.naviNextPrevious{
-clear: both;
-display: block;
-position: relative;
-text-align: right;
-top: -47px;
-float:right;
-height:20px;
-z-index:1;
-padding-right:10px;
-padding-top:2px;
-vertical-align:top;
-margin:0px;
-}
-
-
-.naviNextPrevious > a:first-child{
-background-image:url(../images/btn_prev.png);
-background-repeat:no-repeat;
-background-position:left;
-padding-left:20px;
-height:20px;
-padding-left:20px;
-}
-
-.naviNextPrevious > a:last-child{
-background-image:url(../images/btn_next.png);
-background-repeat:no-repeat;
-background-position:right;
-padding-right:20px;
-height:20px;
-margin-left:30px;
-}
+.qtref {
+ display: block;
+ position: relative;
+ height: 15px;
+ z-index: 1;
+ font-size: 11px;
+ padding-right: 10px;
+ float: right;
+}
+
+.naviNextPrevious {
+ clear: both;
+ display: block;
+ position: relative;
+ text-align: right;
+ top: -47px;
+ float: right;
+ height: 20px;
+ z-index: 1;
+ padding-right: 10px;
+ padding-top: 2px;
+ vertical-align: top;
+ margin: 0px;
+}
+
+.naviNextPrevious > a:first-child {
+ background-image: url(../images/btn_prev.png);
+ background-repeat: no-repeat;
+ background-position: left;
+ padding-left: 20px;
+ height: 20px;
+ padding-left: 20px;
+ }
+
+.naviNextPrevious > a:last-child {
+ background-image: url(../images/btn_next.png);
+ background-repeat: no-repeat;
+ background-position: right;
+ padding-right: 20px;
+ height: 20px;
+ margin-left: 30px;
+ }
+
/*
-----------
footer and license
-----------
*/
-.footer{
-text-align:center
+
+.footer {
+ text-align: center
+}
+
+.navigationbar {
+ display: block;
+ position: relative;
+ top: -20px;
+ /*border-top: 2px solid #ffffff;*/
+ border-bottom: 1px solid #cecece;
+ background-color: #F2F2F2;
+ z-index: 1;
+ height: 20px;
+ padding-left: 7px;
+ margin: 0px;
+ padding-top: 2px;
+ margin-left: -5px;
+ margin-right: -5px;
+}
+
+.navigationbar .first {
+ background: url(../images/home.png);
+ background-position: left;
+ background-repeat: no-repeat;
+ padding-left: 20px;
+ }
+
+.navigationbar ul {
+ margin: 0px;
+ padding: 0px;
+ }
+
+ .navigationbar ul li {
+ list-style-type: none;
+ padding-top: 2px;
+ padding-left: 4px;
+ margin: 0;
+ height: 20px;
+ }
+
+.navigationbar li {
+ float: left
+ }
+
+ .navigationbar li a {
+ display: block;
+ text-decoration: none;
+ background: url(../images/arrow_bc.png);
+ background-repeat: no-repeat;
+ background-position: right;
+ padding-right: 17px;
+ }
+
+/*
+-----------
+footer and license
+-----------
+*/
+
+.footer {
+ text-align: center
+}
+
+#buildversion {
+ font-style: italic;
+ font-size: small;
+ float: right;
+ margin-right: 5px;
}
+/*
+
/* table of content
no display
*/
@@ -191,181 +273,177 @@ headers
-----------
*/
-
-@media screen{
-.title{
-color:#313131;
-font-size: 18px;
-font-weight: normal;
-left: 0;
-padding-bottom: 20px;
-padding-left: 10px;
-padding-top: 20px;
-position: absolute;
-right: 0;
-top: 0;
-background-color:#E6E6E6;
-border-bottom: 1px #CCC solid;
-border-top: 2px #CCC solid;
-font-weight:bold;
-margin-left:0px;
-margin-right:0px;
-}
+@media screen {
+ .title {
+ color: #313131;
+ font-size: 18px;
+ font-weight: normal;
+ left: 0;
+ padding-bottom: 20px;
+ padding-left: 10px;
+ padding-top: 20px;
+ position: absolute;
+ right: 0;
+ top: 0;
+ background-color: #E6E6E6;
+ border-bottom: 1px #CCC solid;
+ border-top: 2px #CCC solid;
+ font-weight: bold;
+ margin-left: 0px;
+ margin-right: 0px;
+ }
}
h1 {
-margin: 0;
+ margin: 0
}
h2, p.h2 {
-font: 500 16px/1.2 Arial;
-font-weight:100;
-background-color:#F2F3F4;
-padding:4px;
-margin-bottom:30px;
-margin-top:30px;
-border-top:#E0E0DE 1px solid;
-border-bottom: #E0E0DE 1px solid;
-max-width: 99%;
-overflow: hidden;
-}
-
-h3{
-
-font: 500 14px/1.2 Arial;
-font-weight:100;
-text-decoration:underline;
-margin-bottom:30px;
-margin-top:30px;
-}
-
-h3.fn,span.fn{
-border-width: 1px;
-border-style: solid;
-border-color: #E6E6E6;
--moz-border-radius: 7px 7px 7px 7px;
--webkit-border-radius: 7px 7px 7px 7px;
-border-radius: 7px 7px 7px 7px;
-background-color: #F6F6F6;
-word-spacing: 3px;
-padding: 5px 5px;
-text-decoration:none;
-font-weight:bold;
-max-width:75%;
-font-size:14px;
-margin:0px;
-margin-top:45px;
-
-}
-
-.name{
-color:#1A1A1A;
-}
-.type{
-color:#808080;
+ font: 500 16px/1.2 Arial;
+ font-weight: 100;
+ background-color: #F2F3F4;
+ padding: 4px;
+ margin-bottom: 30px;
+ margin-top: 30px;
+ border-top: #E0E0DE 1px solid;
+ border-bottom: #E0E0DE 1px solid;
+ max-width: 99%;
+ overflow: hidden;
+}
+
+h3 {
+ font: 500 14px/1.2 Arial;
+ font-weight: 100;
+ text-decoration: underline;
+ margin-bottom: 30px;
+ margin-top: 30px;
+}
+
+h3.fn, span.fn {
+ border-width: 1px;
+ border-style: solid;
+ border-color: #E6E6E6;
+ -moz-border-radius: 7px 7px 7px 7px;
+ -webkit-border-radius: 7px 7px 7px 7px;
+ border-radius: 7px 7px 7px 7px;
+ background-color: #F6F6F6;
+ word-spacing: 3px;
+ padding: 5px 5px;
+ text-decoration: none;
+ font-weight: bold;
+ max-width: 75%;
+ font-size: 14px;
+ margin: 0px;
+ margin-top: 45px;
+}
+
+.name {
+ color: #1A1A1A
+}
+
+.type {
+ color: #808080
}
-
-
@media print {
-.title {
-color:#0066CB;
-font-family:Arial, Helvetica;
-font-size: 32px;
-font-weight: normal;
-left: 0;
-position: absolute;
-right: 0;
-top: 0;
-}
+ .title {
+ color: #0066CB;
+ font-family: Arial, Helvetica;
+ font-size: 32px;
+ font-weight: normal;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+ }
}
-
/*
-----------------
table styles
-----------------
*/
+
.table img {
-border:none;
-margin-left:0px;
--moz-box-shadow:0px 0px 0px #fff;
--webkit-box-shadow: 0px 0px 0px #fff;
-box-shadow: 0px 0px 0px #fff;
+ border: none;
+ margin-left: 0px;
+ -moz-box-shadow: 0px 0px 0px #fff;
+ -webkit-box-shadow: 0px 0px 0px #fff;
+ box-shadow: 0px 0px 0px #fff;
}
/* table with border alternative colours*/
- table,pre{
--moz-border-radius: 7px 7px 7px 7px;
--webkit-border-radius: 7px 7px 7px 7px;
- border-radius: 7px 7px 7px 7px;
-background-color: #F6F6F6;
-border: 1px solid #E6E6E6;
-border-collapse: separate;
-margin-bottom: 25px;
-margin-left: 15px;
-font-size: 12px;
-line-height: 1.2;
-}
-
-
-table th{
-text-align:left;
-padding-left:20px;
-}
-
-table td {
-padding: 3px 15px 3px 20px;
-border-bottom:#CCC dotted 1px;
-}
-table p { margin:0px;}
-
-table tr.even {
-background-color: white;
-color: #66666E;
-}
-
-table tr.odd {
-background-color: #F6F6F6;
-color: #66666E;
-}
-
-
-table thead {
-text-align:left;
-padding-left:20px;
-background-color:#e1e0e0;
-border-left:none;
-border-right:none;
-}
-
-table thead th {
-padding-top:5px;
-padding-left:10px;
-padding-bottom:5px;
-border-bottom: 2px solid #D1D1D1;
-padding-right:10px;
-}
-
+table, pre {
+ -moz-border-radius: 7px 7px 7px 7px;
+ -webkit-border-radius: 7px 7px 7px 7px;
+ border-radius: 7px 7px 7px 7px;
+ background-color: #F6F6F6;
+ border: 1px solid #E6E6E6;
+ border-collapse: separate;
+ margin-bottom: 25px;
+ margin-left: 15px;
+ font-size: 12px;
+ line-height: 1.2;
+}
+
+ table tr.even {
+ background-color: white;
+ color: #66666E;
+ }
+
+ table tr.odd {
+ background-color: #F6F6F6;
+ color: #66666E;
+ }
+
+ table thead {
+ text-align: left;
+ padding-left: 20px;
+ background-color: #e1e0e0;
+ border-left: none;
+ border-right: none;
+ }
+
+ table thead th {
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-bottom: 5px;
+ border-bottom: 2px solid #D1D1D1;
+ padding-right: 10px;
+ }
+
+ table th {
+ text-align: left;
+ padding-left: 20px;
+ }
+
+ table td {
+ padding: 3px 15px 3px 20px;
+ border-bottom: #CCC dotted 1px;
+ }
+
+ table p {
+ margin: 0px
+ }
/* table bodless & white*/
.borderless {
-border-radius: 0px 0px 0px 0px;
-background-color: #fff;
-border: 1px solid #fff;
+ border-radius: 0px 0px 0px 0px;
+ background-color: #fff;
+ border: 1px solid #fff;
}
.borderless tr {
-background-color: #FFF;
-color: #66666E;
-}
+ background-color: #FFF;
+ color: #66666E;
+ }
.borderless td {
-border:none;
-border-bottom:#fff dotted 1px;
-}
+ border: none;
+ border-bottom: #fff dotted 1px;
+ }
/*
-----------
@@ -373,264 +451,249 @@ List
-----------
*/
-ul{
-padding-bottom:2px;
+ul {
+ padding-bottom: 2px
}
li {
-margin-bottom: 10px;
-padding-left: 8px;
-list-style:outside;
-list-style-type:square;
-text-align:left;
+ margin-bottom: 10px;
+ padding-left: 8px;
+ list-style: outside;
+ list-style-type: square;
+ text-align: left;
}
-
-ol{
-margin:10px;
-padding:0;
+ol {
+ margin: 10px;
+ padding: 0;
}
-ol > li{
-margin-left: 30px;
-padding-left:8px;
-list-style:decimal;
-}
+ ol > li {
+ margin-left: 30px;
+ padding-left: 8px;
+ list-style: decimal;
+ }
-.centerAlign{
-text-align: left;
+.centerAlign {
+ text-align: left
}
-.cpp{
-display: block;
-margin: 10px;
-overflow: auto;
-padding: 20px 20px 20px 20px;
+.cpp {
+ display: block;
+ margin: 10px;
+ overflow: auto;
+ padding: 20px 20px 20px 20px;
}
-.js{
-display: block;
-margin: 10px;
-overflow: auto;
-padding: 20px 20px 20px 20px;
+.js {
+ display: block;
+ margin: 10px;
+ overflow: auto;
+ padding: 20px 20px 20px 20px;
}
-.footer{
-margin-top: 50px;
-padding-left:5px;
-margin-bottom: 10px;
-font-size:10px;
-border-top: 1px solid #999;
-padding-top:11px;
+.footer {
+ margin-top: 50px;
+ padding-left: 5px;
+ margin-bottom: 10px;
+ font-size: 10px;
+ border-top: 1px solid #999;
+ padding-top: 11px;
}
-.footerNavi{
-width:auto;
-text-align:right;
-margin-top:50px;
-z-index:1;
+.footerNavi {
+ width: auto;
+ text-align: right;
+ margin-top: 50px;
+ z-index: 1;
}
-.memItemLeft{
-padding-right: 3px;
+.memItemLeft {
+ padding-right: 3px
}
-.memItemRight{
-padding: 3px 15px 3px 0;
+.memItemRight {
+ padding: 3px 15px 3px 0
}
-.qml{
-display: block;
-margin: 10;
-overflow: auto;
-padding: 20px 20px 20px 20px;
+.qml {
+ display: block;
+ margin: 10px;
+ overflow: auto;
+ padding: 20px 20px 20px 20px;
}
-.qmldefault{
-padding-left: 5px;
-float: right;
-color: red;
+.qmldefault {
+ padding-left: 5px;
+ float: right;
+ color: red;
}
-.qmlreadonly{
-padding-left: 5px;
-float: right;
-color: #254117;
+.qmlreadonly {
+ padding-left: 5px;
+ float: right;
+ color: #254117;
}
-.rightAlign{
-padding: 3px 5px 3px 10px;
-text-align: right;
+.rightAlign {
+ padding: 3px 5px 3px 10px;
+ text-align: right;
}
.qmldoc {
-margin-left: 15px;
+ margin-left: 15px
}
+
/*
-----------
Content table
-----------
*/
-@media print{
-.toc {
-float: right;
-clear: right;
-padding-bottom: 10px;
-padding-top: 50px;
-width: 100%;
-background-image:url(../images/bgrContent.png);
-background-position:top;
-background-repeat:no-repeat;
-}
+@media print {
+ .toc {
+ float: right;
+ clear: right;
+ padding-bottom: 10px;
+ padding-top: 50px;
+ width: 100%;
+ background-image: url(../images/bgrContent.png);
+ background-position: top;
+ background-repeat: no-repeat;
+ }
}
-@media screen{
-.toc{
-float:right;
-clear: right;
-vertical-align:top;
--moz-border-radius: 7px 7px 7px 7px;
--webkit-border-radius: 7px 7px 7px 7px;
-border-radius: 7px 7px 7px 7px;
- background:#FFF url(../images/bgrContent.png);
-background-position:top;
-background-repeat:repeat-x;
-border: 1px solid #E6E6E6;
-padding-left:5px;
-padding-bottom:10px;
-height: auto;
-width: 200px;
-text-align:left;
-margin-left:20px;
-}
+@media screen {
+ .toc {
+ float: right;
+ clear: right;
+ vertical-align: top;
+ -moz-border-radius: 7px 7px 7px 7px;
+ -webkit-border-radius: 7px 7px 7px 7px;
+ border-radius: 7px 7px 7px 7px;
+ background: #FFF url('../images/bgrContent.png');
+ background-position: top;
+ background-repeat: repeat-x;
+ border: 1px solid #E6E6E6;
+ padding-left: 5px;
+ padding-bottom: 10px;
+ height: auto;
+ width: 200px;
+ text-align: left;
+ margin-left: 20px;
+ }
}
-.toc h3{
-text-decoration:none;
-}
-.toc h3{font: 500 14px/1.2 Arial;
-font-weight:100;
-padding:0px;
-margin:0px;
-padding-top:5px;
-padding-left:5px;
+.toc h3 {
+ text-decoration: none
}
-
-.toc ul{
-padding-left:10px;
-padding-right:5px;
+.toc h3 {
+ font: 500 14px/1.2 Arial;
+ font-weight: 100;
+ padding: 0px;
+ margin: 0px;
+ padding-top: 5px;
+ padding-left: 5px;
}
-.toc ul li{
-margin-left:15px;
-list-style-image:url(../images/bullet_dn.png);
-marker-offset: 0px;
-margin-bottom:8px;
-padding-left:0px;
+.toc ul {
+ padding-left: 10px;
+ padding-right: 5px;
}
-.toc .level1{
-border:none;}
+.toc ul li {
+ margin-left: 15px;
+ list-style-image: url(../images/bullet_dn.png);
+ marker-offset: 0px;
+ margin-bottom: 8px;
+ padding-left: 0px;
+ }
-.toc .level2{
-border:none;
-margin-left: 25px;
+.toc .level1 {
+ border: none
}
-.level3{
-border:none;
-margin-left: 30px;
+.toc .level2 {
+ border: none;
+ margin-left: 25px;
}
-.clearfix{
-clear:both;}
+.level3 {
+ border: none;
+ margin-left: 30px;
+}
-/* start index box */
-.indexbox
-{
-width: 100%;
-display:inline-block;
+.clearfix {
+ clear: both
}
-.indexboxcont
-{
-display: block;
+/* start index box */
+.indexbox {
+ width: 100%;
+ display: inline-block;
}
-.indexboxcont .section
-{
-display: inline-block;
-width: 49%;
-*width:42%;
-_width:42%;
-padding:0 2% 0 1%;
-vertical-align:top;
-}
+.indexbox .indexIcon {
+ width: 11%
+ }
-.indexboxcont .indexIcon
-{
-width: 11%;
-*width:18%;
-_width:18%;
-overflow:hidden;
-}
+ .indexbox .indexIcon span {
+ display: block
+ }
-.indexboxcont .section {
- float: left;
+.indexboxcont {
+ display: block
}
-.indexboxcont .section p
-{
-padding-top: 20px;
-padding-bottom: 20px;
-}
-.indexboxcont .sectionlist
-{
-display: inline-block;
-vertical-align:top;
-width: 32.5%;
-padding: 0;
-}
-.indexboxcont .sectionlist ul
-{
-margin-bottom: 20px;
-}
+.indexboxcont .sectionlist {
+ display: inline-block;
+ vertical-align: top;
+ width: 32.5%;
+ padding: 0;
+ }
-.indexboxcont .sectionlist ul li
-{
-line-height: 1.5;
-}
+ .indexboxcont .sectionlist ul {
+ margin-bottom: 20px
+ }
-.content .indexboxcont li
-{
-font: normal bold 13px/1 Verdana;
-}
+ .indexboxcont .sectionlist ul li {
+ line-height: 1.5
+ }
-.content .normallist li
-{
-font: normal 13px/1 Verdana;
-}
+.indexboxcont .indexIcon {
+ width: 11%;
+ *width: 18%;
+ _width: 18%;
+ overflow: hidden;
+ }
-.indexbox .indexIcon {
-width: 11%;
-}
+.indexboxcont .section {
+ display: inline-block;
+ width: 49%;
+ *width: 42%;
+ _width: 42%;
+ padding: 0 2% 0 1%;
+ vertical-align: top;
+ }
+
+ .indexboxcont .section p {
+ padding-top: 20px;
+ padding-bottom: 20px;
+ }
-.indexbox .indexIcon span
-{
-display: block;
-}
+.indexboxcont .section {
+ float: left
+ }
-.indexboxcont:after
-{
-content: ".";
-display: block;
-height: 0;
-clear: both;
-visibility: hidden;
+.indexboxcont:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
}
/*
@@ -638,6 +701,7 @@ visibility: hidden;
Landing page
-----------
*/
+
.col-group {
white-space: nowrap;
vertical-align: top;
@@ -652,8 +716,8 @@ Landing page
}
.col-1 h1 {
- margin: 20px 0 0 0;
-}
+ margin: 20px 0 0 0
+ }
.col-2 {
display: inline-block;
@@ -663,5 +727,5 @@ Landing page
}
.sectionlist {
- width: 100% !important;
+ width: 100% !important
}
diff --git a/doc/global/template/style/online.css b/doc/global/template/style/online.css
index 7809783fa7..cf73455877 100644
--- a/doc/global/template/style/online.css
+++ b/doc/global/template/style/online.css
@@ -1,43 +1,41 @@
-body{
-font: normal 400 14px/1.2 Arial;
-font-family: Arial, Helvetica;
-color:#313131;
-text-align:justify;
-margin-left:5px;
-margin-right:5px;
-background: none repeat scroll 0% 0% rgb(230,231,232);
+img {
+ -moz-box-shadow: 3px 3px 3px #ccc;
+ -webkit-box-shadow: 3px 3px 3px #ccc;
+ box-shadow: 3px 3px 3px #ccc;
+ border: #8E8D8D 2px solid;
+ margin-left: 0px;
+ max-width: 800px;
+ height: auto;
}
-p {
-line-height: 20px;
-}
-img{
--moz-box-shadow: 3px 3px 3px #ccc;
--webkit-box-shadow: 3px 3px 3px #ccc;
-box-shadow: 3px 3px 3px #ccc;
-border:#8E8D8D 2px solid;
-margin-left:0px;
-max-width: 800px;
-height: auto
+.content {
+ margin: 15px
}
-.content{}
+.content .indexboxcont li {
+ font: normal bold 13px/1 Verdana
+ }
+
+.content .normallist li {
+ font: normal 13px/1 Verdana
+ }
-.descr{
-margin-top:35px;
-/*max-width: 75%;*/
-margin-left:5px;
-text-align:justify;
-vertical-align:top;
+.descr {
+ margin-top: 35px;
+ /*max-width: 75%;*/
+ margin-left: 5px;
+ text-align: justify;
+ vertical-align: top;
}
-.name{
-max-width: 75%;
-font-weight:100;
+.name {
+ max-width: 75%;
+ font-weight: 100;
}
-tt{
-text-align:left;}
+tt {
+ text-align: left
+}
/*
-----------
@@ -45,30 +43,9 @@ links
-----------
*/
-a:link{
-color: #007330;
-text-decoration: none;
-text-align:left;
-}
-
-a:hover{
-color: #44a51c;
-text-align:left;
-}
-
-a:visited{
-color: #007330;
-text-align:left;
-}
-
-a:visited:hover{
-color: #44a51c;
-text-align:left;
-}
-
-.flags{
-text-decoration:none;
-text-height:24px;
+.flags {
+ text-decoration: none;
+ text-height: 24px;
}
/*
@@ -76,692 +53,1005 @@ text-height:24px;
NOTE styles
-------------------------------
*/
-.notetitle, .tiptitle, .fastpathtitle{
-font-weight:bold;
-}
-
-.attentiontitle,.cautiontitle,.dangertitle,.importanttitle,.remembertitle,.restrictiontitle{
-font-weight:bold;
-}
-.note,.tip,.fastpath{
-background: #F2F2F2 url(../images/ico_note.png);
-background-repeat: no-repeat;
-background-position: top left;
-padding:5px;
-padding-left:40px;
-padding-bottom:10px;
-border:#999 1px dotted;
-color:#666666;
-margin:5px;
+.notetitle, .tiptitle, .fastpathtitle {
+ font-weight: bold
}
-.attention,.caution,.danger,.important,.remember,.restriction{
-background: #F2F2F2 url(../images/ico_note_attention.png);
-background-repeat:no-repeat;
-background-position:top left;
-padding:5px;
-padding-left:40px;
-padding-bottom:10px;
-border:#999 1px dotted;
-color:#666666;
-margin:5px;
-}
-
-/*
--------------------------------
-Top navigation
--------------------------------
-*/
-
-.nav{
-text-align:right;
-margin-right:9px;
-}
-.nav img{
- box-shadow: none;
-}
-.nav-main{
-margin-top:22px;
-margin-left: 20px;
-text-align:left
-}
-.nav-main-content{
-margin-right: 20px;
-display:inline-block;
-}
-.nav-subtitle{
-margin-left: 220px;
+.attentiontitle, .cautiontitle, .dangertitle, .importanttitle, .remembertitle, .restrictiontitle {
+ font-weight: bold
}
-header{
-background: none repeat scroll 0% 0% rgb(255,255,255);
-border-radius: 10px 10px 10px 10px;
-padding: 10px;
-box-shadow: 0px 0px 10px rgba(0,0,0,0.1);
+.note, .tip, .fastpath {
+ background: #F2F2F2 url('../images/ico_note.png');
+ background-repeat: no-repeat;
+ background-position: top left;
+ padding: 5px;
+ padding-left: 40px;
+ padding-bottom: 10px;
+ border: #999 1px dotted;
+ color: #666666;
+ margin: 5px;
}
-header h1{
-display:block;
-line-height: 70px;
-font-size: 30px;
-margin-left: 223px;
-}
-header img{
-box-shadow: none;
-border: 0;
-position: absolute;
-left: 30px;
-}
-.qtref{
-display: block;
-top: -76px;
-z-index: 1;
-font-size:11px;
-padding-right:10px;
-float:right;
+.attention, .caution, .danger, .important, .remember, .restriction {
+ background: #F2F2F2 url('../images/ico_note_attention.png');
+ background-repeat: no-repeat;
+ background-position: top left;
+ padding: 5px;
+ padding-left: 40px;
+ padding-bottom: 10px;
+ border: #999 1px dotted;
+ color: #666666;
+ margin: 5px;
}
-.naviNextPrevious{
-display: block;
-text-align: right;
-float:right;
-z-index:1;
-padding-right:10px;
-padding-top:4px;
+.qtref {
+ display: block;
+ top: -76px;
+ z-index: 1;
+ font-size: 11px;
+ padding-right: 10px;
+ float: right;
}
-
-.naviNextPrevious > a.prevPage {
-background-image:url(../images/btn_prev.png);
-background-repeat:no-repeat;
-background-position:left;
-padding-left:20px;
-height:20px;
-padding-left:20px;
+.naviNextPrevious {
+ display: block;
+ text-align: right;
+ float: right;
+ z-index: 1;
+ padding-right: 10px;
+ padding-top: 4px;
}
.naviNextPrevious > a.nextPage {
-background-image:url(../images/btn_next.png);
-background-repeat:no-repeat;
-background-position:right;
-padding-right:20px;
-height:20px;
-margin-left:30px;
-}
-
-.breadcrumb{
-display: block;
-position: relative;
-z-index:1;
-height:20px;
-padding:0px;
-margin:0px;
-padding-left:10px;
-padding-top:12px;
-margin-left:-5px;
-margin-right:-5px;
-}
-
-.breadcrumb ul{
- margin:0px;
- padding:0px;
-}
-
-.breadcrumb ul li{
-list-style-type:none;
-padding:0;
-margin:0;
-height:20px;
-}
-
-.breadcrumb li{
-float:left;
-}
-
-.breadcrumb .first {
-background:url(../images/home.png);
-background-position:left;
-background-repeat:no-repeat;
-padding-left:20px;
-}
-
-
-.breadcrumb li a{
-display:block;
-text-decoration:none;
-background:url(../images/arrow.png);
-background-repeat:no-repeat;
-background-position:right;
-padding-right:25px;
-padding-left:10px;
-}
-
-.breadcrumb li a:hover{
-color:#909090;
-display:block;
-text-decoration:none;
-background:url(../images/arrow.png);
-background-repeat:no-repeat;
-background-position:right;
-padding-right:20px;
-padding-left:10px;
-}
+ background-image: url('../images/btn_next.png');
+ background-repeat: no-repeat;
+ background-position: right;
+ padding-right: 20px;
+ height: 20px;
+ margin-left: 30px;
+ }
-/*
------------
-footer and license
------------
-*/
-.footer{
-text-align:center
-}
-/*
------------
-main content
------------
-*/
-.line{
-text-align: left;
-background: none repeat scroll 0% 0% rgb(255,255,255);
-border-radius: 10px 10px 10px 10px;
-padding-left: 14px;
-padding-right: 14px;
-box-shadow: 0px 0px 10px rgba(0,0,0,0.1);
-margin-top: 10px;
-padding-bottom: 35px;
+.naviNextPrevious > a.prevPage {
+ background-image: url('../images/btn_prev.png');
+ background-repeat: no-repeat;
+ background-position: left;
+ padding-left: 20px;
+ height: 20px;
+ padding-left: 20px;
+ }
+
+.navigationbar {
+ background-repeat: no-repeat;
+ height: 33px;
+ margin: 0px !important;
+ padding: 0px !important;
+ border-bottom: 1px solid rgb(209, 209, 209);
+ background-image: -moz-linear-gradient(center top , rgb(246, 245, 245), rgb(239, 239, 239));
+ background-image: -webkit-gradient( linear, left bottom, left top, color-stop(0.0, #efefef), color-stop(0.5, #f6f5f5) );
+ border-radius: 10px 10px 0px 0px;
+}
+
+.navigationbar ul {
+ margin: 0px;
+ padding: 8px 0px 15px 15px;
+ height: 20px;
+ }
+
+.navigationbar li {
+ list-style-type: none;
+ float: left;
+ font-size: 15px;
+ }
+
+ .navigationbar li a {
+ display: block;
+ text-decoration: none;
+ background: url('../images/arrow_bc.png');
+ background-repeat: no-repeat;
+ background-position: right;
+ padding-right: 25px;
+ font-size: inherit;
+ }
+
+#buildversion {
+ font-style: italic;
+ font-size: small;
+ float: right;
+ margin-right: 5px;
}
-
-/* table of content
-no display
-*/
-
/*
-----------
headers
-----------
*/
-
-@media screen{
-.title{
-color:#313131;
-font-size: 18px;
-font-weight: normal;
-left: 0;
-padding-bottom: 20px;
-padding-left: 10px;
-padding-top: 20px;
-border-bottom: 1px #CCC solid ;
-font-weight:bold;
-margin-left:0px;
-margin-right:0px;
-}
+@media screen {
+ .title {
+ color: #313131;
+ font-size: 18px;
+ font-weight: normal;
+ left: 0;
+ padding-bottom: 20px;
+ padding-left: 10px;
+ padding-top: 20px;
+ border-bottom: 1px #CCC solid;
+ font-weight: bold;
+ margin-left: 0px;
+ margin-right: 0px;
+ }
}
h1 {
-margin: 0;
+ margin: 0
}
h2, p.h2 {
-font: 500 16px/1.2 Arial;
-font-weight:100;
-background-color:#F2F3F4;
-padding:4px;
-padding-left:14px;
-margin-bottom:30px;
-margin-top:30px;
-margin-left:-10px;
-margin-right:-5px;
-border-top:#E0E0DE 1px solid;
-border-bottom: #E0E0DE 1px solid;
-max-width: 99%;
-overflow: hidden;
+ font: 500 16px/1.2 Arial;
+ font-weight: 100;
+ background-color: #F2F3F4;
+ padding: 4px;
+ padding-left: 14px;
+ margin-bottom: 30px;
+ margin-top: 30px;
+ margin-left: -10px;
+ margin-right: -5px;
+ border-top: #E0E0DE 1px solid;
+ border-bottom: #E0E0DE 1px solid;
+ max-width: 99%;
+ overflow: hidden;
+}
+
+h3 {
+ font: 500 14px/1.2 Arial;
+ font-weight: 100;
+ text-decoration: underline;
+ margin-bottom: 30px;
+ margin-top: 30px;
+}
+
+h3.fn, span.fn {
+ border-width: 1px;
+ border-style: solid;
+ border-color: #E6E6E6;
+ -moz-border-radius: 7px 7px 7px 7px;
+ -webkit-border-radius: 7px 7px 7px 7px;
+ border-radius: 7px 7px 7px 7px;
+ background-color: #F6F6F6;
+ word-spacing: 3px;
+ padding: 5px 5px;
+ text-decoration: none;
+ font-weight: bold;
+ max-width: 75%;
+ font-size: 14px;
+ margin: 0px;
+ margin-top: 45px;
+}
+
+.name {
+ color: #1A1A1A
+}
+
+.type {
+ color: #808080
}
-h3{
-
-font: 500 14px/1.2 Arial;
-font-weight:100;
-text-decoration:underline;
-margin-bottom:30px;
-margin-top:30px;
+@media print {
+ .title {
+ color: #0066CB;
+ font-size: 32px;
+ font-weight: normal;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+ }
}
-h3.fn,span.fn{
-border-width: 1px;
-border-style: solid;
-border-color: #E6E6E6;
--moz-border-radius: 7px 7px 7px 7px;
--webkit-border-radius: 7px 7px 7px 7px;
-border-radius: 7px 7px 7px 7px;
-background-color: #F6F6F6;
-word-spacing: 3px;
-padding: 5px 5px;
-text-decoration:none;
-font-weight:bold;
-max-width:75%;
-font-size:14px;
-margin:0px;
-margin-top:45px;
+/*
+-----------------
+table styles
+-----------------
+*/
+.table img {
+ border: none;
+ margin-left: 0px;
+ -moz-box-shadow: 0px 0px 0px #fff;
+ -webkit-box-shadow: 0px 0px 0px #fff;
+ box-shadow: 0px 0px 0px #fff;
}
-.name{
-color:#1A1A1A;
-}
-.type{
-color:#808080;
-}
+/* table with border alternative colours*/
+table, pre {
+ -moz-border-radius: 7px 7px 7px 7px;
+ -webkit-border-radius: 7px 7px 7px 7px;
+ border-radius: 7px 7px 7px 7px;
+ background-color: #F6F6F6;
+ border: 1px solid #E6E6E6;
+ border-collapse: separate;
+ font-size: 12px;
+ line-height: 1.2;
+ margin-bottom: 25px;
+ margin-left: 15px;
+ font-size: 12px;
+ line-height: 1.2;
+ margin-bottom: 25px;
+ margin-left: 15px;
+}
+
+ table tr.even {
+ background-color: white;
+ color: #66666E;
+ }
+
+ table tr.odd {
+ background-color: #F6F6F6;
+ color: #66666E;
+ }
+
+ table thead {
+ text-align: left;
+ padding-left: 20px;
+ background-color: #e1e0e0;
+ border-left: none;
+ border-right: none;
+ }
+
+ table thead th {
+ padding-top: 5px;
+ padding-left: 10px;
+ padding-bottom: 5px;
+ border-bottom: 2px solid #D1D1D1;
+ padding-right: 10px;
+ }
+
+ table td {
+ padding: 3px 15px 3px 20px;
+ border-bottom: #CCC dotted 1px;
+ }
+
+ table th {
+ text-align: left;
+ padding-left: 20px;
+ }
+
+ table p {
+ margin: 0px
+ }
+/* table bodless & white*/
-@media print {
-.title {
-color:#0066CB;
-font-family:Arial, Helvetica;
-font-size: 32px;
-font-weight: normal;
-left: 0;
-position: absolute;
-right: 0;
-top: 0;
-}
+.borderless {
+ border-radius: 0px 0px 0px 0px;
+ background-color: #fff;
+ border: 1px solid #fff;
}
+.borderless td {
+ border: none;
+ border-bottom: #fff dotted 1px;
+ }
+
+.borderless tr {
+ background-color: #FFF;
+ color: #66666E;
+ }
/*
------------------
-table styles
------------------
+-----------
+List
+-----------
*/
-.table img {
-border:none;
-margin-left:0px;
--moz-box-shadow:0px 0px 0px #fff;
--webkit-box-shadow: 0px 0px 0px #fff;
-box-shadow: 0px 0px 0px #fff;
+
+ul {
+ padding-bottom: 2px
}
-/* table with border alternative colours*/
+li {
+ margin-bottom: 10px;
+ padding-left: 8px;
+ list-style: outside;
+ list-style-type: square;
+ text-align: left;
+}
- table,pre{
--moz-border-radius: 7px 7px 7px 7px;
--webkit-border-radius: 7px 7px 7px 7px;
- border-radius: 7px 7px 7px 7px;
-background-color: #F6F6F6;
-border: 1px solid #E6E6E6;
-border-collapse: separate;
-font-size: 12px;
-line-height: 1.2;
-margin-bottom: 25px;
-margin-left: 15px;
-font-size: 12px;
-line-height: 1.2;
-margin-bottom: 25px;
-margin-left: 15px;
+ol {
+ margin: 10px;
+ padding: 0;
}
+ ol > li {
+ margin-left: 30px;
+ padding-left: 8px;
+ list-style: decimal;
+ }
-table th{
-text-align:left;
-padding-left:20px;
+.centerAlign {
+ text-align: left
}
-table td {
-padding: 3px 15px 3px 20px;
-border-bottom:#CCC dotted 1px;
+.cpp {
+ display: block;
+ margin: 10px;
+ overflow: auto;
+ padding: 20px 20px 20px 20px;
}
-table p { margin:0px;}
-table tr.even {
-background-color: white;
-color: #66666E;
+.js {
+ display: block;
+ margin: 10px;
+ overflow: auto;
+ padding: 20px 20px 20px 20px;
}
-table tr.odd {
-background-color: #F6F6F6;
-color: #66666E;
+.footerNavi {
+ width: auto;
+ text-align: right;
+ margin-top: 50px;
+ z-index: 1;
}
-
-table thead {
-text-align:left;
-padding-left:20px;
-background-color:#e1e0e0;
-border-left:none;
-border-right:none;
+.memItemLeft {
+ padding-right: 3px
}
-table thead th {
-padding-top:5px;
-padding-left:10px;
-padding-bottom:5px;
-border-bottom: 2px solid #D1D1D1;
-padding-right:10px;
+.memItemRight {
+ padding: 3px 15px 3px 0
}
+.qml {
+ display: block;
+ margin: 10px;
+ overflow: auto;
+ padding: 20px 20px 20px 20px;
+}
-/* table bodless & white*/
+.qmldefault {
+ padding-left: 5px;
+ float: right;
+ color: red;
+}
-.borderless {
-border-radius: 0px 0px 0px 0px;
-background-color: #fff;
-border: 1px solid #fff;
+.qmlreadonly {
+ padding-left: 5px;
+ float: right;
+ color: #254117;
}
-.borderless tr {
-background-color: #FFF;
-color: #66666E;
+.rightAlign {
+ padding: 3px 5px 3px 10px;
+ text-align: right;
}
-.borderless td {
-border:none;
-border-bottom:#fff dotted 1px;
+.qmldoc {
+ margin-left: 15px
}
/*
-----------
-List
+Content table
-----------
*/
-ul{
-padding-bottom:2px;
+@media print {
+ .toc {
+ float: right;
+ clear: right;
+ padding-bottom: 10px;
+ padding-top: 50px;
+ width: 100%;
+ background-image: url('../images/bgrContent.png');
+ background-position: top;
+ background-repeat: no-repeat;
+ }
+}
+
+@media screen {
+ .toc {
+ clear: both;
+ clear: right;
+ position: relative;
+ top: 83px;
+ float: right;
+ vertical-align: top;
+ -moz-border-radius: 7px 7px 7px 7px;
+ -webkit-border-radius: 7px 7px 7px 7px;
+ border-radius: 7px 7px 7px 7px;
+ background: #FFF url('../images/bgrContent.png');
+ background-position: top;
+ background-repeat: repeat-x;
+ border: 1px solid #E6E6E6;
+ padding-left: 5px;
+ padding-bottom: 10px;
+ height: auto;
+ width: 200px;
+ text-align: left;
+ margin-left: 20px;
+ }
+}
+
+.toc h3 {
+ text-decoration: none
+}
+
+.toc h3 {
+ font: 500 14px/1.2 Arial;
+ font-weight: 100;
+ padding: 0px;
+ margin: 0px;
+ padding-top: 5px;
+ padding-left: 5px;
+}
+
+.toc ul {
+ padding-left: 10px;
+ padding-right: 5px;
+ padding-top: 10px;
+}
+
+.toc ul li {
+ margin-left: 15px;
+ list-style-image: url('../images/blu_dot.png');
+ list-style: outside;
+ marker-offset: 0px;
+ margin-bottom: 8px;
+ padding-left: 0px;
+ }
+
+.toc .level1 {
+ border: none
+}
+
+.toc .level2 {
+ border: none;
+ margin-left: 25px;
+}
+
+.level3 {
+ border: none;
+ margin-left: 30px;
+}
+
+.clearfix {
+ clear: both
}
-li {
-margin-bottom: 10px;
-padding-left: 8px;
-list-style:outside;
-list-style-type:square;
-text-align:left;
+/* start index box */
+
+.indexbox {
+ width: 100%;
+ display: inline-block;
}
+.indexbox .indexIcon {
+ width: 11%
+ }
-ol{
-margin:10px;
-padding:0;
-}
+ .indexbox .indexIcon span {
+ display: block
+ }
-ol > li{
-margin-left: 30px;
-padding-left:8px;
-list-style:decimal;
+.indexboxcont {
+ display: block
}
-.centerAlign{
-text-align: left;
-}
+.indexboxcont .sectionlist {
+ display: inline-block;
+ vertical-align: top;
+ width: 32.5%;
+ padding: 0;
+ }
-.cpp{
-display: block;
-margin: 10px;
-overflow: auto;
-padding: 20px 20px 20px 20px;
-}
+ .indexboxcont .sectionlist ul {
+ margin-bottom: 20px
+ }
-.js{
-display: block;
-margin: 10px;
-overflow: auto;
-padding: 20px 20px 20px 20px;
-}
+ .indexboxcont .sectionlist ul li {
+ line-height: 1.5
+ }
-.footer{
-margin-top: 50px;
-padding-left:5px;
-margin-bottom: 10px;
-font-size:10px;
-border-top: 1px solid #999;
-padding-top:11px;
-}
+.indexboxcont .indexIcon {
+ width: 11%;
+ *width: 18%;
+ _width: 18%;
+ overflow: hidden;
+ }
-.footerNavi{
-width:auto;
-text-align:right;
-margin-top:50px;
-z-index:1;
-}
+.indexboxcont .section {
+ float: left
+ }
-.memItemLeft{
-padding-right: 3px;
+.indexboxcont .section {
+ display: inline-block;
+ width: 49%;
+ *width: 42%;
+ _width: 42%;
+ padding: 0 2% 0 1%;
+ vertical-align: top;
+ }
+
+ .indexboxcont .section p {
+ padding-top: 20px;
+ padding-bottom: 20px;
+ }
+
+.indexboxcont:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
}
-.memItemRight{
-padding: 3px 15px 3px 0;
-}
+/*
+-----------
+Landing page
+-----------
+*/
-.qml{
-display: block;
-margin: 10px;
-overflow: auto;
-padding: 20px 20px 20px 20px;
+.col-group {
+ white-space: nowrap;
+ vertical-align: top;
}
-.qmldefault{
-padding-left: 5px;
-float: right;
-color: red;
+.col-1 {
+ display: inline-block;
+ white-space: normal;
+ width: 70%;
+ height: 100%;
+ float: left;
}
-.qmlreadonly{
-padding-left: 5px;
-float: right;
-color: #254117;
-}
+.col-1 h1 {
+ margin: 20px 0 0 0
+ }
-.rightAlign{
-padding: 3px 5px 3px 10px;
-text-align: right;
+.col-2 {
+ display: inline-block;
+ white-space: normal;
+ width: 25%;
+ margin: 0 0 0 50px;
}
-.qmldoc {
-margin-left: 15px;
+.sectionlist {
+ width: 100% !important
}
/*
------------
-Content table
------------
+Additions from Qt Project
*/
-@media print{
-.toc {
-float: right;
-clear: right;
-padding-bottom: 10px;
-padding-top: 50px;
-width: 100%;
-background-image:url(../images/bgrContent.png);
-background-position:top;
-background-repeat:no-repeat;
-}
+body {
+ background: #E8E8E8;
+ margin: 0px;
+ font-family: "Open Sans",sans-serif !important;
}
-@media screen{
-.toc{
-clear: both;
-clear: right;
-position: relative;
-top: 83px;
-float:right;
-vertical-align:top;
--moz-border-radius: 7px 7px 7px 7px;
--webkit-border-radius: 7px 7px 7px 7px;
-border-radius: 7px 7px 7px 7px;
- background:#FFF url(../images/bgrContent.png);
-background-position:top;
-background-repeat:repeat-x;
-border: 1px solid #E6E6E6;
-padding-left:5px;
-padding-bottom:10px;
-height: auto;
-width: 200px;
-text-align:left;
-margin-left:20px;
+.qt13a-twoCol {
+ width: 23.46939%;
+ float: left;
+ margin-right: 2.04082%;
+ display: inline;
}
+
+.qt13a-fourCol {
+ width: 48.97959%;
+ float: left;
+ margin-right: 2.04082%;
+ display: inline;
}
-.toc h3{
-text-decoration:none;
+.qt13a-sixCol {
+ width: 70.4898%;
+ float: left;
+ margin-right: 2.04082%;
+ display: inline;
}
-.toc h3{font: 500 14px/1.2 Arial;
-font-weight:100;
-padding:0px;
-margin:0px;
-padding-top:5px;
-padding-left:5px;
+.qt13a-eightCol {
+ width: 100%;
+ float: left;
+ margin-right: 2.04082%;
+ display: inline;
}
+.qt13a-fiveCol {
+ width: 17.35537%;
+ float: left;
+ margin-right: 3.30579%;
+ display: inline;
+}
-.toc ul{
-padding-left:10px;
-padding-right:5px;
-padding-top:10px;
+.qt13a-fiveCol:nth-child(2n) {
+ float: left;
+ margin-right: 3.30579%;
}
-.toc ul li{
-margin-left:15px;
-list-style-image:url(../images/blu_dot.png);
-list-style:outside;
-marker-offset: 0px;
-margin-bottom:8px;
-padding-left:0px;
+.qt13a-omega {
+ float: right;
+ margin-right: 0;
+ *margin-left: -20px;
+ display: inline;
}
-.toc .level1{
-border:none;}
+.qt13a-last {
+ float: right;
+ margin-right: 0;
+ *margin-left: -20px;
+ display: inline;
+}
+
+.qt13a-container {
+ *zoom: 1;
+ padding-left: 20px;
+ padding-right: 20px;
+ margin-left: auto;
+ margin-right: auto;
+ max-width: 1045px;
+}
+
+.qt13a-container:after {
+ content: "";
+ display: table;
+ clear: both;
+}
+
+.qt13a-container.qt13a-dynamic {
+ max-width: 1295px
+}
+
+.qt13a-no-bg-img {
+ background-image: none !important
+}
+
+.qt13a-wrapper {
+ overflow: hidden
+}
+
+.content-view {
+ position: relative;
+ overflow: hidden;
+}
+
+#qt13a-header {
+ background: url('../images/Qt-header-bg.jpg') repeat;
+ min-height: 126px;
+ padding: 0;
+ margin: 0;
+ min-width: 1045px;
+ margin-bottom: 18px;
+}
+
+ #qt13a-header .qt13a-nav-divider-left {
+ border-left: 1px solid #35322f;
+ padding-left: 10px;
+ margin-left: 5px;
+ font-size: 13px;
+ }
+
+ #qt13a-header #qt13a-title_nav {
+ padding-top: 34px;
+ width: 87.37374%;
+ float: left;
+ margin-right: 1.0101%;
+ display: inline;
+ float: right;
+ margin-right: 0;
+ *margin-left: -20px;
+ display: inline;
+ }
+
+ #qt13a-header .qt13a-gradient {
+ background: url('../images/Qt-gradient.png') repeat-x;
+ background-position: bottom;
+ margin: 0;
+ min-height: 126px;
+ padding: 0;
+ }
+
+ #qt13a-header p.qt13a-title {
+ font-size: 24px;
+ margin: 0 0 0 0px;
+ letter-spacing: -1px;
+ color: #35322f;
+ font-weight: 600;
+ }
+
+ #qt13a-header p.qt13a-title a {
+ font-weight: 600;
+ color: #35322f;
+ }
+
+ #qt13a-header p.qt13a-title a:hover {
+ color: #35322f;
+ text-decoration: none;
+ }
+
+ #qt13a-header #qt13a-title {
+ padding: 0px 0 0 0px;
+ padding-bottom: 0px;
+ }
+
+ #qt13a-header #qt13a-logo {
+ float: left;
+ width: 11.61616%;
+ float: left;
+ margin-right: 1.0101%;
+ display: inline;
+ margin: 20px 0px 10px 0;
+ min-width: 50px;
+ }
+
+ #qt13a-header #qt13a-logo .qt13a-site-logo {
+ background: url('../images/Qt-logo.png') no-repeat;
+ text-indent: -100em;
+ overflow: hidden;
+ display: block;
+ height: 90px;
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+
+ #qt13a-header #qt13a-logo img {
+ float: left;
+ border: 0;
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+
+ #qt13a-header .qt13a-nav {
+ background: none
+ }
+
+ #qt13a-header .qt13a-nav .qt13a-nav-divider-left {
+ border-left: 1px solid #35322f;
+ padding-left: 20px;
+ }
+
+ #qt13a-header .qt13a-nav .qt13a-nav-small a {
+ font-size: 13px
+ }
+
+ #qt13a-header .qt13a-nav ul {
+ margin: 0 0 0 0px;
+ padding: 11px 0 0;
+ background: none;
+ }
+
+ #qt13a-header .qt13a-nav ul li.devnet-active a {
+ color: #fff
+ }
+
+ #qt13a-header .qt13a-nav ul li {
+ display: inline-block;
+ width: auto;
+ padding: 0 2.88% 0 0;
+ margin: 0;
+ border: 0;
+ *display: inline;
+ zoom: 1;
+ }
+
+ #qt13a-header .qt13a-nav ul li a {
+ color: #35322f;
+ margin: 0;
+ padding: 0;
+ line-height: 18px;
+ font-size: 18px;
+ }
+
+ #qt13a-header .qt13a-nav ul li a:hover, #qt13a-header .qt13a-nav ul li a:active, #qt13a-header .qt13a-nav ul li a.active {
+ color: #fff;
+ text-decoration: none;
+ }
+
+#qt13a-register_search {
+ display: block;
+ font-variant: 400;
+ float: right;
+}
+
+#qt13a-register {
+ padding: 34px 0px 0;
+ float: right;
+ text-align: right;
+ color: #1e1b18;
+}
+
+ #qt13a-register .qt13a-link-divider {
+ padding: 0 5px
+ }
+
+ #qt13a-register a {
+ color: #1e1b18;
+ font-weight: 400;
+ font-size: 13px;
+ padding-left: 13px;
+ }
+
+ #qt13a-register a:visited {
+ color: #1e1b18
+ }
+
+ #qt13a-register a:hover {
+ color: #fff;
+ text-decoration: none;
+ }
+
+#search {
+ margin-top: 23px
+}
+
+#qt13a-footer {
+ background: url('../images/Qt-header-bg.jpg') repeat;
+ margin: 0;
+}
+
+ #qt13a-footer .qt13a-container {
+ padding: 36px 0
+ }
+
+ #qt13a-footer .qt13a-gradient {
+ background: url('../images/Qt-dark_gradient.png') repeat-x;
+ background-position: bottom;
+ margin: 0;
+ min-height: 126px;
+ padding: 0;
+ }
+
+ #qt13a-footer .qt13a-shadow {
+ background: transparent url('../images/Qt-footer_shadow.png') repeat-x top center
+ }
+
+ #qt13a-footer .qt13a-last {
+ float: right;
+ margin-right: 0;
+ *margin-left: -20px;
+ display: inline;
+ }
+
+ #qt13a-footer ul {
+ width: 17.35537%;
+ float: left;
+ margin-right: 3.30579%;
+ display: inline;
+ padding-left: 0;
+ list-style-type: none;
+ }
+
+ #qt13a-footer ul li a.qt13a-some-icon {
+ width: 32px;
+ height: 32px;
+ background-repeat: none;
+ text-indent: -300em;
+ overflow: hidden;
+ display: -moz-inline-stack;
+ display: inline-block;
+ vertical-align: middle;
+ *vertical-align: auto;
+ zoom: 1;
+ *display: inline;
+ }
-.toc .level2{
-border:none;
-margin-left: 25px;
-}
+ #qt13a-footer ul li a {
+ font-family: "Open Sans",sans-serif;
+ font-size: 13px;
+ color: #35322f;
+ padding: 0;
+ font-weight: 400;
+ }
-.level3{
-border:none;
-margin-left: 30px;
-}
+ #qt13a-footer ul li a:hover, #qt13a-footer ul li a:active {
+ color: #35322f;
+ text-decoration: underline;
+ }
-.clearfix{
-clear:both;}
+ #qt13a-footer .qt13a-title a, #qt13a-footer .qt13a-title {
+ padding: 18px 0 18px;
+ font-weight: 400;
+ letter-spacing: -0.5pt;
+ color: #35322f;
+ font-size: 18px;
+ margin: 0;
+ }
-/* start index box */
-.indexbox
-{
-width: 100%;
-display:inline-block;
+.qt13a-copyright {
+ border-top: 1px solid #000;
+ background: url('../images/Qt-footer-bg.jpg') repeat;
+ margin: 0;
+ padding: 36px 0;
+ font-weight: 400;
+ font-size: 0.84615em;
+ line-height: 1.63636em;
}
-.indexboxcont
-{
-display: block;
+.qt13a-copyright p {
+ padding: 0;
+ color: #aeadac;
+ font-size: 11px;
+ }
-}
+.qt13a-copyright a {
+ color: #328930
+ }
-.indexboxcont .section
-{
-display: inline-block;
-width: 49%;
-*width:42%;
-_width:42%;
-padding:0 2% 0 1%;
-vertical-align:top;
-}
+.qt13a-copyright a:visited {
+ color: #328930
+ }
-.indexboxcont .indexIcon
-{
-width: 11%;
-*width:18%;
-_width:18%;
-overflow:hidden;
+.searchbox {
+ display: block;
+ overflow: hidden;
+ padding: 0px 35px 0 5px;
}
-.indexboxcont .section {
- float: left;
+.content-view {
+ position: relative;
+ overflow: hidden;
}
-.indexboxcont .section p
-{
-padding-top: 20px;
-padding-bottom: 20px;
-}
-.indexboxcont .sectionlist
-{
-display: inline-block;
-vertical-align:top;
-width: 32.5%;
-padding: 0;
-}
-.indexboxcont .sectionlist ul
-{
-margin-bottom: 20px;
+p, li, p.forum-overview-title, p.forum-description, p.desc, p.forum-lastpost, div.navigationbars li, div.block-profile div {
+ font-size: 13px
}
-.indexboxcont .sectionlist ul li
-{
-line-height: 1.5;
+p.forum-description.desc {
+ font-size: 13px !important
}
-.content .indexboxcont li
-{
-font: normal bold 13px/1 Verdana;
+.steps li {
+ font-size: 16px
}
-.content .normallist li
-{
-font: normal 13px/1 Verdana;
+div.license p, div.notes p {
+ font-size: 12px !important
}
-.indexbox .indexIcon {
-width: 11%;
+a {
+ color: #44a51c;
+ text-decoration: none;
}
-.indexbox .indexIcon span
-{
-display: block;
+.wrap {
+ padding-left: 30px
}
-.indexboxcont:after
-{
-content: ".";
-display: block;
-height: 0;
-clear: both;
-visibility: hidden;
+a:visited {
+ color: #007330;
+ text-align: left;
}
-/*
------------
-Landing page
------------
-*/
-.col-group {
- white-space: nowrap;
- vertical-align: top;
+a:hover {
+ color: #44a51c;
+ text-align: left;
}
-.col-1 {
- display: inline-block;
- white-space: normal;
- width: 70%;
- height: 100%;
- float: left;
+a:visited:hover {
+ color: #44a51c;
+ text-align: left;
}
-.col-1 h1 {
- margin: 20px 0 0 0;
+a:link {
+ color: #007330;
+ text-decoration: none;
+ text-align: left;
}
-.col-2 {
- display: inline-block;
- white-space: normal;
- width: 25%;
- margin: 0 0 0 50px;
+.main {
+ padding: 0px 30px 30px 30px
}
-.sectionlist {
- width: 100% !important;
+.main-rounded {
+ display: inline-block;
+ background: none repeat scroll 0% 0% rgb(255,255,255);
+ width: 100%;
+ border: 1px solid #DADADA;
+ border-radius: 10px 10px 10px 10px;
+ box-shadow: 0 0 3px #C4C4C4;
+ padding-bottom: 30px;
}
diff --git a/examples/widgets/dialogs/standarddialogs/dialog.cpp b/examples/widgets/dialogs/standarddialogs/dialog.cpp
index c626b63b7d..fdd3633950 100644
--- a/examples/widgets/dialogs/standarddialogs/dialog.cpp
+++ b/examples/widgets/dialogs/standarddialogs/dialog.cpp
@@ -121,6 +121,10 @@ Dialog::Dialog(QWidget *parent)
textLabel->setFrameStyle(frameStyle);
QPushButton *textButton = new QPushButton(tr("QInputDialog::get&Text()"));
+ multiLineTextLabel = new QLabel;
+ multiLineTextLabel->setFrameStyle(frameStyle);
+ QPushButton *multiLineTextButton = new QPushButton(tr("QInputDialog::get&MultiLineText()"));
+
colorLabel = new QLabel;
colorLabel->setFrameStyle(frameStyle);
QPushButton *colorButton = new QPushButton(tr("QColorDialog::get&Color()"));
@@ -177,6 +181,7 @@ Dialog::Dialog(QWidget *parent)
connect(doubleButton, SIGNAL(clicked()), this, SLOT(setDouble()));
connect(itemButton, SIGNAL(clicked()), this, SLOT(setItem()));
connect(textButton, SIGNAL(clicked()), this, SLOT(setText()));
+ connect(multiLineTextButton, SIGNAL(clicked()), this, SLOT(setMultiLineText()));
connect(colorButton, SIGNAL(clicked()), this, SLOT(setColor()));
connect(fontButton, SIGNAL(clicked()), this, SLOT(setFont()));
connect(directoryButton, SIGNAL(clicked()),
@@ -206,7 +211,9 @@ Dialog::Dialog(QWidget *parent)
layout->addWidget(itemLabel, 2, 1);
layout->addWidget(textButton, 3, 0);
layout->addWidget(textLabel, 3, 1);
- layout->addItem(new QSpacerItem(0, 0, QSizePolicy::Ignored, QSizePolicy::MinimumExpanding), 4, 0);
+ layout->addWidget(multiLineTextButton, 4, 0);
+ layout->addWidget(multiLineTextLabel, 4, 1);
+ layout->addItem(new QSpacerItem(0, 0, QSizePolicy::Ignored, QSizePolicy::MinimumExpanding), 5, 0);
toolbox->addItem(page, tr("Input Dialogs"));
const QString doNotUseNativeDialog = tr("Do not use native dialog");
@@ -327,6 +334,17 @@ void Dialog::setText()
//! [3]
}
+void Dialog::setMultiLineText()
+{
+//! [4]
+ bool ok;
+ QString text = QInputDialog::getMultiLineText(this, tr("QInputDialog::getMultiLineText()"),
+ tr("Address:"), "John Doe\nFreedom Street", &ok);
+ if (ok && !text.isEmpty())
+ multiLineTextLabel->setText(text);
+//! [4]
+}
+
void Dialog::setColor()
{
const QColorDialog::ColorDialogOptions options = QFlag(colorDialogOptionsWidget->value());
diff --git a/examples/widgets/dialogs/standarddialogs/dialog.h b/examples/widgets/dialogs/standarddialogs/dialog.h
index 27b1de98cb..d6272c440e 100644
--- a/examples/widgets/dialogs/standarddialogs/dialog.h
+++ b/examples/widgets/dialogs/standarddialogs/dialog.h
@@ -63,6 +63,7 @@ private slots:
void setDouble();
void setItem();
void setText();
+ void setMultiLineText();
void setColor();
void setFont();
void setExistingDirectory();
@@ -80,6 +81,7 @@ private:
QLabel *doubleLabel;
QLabel *itemLabel;
QLabel *textLabel;
+ QLabel *multiLineTextLabel;
QLabel *colorLabel;
QLabel *fontLabel;
QLabel *directoryLabel;
diff --git a/examples/widgets/doc/src/addressbook-tutorial.qdoc b/examples/widgets/doc/src/addressbook-tutorial.qdoc
index 089ab2319d..78517f80d7 100644
--- a/examples/widgets/doc/src/addressbook-tutorial.qdoc
+++ b/examples/widgets/doc/src/addressbook-tutorial.qdoc
@@ -77,8 +77,6 @@
*/
/*!
- \page tutorials-addressbook-part1.html
-
\example tutorials/addressbook/part1
\title Part 1 - Designing the User Interface
@@ -231,8 +229,6 @@
*/
/*!
- \page tutorials-addressbook-part2.html
-
\example tutorials/addressbook/part2
\title Part 2 - Adding Addresses
@@ -382,8 +378,6 @@
*/
/*!
- \page tutorials-addressbook-part3.html
-
\example tutorials/addressbook/part3
\title Part 3 - Navigating between Entries
@@ -499,8 +493,6 @@
*/
/*!
- \page tutorials-addressbook-part4.html
-
\example tutorials/addressbook/part4
\title Part 4 - Editing and Removing Addresses
@@ -633,8 +625,6 @@
*/
/*!
- \page tutorials-addressbook-part5.html
-
\example tutorials/addressbook/part5
\title Part 5 - Adding a Find Function
@@ -777,8 +767,6 @@
*/
/*!
- \page tutorials-addressbook-part6.html
-
\example tutorials/addressbook/part6
\title Part 6 - Loading and Saving
@@ -899,8 +887,6 @@
*/
/*!
- \page tutorials-addressbook-part7.html
-
\example tutorials/addressbook/part7
\title Part 7 - Additional Features
diff --git a/examples/widgets/itemviews/spreadsheet/main.cpp b/examples/widgets/itemviews/spreadsheet/main.cpp
index 1cc9205d7e..f518986bc5 100644
--- a/examples/widgets/itemviews/spreadsheet/main.cpp
+++ b/examples/widgets/itemviews/spreadsheet/main.cpp
@@ -42,14 +42,15 @@
#include "spreadsheet.h"
#include <QApplication>
+#include <QLayout>
int main(int argc, char** argv) {
Q_INIT_RESOURCE(spreadsheet);
QApplication app(argc, argv);
SpreadSheet sheet(10, 6);
sheet.setWindowIcon(QPixmap(":/images/interview.png"));
- sheet.resize(640, 420);
sheet.show();
+ sheet.layout()->setSizeConstraint(QLayout::SetFixedSize);
return app.exec();
}
diff --git a/examples/widgets/itemviews/spreadsheet/spreadsheet.cpp b/examples/widgets/itemviews/spreadsheet/spreadsheet.cpp
index 59d29f0e61..6fab0c2aae 100644
--- a/examples/widgets/itemviews/spreadsheet/spreadsheet.cpp
+++ b/examples/widgets/itemviews/spreadsheet/spreadsheet.cpp
@@ -64,6 +64,7 @@ SpreadSheet::SpreadSheet(int rows, int cols, QWidget *parent)
toolBar->addWidget(formulaInput);
table = new QTableWidget(rows, cols, this);
+ table->setSizeAdjustPolicy(QTableWidget::AdjustToContents);
for (int c = 0; c < cols; ++c) {
QString character(QChar('A' + c));
table->setHorizontalHeaderItem(c, new QTableWidgetItem(character));
diff --git a/examples/widgets/widgets/spinboxes/window.cpp b/examples/widgets/widgets/spinboxes/window.cpp
index 8c35f93c56..acce642ec6 100644
--- a/examples/widgets/widgets/spinboxes/window.cpp
+++ b/examples/widgets/widgets/spinboxes/window.cpp
@@ -94,6 +94,14 @@ void Window::createSpinBoxes()
priceSpinBox->setValue(99);
//! [4] //! [5]
+ QLabel *hexLabel = new QLabel(tr("Enter a value between "
+ "%1 and %2:").arg('-' + QString::number(31, 16)).arg(QString::number(31, 16)));
+ QSpinBox *hexSpinBox = new QSpinBox;
+ hexSpinBox->setRange(-31, 31);
+ hexSpinBox->setSingleStep(1);
+ hexSpinBox->setValue(0);
+ hexSpinBox->setDisplayIntegerBase(16);
+
QVBoxLayout *spinBoxLayout = new QVBoxLayout;
spinBoxLayout->addWidget(integerLabel);
spinBoxLayout->addWidget(integerSpinBox);
@@ -101,6 +109,8 @@ void Window::createSpinBoxes()
spinBoxLayout->addWidget(zoomSpinBox);
spinBoxLayout->addWidget(priceLabel);
spinBoxLayout->addWidget(priceSpinBox);
+ spinBoxLayout->addWidget(hexLabel);
+ spinBoxLayout->addWidget(hexSpinBox);
spinBoxesGroup->setLayout(spinBoxLayout);
}
//! [5]
diff --git a/mkspecs/blackberry-armv7le-qcc/qmake.conf b/mkspecs/blackberry-armv7le-qcc/qmake.conf
index 2e24e4e0d3..cfcd2aecf0 100644
--- a/mkspecs/blackberry-armv7le-qcc/qmake.conf
+++ b/mkspecs/blackberry-armv7le-qcc/qmake.conf
@@ -16,6 +16,7 @@ contains(QT_CONFIG, stack-protector-strong) {
}
QMAKE_CFLAGS += -mcpu=cortex-a9 -mtune=cortex-a9 -mthumb -D_FORTIFY_SOURCE=2
+QMAKE_CXXFLAGS += -mcpu=cortex-a9 -mtune=cortex-a9 -mthumb -D_FORTIFY_SOURCE=2
QMAKE_LFLAGS_SHLIB += -Wl,-z,relro -Wl,-z,now
diff --git a/mkspecs/common/clang.conf b/mkspecs/common/clang.conf
index 4f141351c1..ace2496f10 100644
--- a/mkspecs/common/clang.conf
+++ b/mkspecs/common/clang.conf
@@ -20,13 +20,3 @@ QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
QMAKE_CXXFLAGS_CXX11 = -std=c++11
QMAKE_LFLAGS_CXX11 =
-
-QMAKE_CFLAGS_SSE2 += -msse2
-QMAKE_CFLAGS_SSE3 += -msse3
-QMAKE_CFLAGS_SSSE3 += -mssse3
-QMAKE_CFLAGS_SSE4_1 += -msse4.1
-QMAKE_CFLAGS_SSE4_2 += -msse4.2
-QMAKE_CFLAGS_AVX += -mavx
-QMAKE_CFLAGS_AVX2 += -mavx2
-QMAKE_CFLAGS_IWMMXT += -mcpu=iwmmxt
-QMAKE_CFLAGS_NEON += -mfpu=neon
diff --git a/mkspecs/common/ios/qmake.conf b/mkspecs/common/ios/qmake.conf
index 39465aa765..3c477438a3 100644
--- a/mkspecs/common/ios/qmake.conf
+++ b/mkspecs/common/ios/qmake.conf
@@ -15,9 +15,6 @@ QMAKE_RANLIB = ranlib -s
QMAKE_LINK = $$QMAKE_CXX
QMAKE_LINK_SHLIB = $$QMAKE_CXX
-# Basic iOS frameworks needed for any GUI app
-QMAKE_LFLAGS += -framework Foundation -framework UIKit -framework QuartzCore -lz
-
# No OpenGL ES1
QMAKE_INCDIR_OPENGL_ES1 =
QMAKE_LIBDIR_OPENGL_ES1 =
diff --git a/mkspecs/common/mac.conf b/mkspecs/common/mac.conf
index 1b480aa267..4421665370 100644
--- a/mkspecs/common/mac.conf
+++ b/mkspecs/common/mac.conf
@@ -4,7 +4,7 @@
!load(device_config): error(Could not successfully load device configuration)
-QMAKE_PLATFORM += mac
+QMAKE_PLATFORM += mac darwin
QMAKE_RESOURCE = /Developer/Tools/Rez
QMAKE_EXTENSION_SHLIB = dylib
diff --git a/mkspecs/common/macx.conf b/mkspecs/common/macx.conf
index 48efae5d1e..ad54612f22 100644
--- a/mkspecs/common/macx.conf
+++ b/mkspecs/common/macx.conf
@@ -2,7 +2,7 @@
# qmake configuration for common OS X
#
-QMAKE_PLATFORM += macx
+QMAKE_PLATFORM += osx macx
QMAKE_MAC_SDK = macosx
include(mac.conf)
diff --git a/mkspecs/darwin-g++/qmake.conf b/mkspecs/darwin-g++/qmake.conf
index 24a6224b7c..ab333b1684 100644
--- a/mkspecs/darwin-g++/qmake.conf
+++ b/mkspecs/darwin-g++/qmake.conf
@@ -5,7 +5,7 @@
#
MAKEFILE_GENERATOR = UNIX
-QMAKE_PLATFORM = mac macx
+QMAKE_PLATFORM = osx macx mac darwin
CONFIG += native_precompiled_headers
DEFINES += __USE_WS_X11__
diff --git a/mkspecs/devices/linux-imx6-g++/qeglfshooks_imx6.cpp b/mkspecs/devices/linux-imx6-g++/qeglfshooks_imx6.cpp
index a1fd633c28..6f59b73921 100644
--- a/mkspecs/devices/linux-imx6-g++/qeglfshooks_imx6.cpp
+++ b/mkspecs/devices/linux-imx6-g++/qeglfshooks_imx6.cpp
@@ -51,6 +51,7 @@ public:
virtual QSize screenSize() const;
virtual EGLNativeWindowType createNativeWindow(const QSize &size, const QSurfaceFormat &format);
virtual void destroyNativeWindow(EGLNativeWindowType window);
+ virtual EGLNativeDisplayType platformDisplay() const;
private:
QSize mScreenSize;
@@ -72,6 +73,11 @@ QSize QEglFSImx6Hooks::screenSize() const
return mScreenSize;
}
+EGLNativeDisplayType QEglFSImx6Hooks::platformDisplay() const
+{
+ return mNativeDisplay;
+}
+
EGLNativeWindowType QEglFSImx6Hooks::createNativeWindow(const QSize &size, const QSurfaceFormat &format)
{
Q_UNUSED(format);
diff --git a/mkspecs/features/configure.prf b/mkspecs/features/configure.prf
index b4569df6d5..39144e7216 100644
--- a/mkspecs/features/configure.prf
+++ b/mkspecs/features/configure.prf
@@ -7,9 +7,6 @@ equals(MAKEFILE_GENERATOR, UNIX) {
QMAKE_MAKE = mingw32-make
} else:if(equals(MAKEFILE_GENERATOR, MSVC.NET)|equals(MAKEFILE_GENERATOR, MSBUILD)) {
QMAKE_MAKE = nmake
-} else:ios {
- # iOS unsets MAKEFILE_GENERATOR in its default_pre.prf
- QMAKE_MAKE = make
} else {
error("Configure tests are not supported with the $$MAKEFILE_GENERATOR Makefile generator.")
}
diff --git a/mkspecs/features/create_cmake.prf b/mkspecs/features/create_cmake.prf
index d8bef46481..59c3fafac3 100644
--- a/mkspecs/features/create_cmake.prf
+++ b/mkspecs/features/create_cmake.prf
@@ -60,12 +60,6 @@ contains(CMAKE_BIN_DIR, "^\\.\\./.*") {
CMAKE_DLL_DIR_IS_ABSOLUTE = $$CMAKE_LIB_DIR_IS_ABSOLUTE
}
-CMAKE_HOST_DATA_DIR = $$cmakeRelativePath($$[QT_HOST_DATA], $$[QT_INSTALL_PREFIX])
-contains(CMAKE_HOST_DATA_DIR, "^\\.\\./.*") {
- CMAKE_HOST_DATA_DIR = $$[QT_HOST_DATA]/
- CMAKE_HOST_DATA_DIR_IS_ABSOLUTE = True
-}
-
static|staticlib:CMAKE_STATIC_TYPE = true
CMAKE_DEBUG_TYPE =
diff --git a/mkspecs/features/gcov.prf b/mkspecs/features/gcov.prf
new file mode 100644
index 0000000000..330831fc0e
--- /dev/null
+++ b/mkspecs/features/gcov.prf
@@ -0,0 +1,31 @@
+#
+# Tested with gcov 4.8.1
+# http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/Gcov.html
+
+# To instrument a Qt application or library with the gcov coverage
+# tool, do `CONFIG+=gcov' in the application .pro file.
+#
+# To instrument Qt itself with gcov, use the `-gcov' configure
+# option.
+
+# The .gcno file is generated when the source file is compiled.
+# The .gcda file is generated when a program is executed.
+
+# Example how to generate the html output after you've run the program or test
+#
+# lcov --capture --directory . --output-file coverage-gcov.info --no-external
+# lcov --output-file coverage-gcov.info --remove coverage-gcov.info '*.moc*' '.*rcc*' '*3rdparty*'
+# genhtml coverage-gcov.info --output-directory doc/coverage
+
+# If you want to use gcov directly, you most likely need to manually move the .gcda and .gcno files
+# along with the program.
+#
+# mv .obj/debug-shared/tst_example.gc* .
+# gcov -b -c tst_example.cpp
+
+QMAKE_CFLAGS += -fprofile-arcs -ftest-coverage
+QMAKE_CXXFLAGS += -fprofile-arcs -ftest-coverage
+QMAKE_OBJECTIVE_CFLAGS += -fprofile-arcs -ftest-coverage
+QMAKE_LFLAGS += -fprofile-arcs -ftest-coverage
+
+QMAKE_CLEAN += $(OBJECTS_DIR)*.gcno and $(OBJECTS_DIR)*.gcda
diff --git a/mkspecs/features/ios/default_post.prf b/mkspecs/features/ios/default_post.prf
index e9d2149351..654255eb1f 100644
--- a/mkspecs/features/ios/default_post.prf
+++ b/mkspecs/features/ios/default_post.prf
@@ -1,40 +1,44 @@
-CONFIG(qt):contains(QT, gui):equals(TEMPLATE, app): CONFIG += gui_app
+equals(TEMPLATE, app) {
+ qt:app_bundle:!macx-xcode {
+ # For Qt applications we want Xcode project files as the generated output,
+ # but since qmake doesn't handle the transition between makefiles and Xcode
+ # project files (which happens when using subdirs), we create a wrapper
+ # makefile that takes care of generating the Xcode project, and allows
+ # building by calling out to xcodebuild.
+ TEMPLATE = aux
-isEmpty(MAKEFILE_GENERATOR) {
- gui_app:app_bundle: \
- # For applications we want Xcode project files
- MAKEFILE_GENERATOR = XCODE
- else: \
- # For libs, etc we still want regular Makefiles
- MAKEFILE_GENERATOR = UNIX
-}
+ CONFIG -= have_target qt staticlib dll
+ SOURCES =
+ RESOURCES =
+ INSTALLS =
+
+ TARGET_XCODE_PROJECT_DIR = $${TARGET}.xcodeproj
+
+ system("cd $$system_quote($$OUT_PWD) && $${QMAKE_QMAKE} $$system_quote($$_PRO_FILE_) -spec macx-xcode")
-gui_app {
- # We have to do the link and dependency resolution for the platform plugin
- # manually, since QTPLUGIN and the prl lookup logic does not support
- # the -force_load link style. The -force_load option ensures that all
- # symbols from the static library are included, not just the ones the
- # linker have seen a use for so far. We need this because we load the platform
- # plugin from the platform plugin itself, using Q_IMPORT_PLUGIN.
- lib_path_and_base = $$[QT_INSTALL_PLUGINS/get]/platforms/libqios$$qtPlatformTargetSuffix()
- LIBS += "-force_load $${lib_path_and_base}.$${QMAKE_EXTENSION_STATICLIB}"
- LIBS += $$fromfile($${lib_path_and_base}.prl, QMAKE_PRL_LIBS)
+ # We use xcodebuild to do the actual build, but filter out the verbose
+ # output that shows all environment variables for each build step.
+ xcodebuild_build.commands = "@xcodebuild build | grep -v setenv"
+ QMAKE_EXTRA_TARGETS += xcodebuild_build
+ all.depends = xcodebuild_build
+ QMAKE_EXTRA_TARGETS += all
- # Which means we don't want the auto-generated import for the platform plugin
- CONFIG -= import_qpa_plugin
+ # We do the same for the clean action
+ xcodebuild_clean.commands = "@xcodebuild clean"
+ QMAKE_EXTRA_TARGETS += xcodebuild_clean
+ clean.depends = xcodebuild_clean
+ QMAKE_EXTRA_TARGETS += clean
- !no_main_wrapper {
- # We link the iosmain library manually as well, since it's not really a plugin
- lib_name = qiosmain
- lib_path_and_base = $$[QT_INSTALL_PLUGINS/get]/platforms/lib$${lib_name}$$qtPlatformTargetSuffix()
- LIBS += -L$$[QT_INSTALL_PLUGINS/get]/platforms -l$${lib_name}$$qtPlatformTargetSuffix()
- LIBS += $$fromfile($${lib_path_and_base}.prl, QMAKE_PRL_LIBS)
- DEFINES += main=qt_main
+ # And distclean
+ xcodebuild_distclean.commands = "$(DEL_FILE) -R $$TARGET_XCODE_PROJECT_DIR"
+ QMAKE_EXTRA_TARGETS += xcodebuild_distclean
+ distclean.depends = xcodebuild_distclean
+ QMAKE_EXTRA_TARGETS += distclean
}
}
-contains(MAKEFILE_GENERATOR, XCODE) {
+macx-xcode {
ios_device_family.name = TARGETED_DEVICE_FAMILY
ios_device_family.value = $$QMAKE_IOS_TARGETED_DEVICE_FAMILY
QMAKE_MAC_XCODE_SETTINGS += ios_device_family
@@ -46,24 +50,27 @@ isEmpty(QT_ARCH) {
# but we fail to pick up the architecture since we're not passing -arch
# yet. Xcode does not seem to have a way to run the shared toolchain
# in a way that will automatically do this (for example xcrun -sdk).
- contains(QMAKE_MAC_SDK, iphoneos.*): QT_ARCH = armv7
+ contains(QMAKE_MAC_SDK, iphoneos.*): QT_ARCH = arm
else: QT_ARCH = i386 # Simulator
-} else {
- # Fix up the QT_ARCH to be more specific
- equals(QT_ARCH, arm) {
- # Samsung S5PC100, Apple A4, A5, A5X
- QT_ARCH = armv7
-
- # FIXME: How do we support armv7s when Qt can't do universal builds?
- }
}
-!equals(MAKEFILE_GENERATOR, XCODE) {
- arch_flag = -arch $$QT_ARCH
- QMAKE_CFLAGS += $$arch_flag
- QMAKE_CXXFLAGS += $$arch_flag
- QMAKE_OBJECTIVE_CFLAGS += $$arch_flag
- QMAKE_LFLAGS += $$arch_flag
+# Be more specific about which architecture we're targeting
+equals(QT_ARCH, arm): \
+ actual_archs = armv7
+else: \
+ actual_archs = $$QT_ARCH
+
+macx-xcode {
+ QMAKE_XCODE_ARCHS = $$actual_archs
+} else {
+ for(arch, actual_archs): \
+ arch_flags += -arch $$arch
+
+ QMAKE_CFLAGS += $$arch_flags
+ QMAKE_CXXFLAGS += $$arch_flags
+ QMAKE_OBJECTIVE_CFLAGS += $$arch_flags
+ QMAKE_LFLAGS += $$arch_flags
}
+unset(actual_archs)
load(default_post)
diff --git a/mkspecs/features/ios/default_pre.prf b/mkspecs/features/ios/default_pre.prf
index 7cfbc03eb5..5db8d98d6c 100644
--- a/mkspecs/features/ios/default_pre.prf
+++ b/mkspecs/features/ios/default_pre.prf
@@ -1,5 +1,3 @@
-# Unset makefile generator, so we can auto-detect value in default_post
-!macx-xcode: unset(MAKEFILE_GENERATOR)
load(default_pre)
diff --git a/mkspecs/features/ios/qt.prf b/mkspecs/features/ios/qt.prf
new file mode 100644
index 0000000000..80d4907acd
--- /dev/null
+++ b/mkspecs/features/ios/qt.prf
@@ -0,0 +1,24 @@
+
+equals(TEMPLATE, app):contains(QT, gui(-private)?) {
+ LIBS *= -L$$[QT_INSTALL_PLUGINS/get]/platforms
+
+ lib_name = qios
+ lib_path_and_base = $$[QT_INSTALL_PLUGINS/get]/platforms/lib$${lib_name}$$qtPlatformTargetSuffix()
+ LIBS += -l$${lib_name}$$qtPlatformTargetSuffix() $$fromfile($${lib_path_and_base}.prl, QMAKE_PRL_LIBS)
+
+ # By marking qt_registerPlatformPlugin as undefined, we ensure that
+ # the plugin.o translation unit is considered for inclusion in
+ # the final binary, which in turn ensures that the plugin's
+ # static initializer is included and run.
+ QMAKE_LFLAGS += -u _qt_registerPlatformPlugin
+
+ # We do link and dependency resolution for the platform plugin
+ # manually, since we know we always need the plugin, so we don't
+ # need to generate an import for it.
+ CONFIG -= import_qpa_plugin
+
+ # FIXME: Solve using 'ld -r -alias -unexported_symbol' instead
+ !no_main_wrapper: DEFINES += main=qt_user_main
+}
+
+load(qt)
diff --git a/mkspecs/features/java.prf b/mkspecs/features/java.prf
index d8ceb536a7..7815b5ef38 100644
--- a/mkspecs/features/java.prf
+++ b/mkspecs/features/java.prf
@@ -12,10 +12,11 @@ android {
isEmpty(BUILD_TOOLS_REVISION): BUILD_TOOLS_REVISION = 17.0.0
}
- !exists($$SDK_ROOT/platforms/$$API_VERSION/android.jar) {
- error("The Path $$SDK_ROOT/platforms/$$API_VERSION/android.jar does not exist. Make sure the ANDROID_SDK_ROOT and ANDROID_API_VERSION environment variables are correctly set.")
+ ANDROID_JAR_FILE = $$SDK_ROOT/platforms/$$API_VERSION/android.jar
+ !exists($$ANDROID_JAR_FILE) {
+ error("The Path $$ANDROID_JAR_FILE does not exist. Make sure the ANDROID_SDK_ROOT and ANDROID_API_VERSION environment variables are correctly set.")
}
- JAVACLASSPATH += $$SDK_ROOT/platforms/$$API_VERSION/android.jar
+ JAVACLASSPATH += $$ANDROID_JAR_FILE
# FIXME: This is a hack to work around some hardcoded values in the android.prf. The
# android.prf should be fixed and this should be removed.
@@ -37,7 +38,7 @@ CONFIG += plugin no_plugin_name_prefix
javac.input = JAVASOURCES
javac.output = $$CLASS_DIR
javac.CONFIG += combine
-javac.commands = javac -source 6 -target 6 -cp $$shell_quote($$shell_path($$join(JAVACLASSPATH, $$QMAKE_DIRLIST_SEP))) -d $$shell_quote($$CLASS_DIR) ${QMAKE_FILE_IN}
+javac.commands = javac -source 6 -target 6 -Xlint:unchecked -bootclasspath $$ANDROID_JAR_FILE -cp $$shell_quote($$shell_path($$join(JAVACLASSPATH, $$QMAKE_DIRLIST_SEP))) -d $$shell_quote($$CLASS_DIR) ${QMAKE_FILE_IN}
# Force rebuild every time, because we don't know the paths of the destination files
# as they depend on the code.
javac.depends = FORCE
diff --git a/mkspecs/features/qt_common.prf b/mkspecs/features/qt_common.prf
index 10b7736749..3c5d4b9dd6 100644
--- a/mkspecs/features/qt_common.prf
+++ b/mkspecs/features/qt_common.prf
@@ -24,31 +24,34 @@ warnings_are_errors:warning_clean {
# This setting is compiler-dependent anyway because it depends on the version of the
# compiler.
clang {
- # Apple clang 4.0+ or clang 3.1+
- greaterThan(QT_CLANG_MAJOR_VERSION, 3) | \
- if(equals(QT_CLANG_MAJOR_VERSION, 3):greaterThan(QT_CLANG_MINOR_VERSION, 1)) | \
- greaterThan(QT_APPLE_CLANG_MAJOR_VERSION, 3) {
- QMAKE_CXXFLAGS += -Werror -Wno-error=\\$${LITERAL_HASH}warnings $$WERROR
+ # Apple clang 4.0-4.2
+ # Regular clang is not tested
+ ver = $${QT_APPLE_CLANG_MAJOR_VERSION}.$${QT_APPLE_CLANG_MINOR_VERSION}
+ contains(ver, "4\\.[012]") {
+ QMAKE_CXXFLAGS += -Werror -Wno-error=\\$${LITERAL_HASH}warnings -Wno-error=deprecated $$WERROR
}
- } else:intel_icc {
- # Intel CC 13.0+ (a.k.a. Intel Composer XE 2013)
- greaterThan(QT_ICC_MAJOR_VERSION, 12) {
+ } else:intel_icc:linux {
+ # Intel CC 13.0 - 14.0, on Linux only
+ ver = $${QT_ICC_MAJOR_VERSION}.$${QT_ICC_MINOR_VERSION}
+ linux:contains(ver, "(13\\.|14\\.0)") {
# 177: function "entity" was declared but never referenced
# (too aggressive; ICC reports even for functions created due to template instantiation)
# 1224: #warning directive
+ # 1478: function "entity" (declared at line N) was declared deprecated
# 1881: argument must be a constant null pointer value
# (NULL in C++ is usually a literal 0)
- QMAKE_CXXFLAGS += -Werror -ww177,1224,1881 $$WERROR
+ QMAKE_CXXFLAGS += -Werror -ww177,1224,1478,1881 $$WERROR
}
- } else:gcc {
- # GCC 4.6+
- # note: there was no GCC 3.6 and this assumes no one is crazy enough to compile Qt with GCC 2.7
- greaterThan(QT_GCC_MAJOR_VERSION, 4)|greaterThan(QT_GCC_MINOR_VERSION, 5) {
- QMAKE_CXXFLAGS += -Werror -Wno-error=cpp $$WERROR
+ } else:gcc:!clang:!intel_icc {
+ # GCC 4.6-4.8
+ ver = $${QT_GCC_MAJOR_VERSION}.$${QT_GCC_MINOR_VERSION}
+ contains(ver, "4\\.[678]") {
+ QMAKE_CXXFLAGS += -Werror -Wno-error=cpp -Wno-error=deprecated $$WERROR
# GCC prints this bogus warning, after it has inlined a lot of code
# error: assuming signed overflow does not occur when assuming that (X + c) < X is always false
QMAKE_CXXFLAGS += -Wno-error=strict-overflow
}
}
+ unset(ver)
}
diff --git a/mkspecs/features/qt_docs.prf b/mkspecs/features/qt_docs.prf
index 85e2db25bc..be3cd5273c 100644
--- a/mkspecs/features/qt_docs.prf
+++ b/mkspecs/features/qt_docs.prf
@@ -34,7 +34,7 @@ qtmver.value = $$replace(qtver.value, ^(\\d+\\.\\d+).*$, \\1)
qtvertag.name = QT_VERSION_TAG
qtvertag.value = $$replace(qtver.value, \.,)
qtdocs.name = QT_INSTALL_DOCS
-qtdocs.value = $$[QT_INSTALL_DOCS/get]
+qtdocs.value = $$[QT_INSTALL_DOCS/src]
qtAddToolEnv(QDOC, qtver qtmver qtvertag qtdocs)
doc_command = $$QDOC $$QMAKE_DOCS
prepare_docs {
diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf
index 07821fd09b..c8d151ce4d 100644
--- a/mkspecs/features/qt_functions.prf
+++ b/mkspecs/features/qt_functions.prf
@@ -71,11 +71,6 @@ defineTest(qtAddModule) {
MODULE_LIBS_ADD = $$MODULE_LIBS
MODULE_LIBS_ADD -= $$QMAKE_DEFAULT_LIBDIRS
- INCLUDEPATH *= $$MODULE_INCLUDES
- auto_use_privates|isEqual(2, UsePrivate) { # Tests function parameter 2 ($$2) being equal to 'UsePrivate'
- INCLUDEPATH += $$eval(QT.$${1}.private_includes)
- }
-
unset(LINKAGE)
mac:contains(MODULE_CONFIG, lib_bundle) {
FRAMEWORK_INCLUDE = $${MODULE_LIBS}/$${MODULE_NAME}.framework/Headers
@@ -88,6 +83,10 @@ defineTest(qtAddModule) {
$$FRAMEWORK_INCLUDE/$$eval(QT.$${1}.VERSION)/$$MODULE_NAME
QMAKE_FRAMEWORKPATH *= $${MODULE_LIBS}
LINKAGE += -framework $${MODULE_NAME}$${QT_LIBINFIX}
+ } else {
+ INCLUDEPATH *= $$MODULE_INCLUDES
+ auto_use_privates|isEqual(2, UsePrivate): \
+ INCLUDEPATH += $$eval(QT.$${1}.private_includes)
}
# Re-insert the major version in the library name (cf qtLibraryTarget above)
diff --git a/mkspecs/features/simd.prf b/mkspecs/features/simd.prf
index 14da926dc3..e0cd5a3a58 100644
--- a/mkspecs/features/simd.prf
+++ b/mkspecs/features/simd.prf
@@ -12,6 +12,9 @@
# Get the SIMD flags
load(qt_build_config)
+# Set QT_CPU_FEATURES for convenience
+QT_CPU_FEATURES = $$eval(QT_CPU_FEATURES.$$QT_ARCH)
+
#
# Set up compilers for SIMD (SSE/AVX, NEON etc)
#
diff --git a/mkspecs/features/spec_post.prf b/mkspecs/features/spec_post.prf
index c9e9f8b2f6..ad03c9c428 100644
--- a/mkspecs/features/spec_post.prf
+++ b/mkspecs/features/spec_post.prf
@@ -9,7 +9,7 @@ isEmpty(QMAKE_PLATFORM) {
isEmpty(TARGET_PLATFORM) {
equals(MAKEFILE_GENERATOR, UNIX) {
equals(QMAKE_HOST.os, Darwin): \
- TARGET_PLATFORM = macx
+ TARGET_PLATFORM = macx # backwards compatibility; cannot change
else: \
TARGET_PLATFORM = unix
} else:if(equals(MAKEFILE_GENERATOR, MSVC.NET) \
@@ -28,12 +28,18 @@ isEmpty(QMAKE_PLATFORM) {
equals(TARGET_PLATFORM, unix): \
QMAKE_PLATFORM = unix
else:equals(TARGET_PLATFORM, macx): \
- QMAKE_PLATFORM = mac macx unix
+ QMAKE_PLATFORM = osx macx mac darwin unix
else:equals(TARGET_PLATFORM, win32): \
QMAKE_PLATFORM = win32
else: \
error("Qmake spec sets an invalid TARGET_PLATFORM.")
}
+
+contains(QMAKE_PLATFORM, macx):!contains(QMAKE_PLATFORM, osx) {
+ warning("qmake spec specifies platform macx, but not osx.")
+ QMAKE_PLATFORM = osx $$QMAKE_PLATFORM
+}
+
CONFIG += $$QMAKE_PLATFORM
isEmpty(QMAKE_COMPILER) {
diff --git a/mkspecs/macx-clang-libc++-32/qmake.conf b/mkspecs/macx-clang-libc++-32/qmake.conf
deleted file mode 100644
index 3f7342da0b..0000000000
--- a/mkspecs/macx-clang-libc++-32/qmake.conf
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# qmake configuration for 32-bit Clang on OS X
-#
-
-warning("QMakespec macx-clang-libc++-32 is deprecated. Use macx-clang-32 instead.")
-
-MAKEFILE_GENERATOR = UNIX
-CONFIG += app_bundle incremental global_init_link_order lib_version_first plugin_no_soname
-QMAKE_INCREMENTAL_STYLE = sublib
-
-include(../common/macx.conf)
-include(../common/gcc-base-mac.conf)
-include(../common/clang.conf)
-include(../common/clang-mac.conf)
-
-QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7
-
-QMAKE_CFLAGS += -arch i386
-QMAKE_OBJECTIVE_CFLAGS += -arch i386 -stdlib=libc++
-QMAKE_CXXFLAGS += -arch i386 -stdlib=libc++
-QMAKE_LFLAGS += -arch i386 -stdlib=libc++
-
-load(qt_config)
diff --git a/mkspecs/macx-clang-libc++/qmake.conf b/mkspecs/macx-clang-libc++/qmake.conf
deleted file mode 100644
index 7f4151e81b..0000000000
--- a/mkspecs/macx-clang-libc++/qmake.conf
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# qmake configuration for Clang on OS X
-#
-
-warning("QMakespec macx-clang-libc++ is deprecated. Use macx-clang instead.")
-
-MAKEFILE_GENERATOR = UNIX
-CONFIG += app_bundle incremental global_init_link_order lib_version_first plugin_no_soname
-QMAKE_INCREMENTAL_STYLE = sublib
-
-include(../common/macx.conf)
-include(../common/gcc-base-mac.conf)
-include(../common/clang.conf)
-include(../common/clang-mac.conf)
-
-QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7
-
-QMAKE_OBJECTIVE_CFLAGS += -stdlib=libc++
-QMAKE_CXXFLAGS += -stdlib=libc++
-QMAKE_LFLAGS += -stdlib=libc++
-
-load(qt_config)
diff --git a/mkspecs/macx-xcode/Info.plist.app b/mkspecs/macx-xcode/Info.plist.app
deleted file mode 100755
index 187a8e0aa4..0000000000
--- a/mkspecs/macx-xcode/Info.plist.app
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>NSPrincipalClass</key>
- <string>NSApplication</string>
- <key>CFBundleIconFile</key>
- <string>@ICON@</string>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleGetInfoString</key>
- <string>Created by Qt/QMake</string>
- <key>CFBundleSignature</key>
- <string>@TYPEINFO@</string>
- <key>CFBundleExecutable</key>
- <string>@EXECUTABLE@</string>
- <key>CFBundleIdentifier</key>
- <string>com.yourcompany.@EXECUTABLE@</string>
- <key>NOTE</key>
- <string>This file was generated by Qt/QMake.</string>
-</dict>
-</plist>
diff --git a/mkspecs/macx-xcode/Info.plist.lib b/mkspecs/macx-xcode/Info.plist.lib
deleted file mode 100644
index 63f1a945c2..0000000000
--- a/mkspecs/macx-xcode/Info.plist.lib
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundlePackageType</key>
- <string>FMWK</string>
- <key>CFBundleShortVersionString</key>
- <string>@SHORT_VERSION@</string>
- <key>CFBundleGetInfoString</key>
- <string>Created by Qt/QMake</string>
- <key>CFBundleSignature</key>
- <string>@TYPEINFO@</string>
- <key>CFBundleExecutable</key>
- <string>@LIBRARY@</string>
- <key>NOTE</key>
- <string>Please, do NOT change this file -- It was generated by Qt/QMake.</string>
-</dict>
-</plist>
diff --git a/mkspecs/macx-xcode/features/default_post.prf b/mkspecs/macx-xcode/features/default_post.prf
new file mode 100644
index 0000000000..4c4746bb2b
--- /dev/null
+++ b/mkspecs/macx-xcode/features/default_post.prf
@@ -0,0 +1,7 @@
+
+isEmpty(QMAKE_INFO_PLIST) {
+ plist_template = $$absolute_path(../../$$[QMAKE_XSPEC]/Info.plist.$${TEMPLATE})
+ exists($$plist_template): QMAKE_INFO_PLIST = $$plist_template
+}
+
+load(default_post)
diff --git a/qmake/Makefile.unix b/qmake/Makefile.unix
index 1a50de8004..a77b1b22dc 100644
--- a/qmake/Makefile.unix
+++ b/qmake/Makefile.unix
@@ -4,7 +4,7 @@ QMKGENSRC = $(QMKSRC)/generators
#qmake code
OBJS=project.o option.o property.o main.o ioutils.o proitems.o \
- qmakeglobals.o qmakeparser.o qmakeevaluator.o qmakebuiltins.o \
+ qmakevfs.o qmakeglobals.o qmakeparser.o qmakeevaluator.o qmakebuiltins.o \
makefile.o unixmake2.o unixmake.o \
mingw_make.o winmakefile.o projectgenerator.o \
meta.o makefiledeps.o metamakefile.o xmloutput.o pbuilder_pbx.o \
@@ -90,7 +90,7 @@ CPPFLAGS = -g $(EXTRA_CPPFLAGS) \
-I$(BUILD_PATH)/src/corelib/global -DHAVE_QCONFIG_CPP \
-I$(QMAKESPEC) \
-I$(SOURCE_PATH)/tools/shared \
- -DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DPROEVALUATOR_FULL -DPROEVALUATOR_DEBUG \
+ -DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DPROEVALUATOR_FULL \
-DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_NO_COMPONENT -DQT_NO_COMPRESS \
-DQT_NO_THREAD -DQT_NO_QOBJECT -DQT_NO_GEOM_VARIANT -DQT_NO_DATASTREAM \
-DQT_CRYPTOGRAPHICHASH_ONLY_SHA1
@@ -126,6 +126,9 @@ proitems.o: $(QMKLIBSRC)/proitems.cpp
qmakeglobals.o: $(QMKLIBSRC)/qmakeglobals.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
+qmakevfs.o: $(QMKLIBSRC)/qmakevfs.cpp
+ $(CXX) -c -o $@ $(CXXFLAGS) $<
+
qmakeparser.o: $(QMKLIBSRC)/qmakeparser.cpp
$(CXX) -c -o $@ $(CXXFLAGS) $<
diff --git a/qmake/Makefile.win32 b/qmake/Makefile.win32
index ac66887b32..9a772d9760 100644
--- a/qmake/Makefile.win32
+++ b/qmake/Makefile.win32
@@ -38,7 +38,7 @@ CFLAGS_BARE = -c -Fo./ \
-I$(BUILD_PATH)\src\corelib\global -DHAVE_QCONFIG_CPP \
-I$(SOURCE_PATH)\mkspecs\$(QMAKESPEC) \
-I$(SOURCE_PATH)\tools\shared \
- -DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DPROEVALUATOR_FULL -DPROEVALUATOR_DEBUG \
+ -DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DPROEVALUATOR_FULL \
-DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_NO_COMPONENT -DQT_NO_COMPRESS \
-DQT_NO_THREAD -DQT_NO_QOBJECT -DQT_NO_GEOM_VARIANT -DQT_NO_DATASTREAM \
-DUNICODE -DQT_CRYPTOGRAPHICHASH_ONLY_SHA1
@@ -57,7 +57,7 @@ ADDCLEAN = vc60.pdb vc70.pdb qmake.pdb qmake.ilk
!ENDIF
#qmake code
-OBJS = project.obj main.obj ioutils.obj proitems.obj \
+OBJS = project.obj main.obj ioutils.obj proitems.obj qmakevfs.obj \
qmakeglobals.obj qmakeparser.obj qmakeevaluator.obj qmakebuiltins.obj \
makefile.obj unixmake.obj unixmake2.obj mingw_make.obj \
option.obj winmakefile.obj projectgenerator.obj property.obj meta.obj \
diff --git a/qmake/doc/src/images/qmake-precompile-ui.png b/qmake/doc/images/qmake-precompile-ui.png
index 8c7b936fee..8c7b936fee 100644
--- a/qmake/doc/src/images/qmake-precompile-ui.png
+++ b/qmake/doc/images/qmake-precompile-ui.png
Binary files differ
diff --git a/qmake/doc/qmake.qdocconf b/qmake/doc/qmake.qdocconf
index cd8ac4d0ab..6b52ccc585 100644
--- a/qmake/doc/qmake.qdocconf
+++ b/qmake/doc/qmake.qdocconf
@@ -22,6 +22,9 @@ language = Cpp
sources = src/qmake-manual.qdoc
+imagedirs = images
+exampledirs = snippets
+
depends += \
activeqt \
qt3d \
@@ -67,9 +70,8 @@ depends += \
qtwebkit \
qtwebkitexamples \
qtwidgets \
+ qtwinextras \
qtx11extras \
qtxml \
qtxmlpatterns
-imagedirs = src/images
-exampledirs = src
diff --git a/qmake/doc/src/snippets/code/doc_src_qmake-manual.cpp b/qmake/doc/snippets/code/doc_src_qmake-manual.cpp
index bd63e600cd..bd63e600cd 100644
--- a/qmake/doc/src/snippets/code/doc_src_qmake-manual.cpp
+++ b/qmake/doc/snippets/code/doc_src_qmake-manual.cpp
diff --git a/qmake/doc/src/snippets/code/doc_src_qmake-manual.pro b/qmake/doc/snippets/code/doc_src_qmake-manual.pro
index ff1edb878d..ff1edb878d 100644
--- a/qmake/doc/src/snippets/code/doc_src_qmake-manual.pro
+++ b/qmake/doc/snippets/code/doc_src_qmake-manual.pro
diff --git a/qmake/doc/src/snippets/qmake/comments.pro b/qmake/doc/snippets/qmake/comments.pro
index 957052c81d..957052c81d 100644
--- a/qmake/doc/src/snippets/qmake/comments.pro
+++ b/qmake/doc/snippets/qmake/comments.pro
diff --git a/qmake/doc/src/snippets/qmake/configscopes.pro b/qmake/doc/snippets/qmake/configscopes.pro
index 6ab7f7c428..6ab7f7c428 100644
--- a/qmake/doc/src/snippets/qmake/configscopes.pro
+++ b/qmake/doc/snippets/qmake/configscopes.pro
diff --git a/qmake/doc/src/snippets/qmake/debug_and_release.pro b/qmake/doc/snippets/qmake/debug_and_release.pro
index 92e8dbf76a..92e8dbf76a 100644
--- a/qmake/doc/src/snippets/qmake/debug_and_release.pro
+++ b/qmake/doc/snippets/qmake/debug_and_release.pro
diff --git a/qmake/doc/src/snippets/qmake/delegate.h b/qmake/doc/snippets/qmake/delegate.h
index 92c7eb6a48..92c7eb6a48 100644
--- a/qmake/doc/src/snippets/qmake/delegate.h
+++ b/qmake/doc/snippets/qmake/delegate.h
diff --git a/qmake/doc/src/snippets/qmake/dereferencing.pro b/qmake/doc/snippets/qmake/dereferencing.pro
index ff0c97995c..ff0c97995c 100644
--- a/qmake/doc/src/snippets/qmake/dereferencing.pro
+++ b/qmake/doc/snippets/qmake/dereferencing.pro
diff --git a/qmake/doc/src/snippets/qmake/destdir.pro b/qmake/doc/snippets/qmake/destdir.pro
index b2f943904a..b2f943904a 100644
--- a/qmake/doc/src/snippets/qmake/destdir.pro
+++ b/qmake/doc/snippets/qmake/destdir.pro
diff --git a/qmake/doc/src/snippets/qmake/dirname.pro b/qmake/doc/snippets/qmake/dirname.pro
index 59e1f20b3f..59e1f20b3f 100644
--- a/qmake/doc/src/snippets/qmake/dirname.pro
+++ b/qmake/doc/snippets/qmake/dirname.pro
diff --git a/qmake/doc/src/snippets/qmake/environment.pro b/qmake/doc/snippets/qmake/environment.pro
index 808bdeba47..808bdeba47 100644
--- a/qmake/doc/src/snippets/qmake/environment.pro
+++ b/qmake/doc/snippets/qmake/environment.pro
diff --git a/qmake/doc/src/snippets/qmake/functions.pro b/qmake/doc/snippets/qmake/functions.pro
index 2766120719..2766120719 100644
--- a/qmake/doc/src/snippets/qmake/functions.pro
+++ b/qmake/doc/snippets/qmake/functions.pro
diff --git a/qmake/doc/src/snippets/qmake/include.pro b/qmake/doc/snippets/qmake/include.pro
index 37e7156957..37e7156957 100644
--- a/qmake/doc/src/snippets/qmake/include.pro
+++ b/qmake/doc/snippets/qmake/include.pro
diff --git a/qmake/doc/src/snippets/qmake/main.cpp b/qmake/doc/snippets/qmake/main.cpp
index 92c7eb6a48..92c7eb6a48 100644
--- a/qmake/doc/src/snippets/qmake/main.cpp
+++ b/qmake/doc/snippets/qmake/main.cpp
diff --git a/qmake/doc/src/snippets/qmake/model.cpp b/qmake/doc/snippets/qmake/model.cpp
index 92c7eb6a48..92c7eb6a48 100644
--- a/qmake/doc/src/snippets/qmake/model.cpp
+++ b/qmake/doc/snippets/qmake/model.cpp
diff --git a/qmake/doc/src/snippets/qmake/model.h b/qmake/doc/snippets/qmake/model.h
index 92c7eb6a48..92c7eb6a48 100644
--- a/qmake/doc/src/snippets/qmake/model.h
+++ b/qmake/doc/snippets/qmake/model.h
diff --git a/qmake/doc/src/snippets/qmake/other.pro b/qmake/doc/snippets/qmake/other.pro
index e69de29bb2..e69de29bb2 100644
--- a/qmake/doc/src/snippets/qmake/other.pro
+++ b/qmake/doc/snippets/qmake/other.pro
diff --git a/qmake/doc/src/snippets/qmake/paintwidget_mac.cpp b/qmake/doc/snippets/qmake/paintwidget_mac.cpp
index 92c7eb6a48..92c7eb6a48 100644
--- a/qmake/doc/src/snippets/qmake/paintwidget_mac.cpp
+++ b/qmake/doc/snippets/qmake/paintwidget_mac.cpp
diff --git a/qmake/doc/src/snippets/qmake/paintwidget_unix.cpp b/qmake/doc/snippets/qmake/paintwidget_unix.cpp
index c39fc2cbf6..c39fc2cbf6 100644
--- a/qmake/doc/src/snippets/qmake/paintwidget_unix.cpp
+++ b/qmake/doc/snippets/qmake/paintwidget_unix.cpp
diff --git a/qmake/doc/src/snippets/qmake/paintwidget_win.cpp b/qmake/doc/snippets/qmake/paintwidget_win.cpp
index 92c7eb6a48..92c7eb6a48 100644
--- a/qmake/doc/src/snippets/qmake/paintwidget_win.cpp
+++ b/qmake/doc/snippets/qmake/paintwidget_win.cpp
diff --git a/qmake/doc/src/snippets/qmake/precompile-stable.h b/qmake/doc/snippets/qmake/precompile-stable.h
index eef8cef728..eef8cef728 100644
--- a/qmake/doc/src/snippets/qmake/precompile-stable.h
+++ b/qmake/doc/snippets/qmake/precompile-stable.h
diff --git a/qmake/doc/src/snippets/qmake/project_location.pro b/qmake/doc/snippets/qmake/project_location.pro
index 09d9b3d9d0..09d9b3d9d0 100644
--- a/qmake/doc/src/snippets/qmake/project_location.pro
+++ b/qmake/doc/snippets/qmake/project_location.pro
diff --git a/qmake/doc/src/snippets/qmake/qtconfiguration.pro b/qmake/doc/snippets/qmake/qtconfiguration.pro
index 55e13be352..55e13be352 100644
--- a/qmake/doc/src/snippets/qmake/qtconfiguration.pro
+++ b/qmake/doc/snippets/qmake/qtconfiguration.pro
diff --git a/qmake/doc/src/snippets/qmake/quoting.pro b/qmake/doc/snippets/qmake/quoting.pro
index 62efb2042e..62efb2042e 100644
--- a/qmake/doc/src/snippets/qmake/quoting.pro
+++ b/qmake/doc/snippets/qmake/quoting.pro
diff --git a/qmake/doc/src/snippets/qmake/replace.pro b/qmake/doc/snippets/qmake/replace.pro
index 504e01a018..504e01a018 100644
--- a/qmake/doc/src/snippets/qmake/replace.pro
+++ b/qmake/doc/snippets/qmake/replace.pro
diff --git a/qmake/doc/src/snippets/qmake/replacefunction.pro b/qmake/doc/snippets/qmake/replacefunction.pro
index 98013ba42d..98013ba42d 100644
--- a/qmake/doc/src/snippets/qmake/replacefunction.pro
+++ b/qmake/doc/snippets/qmake/replacefunction.pro
diff --git a/qmake/doc/src/snippets/qmake/scopes.pro b/qmake/doc/snippets/qmake/scopes.pro
index 63b9b3aa55..63b9b3aa55 100644
--- a/qmake/doc/src/snippets/qmake/scopes.pro
+++ b/qmake/doc/snippets/qmake/scopes.pro
diff --git a/qmake/doc/src/snippets/qmake/shared_or_static.pro b/qmake/doc/snippets/qmake/shared_or_static.pro
index 31c25ea44b..31c25ea44b 100644
--- a/qmake/doc/src/snippets/qmake/shared_or_static.pro
+++ b/qmake/doc/snippets/qmake/shared_or_static.pro
diff --git a/qmake/doc/src/snippets/qmake/spaces.pro b/qmake/doc/snippets/qmake/spaces.pro
index 614d4c553d..614d4c553d 100644
--- a/qmake/doc/src/snippets/qmake/spaces.pro
+++ b/qmake/doc/snippets/qmake/spaces.pro
diff --git a/qmake/doc/src/snippets/qmake/specifications.pro b/qmake/doc/snippets/qmake/specifications.pro
index f9a0d0a1cb..f9a0d0a1cb 100644
--- a/qmake/doc/src/snippets/qmake/specifications.pro
+++ b/qmake/doc/snippets/qmake/specifications.pro
diff --git a/qmake/doc/src/snippets/qmake/testfunction.pro b/qmake/doc/snippets/qmake/testfunction.pro
index 785ffed6be..785ffed6be 100644
--- a/qmake/doc/src/snippets/qmake/testfunction.pro
+++ b/qmake/doc/snippets/qmake/testfunction.pro
diff --git a/qmake/doc/src/snippets/qmake/variables.pro b/qmake/doc/snippets/qmake/variables.pro
index c1439ba68b..c1439ba68b 100644
--- a/qmake/doc/src/snippets/qmake/variables.pro
+++ b/qmake/doc/snippets/qmake/variables.pro
diff --git a/qmake/doc/src/snippets/qmake/view.h b/qmake/doc/snippets/qmake/view.h
index 92c7eb6a48..92c7eb6a48 100644
--- a/qmake/doc/src/snippets/qmake/view.h
+++ b/qmake/doc/snippets/qmake/view.h
diff --git a/qmake/doc/src/qmake-manual.qdoc b/qmake/doc/src/qmake-manual.qdoc
index 38217cb891..03eb3115f6 100644
--- a/qmake/doc/src/qmake-manual.qdoc
+++ b/qmake/doc/src/qmake-manual.qdoc
@@ -201,11 +201,11 @@
The following snippet illustrates how lists of values are assigned to
variables:
- \snippet snippets/qmake/variables.pro 0
+ \snippet qmake/variables.pro 0
The list of values in a variable is extended in the following way:
- \snippet snippets/qmake/variables.pro 1
+ \snippet qmake/variables.pro 1
\note The first assignment only includes values that are specified on
the same line as the \c HEADERS variable. The second assignment splits
@@ -244,7 +244,7 @@
The contents of a variable can be read by prepending the variable name with
\c $$. This can be used to assign the contents of one variable to another:
- \snippet snippets/qmake/dereferencing.pro 0
+ \snippet qmake/dereferencing.pro 0
The \c $$ operator is used extensively with built-in functions that operate
on strings and lists of values. For more information, see
@@ -255,21 +255,21 @@
Usually, whitespace separates values in variable assignments. To specify
values that contain spaces, you must enclose the values in double quotes:
- \snippet snippets/qmake/quoting.pro 0
+ \snippet qmake/quoting.pro 0
The quoted text is treated as a single item in the list of values held by
the variable. A similar approach is used to deal with paths that contain
spaces, particularly when defining the
\l{INCLUDEPATH} and \l{LIBS} variables for the Windows platform:
- \snippet snippets/qmake/spaces.pro quoting include paths with spaces
+ \snippet qmake/spaces.pro quoting include paths with spaces
\section2 Comments
You can add comments to project files. Comments begin with the \c
# character and continue to the end of the same line. For example:
- \snippet snippets/qmake/comments.pro 0
+ \snippet qmake/comments.pro 0
To include the \c # character in variable assignments, it is necessary
to use the contents of the built-in \l{LITERAL_HASH} variable.
@@ -285,12 +285,12 @@
The \c include function is most commonly used to include other project
files:
- \snippet snippets/qmake/include.pro 0
+ \snippet qmake/include.pro 0
Support for conditional structures is made available via
\l{Scopes}{scopes} that behave like \c if statements in programming languages:
- \snippet snippets/qmake/scopes.pro 0
+ \snippet qmake/scopes.pro 0
The assignments inside the braces are only made if the condition is
true. In this case, the \c win32 \l{CONFIG} option must be set. This
@@ -353,7 +353,7 @@
versions of a project, the Makefile that qmake generates includes a rule
that builds both versions. This can be invoked in the following way:
- \snippet snippets/code/doc_src_qmake-manual.pro 0
+ \snippet code/doc_src_qmake-manual.pro 0
Adding the \c build_all option to the \c CONFIG variable makes this rule
the default when building the project.
@@ -365,8 +365,8 @@
For example, the following lines show the function as the condition in a scope
to test whether only the \c opengl option is in use:
- \snippet snippets/qmake/configscopes.pro 4
- \snippet snippets/qmake/configscopes.pro 5
+ \snippet qmake/configscopes.pro 4
+ \snippet qmake/configscopes.pro 5
This enables different configurations to be defined for \c release and
\c debug builds. For more information, see \l{Scopes}{Using Scopes}.
@@ -394,7 +394,7 @@
For example, if your application uses the Qt library and you want to
build it in \c debug mode, your project file will contain the following line:
- \snippet snippets/code/doc_src_qmake-manual.pro 1
+ \snippet code/doc_src_qmake-manual.pro 1
\note You must use "+=", not "=", or qmake
will not be able to use Qt's configuration to determine the settings
@@ -409,21 +409,21 @@
extension modules.
For example, we can enable the XML and network modules in the following way:
- \snippet snippets/code/doc_src_qmake-manual.pro 2
+ \snippet code/doc_src_qmake-manual.pro 2
\note \c QT includes the \c core and \c gui modules by default, so the
above declaration \e adds the network and XML modules to this default list.
The following assignment \e omits the default modules, and will lead to
errors when the application's source code is being compiled:
- \snippet snippets/code/doc_src_qmake-manual.pro 3
+ \snippet code/doc_src_qmake-manual.pro 3
If you want to build a project \e without the \c gui module, you need to
exclude it with the "-=" operator. By default, \c QT contains both
\c core and \c gui, so the following line will result in a minimal
Qt project being built:
- \snippet snippets/code/doc_src_qmake-manual.pro 4
+ \snippet code/doc_src_qmake-manual.pro 4
For a list of Qt modules that you can add to the \c QT variable, see
\l{Variables#QT}{QT}.
@@ -441,7 +441,7 @@
\l{http://www.freedesktop.org/wiki/Software/pkg-config}{pkg-config},
such as the D-Bus and ogg libraries, with the following lines:
- \snippet snippets/code/doc_src_qmake-manual.pro 5
+ \snippet code/doc_src_qmake-manual.pro 5
For more information about adding features, see
\l{Adding New Configuration Features}.
@@ -458,14 +458,14 @@
For example, the following lines show how a library can be specified:
- \snippet snippets/code/doc_src_qmake-manual.pro 6
+ \snippet code/doc_src_qmake-manual.pro 6
The paths containing header files can also be specified in a similar way
using the \l{INCLUDEPATH} variable.
For example, to add several paths to be searched for header files:
- \snippet snippets/code/doc_src_qmake-manual.pro 7
+ \snippet code/doc_src_qmake-manual.pro 7
*/
/*!
@@ -485,7 +485,7 @@
The syntax used to run qmake takes the following simple form:
- \snippet snippets/code/doc_src_qmake-manual.pro 8
+ \snippet code/doc_src_qmake-manual.pro 8
\section1 Operating Modes
@@ -572,7 +572,7 @@
\target MakefileMode
\section1 Makefile Mode Options
- \snippet snippets/code/doc_src_qmake-manual.pro 9
+ \snippet code/doc_src_qmake-manual.pro 9
In Makefile mode, qmake will generate a Makefile
that is used to build the project. Additionally, the following options may
@@ -599,12 +599,12 @@
before all of the files specified. For example, the following command
generates a Makefile from test.pro:
- \snippet snippets/code/doc_src_qmake-manual.pro 10
+ \snippet code/doc_src_qmake-manual.pro 10
However, some of the specified options can be omitted as they are default
values:
- \snippet snippets/code/doc_src_qmake-manual.pro 11
+ \snippet code/doc_src_qmake-manual.pro 11
If you are certain you want your variables processed after the
files specified, then you may pass the \c -after option. When this
@@ -614,7 +614,7 @@
\target ProjectMode
\section1 Project Mode Options
- \snippet snippets/code/doc_src_qmake-manual.pro 12
+ \snippet code/doc_src_qmake-manual.pro 12
In project mode, qmake will generate a project
file. Additionally, you may supply the following options in this mode:
@@ -669,7 +669,7 @@
For example, to use qmake from a binary package to create a Makefile in a
project directory, invoke the following command:
- \snippet snippets/code/doc_src_qmake-manual.pro 13
+ \snippet code/doc_src_qmake-manual.pro 13
\section2 Using Frameworks
@@ -681,12 +681,12 @@
to the build system, and this is achieved by appending linker options to the
\l{QMAKE_LFLAGS} variable, as shown in the following example:
- \snippet snippets/code/doc_src_qmake-manual.pro 14
+ \snippet code/doc_src_qmake-manual.pro 14
The framework itself is linked in by appending the \c{-framework} options and
the name of the framework to the \l{LIBS} variable:
- \snippet snippets/code/doc_src_qmake-manual.pro 15
+ \snippet code/doc_src_qmake-manual.pro 15
\section2 Creating Frameworks
@@ -697,7 +697,7 @@
\l{TEMPLATE}{\c lib template} and add the \c lib_bundle option to the
\l{CONFIG} variable:
- \snippet snippets/code/doc_src_qmake-manual.pro 16
+ \snippet code/doc_src_qmake-manual.pro 16
The data associated with the library is specified using the
\l{QMAKE_BUNDLE_DATA}
@@ -705,7 +705,7 @@
bundle, and is often used to specify a collection of header files,
as in the following example:
- \snippet snippets/code/doc_src_qmake-manual.pro 17
+ \snippet code/doc_src_qmake-manual.pro 17
You use the \c FRAMEWORK_HEADERS variable to specify the headers required by
a particular framework.
@@ -727,7 +727,7 @@
by running qmake to generate an Xcode project from an existing qmake project
file. For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 19
+ \snippet code/doc_src_qmake-manual.pro 19
\note If a project is later moved on the disk, qmake must be run again to
process the project file and create a new Xcode project file.
@@ -778,12 +778,12 @@
This can also be set using a command line option, for example:
- \snippet snippets/code/doc_src_qmake-manual.pro 20
+ \snippet code/doc_src_qmake-manual.pro 20
It is possible to recursively generate \c{.vcproj} files in subdirectories
and a \c{.sln} file in the main directory, by typing:
- \snippet snippets/code/doc_src_qmake-manual.pro 21
+ \snippet code/doc_src_qmake-manual.pro 21
Each time you update the project file, you need to run
qmake to generate an updated Visual Studio
@@ -802,12 +802,12 @@
Removing manifest embedding for application executables can be done with
the following assignment to the \l{CONFIG} variable:
- \snippet snippets/code/doc_src_qmake-manual.pro 22
+ \snippet code/doc_src_qmake-manual.pro 22
Also, the manifest embedding for DLLs can be removed with the following
assignment to the \c CONFIG variable:
- \snippet snippets/code/doc_src_qmake-manual.pro 23
+ \snippet code/doc_src_qmake-manual.pro 23
This is discussed in more detail in the
\l{Deploying an Application on Windows#Manifest files}
@@ -917,7 +917,7 @@
qmake generates includes a rule that builds both
versions, and this can be invoked in the following way:
- \snippet snippets/code/doc_src_qmake-manual.pro 24
+ \snippet code/doc_src_qmake-manual.pro 24
When linking a library, qmake relies on the
underlying platform to know what other libraries this library links
@@ -954,7 +954,7 @@
will be set for each of these modes, and you can test for this to perform
build-specific tasks. For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 25
+ \snippet code/doc_src_qmake-manual.pro 25
As a result, it may be useful to define mode-specific variables, such as
\l{#QMAKE_LFLAGS_RELEASE}{QMAKE_LFLAGS_RELEASE}, instead of general
@@ -1050,7 +1050,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 26
+ \snippet code/doc_src_qmake-manual.pro 26
\target DEFINES
\section1 DEFINES
@@ -1060,7 +1060,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 27
+ \snippet code/doc_src_qmake-manual.pro 27
\target DEF_FILE
\section1 DEF_FILE
@@ -1090,7 +1090,7 @@
For example, the following definition uploads all PNG images in \c path to
the directory where the build target is deployed:
- \snippet snippets/code/doc_src_qmake-manual.pro 28
+ \snippet code/doc_src_qmake-manual.pro 28
The default deployment target path for Windows CE is
\c{%CSIDL_PROGRAM_FILES%\target}, which usually gets expanded to
@@ -1102,7 +1102,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 29
+ \snippet code/doc_src_qmake-manual.pro 29
\note In Windows CE all linked Qt libraries will be deployed to the path
specified by \c{myFiles.path}.
@@ -1123,7 +1123,7 @@
For example, the following definition uploads the jpeg imageformat plugin to
the plugins directory on the Windows CE device:
- \snippet snippets/code/doc_src_qmake-manual.pro 142
+ \snippet code/doc_src_qmake-manual.pro 142
\target DESTDIR
\section1 DESTDIR
@@ -1132,7 +1132,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 30
+ \snippet code/doc_src_qmake-manual.pro 30
\target DISTFILES
\section1 DISTFILES
@@ -1142,7 +1142,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 31
+ \snippet code/doc_src_qmake-manual.pro 31
\target DLLDESTDIR
\section1 DLLDESTDIR
@@ -1160,7 +1160,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 32
+ \snippet code/doc_src_qmake-manual.pro 32
\target GUID
\section1 GUID
@@ -1183,7 +1183,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 34
+ \snippet code/doc_src_qmake-manual.pro 34
See also \l{#SOURCES}{SOURCES}.
@@ -1202,12 +1202,12 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 35
+ \snippet code/doc_src_qmake-manual.pro 35
To specify a path containing spaces, quote the path using the technique
described in \l{Whitespace}.
- \snippet snippets/qmake/spaces.pro quoting include paths with spaces
+ \snippet qmake/spaces.pro quoting include paths with spaces
\target INSTALLS
\section1 INSTALLS
@@ -1221,7 +1221,7 @@
build target will be installed, and the \c INSTALLS assignment adds the
build target to the list of existing resources to be installed:
- \snippet snippets/code/doc_src_qmake-manual.pro 36
+ \snippet code/doc_src_qmake-manual.pro 36
For more information, see \l{Installing Files}.
@@ -1248,7 +1248,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 37
+ \snippet code/doc_src_qmake-manual.pro 37
\target LIBS
\section1 LIBS
@@ -1261,18 +1261,18 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 38
+ \snippet code/doc_src_qmake-manual.pro 38
To specify a path containing spaces, quote the path using the technique
described in \l{Whitespace}.
- \snippet snippets/qmake/spaces.pro quoting library paths with spaces
+ \snippet qmake/spaces.pro quoting library paths with spaces
By default, the list of libraries stored in \c LIBS is reduced to a list of
unique names before it is used. To change this behavior, add the
\c no_lflags_merge option to the \l{CONFIG} variable:
- \snippet snippets/code/doc_src_qmake-manual.pro 39
+ \snippet code/doc_src_qmake-manual.pro 39
\target LITERAL_HASH
\section1 LITERAL_HASH
@@ -1283,7 +1283,7 @@
For example:
- \snippet snippets/qmake/comments.pro 1
+ \snippet qmake/comments.pro 1
By using \c LITERAL_HASH in this way, the \c # character can be used
to construct a URL for the \c message() function to print to the console.
@@ -1311,7 +1311,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 40
+ \snippet code/doc_src_qmake-manual.pro 40
\target OBJECTS
\section1 OBJECTS
@@ -1328,7 +1328,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 41
+ \snippet code/doc_src_qmake-manual.pro 41
\target POST_TARGETDEPS
\section1 POST_TARGETDEPS
@@ -1417,7 +1417,7 @@
and \c path/to/header_two.h to a group containing information about the
headers supplied with the framework:
- \snippet snippets/code/doc_src_qmake-manual.pro 43
+ \snippet code/doc_src_qmake-manual.pro 43
The last line adds the information about the headers to the collection of
resources that will be installed with the library bundle.
@@ -1439,7 +1439,7 @@
For example, the following definition will result in a framework with the
\c{.myframework} extension:
- \snippet snippets/code/doc_src_qmake-manual.pro 44
+ \snippet code/doc_src_qmake-manual.pro 44
\section1 QMAKE_CC
@@ -2027,7 +2027,7 @@
\c{-compress} options are used with particular values each time that
\c rcc is invoked:
- \snippet snippets/code/doc_src_qmake-manual.pro 45
+ \snippet code/doc_src_qmake-manual.pro 45
\section1 QMAKE_RPATHDIR
@@ -2120,6 +2120,7 @@
\row \li webkit \li \l{Qt WebKit}
\row \li webkitwidgets \li \l{Qt WebKit Widgets}
\row \li widgets \li \l{Qt Widgets}
+ \row \li winextras \li \l{Qt Windows Extras}
\row \li xml \li \l{Qt XML} (deprecated)
\row \li xmlpatterns \li \l{Qt XML Patterns}
\endtable
@@ -2131,7 +2132,7 @@
exclude the \c gui value with the "-=" operator. The following line will
result in a minimal Qt project being built:
- \snippet snippets/code/doc_src_qmake-manual.pro 47
+ \snippet code/doc_src_qmake-manual.pro 47
\section1 QTPLUGIN
@@ -2177,7 +2178,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 48
+ \snippet code/doc_src_qmake-manual.pro 48
\target REQUIRES
\section1 REQUIRES
@@ -2219,7 +2220,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 49
+ \snippet code/doc_src_qmake-manual.pro 49
See also \l{#HEADERS}{HEADERS}.
@@ -2242,13 +2243,13 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 50
+ \snippet code/doc_src_qmake-manual.pro 50
If you need to ensure that the subdirectories are built in the order in
which they are specified, update the \l{#CONFIG}{CONFIG} variable to
include the \c ordered option:
- \snippet snippets/code/doc_src_qmake-manual.pro 51
+ \snippet code/doc_src_qmake-manual.pro 51
It is possible to modify this default behavior of \c SUBDIRS by giving
additional modifiers to \c SUBDIRS elements. Supported modifiers are:
@@ -2270,7 +2271,7 @@
For example, define two subdirectories, both of which reside in a different directory
than the \c SUBDIRS value, and one of the subdirectories must be built before the other:
- \snippet snippets/code/doc_src_qmake-manual.pro 149
+ \snippet code/doc_src_qmake-manual.pro 149
\target TARGET
\section1 TARGET
@@ -2280,7 +2281,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 52
+ \snippet code/doc_src_qmake-manual.pro 52
The project file above would produce an executable named \c myapp on
unix and \c{myapp.exe} on Windows.
@@ -2328,7 +2329,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 53
+ \snippet code/doc_src_qmake-manual.pro 53
The template can be overridden by specifying a new template type with the
\c -t command line option. This overrides the template type \e after the .pro
@@ -2352,7 +2353,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 54
+ \snippet code/doc_src_qmake-manual.pro 54
\target VERSION
\section1 VERSION
@@ -2362,7 +2363,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 57
+ \snippet code/doc_src_qmake-manual.pro 57
\section1 VER_MAJ
@@ -2396,7 +2397,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 58
+ \snippet code/doc_src_qmake-manual.pro 58
\section1 _PRO_FILE_
@@ -2405,7 +2406,7 @@
For example, the following line causes the location of the project
file to be written to the console:
- \snippet snippets/qmake/project_location.pro project file
+ \snippet qmake/project_location.pro project file
\note Do not attempt to overwrite the value of this variable.
@@ -2416,7 +2417,7 @@
For example, the following line causes the location of the directory
containing the project file to be written to the console:
- \snippet snippets/qmake/project_location.pro project file directory
+ \snippet qmake/project_location.pro project file directory
\note Do not attempt to overwrite the value of this variable.
*/
@@ -2452,7 +2453,7 @@
For example, the following call returns the string
\c {"/home/johndoe/myproject/readme.txt"}:
- \snippet snippets/code/doc_src_qmake-manual.pro 159
+ \snippet code/doc_src_qmake-manual.pro 159
See also \l{clean_path(path)}{clean_path()},
\l{relative_path(filePath[, base])}{relative_path()}.
@@ -2463,7 +2464,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 59
+ \snippet code/doc_src_qmake-manual.pro 59
\section2 cat(filename[, mode])
@@ -2495,7 +2496,7 @@
Returns the directory name part of the specified file. For example:
- \snippet snippets/qmake/dirname.pro 0
+ \snippet qmake/dirname.pro 0
\section2 enumerate_vars
@@ -2510,7 +2511,7 @@
\note If you specify the string to expand literally, you need to escape the
backslashes, as illustrated by the following code snippet:
- \snippet snippets/code/doc_src_qmake-manual.pro 173
+ \snippet code/doc_src_qmake-manual.pro 173
\target findfunction
\section2 find(variablename, substr)
@@ -2518,7 +2519,7 @@
Returns all the values in \c variablename that match the regular expression
\c substr.
- \snippet snippets/code/doc_src_qmake-manual.pro 64
+ \snippet code/doc_src_qmake-manual.pro 64
MY_VAR2 will contain '-Lone -Ltwo -Lthree -Lfour -Lfive', and MY_VAR3 will
contain 'three two three'.
@@ -2529,7 +2530,7 @@
For example, the following call returns \c firstname:
- \snippet snippets/code/doc_src_qmake-manual.pro 161
+ \snippet code/doc_src_qmake-manual.pro 161
See also \l{last(variablename)}{last()}.
@@ -2555,7 +2556,7 @@
For example, the following call converts the hexadecimal number \c BAD to
\c 002989:
- \snippet snippets/code/doc_src_qmake-manual.pro 163
+ \snippet code/doc_src_qmake-manual.pro 163
\section2 fromfile(filename, variablename)
@@ -2578,7 +2579,7 @@
For example, the following call returns \c phone:
- \snippet snippets/code/doc_src_qmake-manual.pro 162
+ \snippet code/doc_src_qmake-manual.pro 162
See also \l{first(variablename)}{first()}.
@@ -2589,11 +2590,11 @@
of that variable. You can use the variable to write a loop as illustrated by
the following code snippet
- \snippet snippets/code/doc_src_qmake-manual.pro 170
+ \snippet code/doc_src_qmake-manual.pro 170
instead of:
- \snippet snippets/code/doc_src_qmake-manual.pro 171
+ \snippet code/doc_src_qmake-manual.pro 171
\section2 lower(arg1 [, arg2 ..., argn])
@@ -2639,11 +2640,11 @@
contents of the variable supplied as \c string. For example, the
code
- \snippet snippets/qmake/replace.pro 0
+ \snippet qmake/replace.pro 0
prints the message:
- \snippet snippets/code/doc_src_qmake-manual.pro 70
+ \snippet code/doc_src_qmake-manual.pro 70
\section2 sprintf(string, arguments...)
@@ -2665,7 +2666,7 @@
For example, the following call outputs \c surname:
- \snippet snippets/code/doc_src_qmake-manual.pro 167
+ \snippet code/doc_src_qmake-manual.pro 167
\section2 shadowed(path)
@@ -2703,7 +2704,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 168
+ \snippet code/doc_src_qmake-manual.pro 168
\section2 system(command[, mode])
@@ -2712,7 +2713,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 72
+ \snippet code/doc_src_qmake-manual.pro 72
See also the test variant of \l{system(command)}{system()}.
@@ -2738,7 +2739,7 @@
Returns the list of values in \c variablename with duplicate entries removed.
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 73
+ \snippet code/doc_src_qmake-manual.pro 73
\section2 upper(arg1 [, arg2 ..., argn])
@@ -2783,7 +2784,7 @@
mutually exclusive values) a second parameter can be used to specify a set
of values to consider. For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 60
+ \snippet code/doc_src_qmake-manual.pro 60
Because release is considered the active setting (for feature parsing)
it will be the CONFIG used to generate the build file. In the common
@@ -2800,7 +2801,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 61
+ \snippet code/doc_src_qmake-manual.pro 61
The contents of the scope are only processed if the \c drivers
variable contains the value \c network. If this is the case, the
@@ -2817,7 +2818,7 @@
only processed if the variable contains the correct number of values.
For example:
- \snippet snippets/qmake/functions.pro 2
+ \snippet qmake/functions.pro 2
\section2 debug(level, message)
@@ -2842,7 +2843,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 160
+ \snippet code/doc_src_qmake-manual.pro 160
\section2 error(string)
@@ -2852,7 +2853,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 62
+ \snippet code/doc_src_qmake-manual.pro 62
\section2 eval(string)
@@ -2862,7 +2863,7 @@
values of existing variables or create new definitions.
For example:
- \snippet snippets/qmake/functions.pro 4
+ \snippet qmake/functions.pro 4
\note Quotation marks can be used to delimit the string, and
the return value can be discarded if it is not needed.
@@ -2875,7 +2876,7 @@
succeeds if any file matches the regular expression specified.
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 63
+ \snippet code/doc_src_qmake-manual.pro 63
\note "/" should be used as a directory separator, regardless of the
platform in use.
@@ -2899,7 +2900,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 65
+ \snippet code/doc_src_qmake-manual.pro 65
\section2 greaterThan(variablename, value)
@@ -2909,7 +2910,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 164
+ \snippet code/doc_src_qmake-manual.pro 164
It is impossible to compare two numbers as strings directly. As a
workaround, construct temporary values with a non-numeric prefix and compare
@@ -2917,7 +2918,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 172
+ \snippet code/doc_src_qmake-manual.pro 172
See also \l{lessThan(variablename, value)}{lessThan()}.
@@ -2927,7 +2928,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 166
+ \snippet code/doc_src_qmake-manual.pro 166
\section2 include(filename)
@@ -2939,7 +2940,7 @@
You can check whether the file was included by using this function as
the condition for a scope. For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 66
+ \snippet code/doc_src_qmake-manual.pro 66
\section2 infile(filename, var, val)
@@ -2959,7 +2960,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 67
+ \snippet code/doc_src_qmake-manual.pro 67
\section2 isEqual
@@ -2972,7 +2973,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 165
+ \snippet code/doc_src_qmake-manual.pro 165
\section2 load(feature)
@@ -2991,7 +2992,7 @@
Always succeeds, and displays \c string as a general message to the user.
Unlike the \c error() function, this function allows processing to continue.
- \snippet snippets/code/doc_src_qmake-manual.pro 68
+ \snippet code/doc_src_qmake-manual.pro 68
The above line causes "This is a message" to be written to the console.
The use of quotation marks is optional, but recommended.
@@ -3002,7 +3003,7 @@
\l{Scopes}{in conjunction with a scope} to filter out
messages during builds. For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 69
+ \snippet code/doc_src_qmake-manual.pro 69
\section2 mkpath(dirPath)
@@ -3025,7 +3026,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 71
+ \snippet code/doc_src_qmake-manual.pro 71
See also the replace variant of \l{system(command[, mode])}{system()}.
@@ -3041,7 +3042,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 169
+ \snippet code/doc_src_qmake-manual.pro 169
\section2 warning(string)
@@ -3065,11 +3066,11 @@
This can be useful to optionally enable or disable features. For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 157
+ \snippet code/doc_src_qmake-manual.pro 157
And then, in the code:
- \snippet snippets/code/doc_src_qmake-manual.pro 158
+ \snippet code/doc_src_qmake-manual.pro 158
\section2 prepareRecursiveTarget(target)
@@ -3077,28 +3078,28 @@
target by preparing a target that iterates through all subdirectories. For
example:
- \snippet snippets/code/doc_src_qmake-manual.pro 174
+ \snippet code/doc_src_qmake-manual.pro 174
Subdirs that have \c have_no_default or \c no_<target>_target specified in
their .CONFIG are excluded from this target:
- \snippet snippets/code/doc_src_qmake-manual.pro 175
+ \snippet code/doc_src_qmake-manual.pro 175
You must add the prepared target manually to \l{QMAKE_EXTRA_TARGETS}:
- \snippet snippets/code/doc_src_qmake-manual.pro 176
+ \snippet code/doc_src_qmake-manual.pro 176
To make the target global, the code above needs to be included into every
subdirs subproject. In addition, to make these targets do anything,
non-subdirs subprojects need to include respective code. The easiest way to
achieve this is creating a custom feature file. For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 177
+ \snippet code/doc_src_qmake-manual.pro 177
The feature file needs to be injected into each subproject, for example by
.qmake.conf:
- \snippet snippets/code/doc_src_qmake-manual.pro 178
+ \snippet code/doc_src_qmake-manual.pro 178
\section2 qtCompileTest(test)
@@ -3109,7 +3110,7 @@
To make this function available, you need to load the respective feature
file:
- \snippet snippets/code/doc_src_qmake-manual.pro 179
+ \snippet code/doc_src_qmake-manual.pro 179
This also sets the variable QMAKE_CONFIG_TESTS_DIR to the
\c config.tests subdirectory of the project's parent directory.
@@ -3119,15 +3120,15 @@
contains a simple qmake project. The following code snippet illustrates the
.pro file of the project:
- \snippet snippets/code/doc_src_qmake-manual.pro 180
+ \snippet code/doc_src_qmake-manual.pro 180
The following code snippet illustrates the main .cpp file of the project:
- \snippet snippets/code/doc_src_qmake-manual.pro 181
+ \snippet code/doc_src_qmake-manual.pro 181
The following code snippet shows the invocation of the test:
- \snippet snippets/code/doc_src_qmake-manual.pro 182
+ \snippet code/doc_src_qmake-manual.pro 182
If the test project is built successfully, the test passes.
@@ -3160,14 +3161,14 @@
property in qmake once, and query it each time qmake is invoked. You can set
a property in qmake as follows:
- \snippet snippets/code/doc_src_qmake-manual.pro 74
+ \snippet code/doc_src_qmake-manual.pro 74
The appropriate property and value should be substituted for
\c PROPERTY and \c VALUE.
You can retrieve this information back from qmake as follows:
- \snippet snippets/code/doc_src_qmake-manual.pro 75
+ \snippet code/doc_src_qmake-manual.pro 75
\note \c{qmake -query} lists built-in properties in addition to the
properties that you set with \c{qmake -set PROPERTY VALUE}.
@@ -3213,11 +3214,11 @@
For example, you can query the installation of Qt for this version of qmake with the
\c QT_INSTALL_PREFIX property:
- \snippet snippets/code/doc_src_qmake-manual.pro 77
+ \snippet code/doc_src_qmake-manual.pro 77
You can query the values of properties in a project file as follows:
- \snippet snippets/code/doc_src_qmake-manual.pro 78
+ \snippet code/doc_src_qmake-manual.pro 78
\target QMAKESPEC
\section1 QMAKESPEC
@@ -3267,7 +3268,7 @@
example, the extension used for \l moc files can be redefined with the
following assignment in a project file:
- \snippet snippets/code/doc_src_qmake-manual.pro 85
+ \snippet code/doc_src_qmake-manual.pro 85
The following variables can be used to redefine common file extensions recognized
by qmake:
@@ -3327,7 +3328,7 @@
The \c = operator assigns a value to a variable:
- \snippet snippets/code/doc_src_qmake-manual.pro 89
+ \snippet code/doc_src_qmake-manual.pro 89
The above line sets the \l{TARGET} variable to \c myapp. This will overwrite any
values previously set for \c TARGET with \c myapp.
@@ -3336,7 +3337,7 @@
The \c += operator appends a new value to the list of values in a variable:
- \snippet snippets/code/doc_src_qmake-manual.pro 90
+ \snippet code/doc_src_qmake-manual.pro 90
The above line appends \c USE_MY_STUFF to the list of pre-processor defines to be put
in the generated Makefile.
@@ -3345,7 +3346,7 @@
The \c -= operator removes a value from the list of values in a variable:
- \snippet snippets/code/doc_src_qmake-manual.pro 91
+ \snippet code/doc_src_qmake-manual.pro 91
The above line removes \c USE_MY_STUFF from the list of pre-processor defines to be
put in the generated Makefile.
@@ -3356,7 +3357,7 @@
if it is not already present. This prevents values from being included many
times in a variable. For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 92
+ \snippet code/doc_src_qmake-manual.pro 92
In the above line, \c USE_MY_STUFF will only be added to the list of pre-processor
defines if it is not already defined. Note that the \l{unique}{unique()}
@@ -3368,7 +3369,7 @@
The \c ~= operator replaces any values that match a regular expression with
the specified value:
- \snippet snippets/code/doc_src_qmake-manual.pro 93
+ \snippet code/doc_src_qmake-manual.pro 93
In the above line, any values in the list that start with \c QT_D or \c QT_T are
replaced with \c QT.
@@ -3378,7 +3379,7 @@
The \c $$ operator is used to extract the contents of a variable, and can be
used to pass values between variables or supply them to functions:
- \snippet snippets/code/doc_src_qmake-manual.pro 94
+ \snippet code/doc_src_qmake-manual.pro 94
Variables can be used to store the contents of environment variables.
These can be evaluated at the time when qmake
@@ -3388,7 +3389,7 @@
To obtain the contents of an environment value when
qmake is run, use the \c $$(...) operator:
- \snippet snippets/qmake/environment.pro 0
+ \snippet qmake/environment.pro 0
In the above assignment, the value of the \c PWD environment variable
is read when the project file is processed.
@@ -3396,7 +3397,7 @@
To obtain the contents of an environment value at the time when the
generated Makefile is processed, use the \c $(...) operator:
- \snippet snippets/qmake/environment.pro 1
+ \snippet qmake/environment.pro 1
In the above assignment, the value of \c PWD is read immediately
when the project file is processed, but \c $(PWD) is assigned to
@@ -3408,7 +3409,7 @@
The special \c $$[...] operator can be used to access qmake properties:
- \snippet snippets/qmake/qtconfiguration.pro 0
+ \snippet qmake/qtconfiguration.pro 0
For more information, see \l{Configuring qmake}.
@@ -3417,7 +3418,7 @@
For example, a \QD plugin can be installed alongside \QD's built-in
plugins if the following declaration is made in its project file:
- \snippet snippets/code/doc_src_qmake-manual.pro 101
+ \snippet code/doc_src_qmake-manual.pro 101
\target Scopes
\section1 Scopes
@@ -3430,7 +3431,7 @@
Scopes consist of a condition followed by an opening brace on the same line,
a sequence of commands and definitions, and a closing brace on a new line:
- \snippet snippets/qmake/scopes.pro syntax
+ \snippet qmake/scopes.pro syntax
The opening brace \e{must be written on the same line as the condition}.
Scopes may be concatenated to include more than one condition, as described
@@ -3441,7 +3442,7 @@
A scope is written as a condition followed by a series of declarations
contained within a pair of braces. For example:
- \snippet snippets/qmake/scopes.pro 0
+ \snippet qmake/scopes.pro 0
The above code will add the \c paintwidget_win.cpp file to the sources listed
in the generated Makefile when building for a Windows platform. When
@@ -3452,24 +3453,24 @@
original condition is false. For example, to process something when building
for all platforms \e except Windows, negate the scope like this:
- \snippet snippets/qmake/scopes.pro 1
+ \snippet qmake/scopes.pro 1
Scopes can be nested to combine more than one condition. For instance, to
include a particular file for a certain platform only if
debugging is enabled, write the following:
- \snippet snippets/qmake/scopes.pro 2
+ \snippet qmake/scopes.pro 2
To save writing many nested scopes, you can nest scopes using the \c :
operator. The nested scopes in the above example can be rewritten in
the following way:
- \snippet snippets/qmake/scopes.pro 3
+ \snippet qmake/scopes.pro 3
You may also use the \c : operator to perform single line conditional
assignments. For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 95
+ \snippet code/doc_src_qmake-manual.pro 95
The above line adds \c USE_MY_STUFF to the \l{DEFINES} variable only when
building for the Windows platform.
@@ -3479,7 +3480,7 @@
There is also the \c | operator to act like a logical OR operator, joining
together a number of conditions, and requiring only one of them to be true.
- \snippet snippets/qmake/scopes.pro 4
+ \snippet qmake/scopes.pro 4
You can also provide alternative declarations to those within a scope by
using an \c else scope. Each \c else scope is processed if the conditions
@@ -3487,7 +3488,7 @@
This allows you to write complex tests when combined with other scopes
(separated by the \c : operator as above). For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 96
+ \snippet code/doc_src_qmake-manual.pro 96
\section2 Configuration and Scopes
@@ -3496,15 +3497,15 @@
values can be used as the condition for a scope. For example, the list of
values held by \c CONFIG can be extended with the \c opengl value:
- \snippet snippets/qmake/configscopes.pro 0
+ \snippet qmake/configscopes.pro 0
As a result of this operation, any scopes that test for \c opengl will
be processed. We can use this feature to give the final executable an
appropriate name:
- \snippet snippets/qmake/configscopes.pro 1
- \snippet snippets/qmake/configscopes.pro 2
- \snippet snippets/qmake/configscopes.pro 3
+ \snippet qmake/configscopes.pro 1
+ \snippet qmake/configscopes.pro 2
+ \snippet qmake/configscopes.pro 3
This feature makes it easy to change the configuration for a project
without losing all the custom settings that might be needed for a specific
@@ -3527,7 +3528,7 @@
following lines from a project file show the current specification in
use and test for the \c linux-g++ specification:
- \snippet snippets/qmake/specifications.pro 0
+ \snippet qmake/specifications.pro 0
You can test for any other platform-compiler combination as long as a
specification exists for it in the \c mkspecs directory.
@@ -3542,7 +3543,7 @@
variables with a given name when it encounters an assignment to that name.
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 97
+ \snippet code/doc_src_qmake-manual.pro 97
There are no restricitions on what you do to your own variables, as
qmake will ignore them unless it needs to evaluate them when processing
@@ -3551,19 +3552,19 @@
You can also assign the value of a current variable to another
variable by prefixing $$ to the variable name. For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 98
+ \snippet code/doc_src_qmake-manual.pro 98
Now the MY_DEFINES variable contains what is in the DEFINES variable at
this point in the project file. This is also equivalent to:
- \snippet snippets/code/doc_src_qmake-manual.pro 99
+ \snippet code/doc_src_qmake-manual.pro 99
The second notation allows you to append the contents of the variable to
another value without separating the two with a space. For example, the
following will ensure that the final executable will be given a name
that includes the project template being used:
- \snippet snippets/code/doc_src_qmake-manual.pro 100
+ \snippet code/doc_src_qmake-manual.pro 100
\target UsingReplaceFunctions
\section1 Replace Functions
@@ -3575,7 +3576,7 @@
operator with this type of function as you would to assign contents of one
variable to another:
- \snippet snippets/qmake/functions.pro 1
+ \snippet qmake/functions.pro 1
This type of function should be used on the right-hand side of
assignments (that is, as an operand).
@@ -3583,13 +3584,13 @@
You can define your own functions for processing the contents of variables
as follows:
- \snippet snippets/code/doc_src_qmake-manual.pro 102
+ \snippet code/doc_src_qmake-manual.pro 102
The following example function takes a variable name as its only
argument, extracts a list of values from the variable with the
\l{eval(string)}{eval()} built-in function, and compiles a list of files:
- \snippet snippets/qmake/replacefunction.pro 0
+ \snippet qmake/replacefunction.pro 0
\target UsingTestFunctions
\section1 Test Functions
@@ -3598,7 +3599,7 @@
used as conditions when writing scopes. These functions do not return a
value, but instead indicate \e success or \e failure:
- \snippet snippets/qmake/functions.pro 3
+ \snippet qmake/functions.pro 3
This type of function should be used in conditional expressions
only.
@@ -3607,7 +3608,7 @@
for scopes. The following example tests whether each file in a list
exists and returns true if they all exist, or false if not:
- \snippet snippets/qmake/testfunction.pro 0
+ \snippet qmake/testfunction.pro 0
*/
/*!
@@ -3664,7 +3665,7 @@
For example, consider the following assignment in a project file:
- \snippet snippets/code/doc_src_qmake-manual.pro 103
+ \snippet code/doc_src_qmake-manual.pro 103
With this addition to the \c CONFIG variable,
qmake will search the locations listed above for
@@ -3699,7 +3700,7 @@
be installed. For example, a collection of documentation files can be
described in the following way:
- \snippet snippets/code/doc_src_qmake-manual.pro 79
+ \snippet code/doc_src_qmake-manual.pro 79
The \c path member informs qmake that the files
should be installed in \c /usr/local/program/doc (the path member), and the
@@ -3710,7 +3711,7 @@
Once an install set has been fully described, you can append it to the
install list with a line like this:
- \snippet snippets/code/doc_src_qmake-manual.pro 80
+ \snippet code/doc_src_qmake-manual.pro 80
qmake will ensure that the specified files are
copied to the installation directory. If you require more control over
@@ -3719,7 +3720,7 @@
qmake to execute a series of commands for this
install set:
- \snippet snippets/code/doc_src_qmake-manual.pro 81
+ \snippet code/doc_src_qmake-manual.pro 81
The \c unix \l{Scopes and Conditions}{scope}
ensures that these particular commands are only executed on Unix platforms.
@@ -3734,7 +3735,7 @@
will decide what needs to be copied for you. Currently, the \c target and \c dlltarget
install sets are supported. For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 82
+ \snippet code/doc_src_qmake-manual.pro 82
In the above lines, qmake knows what needs to
be copied, and will handle the installation process automatically.
@@ -3750,7 +3751,7 @@
API as found in other places in qmake. Objects are defined automatically by
specifying their \e members. For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 86
+ \snippet code/doc_src_qmake-manual.pro 86
The definitions above define a qmake target called \c mytarget, containing a
Makefile target called \c{.buildfile} which in turn is generated with the
@@ -3762,7 +3763,7 @@
The final step is to use the \c QMAKE_EXTRA_TARGETS variable to instruct
qmake that this object is a target to be built:
- \snippet snippets/code/doc_src_qmake-manual.pro 87
+ \snippet code/doc_src_qmake-manual.pro 87
This is all you need to do to actually build custom targets. Of course,
you may want to tie one of these targets to the
@@ -3811,7 +3812,7 @@
It is possible to customize qmake to support new compilers and
preprocessors:
- \snippet snippets/code/doc_src_qmake-manual.pro 88
+ \snippet code/doc_src_qmake-manual.pro 88
With the above definitions, you can use a drop-in replacement for moc if one
is available. The command is executed on all arguments given to the
@@ -3913,7 +3914,7 @@
The first step is to enable dependency tracking in the library itself.
To do this you must tell qmake to save information about the library:
- \snippet snippets/code/doc_src_qmake-manual.pro 83
+ \snippet code/doc_src_qmake-manual.pro 83
This is only relevant to the \c lib template, and will be ignored for all
others. When this option is enabled, qmake will create a file ending in .prl
@@ -3926,7 +3927,7 @@
The second step in this process is to enable reading of this meta
information in the applications that use the static library:
- \snippet snippets/code/doc_src_qmake-manual.pro 84
+ \snippet code/doc_src_qmake-manual.pro 84
When this is enabled, qmake will process all
libraries linked to by the application and find their meta-information.
@@ -3986,7 +3987,7 @@
and \e static throughout your project. A typical precompiled header might
look like this:
- \snippet snippets/code/doc_src_qmake-manual.cpp 104
+ \snippet code/doc_src_qmake-manual.cpp 104
\note A precompiled header file needs to separate C includes from
C++ includes, since the precompiled header file for C files may not
@@ -3998,7 +3999,7 @@
To make your project use precompiled headers, you only need to define the
\l{PRECOMPILED_HEADER} variable in your project file:
- \snippet snippets/code/doc_src_qmake-manual.pro 105
+ \snippet code/doc_src_qmake-manual.pro 105
qmake will handle the rest, to ensure the
creation and use of the precompiled header file. You do not need to
@@ -4011,7 +4012,7 @@
precompiled headers.
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 106
+ \snippet code/doc_src_qmake-manual.pro 106
\section1 Notes on Possible Issues
@@ -4020,7 +4021,7 @@
declarations may cause two different object files with the same name to
be generated:
- \snippet snippets/code/doc_src_qmake-manual.pro 107
+ \snippet code/doc_src_qmake-manual.pro 107
To avoid potential conflicts like these, give distinctive names to header
files that will be precompiled.
@@ -4040,7 +4041,7 @@
\section2 \c stable.h
- \snippet snippets/qmake/precompile-stable.h 0
+ \snippet qmake/precompile-stable.h 0
\omit
##Keeping the snippet in qtdoc is a workaround, because it contains code
@@ -4188,17 +4189,17 @@
Just start a new line with \c {SOURCES +=} and put hello.cpp after it.
You should have something like this:
- \snippet snippets/code/doc_src_qmake-manual.pro 108
+ \snippet code/doc_src_qmake-manual.pro 108
We repeat this for each source file in the project, until we end up
with the following:
- \snippet snippets/code/doc_src_qmake-manual.pro 109
+ \snippet code/doc_src_qmake-manual.pro 109
If you prefer to use a Make-like syntax, with all the files listed in
one go you can use the newline escaping like this:
- \snippet snippets/code/doc_src_qmake-manual.pro 110
+ \snippet code/doc_src_qmake-manual.pro 110
Now that the source files are listed in the project file, the header
files must be added. These are added in exactly the same way as source
@@ -4207,7 +4208,7 @@
Once you have done this, your project file should look something like
this:
- \snippet snippets/code/doc_src_qmake-manual.pro 111
+ \snippet code/doc_src_qmake-manual.pro 111
The target name is set automatically. It is the same as the project
filename, but with the suffix appropriate for the platform. For example, if
@@ -4215,24 +4216,24 @@
on Windows and \c hello on Unix. If you want to use a different name
you can set it in the project file:
- \snippet snippets/code/doc_src_qmake-manual.pro 112
+ \snippet code/doc_src_qmake-manual.pro 112
The finished project file should look like this:
- \snippet snippets/code/doc_src_qmake-manual.pro 113
+ \snippet code/doc_src_qmake-manual.pro 113
You can now use qmake to generate a Makefile
for your application. On the command line, in your project directory,
type the following:
- \snippet snippets/code/doc_src_qmake-manual.pro 114
+ \snippet code/doc_src_qmake-manual.pro 114
Then type \c make or \c nmake depending on the compiler you use.
For Visual Studio users, qmake can also generate Visual Studio project
files. For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 115
+ \snippet code/doc_src_qmake-manual.pro 115
\section1 Making an Application Debuggable
@@ -4244,7 +4245,7 @@
For example:
- \snippet snippets/code/doc_src_qmake-manual.pro 116
+ \snippet code/doc_src_qmake-manual.pro 116
Use qmake as before to generate a Makefile. You will now obtain useful
information about your application when running it in a debugging
@@ -4264,7 +4265,7 @@
A simple scope that adds the platform-dependent file for
Windows looks like this:
- \snippet snippets/code/doc_src_qmake-manual.pro 117
+ \snippet code/doc_src_qmake-manual.pro 117
When building for Windows, qmake adds \c hellowin.cpp to the list of source
files. When building for any other platform, qmake simply ignores it. Now
@@ -4273,7 +4274,7 @@
When you have done that, your project file should look
something like this:
- \snippet snippets/code/doc_src_qmake-manual.pro 118
+ \snippet code/doc_src_qmake-manual.pro 118
Use qmake as before to generate a Makefile.
@@ -4286,13 +4287,13 @@
the scope condition with the function. A check for a file called main.cpp looks
like this:
- \snippet snippets/code/doc_src_qmake-manual.pro 119
+ \snippet code/doc_src_qmake-manual.pro 119
The \c{!} symbol is used to negate the test. That is, \c{exists( main.cpp )}
is true if the file exists, and \c{!exists( main.cpp )} is true if the
file does not exist.
- \snippet snippets/code/doc_src_qmake-manual.pro 120
+ \snippet code/doc_src_qmake-manual.pro 120
Use qmake as before to generate a makefile.
If you rename \c main.cpp temporarily, you will see the message and
@@ -4311,12 +4312,12 @@
the other inside it. Put the settings to be processed inside the second
scope, like this:
- \snippet snippets/code/doc_src_qmake-manual.pro 121
+ \snippet code/doc_src_qmake-manual.pro 121
Nested scopes can be joined together using colons, so the final
project file looks like this:
- \snippet snippets/code/doc_src_qmake-manual.pro 122
+ \snippet code/doc_src_qmake-manual.pro 122
That's it! You have now completed the tutorial for
qmake, and are ready to write project files for
@@ -4389,7 +4390,7 @@
to specify any. qmake will add the necessary default values.
An example project file might look like this:
- \snippet snippets/code/doc_src_qmake-manual.pro 123
+ \snippet code/doc_src_qmake-manual.pro 123
For items that are single valued, such as the template or the destination
directory, we use "="; but for multi-valued items we use "+=" to \e
@@ -4527,8 +4528,8 @@
To enable a project to be built in both modes, you must add the
\c debug_and_release option to the \c CONFIG variable:
- \snippet snippets/qmake/debug_and_release.pro 0
- \snippet snippets/qmake/debug_and_release.pro 1
+ \snippet qmake/debug_and_release.pro 0
+ \snippet qmake/debug_and_release.pro 1
The scope in the above snippet modifies the build target in each mode to
ensure that the resulting targets have different names. Providing different
@@ -4538,23 +4539,23 @@
generate a Makefile rule to allow the project to be built in both modes.
This can be invoked in the following way:
- \snippet snippets/code/doc_src_qmake-manual.pro 124
+ \snippet code/doc_src_qmake-manual.pro 124
The \c build_all option can be added to the \c CONFIG variable in the
project file to ensure that the project is built in both modes by default:
- \snippet snippets/qmake/debug_and_release.pro 2
+ \snippet qmake/debug_and_release.pro 2
This allows the Makefile to be processed using the default rule:
- \snippet snippets/code/doc_src_qmake-manual.pro 125
+ \snippet code/doc_src_qmake-manual.pro 125
\section2 Installing in Both Modes
The \c build_all option also ensures that both versions of the target
will be installed when the installation rule is invoked:
- \snippet snippets/code/doc_src_qmake-manual.pro 126
+ \snippet code/doc_src_qmake-manual.pro 126
It is possible to customize the names of the build targets depending on
the target platform. For example, a library or plugin may be named using a
@@ -4564,11 +4565,10 @@
Note: This was originally used in the customwidgetplugin.pro file, but is
no longer needed there.
\endomit
- \snippet snippets/code/doc_src_qmake-manual.pro 127
+ \snippet code/doc_src_qmake-manual.pro 127
The default behavior in the above snippet is to modify the name used for
the build target when building in debug mode. An \c else clause could be
added to the scope to do the same for release mode. Left as it is, the
target name remains unmodified.
*/
-
diff --git a/qmake/generators/mac/pbuilder_pbx.cpp b/qmake/generators/mac/pbuilder_pbx.cpp
index e634f6976e..b8e6d05728 100644
--- a/qmake/generators/mac/pbuilder_pbx.cpp
+++ b/qmake/generators/mac/pbuilder_pbx.cpp
@@ -1381,24 +1381,24 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
!project->values("QMAKE_FRAMEWORKPATH").isEmpty() ? SettingsAsList : 0, 5) << ";\n";
{
- ProStringList cflags = fixListForOutput("QMAKE_CFLAGS");
+ ProStringList cflags = project->values("QMAKE_CFLAGS");
const ProStringList &prl_defines = project->values("PRL_EXPORT_DEFINES");
for (int i = 0; i < prl_defines.size(); ++i)
cflags += "-D" + prl_defines.at(i);
const ProStringList &defines = project->values("DEFINES");
for (int i = 0; i < defines.size(); ++i)
cflags += "-D" + defines.at(i);
- t << "\t\t\t\t" << writeSettings("OTHER_CFLAGS", cflags, SettingsAsList, 5) << ";\n";
+ t << "\t\t\t\t" << writeSettings("OTHER_CFLAGS", fixListForOutput(cflags), SettingsAsList, 5) << ";\n";
}
{
- ProStringList cxxflags = fixListForOutput("QMAKE_CXXFLAGS");
+ ProStringList cxxflags = project->values("QMAKE_CXXFLAGS");
const ProStringList &prl_defines = project->values("PRL_EXPORT_DEFINES");
for (int i = 0; i < prl_defines.size(); ++i)
cxxflags += "-D" + prl_defines.at(i);
const ProStringList &defines = project->values("DEFINES");
for (int i = 0; i < defines.size(); ++i)
cxxflags += "-D" + defines.at(i);
- t << "\t\t\t\t" << writeSettings("OTHER_CPLUSPLUSFLAGS", cxxflags, SettingsAsList, 5) << ";\n";
+ t << "\t\t\t\t" << writeSettings("OTHER_CPLUSPLUSFLAGS", fixListForOutput(cxxflags), SettingsAsList, 5) << ";\n";
}
if (!project->isActiveConfig("staticlib")) {
t << "\t\t\t\t" << writeSettings("OTHER_LDFLAGS",
@@ -1408,7 +1408,8 @@ ProjectBuilderMakefileGenerator::writeMakeParts(QTextStream &t)
+ fixListForOutput("QMAKE_LIBS_PRIVATE"),
SettingsAsList, 6) << ";\n";
}
- const ProStringList &archs = project->values("QT_ARCH");
+ const ProStringList &archs = !project->values("QMAKE_XCODE_ARCHS").isEmpty() ?
+ project->values("QMAKE_XCODE_ARCHS") : project->values("QT_ARCH");
if (!archs.isEmpty())
t << "\t\t\t\t" << writeSettings("ARCHS", archs) << ";\n";
if (!project->isEmpty("OBJECTS_DIR"))
@@ -1518,19 +1519,20 @@ ProjectBuilderMakefileGenerator::fixForOutput(const QString &values)
project->values("QMAKE_PBX_VARS").append(reg_var.cap(1));
rep += reg_var.matchedLength();
}
- QString ret = values;
- ret = ret.replace(QRegExp("\\\\ "), " "); //unescape spaces
- ret = ret.replace(QRegExp("('|\\\\|\")"), "\\\\1"); //fix quotes
- ret = ret.replace("\t", " "); //fix tabs
- ret = ret.replace(QRegExp(" "), "\\ "); //escape spaces
- return ret;
+
+ return values;
}
ProStringList
ProjectBuilderMakefileGenerator::fixListForOutput(const char *where)
{
+ return fixListForOutput(project->values(where));
+}
+
+ProStringList
+ProjectBuilderMakefileGenerator::fixListForOutput(const ProStringList &l)
+{
ProStringList ret;
- const ProStringList &l = project->values(where);
for(int i = 0; i < l.count(); i++)
ret += fixForOutput(l[i].toQString());
return ret;
@@ -1747,37 +1749,81 @@ ProjectBuilderMakefileGenerator::escapeFilePath(const QString &path) const
#endif
}
+static QString quotedStringLiteral(const QString &value)
+{
+ QString result;
+ const int len = value.length();
+ result.reserve(int(len * 1.1) + 2);
+
+ result += QLatin1Char('"');
+
+ // Escape
+ for (int i = 0; i < len; ++i) {
+ QChar character = value.at(i);;
+ ushort code = character.unicode();
+ switch (code) {
+ case '\\':
+ result += QLatin1String("\\\\");
+ break;
+ case '"':
+ result += QLatin1String("\\\"");
+ break;
+ case '\b':
+ result += QLatin1String("\\b");
+ break;
+ case '\n':
+ result += QLatin1String("\\n");
+ break;
+ case '\r':
+ result += QLatin1String("\\r");
+ break;
+ case '\t':
+ result += QLatin1String("\\t");
+ break;
+ default:
+ if (code >= 32 && code <= 127)
+ result += character;
+ else
+ result += QLatin1String("\\u") + QString::number(code, 16).rightJustified(4, '0');
+ }
+ }
+
+ result += QLatin1Char('"');
+
+ result.squeeze();
+ return result;
+}
+
QString
ProjectBuilderMakefileGenerator::writeSettings(const QString &var, const ProStringList &vals, int flags, int indent_level)
{
QString ret;
- const QString quote = (flags & SettingsNoQuote) ? "" : "\"";
- const QString escape_quote = quote.isEmpty() ? "" : QString("\\" + quote);
+ bool shouldQuote = !((flags & SettingsNoQuote));
+
QString newline = "\n";
for(int i = 0; i < indent_level; ++i)
newline += "\t";
+
+ ret += var + " = ";
+
if(flags & SettingsAsList) {
- ret += var + " = (" + newline;
+ ret += "(" + newline;
for(int i = 0, count = 0; i < vals.size(); ++i) {
QString val = vals.at(i).toQString();
if(!val.isEmpty()) {
if(count++ > 0)
ret += "," + newline;
- ret += quote + val.replace(quote, escape_quote) + quote;
+ if (shouldQuote)
+ val = quotedStringLiteral(val);
+ ret += val;
}
}
ret += ")";
} else {
- ret += var + " = " + quote;
- for(int i = 0; i < vals.size(); ++i) {
- QString val = vals.at(i).toQString();
-// if(val.isEmpty())
-// val = quote + quote;
- if(i)
- ret += " ";
- ret += val;
- }
- ret += quote;
+ QString val = vals.join(QLatin1Char(' '));
+ if (shouldQuote)
+ val = quotedStringLiteral(val);
+ ret += val;
}
return ret;
}
diff --git a/qmake/generators/mac/pbuilder_pbx.h b/qmake/generators/mac/pbuilder_pbx.h
index 255dd43348..a08dc7c2bd 100644
--- a/qmake/generators/mac/pbuilder_pbx.h
+++ b/qmake/generators/mac/pbuilder_pbx.h
@@ -61,6 +61,7 @@ class ProjectBuilderMakefileGenerator : public UnixMakefileGenerator
QString findProgram(const ProString &prog);
QString fixForOutput(const QString &file);
ProStringList fixListForOutput(const char *where);
+ ProStringList fixListForOutput(const ProStringList &list);
int reftypeForFile(const QString &where);
QString sourceTreeForFile(const QString &where);
QString projectSuffix() const;
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index 98b5a328e4..a8ae84a4e2 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -2272,8 +2272,7 @@ MakefileGenerator::writeHeader(QTextStream &t)
{
t << "#############################################################################\n";
t << "# Makefile for building: " << escapeFilePath(var("TARGET")) << endl;
- t << "# Generated by qmake (" QMAKE_VERSION_STR ") (Qt " QT_VERSION_STR ") on: ";
- t << QDateTime::currentDateTime().toString() << endl;
+ t << "# Generated by qmake (" QMAKE_VERSION_STR ") (Qt " QT_VERSION_STR ")\n";
t << "# Project: " << fileFixify(project->projectFile()) << endl;
t << "# Template: " << var("TEMPLATE") << endl;
if(!project->isActiveConfig("build_pass"))
diff --git a/qmake/generators/makefiledeps.cpp b/qmake/generators/makefiledeps.cpp
index 898903a423..df37957f9b 100644
--- a/qmake/generators/makefiledeps.cpp
+++ b/qmake/generators/makefiledeps.cpp
@@ -771,20 +771,15 @@ bool QMakeSourceFileInfo::findMocs(SourceFile *file)
}
if(Option::debug_level && qmake_endOfLine(*(buffer+x)))
++line_count;
- if(((buffer_len > x+2 && *(buffer+x+1) == 'Q' && *(buffer+x+2) == '_')
- ||
- (buffer_len > x+4 && *(buffer+x+1) == 'Q' && *(buffer+x+2) == 'O'
- && *(buffer+x+3) == 'M' && *(buffer+x+4) == '_'))
- &&
+ if (buffer_len > x + 2 && buffer[x + 1] == 'Q' && buffer[x + 2] == '_' &&
*(buffer + x) != '_' &&
(*(buffer + x) < 'a' || *(buffer + x) > 'z') &&
(*(buffer + x) < 'A' || *(buffer + x) > 'Z') &&
(*(buffer + x) < '0' || *(buffer + x) > '9')) {
++x;
int match = 0;
- static const char *interesting[] = { "OBJECT", "GADGET",
- "M_OBJECT" };
- for(int interest = 0, m1, m2; interest < 3; ++interest) {
+ static const char *interesting[] = { "OBJECT", "GADGET" };
+ for (int interest = 0, m1, m2; interest < 2; ++interest) {
if(interest == 0 && ignore_qobject)
continue;
else if(interest == 1 && ignore_qgadget)
diff --git a/qmake/library/ioutils.cpp b/qmake/library/ioutils.cpp
index 3c2801594a..cc19aa5c42 100644
--- a/qmake/library/ioutils.cpp
+++ b/qmake/library/ioutils.cpp
@@ -88,6 +88,11 @@ bool IoUtils::isRelativePath(const QString &path)
return true;
}
+QStringRef IoUtils::pathName(const QString &fileName)
+{
+ return fileName.leftRef(fileName.lastIndexOf(QLatin1Char('/')) + 1);
+}
+
QStringRef IoUtils::fileName(const QString &fileName)
{
return fileName.midRef(fileName.lastIndexOf(QLatin1Char('/')) + 1);
diff --git a/qmake/library/ioutils.h b/qmake/library/ioutils.h
index 160e879fce..d69725fa27 100644
--- a/qmake/library/ioutils.h
+++ b/qmake/library/ioutils.h
@@ -64,6 +64,7 @@ public:
static bool exists(const QString &fileName) { return fileType(fileName) != FileNotFound; }
static bool isRelativePath(const QString &fileName);
static bool isAbsolutePath(const QString &fileName) { return !isRelativePath(fileName); }
+ static QStringRef pathName(const QString &fileName); // Requires normalized path
static QStringRef fileName(const QString &fileName); // Requires normalized path
static QString resolvePath(const QString &baseDir, const QString &fileName);
static QString shellQuoteUnix(const QString &arg);
diff --git a/qmake/library/qmake_global.h b/qmake/library/qmake_global.h
index 7e2247e8c6..acb95e7ab3 100644
--- a/qmake/library/qmake_global.h
+++ b/qmake/library/qmake_global.h
@@ -64,4 +64,8 @@
# define ALWAYS_INLINE inline
#endif
+#ifdef PROEVALUATOR_FULL
+# define PROEVALUATOR_DEBUG
+#endif
+
#endif
diff --git a/qmake/library/qmakebuiltins.cpp b/qmake/library/qmakebuiltins.cpp
index be0d8ea172..a2ebe1e410 100644
--- a/qmake/library/qmakebuiltins.cpp
+++ b/qmake/library/qmakebuiltins.cpp
@@ -44,6 +44,7 @@
#include "qmakeevaluator_p.h"
#include "qmakeglobals.h"
#include "qmakeparser.h"
+#include "qmakevfs.h"
#include "ioutils.h"
#include <qbytearray.h>
@@ -55,6 +56,9 @@
#include <qset.h>
#include <qstringlist.h>
#include <qtextstream.h>
+#ifdef PROEVALUATOR_THREAD_SAFE
+# include <qthreadpool.h>
+#endif
#ifdef Q_OS_UNIX
#include <time.h>
@@ -281,46 +285,17 @@ quoteValue(const ProString &val)
return ret;
}
-static bool
-doWriteFile(const QString &name, QIODevice::OpenMode mode, const QString &contents, QString *errStr)
-{
- QByteArray bytes = contents.toLocal8Bit();
- QFile cfile(name);
- if (!(mode & QIODevice::Append) && cfile.open(QIODevice::ReadOnly | QIODevice::Text)) {
- if (cfile.readAll() == bytes)
- return true;
- cfile.close();
- }
- if (!cfile.open(mode | QIODevice::WriteOnly | QIODevice::Text)) {
- *errStr = cfile.errorString();
- return false;
- }
- cfile.write(bytes);
- cfile.close();
- if (cfile.error() != QFile::NoError) {
- *errStr = cfile.errorString();
- return false;
- }
- return true;
-}
-
QMakeEvaluator::VisitReturn
QMakeEvaluator::writeFile(const QString &ctx, const QString &fn, QIODevice::OpenMode mode,
const QString &contents)
{
- QFileInfo qfi(fn);
- if (!QDir::current().mkpath(qfi.path())) {
- evalError(fL1S("Cannot create %1directory %2.")
- .arg(ctx, QDir::toNativeSeparators(qfi.path())));
- return ReturnFalse;
- }
QString errStr;
- if (!doWriteFile(qfi.filePath(), mode, contents, &errStr)) {
+ if (!m_vfs->writeFile(fn, mode, contents, &errStr)) {
evalError(fL1S("Cannot write %1file %2: %3.")
- .arg(ctx, QDir::toNativeSeparators(qfi.filePath()), errStr));
+ .arg(ctx, QDir::toNativeSeparators(fn), errStr));
return ReturnFalse;
}
- m_parser->discardFileFromCache(qfi.filePath());
+ m_parser->discardFileFromCache(fn);
return ReturnTrue;
}
@@ -1118,11 +1093,11 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
}
}
return ReturnFalse;
-#ifdef PROEVALUATOR_FULL
case T_REQUIRES:
+#ifdef PROEVALUATOR_FULL
checkRequirements(args);
- return ReturnFalse; // Another qmake breakage
#endif
+ return ReturnFalse; // Another qmake breakage
case T_EVAL: {
VisitReturn ret = ReturnFalse;
ProFile *pro = m_parser->parsedProBlock(args.join(statics.field_sep),
@@ -1389,14 +1364,14 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
}
return (func_t == T_ERROR && !m_cumulative) ? ReturnError : ReturnTrue;
}
-#ifdef PROEVALUATOR_FULL
case T_SYSTEM: {
- if (m_cumulative) // Anything else would be insanity
- return ReturnFalse;
if (args.count() != 1) {
evalError(fL1S("system(exec) requires one argument."));
return ReturnFalse;
}
+#ifdef PROEVALUATOR_FULL
+ if (m_cumulative) // Anything else would be insanity
+ return ReturnFalse;
#ifndef QT_BOOTSTRAPPED
QProcess proc;
proc.setProcessChannelMode(QProcess::ForwardedChannels);
@@ -1407,8 +1382,10 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
+ IoUtils::shellQuote(QDir::toNativeSeparators(currentDirectory()))
+ QLatin1String(" && ") + args.at(0)).toLocal8Bit().constData()) == 0);
#endif
- }
+#else
+ return ReturnTrue;
#endif
+ }
case T_ISEMPTY: {
if (args.count() != 1) {
evalError(fL1S("isEmpty(var) requires one argument."));
@@ -1423,6 +1400,9 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
}
const QString &file = resolvePath(m_option->expandEnvVars(args.at(0).toQString(m_tmp1)));
+ // Don't use VFS here:
+ // - it supports neither listing nor even directories
+ // - it's unlikely that somebody would test for files they created themselves
if (IoUtils::exists(file))
return ReturnTrue;
int slsh = file.lastIndexOf(QLatin1Char('/'));
@@ -1435,17 +1415,18 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
return ReturnFalse;
}
-#ifdef PROEVALUATOR_FULL
case T_MKPATH: {
if (args.count() != 1) {
evalError(fL1S("mkpath(file) requires one argument."));
return ReturnFalse;
}
+#ifdef PROEVALUATOR_FULL
const QString &fn = resolvePath(args.at(0).toQString(m_tmp1));
if (!QDir::current().mkpath(fn)) {
evalError(fL1S("Cannot create directory %1.").arg(QDir::toNativeSeparators(fn)));
return ReturnFalse;
}
+#endif
return ReturnTrue;
}
case T_WRITE_FILE: {
@@ -1470,6 +1451,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
evalError(fL1S("touch(file, reffile) requires two arguments."));
return ReturnFalse;
}
+#ifdef PROEVALUATOR_FULL
const QString &tfn = resolvePath(args.at(0).toQString(m_tmp1));
const QString &rfn = resolvePath(args.at(1).toQString(m_tmp2));
#ifdef Q_OS_UNIX
@@ -1506,6 +1488,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
SetFileTime(wHand, 0, 0, &ft);
CloseHandle(wHand);
#endif
+#endif
return ReturnTrue;
}
case T_CACHE: {
@@ -1558,8 +1541,31 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
ProStringList newval;
bool changed = false;
for (bool hostBuild = false; ; hostBuild = true) {
- if (QMakeBaseEnv *baseEnv = m_option->baseEnvs.value(
- QMakeBaseKey(m_buildRoot, hostBuild))) {
+#ifdef PROEVALUATOR_THREAD_SAFE
+ m_option->mutex.lock();
+#endif
+ QMakeBaseEnv *baseEnv =
+ m_option->baseEnvs.value(QMakeBaseKey(m_buildRoot, hostBuild));
+#ifdef PROEVALUATOR_THREAD_SAFE
+ // It's ok to unlock this before locking baseEnv,
+ // as we have no intention to initialize the env.
+ m_option->mutex.unlock();
+#endif
+ do {
+ if (!baseEnv)
+ break;
+#ifdef PROEVALUATOR_THREAD_SAFE
+ QMutexLocker locker(&baseEnv->mutex);
+ if (baseEnv->inProgress && baseEnv->evaluator != this) {
+ // The env is still in the works, but it may be already past the cache
+ // loading. So we need to wait for completion and amend it as usual.
+ QThreadPool::globalInstance()->releaseThread();
+ baseEnv->cond.wait(&baseEnv->mutex);
+ QThreadPool::globalInstance()->reserveThread();
+ }
+ if (!baseEnv->isOk)
+ break;
+#endif
QMakeEvaluator *baseEval = baseEnv->evaluator;
const ProStringList &oldval = baseEval->values(dstvar);
if (mode == CacheSet) {
@@ -1590,7 +1596,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
}
changed = true;
}
- }
+ } while (false);
if (hostBuild)
break;
}
@@ -1639,7 +1645,6 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional(
}
return writeFile(fL1S("cache "), fn, QIODevice::Append, varstr);
}
-#endif
default:
evalError(fL1S("Function '%1' is not implemented.").arg(function.toQString(m_tmp1)));
return ReturnFalse;
diff --git a/qmake/library/qmakeevaluator.cpp b/qmake/library/qmakeevaluator.cpp
index 09ea231684..0df69890b3 100644
--- a/qmake/library/qmakeevaluator.cpp
+++ b/qmake/library/qmakeevaluator.cpp
@@ -44,6 +44,7 @@
#include "qmakeglobals.h"
#include "qmakeparser.h"
+#include "qmakevfs.h"
#include "ioutils.h"
#include <qbytearray.h>
@@ -174,13 +175,13 @@ const ProKey &QMakeEvaluator::map(const ProKey &var)
}
-QMakeEvaluator::QMakeEvaluator(QMakeGlobals *option,
- QMakeParser *parser, QMakeHandler *handler)
+QMakeEvaluator::QMakeEvaluator(QMakeGlobals *option, QMakeParser *parser, QMakeVfs *vfs,
+ QMakeHandler *handler)
:
#ifdef PROEVALUATOR_DEBUG
m_debugLevel(option->debugLevel),
#endif
- m_option(option), m_parser(parser), m_handler(handler)
+ m_option(option), m_parser(parser), m_handler(handler), m_vfs(vfs)
{
// So that single-threaded apps don't have to call initialize() for now.
initStatics();
@@ -936,7 +937,7 @@ void QMakeEvaluator::visitProVariable(
if (varName == statics.strTEMPLATE)
setTemplate();
else if (varName == statics.strQMAKE_PLATFORM)
- updateFeaturePaths();
+ m_featureRoots = 0;
#ifdef PROEVALUATOR_FULL
else if (varName == statics.strREQUIRES)
checkRequirements(values(varName));
@@ -1064,7 +1065,7 @@ bool QMakeEvaluator::prepareProject(const QString &inDir)
superdir = m_outputDir;
forever {
QString superfile = superdir + QLatin1String("/.qmake.super");
- if (IoUtils::exists(superfile)) {
+ if (m_vfs->exists(superfile)) {
m_superfile = QDir::cleanPath(superfile);
break;
}
@@ -1079,10 +1080,10 @@ bool QMakeEvaluator::prepareProject(const QString &inDir)
QString dir = m_outputDir;
forever {
conffile = sdir + QLatin1String("/.qmake.conf");
- if (!IoUtils::exists(conffile))
+ if (!m_vfs->exists(conffile))
conffile.clear();
cachefile = dir + QLatin1String("/.qmake.cache");
- if (!IoUtils::exists(cachefile))
+ if (!m_vfs->exists(cachefile))
cachefile.clear();
if (!conffile.isEmpty() || !cachefile.isEmpty()) {
if (dir != sdir)
@@ -1160,6 +1161,7 @@ bool QMakeEvaluator::loadSpecInternal()
#endif
valuesRef(ProKey("QMAKESPEC")) << ProString(m_qmakespec);
m_qmakespecName = IoUtils::fileName(m_qmakespec).toString();
+ // This also ensures that m_featureRoots is valid.
if (evaluateFeatureFile(QLatin1String("spec_post.prf")) != ReturnTrue)
return false;
// The MinGW and x-build specs may change the separator; $$shell_{path,quote}() need it
@@ -1173,7 +1175,9 @@ bool QMakeEvaluator::loadSpec()
m_hostBuild ? m_option->qmakespec : m_option->xqmakespec);
{
- QMakeEvaluator evaluator(m_option, m_parser, m_handler);
+ QMakeEvaluator evaluator(m_option, m_parser, m_vfs, m_handler);
+ evaluator.m_sourceRoot = m_sourceRoot;
+ evaluator.m_buildRoot = m_buildRoot;
if (!m_superfile.isEmpty()) {
valuesRef(ProKey("_QMAKE_SUPER_CACHE_")) << ProString(m_superfile);
if (evaluator.evaluateFile(
@@ -1313,45 +1317,45 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::visitProFile(
QMakeBaseEnv *baseEnv = *baseEnvPtr;
#ifdef PROEVALUATOR_THREAD_SAFE
- {
- QMutexLocker locker(&baseEnv->mutex);
- m_option->mutex.unlock();
- if (baseEnv->inProgress) {
- QThreadPool::globalInstance()->releaseThread();
- baseEnv->cond.wait(&baseEnv->mutex);
- QThreadPool::globalInstance()->reserveThread();
- if (!baseEnv->isOk)
- return ReturnFalse;
- } else
+ QMutexLocker locker(&baseEnv->mutex);
+ m_option->mutex.unlock();
+ if (baseEnv->inProgress) {
+ QThreadPool::globalInstance()->releaseThread();
+ baseEnv->cond.wait(&baseEnv->mutex);
+ QThreadPool::globalInstance()->reserveThread();
+ if (!baseEnv->isOk)
+ return ReturnFalse;
+ } else
#endif
- if (!baseEnv->evaluator) {
+ if (!baseEnv->evaluator) {
#ifdef PROEVALUATOR_THREAD_SAFE
- baseEnv->inProgress = true;
- locker.unlock();
+ baseEnv->inProgress = true;
+ locker.unlock();
#endif
- QMakeEvaluator *baseEval = new QMakeEvaluator(m_option, m_parser, m_handler);
- baseEnv->evaluator = baseEval;
- baseEval->m_superfile = m_superfile;
- baseEval->m_conffile = m_conffile;
- baseEval->m_cachefile = m_cachefile;
- baseEval->m_sourceRoot = m_sourceRoot;
- baseEval->m_buildRoot = m_buildRoot;
- baseEval->m_hostBuild = m_hostBuild;
- bool ok = baseEval->loadSpec();
+ QMakeEvaluator *baseEval = new QMakeEvaluator(m_option, m_parser, m_vfs, m_handler);
+ baseEnv->evaluator = baseEval;
+ baseEval->m_superfile = m_superfile;
+ baseEval->m_conffile = m_conffile;
+ baseEval->m_cachefile = m_cachefile;
+ baseEval->m_sourceRoot = m_sourceRoot;
+ baseEval->m_buildRoot = m_buildRoot;
+ baseEval->m_hostBuild = m_hostBuild;
+ bool ok = baseEval->loadSpec();
#ifdef PROEVALUATOR_THREAD_SAFE
- locker.relock();
- baseEnv->isOk = ok;
- baseEnv->inProgress = false;
- baseEnv->cond.wakeAll();
+ locker.relock();
+ baseEnv->isOk = ok;
+ baseEnv->inProgress = false;
+ baseEnv->cond.wakeAll();
#endif
- if (!ok)
- return ReturnFalse;
- }
-#ifdef PROEVALUATOR_THREAD_SAFE
+ if (!ok)
+ return ReturnFalse;
}
+#ifdef PROEVALUATOR_THREAD_SAFE
+ else if (!baseEnv->isOk)
+ return ReturnFalse;
#endif
initFrom(*baseEnv->evaluator);
@@ -1429,6 +1433,7 @@ void QMakeEvaluator::updateMkspecPaths()
ret << m_sourceRoot + concat;
ret << m_option->propertyValue(ProKey("QT_HOST_DATA/get")) + concat;
+ ret << m_option->propertyValue(ProKey("QT_HOST_DATA/src")) + concat;
ret.removeDuplicates();
m_mkspecPaths = ret;
@@ -1450,10 +1455,14 @@ void QMakeEvaluator::updateFeaturePaths()
m_option->dirlist_sep, QString::SkipEmptyParts);
QStringList feature_bases;
- if (!m_buildRoot.isEmpty())
+ if (!m_buildRoot.isEmpty()) {
+ feature_bases << m_buildRoot + mkspecs_concat;
feature_bases << m_buildRoot;
- if (!m_sourceRoot.isEmpty())
+ }
+ if (!m_sourceRoot.isEmpty()) {
+ feature_bases << m_sourceRoot + mkspecs_concat;
feature_bases << m_sourceRoot;
+ }
foreach (const QString &item, m_option->getPathListEnv(QLatin1String("QMAKEPATH")))
feature_bases << (item + mkspecs_concat);
@@ -1477,8 +1486,8 @@ void QMakeEvaluator::updateFeaturePaths()
}
}
- feature_bases << (m_option->propertyValue(ProKey("QT_HOST_DATA/get")).toQString(m_mtmp)
- + mkspecs_concat);
+ feature_bases << (m_option->propertyValue(ProKey("QT_HOST_DATA/get")) + mkspecs_concat);
+ feature_bases << (m_option->propertyValue(ProKey("QT_HOST_DATA/src")) + mkspecs_concat);
foreach (const QString &fb, feature_bases) {
foreach (const ProString &sfx, values(ProKey("QMAKE_PLATFORM")))
@@ -1496,7 +1505,7 @@ void QMakeEvaluator::updateFeaturePaths()
foreach (const QString &root, feature_roots)
if (IoUtils::exists(root))
ret << root;
- m_featureRoots = ret;
+ m_featureRoots = new QMakeFeatureRoots(ret);
}
ProString QMakeEvaluator::propertyValue(const ProKey &name) const
@@ -1810,7 +1819,10 @@ ProString QMakeEvaluator::first(const ProKey &variableName) const
QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFile(
const QString &fileName, QMakeHandler::EvalFileType type, LoadFlags flags)
{
- if (ProFile *pro = m_parser->parsedProFile(fileName, true)) {
+ QMakeParser::ParseFlags pflags = QMakeParser::ParseUseCache;
+ if (!(flags & LoadSilent))
+ pflags |= QMakeParser::ParseReportMissing;
+ if (ProFile *pro = m_parser->parsedProFile(fileName, pflags)) {
m_locationStack.push(m_current);
VisitReturn ok = visitProFile(pro, type, flags);
m_current = m_locationStack.pop();
@@ -1825,8 +1837,6 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFile(
#endif
return ok;
} else {
- if (!(flags & LoadSilent) && !IoUtils::exists(fileName))
- evalError(fL1S("WARNING: Include file %1 not found").arg(fileName));
return ReturnFalse;
}
}
@@ -1854,34 +1864,55 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFeatureFile(
if (!fn.endsWith(QLatin1String(".prf")))
fn += QLatin1String(".prf");
- if (m_featureRoots.isEmpty())
+ if (!m_featureRoots)
updateFeaturePaths();
- int start_root = 0;
+#ifdef PROEVALUATOR_THREAD_SAFE
+ m_featureRoots->mutex.lock();
+#endif
QString currFn = currentFileName();
- if (IoUtils::fileName(currFn) == IoUtils::fileName(fn)) {
- for (int root = 0; root < m_featureRoots.size(); ++root)
- if (currFn == m_featureRoots.at(root) + fn) {
- start_root = root + 1;
- break;
+ if (IoUtils::fileName(currFn) != IoUtils::fileName(fn))
+ currFn.clear();
+ // Null values cannot regularly exist in the hash, so they indicate that the value still
+ // needs to be determined. Failed lookups are represented via non-null empty strings.
+ QString *fnp = &m_featureRoots->cache[qMakePair(fn, currFn)];
+ if (fnp->isNull()) {
+ int start_root = 0;
+ const QStringList &paths = m_featureRoots->paths;
+ if (!currFn.isEmpty()) {
+ QStringRef currPath = IoUtils::pathName(currFn);
+ for (int root = 0; root < paths.size(); ++root)
+ if (currPath == paths.at(root)) {
+ start_root = root + 1;
+ break;
+ }
+ }
+ for (int root = start_root; root < paths.size(); ++root) {
+ QString fname = paths.at(root) + fn;
+ if (IoUtils::exists(fname)) {
+ fn = fname;
+ goto cool;
}
- }
- for (int root = start_root; root < m_featureRoots.size(); ++root) {
- QString fname = m_featureRoots.at(root) + fn;
- if (IoUtils::exists(fname)) {
- fn = fname;
- goto cool;
}
- }
#ifdef QMAKE_BUILTIN_PRFS
- fn.prepend(QLatin1String(":/qmake/features/"));
- if (QFileInfo(fn).exists())
- goto cool;
+ fn.prepend(QLatin1String(":/qmake/features/"));
+ if (QFileInfo(fn).exists())
+ goto cool;
#endif
- if (!silent)
- evalError(fL1S("Cannot find feature %1").arg(fileName));
- return ReturnFalse;
+ fn = QLatin1String(""); // Indicate failed lookup. See comment above.
- cool:
+ cool:
+ *fnp = fn;
+ } else {
+ fn = *fnp;
+ }
+#ifdef PROEVALUATOR_THREAD_SAFE
+ m_featureRoots->mutex.unlock();
+#endif
+ if (fn.isEmpty()) {
+ if (!silent)
+ evalError(fL1S("Cannot find feature %1").arg(fileName));
+ return ReturnFalse;
+ }
ProStringList &already = valuesRef(ProKey("QMAKE_INTERNAL_INCLUDED_FEATURES"));
ProString afn(fn);
if (already.contains(afn)) {
@@ -1908,7 +1939,7 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFeatureFile(
QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateFileInto(
const QString &fileName, ProValueMap *values, LoadFlags flags)
{
- QMakeEvaluator visitor(m_option, m_parser, m_handler);
+ QMakeEvaluator visitor(m_option, m_parser, m_vfs, m_handler);
visitor.m_caller = this;
visitor.m_outputDir = m_outputDir;
visitor.m_featureRoots = m_featureRoots;
diff --git a/qmake/library/qmakeevaluator.h b/qmake/library/qmakeevaluator.h
index 09617ba019..8ca2b182c7 100644
--- a/qmake/library/qmakeevaluator.h
+++ b/qmake/library/qmakeevaluator.h
@@ -55,9 +55,13 @@
#include <qstack.h>
#include <qstring.h>
#include <qstringlist.h>
+#include <qshareddata.h>
#ifndef QT_BOOTSTRAPPED
# include <qprocess.h>
#endif
+#ifdef PROEVALUATOR_THREAD_SAFE
+# include <qmutex.h>
+#endif
QT_BEGIN_NAMESPACE
@@ -83,6 +87,20 @@ public:
virtual void doneWithEval(ProFile *parent) = 0;
};
+typedef QPair<QString, QString> QMakeFeatureKey; // key, parent
+typedef QHash<QMakeFeatureKey, QString> QMakeFeatureHash;
+
+class QMAKE_EXPORT QMakeFeatureRoots : public QSharedData
+{
+public:
+ QMakeFeatureRoots(const QStringList &_paths) : paths(_paths) {}
+ const QStringList paths;
+ mutable QMakeFeatureHash cache;
+#ifdef PROEVALUATOR_THREAD_SAFE
+ mutable QMutex mutex;
+#endif
+};
+
// We use a QLinkedList based stack instead of a QVector based one (QStack), so that
// the addresses of value maps stay constant. The qmake generators rely on that.
class QMAKE_EXPORT ProValueMapStack : public QLinkedList<ProValueMap>
@@ -109,7 +127,7 @@ public:
static void initStatics();
static void initFunctionStatics();
- QMakeEvaluator(QMakeGlobals *option, QMakeParser *parser,
+ QMakeEvaluator(QMakeGlobals *option, QMakeParser *parser, QMakeVfs *vfs,
QMakeHandler *handler);
~QMakeEvaluator();
@@ -284,7 +302,7 @@ public:
QStringList m_qmakepath;
QStringList m_qmakefeatures;
QStringList m_mkspecPaths;
- QStringList m_featureRoots;
+ QExplicitlySharedDataPointer<QMakeFeatureRoots> m_featureRoots;
ProString m_dirSep;
ProFunctionDefs m_functionDefs;
ProStringList m_returnValue;
@@ -295,6 +313,7 @@ public:
QMakeGlobals *m_option;
QMakeParser *m_parser;
QMakeHandler *m_handler;
+ QMakeVfs *m_vfs;
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QMakeEvaluator::LoadFlags)
diff --git a/qmake/library/qmakeglobals.cpp b/qmake/library/qmakeglobals.cpp
index 3570aa70b7..bf37d51c40 100644
--- a/qmake/library/qmakeglobals.cpp
+++ b/qmake/library/qmakeglobals.cpp
@@ -324,34 +324,46 @@ bool QMakeGlobals::initProperties()
QT_PCLOSE(proc);
}
#endif
- foreach (QByteArray line, data.split('\n'))
- if (!line.startsWith("QMAKE_")) {
- int off = line.indexOf(':');
- if (off < 0) // huh?
- continue;
- if (line.endsWith('\r'))
- line.chop(1);
- QString name = QString::fromLatin1(line.left(off));
- ProString value = ProString(QDir::fromNativeSeparators(
- QString::fromLocal8Bit(line.mid(off + 1))));
- properties.insert(ProKey(name), value);
- if (name.startsWith(QLatin1String("QT_")) && !name.contains(QLatin1Char('/'))) {
- if (name.startsWith(QLatin1String("QT_INSTALL_"))) {
+ foreach (QByteArray line, data.split('\n')) {
+ int off = line.indexOf(':');
+ if (off < 0) // huh?
+ continue;
+ if (line.endsWith('\r'))
+ line.chop(1);
+ QString name = QString::fromLatin1(line.left(off));
+ ProString value = ProString(QDir::fromNativeSeparators(
+ QString::fromLocal8Bit(line.mid(off + 1))));
+ properties.insert(ProKey(name), value);
+ if (name.startsWith(QLatin1String("QT_"))) {
+ bool plain = !name.contains(QLatin1Char('/'));
+ if (!plain) {
+ if (!name.endsWith(QLatin1String("/get")))
+ continue;
+ name.chop(4);
+ }
+ if (name.startsWith(QLatin1String("QT_INSTALL_"))) {
+ if (plain) {
properties.insert(ProKey(name + QLatin1String("/raw")), value);
properties.insert(ProKey(name + QLatin1String("/get")), value);
- if (name == QLatin1String("QT_INSTALL_PREFIX")
- || name == QLatin1String("QT_INSTALL_DATA")
- || name == QLatin1String("QT_INSTALL_BINS")) {
- name.replace(3, 7, QLatin1String("HOST"));
+ }
+ properties.insert(ProKey(name + QLatin1String("/src")), value);
+ if (name == QLatin1String("QT_INSTALL_PREFIX")
+ || name == QLatin1String("QT_INSTALL_DATA")
+ || name == QLatin1String("QT_INSTALL_BINS")) {
+ name.replace(3, 7, QLatin1String("HOST"));
+ if (plain) {
properties.insert(ProKey(name), value);
properties.insert(ProKey(name + QLatin1String("/get")), value);
}
- } else if (name.startsWith(QLatin1String("QT_HOST_"))) {
- properties.insert(ProKey(name + QLatin1String("/get")), value);
+ properties.insert(ProKey(name + QLatin1String("/src")), value);
}
+ } else if (name.startsWith(QLatin1String("QT_HOST_"))) {
+ if (plain)
+ properties.insert(ProKey(name + QLatin1String("/get")), value);
+ properties.insert(ProKey(name + QLatin1String("/src")), value);
}
}
- properties.insert(ProKey("QMAKE_VERSION"), ProString("2.01a"));
+ }
return true;
}
#else
diff --git a/qmake/library/qmakeparser.cpp b/qmake/library/qmakeparser.cpp
index 49b5429130..0de3804764 100644
--- a/qmake/library/qmakeparser.cpp
+++ b/qmake/library/qmakeparser.cpp
@@ -41,6 +41,7 @@
#include "qmakeparser.h"
+#include "qmakevfs.h"
#include "ioutils.h"
using namespace QMakeInternal;
@@ -142,18 +143,19 @@ void QMakeParser::initialize()
statics.strLITERAL_WHITESPACE = QLatin1String("LITERAL_WHITESPACE");
}
-QMakeParser::QMakeParser(ProFileCache *cache, QMakeParserHandler *handler)
+QMakeParser::QMakeParser(ProFileCache *cache, QMakeVfs *vfs, QMakeParserHandler *handler)
: m_cache(cache)
, m_handler(handler)
+ , m_vfs(vfs)
{
// So that single-threaded apps don't have to call initialize() for now.
initialize();
}
-ProFile *QMakeParser::parsedProFile(const QString &fileName, bool cache)
+ProFile *QMakeParser::parsedProFile(const QString &fileName, ParseFlags flags)
{
ProFile *pro;
- if (cache && m_cache) {
+ if ((flags & ParseUseCache) && m_cache) {
ProFileCache::Entry *ent;
#ifdef PROPARSER_THREAD_SAFE
QMutexLocker locker(&m_cache->mutex);
@@ -182,7 +184,7 @@ ProFile *QMakeParser::parsedProFile(const QString &fileName, bool cache)
locker.unlock();
#endif
pro = new ProFile(fileName);
- if (!read(pro)) {
+ if (!read(pro, flags)) {
delete pro;
pro = 0;
} else {
@@ -203,7 +205,7 @@ ProFile *QMakeParser::parsedProFile(const QString &fileName, bool cache)
}
} else {
pro = new ProFile(fileName);
- if (!read(pro)) {
+ if (!read(pro, flags)) {
delete pro;
pro = 0;
}
@@ -228,26 +230,16 @@ void QMakeParser::discardFileFromCache(const QString &fileName)
m_cache->discardFile(fileName);
}
-bool QMakeParser::read(ProFile *pro)
+bool QMakeParser::read(ProFile *pro, ParseFlags flags)
{
- QFile file(pro->fileName());
- if (!file.open(QIODevice::ReadOnly)) {
- if (m_handler && IoUtils::exists(pro->fileName()))
+ QString content;
+ QString errStr;
+ if (!m_vfs->readFile(pro->fileName(), &content, &errStr)) {
+ if (m_handler && ((flags & ParseReportMissing) || m_vfs->exists(pro->fileName())))
m_handler->message(QMakeParserHandler::ParserIoError,
- fL1S("Cannot read %1: %2").arg(pro->fileName(), file.errorString()));
+ fL1S("Cannot read %1: %2").arg(pro->fileName(), errStr));
return false;
}
-
- QByteArray bcont = file.readAll();
- if (bcont.startsWith("\xef\xbb\xbf")) {
- // UTF-8 BOM will cause subtle errors
- m_handler->message(QMakeParserHandler::ParserIoError,
- fL1S("Unexpected UTF-8 BOM in %1").arg(pro->fileName()));
- return false;
- }
- QString content(QString::fromLocal8Bit(bcont));
- bcont.clear();
- file.close();
return read(pro, content, 1, FullGrammar);
}
diff --git a/qmake/library/qmakeparser.h b/qmake/library/qmakeparser.h
index 732e6a05e6..baf0a12045 100644
--- a/qmake/library/qmakeparser.h
+++ b/qmake/library/qmakeparser.h
@@ -79,6 +79,7 @@ public:
};
class ProFileCache;
+class QMakeVfs;
class QMAKE_EXPORT QMakeParser
{
@@ -86,11 +87,18 @@ public:
// Call this from a concurrency-free context
static void initialize();
- QMakeParser(ProFileCache *cache, QMakeParserHandler *handler);
+ enum ParseFlag {
+ ParseDefault = 0,
+ ParseUseCache = 1,
+ ParseReportMissing = 2
+ };
+ Q_DECLARE_FLAGS(ParseFlags, ParseFlag)
+
+ QMakeParser(ProFileCache *cache, QMakeVfs *vfs, QMakeParserHandler *handler);
enum SubGrammar { FullGrammar, TestGrammar, ValueGrammar };
// fileName is expected to be absolute and cleanPath()ed.
- ProFile *parsedProFile(const QString &fileName, bool cache = false);
+ ProFile *parsedProFile(const QString &fileName, ParseFlags flags = ParseDefault);
ProFile *parsedProBlock(const QString &contents, const QString &name, int line = 0,
SubGrammar grammar = FullGrammar);
@@ -129,7 +137,7 @@ private:
ushort terminator; // '}' if replace function call is braced, ':' if test function
};
- bool read(ProFile *pro);
+ bool read(ProFile *pro, ParseFlags flags);
bool read(ProFile *pro, const QString &content, int line, SubGrammar grammar);
ALWAYS_INLINE void putTok(ushort *&tokPtr, ushort tok);
@@ -175,6 +183,7 @@ private:
ProFileCache *m_cache;
QMakeParserHandler *m_handler;
+ QMakeVfs *m_vfs;
// This doesn't help gcc 3.3 ...
template<typename T> friend class QTypeInfo;
@@ -182,6 +191,8 @@ private:
friend class ProFileCache;
};
+Q_DECLARE_OPERATORS_FOR_FLAGS(QMakeParser::ParseFlags)
+
class QMAKE_EXPORT ProFileCache
{
public:
diff --git a/qmake/library/qmakevfs.cpp b/qmake/library/qmakevfs.cpp
new file mode 100644
index 0000000000..2039387a0f
--- /dev/null
+++ b/qmake/library/qmakevfs.cpp
@@ -0,0 +1,192 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the qmake application 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 "qmakevfs.h"
+
+#include "ioutils.h"
+using namespace QMakeInternal;
+
+#include <qdir.h>
+#include <qfile.h>
+#include <qfileinfo.h>
+
+#define fL1S(s) QString::fromLatin1(s)
+
+QT_BEGIN_NAMESPACE
+
+QMakeVfs::QMakeVfs()
+#ifndef PROEVALUATOR_FULL
+ : m_magicMissing(fL1S("missing"))
+ , m_magicExisting(fL1S("existing"))
+#endif
+{
+}
+
+bool QMakeVfs::writeFile(const QString &fn, QIODevice::OpenMode mode, const QString &contents,
+ QString *errStr)
+{
+#ifndef PROEVALUATOR_FULL
+# ifdef PROEVALUATOR_THREAD_SAFE
+ QMutexLocker locker(&m_mutex);
+# endif
+ QString *cont = &m_files[fn];
+ if (mode & QIODevice::Append)
+ *cont += contents;
+ else
+ *cont = contents;
+ Q_UNUSED(errStr)
+ return true;
+#else
+ QFileInfo qfi(fn);
+ if (!QDir::current().mkpath(qfi.path())) {
+ *errStr = fL1S("Cannot create parent directory");
+ return false;
+ }
+ QByteArray bytes = contents.toLocal8Bit();
+ QFile cfile(fn);
+ if (!(mode & QIODevice::Append) && cfile.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ if (cfile.readAll() == bytes)
+ return true;
+ cfile.close();
+ }
+ if (!cfile.open(mode | QIODevice::WriteOnly | QIODevice::Text)) {
+ *errStr = cfile.errorString();
+ return false;
+ }
+ cfile.write(bytes);
+ cfile.close();
+ if (cfile.error() != QFile::NoError) {
+ *errStr = cfile.errorString();
+ return false;
+ }
+ return true;
+#endif
+}
+
+bool QMakeVfs::readFile(const QString &fn, QString *contents, QString *errStr)
+{
+#ifndef PROEVALUATOR_FULL
+# ifdef PROEVALUATOR_THREAD_SAFE
+ QMutexLocker locker(&m_mutex);
+# endif
+ QHash<QString, QString>::ConstIterator it = m_files.constFind(fn);
+ if (it != m_files.constEnd()) {
+ if (it->constData() == m_magicMissing.constData()) {
+ *errStr = fL1S("No such file or directory");
+ return false;
+ }
+ if (it->constData() != m_magicExisting.constData()) {
+ *contents = *it;
+ return true;
+ }
+ }
+#endif
+
+ QFile file(fn);
+ if (!file.open(QIODevice::ReadOnly)) {
+#ifndef PROEVALUATOR_FULL
+ if (!IoUtils::exists(fn)) {
+ m_files[fn] = m_magicMissing;
+ *errStr = fL1S("No such file or directory");
+ } else
+#endif
+ *errStr = file.errorString();
+ return false;
+ }
+#ifndef PROEVALUATOR_FULL
+ m_files[fn] = m_magicExisting;
+#endif
+
+ QByteArray bcont = file.readAll();
+ if (bcont.startsWith("\xef\xbb\xbf")) {
+ // UTF-8 BOM will cause subtle errors
+ *errStr = fL1S("Unexpected UTF-8 BOM");
+ return false;
+ }
+ *contents = QString::fromLocal8Bit(bcont);
+ return true;
+}
+
+bool QMakeVfs::exists(const QString &fn)
+{
+#ifndef PROEVALUATOR_FULL
+# ifdef PROEVALUATOR_THREAD_SAFE
+ QMutexLocker locker(&m_mutex);
+# endif
+ QHash<QString, QString>::ConstIterator it = m_files.constFind(fn);
+ if (it != m_files.constEnd())
+ return it->constData() != m_magicMissing.constData();
+#endif
+ bool ex = IoUtils::exists(fn);
+#ifndef PROEVALUATOR_FULL
+ m_files[fn] = ex ? m_magicExisting : m_magicMissing;
+#endif
+ return ex;
+}
+
+#ifndef PROEVALUATOR_FULL
+// This should be called when the sources may have changed (e.g., VCS update).
+void QMakeVfs::invalidateCache()
+{
+# ifdef PROEVALUATOR_THREAD_SAFE
+ QMutexLocker locker(&m_mutex);
+# endif
+ QHash<QString, QString>::Iterator it = m_files.begin(), eit = m_files.end();
+ while (it != eit) {
+ if (it->constData() == m_magicMissing.constData()
+ ||it->constData() == m_magicExisting.constData())
+ it = m_files.erase(it);
+ else
+ ++it;
+ }
+}
+
+// This should be called when generated files may have changed (e.g., actual build).
+void QMakeVfs::invalidateContents()
+{
+# ifdef PROEVALUATOR_THREAD_SAFE
+ QMutexLocker locker(&m_mutex);
+# endif
+ m_files.clear();
+}
+#endif
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/kms/qkmsudevlistener.h b/qmake/library/qmakevfs.h
index 7534f0bcd3..13204ece9d 100644
--- a/src/plugins/platforms/kms/qkmsudevlistener.h
+++ b/qmake/library/qmakevfs.h
@@ -3,7 +3,7 @@
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
-** This file is part of the plugins of the Qt Toolkit.
+** This file is part of the qmake application of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
@@ -39,40 +39,47 @@
**
****************************************************************************/
-#ifndef QKMSUDEVLISTENER_H
-#define QKMSUDEVLISTENER_H
+#ifndef QMAKEVFS_H
+#define QMAKEVFS_H
-#include <QObject>
-#include <QMap>
-#include <QList>
-#include <QPointer>
-#include <QString>
+#include "qmake_global.h"
-#include <qkmsudevhandler.h>
-
-#include <libudev.h>
+# include <qiodevice.h>
+#ifndef PROEVALUATOR_FULL
+# include <qhash.h>
+# include <qstring.h>
+# ifdef PROEVALUATOR_THREAD_SAFE
+# include <qmutex.h>
+# endif
+#endif
QT_BEGIN_NAMESPACE
-class QKmsUdevListener : public QObject
+class QMAKE_EXPORT QMakeVfs
{
- Q_OBJECT
-
public:
- QKmsUdevListener(QObject *parent = 0);
- ~QKmsUdevListener();
+ QMakeVfs();
- void addHandler(QKmsUdevHandler *);
+ bool writeFile(const QString &fn, QIODevice::OpenMode mode, const QString &contents, QString *errStr);
+ bool readFile(const QString &fn, QString *contents, QString *errStr);
+ bool exists(const QString &fn);
-private:
- QList<QPointer<QKmsUdevHandler> > m_handlers;
- QMap<QString, QPointer<QObject> > m_devices;
- struct udev *m_udev;
+#ifndef PROEVALUATOR_FULL
+ void invalidateCache();
+ void invalidateContents();
+#endif
- void scan();
- bool create(struct udev_device *);
+private:
+#ifndef PROEVALUATOR_FULL
+# ifdef PROEVALUATOR_THREAD_SAFE
+ QMutex m_mutex;
+# endif
+ QHash<QString, QString> m_files;
+ QString m_magicMissing;
+ QString m_magicExisting;
+#endif
};
QT_END_NAMESPACE
-#endif // QKMSUDEVLISTENER_H
+#endif // QMAKEVFS_H
diff --git a/qmake/main.cpp b/qmake/main.cpp
index 55f915b52f..66364b83a7 100644
--- a/qmake/main.cpp
+++ b/qmake/main.cpp
@@ -85,6 +85,8 @@ int runQMake(int argc, char **argv)
// This is particularly important for things like QtCreator and scripted builds.
setvbuf(stdout, (char *)NULL, _IONBF, 0);
+ QMakeVfs vfs;
+ Option::vfs = &vfs;
QMakeGlobals globals;
Option::globals = &globals;
@@ -130,7 +132,7 @@ int runQMake(int argc, char **argv)
ProFileCache proFileCache;
Option::proFileCache = &proFileCache;
- QMakeParser parser(&proFileCache, &Option::evalHandler);
+ QMakeParser parser(&proFileCache, &vfs, &Option::evalHandler);
Option::parser = &parser;
QMakeProject project;
diff --git a/qmake/option.cpp b/qmake/option.cpp
index 4f7cdb34a2..387d8ce375 100644
--- a/qmake/option.cpp
+++ b/qmake/option.cpp
@@ -54,6 +54,7 @@ QT_BEGIN_NAMESPACE
EvalHandler Option::evalHandler;
QMakeGlobals *Option::globals;
ProFileCache *Option::proFileCache;
+QMakeVfs *Option::vfs;
QMakeParser *Option::parser;
//convenience
diff --git a/qmake/option.h b/qmake/option.h
index 6225f6b4d2..af8e3b7ab8 100644
--- a/qmake/option.h
+++ b/qmake/option.h
@@ -43,6 +43,7 @@
#define OPTION_H
#include <qmakeglobals.h>
+#include <qmakevfs.h>
#include <qmakeparser.h>
#include <qmakeevaluator.h>
@@ -87,6 +88,7 @@ struct Option
static QMakeGlobals *globals;
static ProFileCache *proFileCache;
+ static QMakeVfs *vfs;
static QMakeParser *parser;
//simply global convenience
diff --git a/qmake/project.cpp b/qmake/project.cpp
index 64e8e3c3b2..9f75d1da27 100644
--- a/qmake/project.cpp
+++ b/qmake/project.cpp
@@ -53,12 +53,12 @@ using namespace QMakeInternal;
QT_BEGIN_NAMESPACE
QMakeProject::QMakeProject()
- : QMakeEvaluator(Option::globals, Option::parser, &Option::evalHandler)
+ : QMakeEvaluator(Option::globals, Option::parser, Option::vfs, &Option::evalHandler)
{
}
QMakeProject::QMakeProject(QMakeProject *p)
- : QMakeEvaluator(Option::globals, Option::parser, &Option::evalHandler)
+ : QMakeEvaluator(Option::globals, Option::parser, Option::vfs, &Option::evalHandler)
{
initFrom(*p);
}
diff --git a/qmake/property.cpp b/qmake/property.cpp
index 4685440b48..38d454cb5d 100644
--- a/qmake/property.cpp
+++ b/qmake/property.cpp
@@ -83,6 +83,7 @@ QMakeProperty::QMakeProperty() : settings(0)
{
for (int i = 0; i < sizeof(propList)/sizeof(propList[0]); i++) {
QString name = QString::fromLatin1(propList[i].name);
+ m_values[ProKey(name + "/src")] = QLibraryInfo::rawLocation(propList[i].loc, QLibraryInfo::EffectiveSourcePaths);
m_values[ProKey(name + "/get")] = QLibraryInfo::rawLocation(propList[i].loc, QLibraryInfo::EffectivePaths);
QString val = QLibraryInfo::rawLocation(propList[i].loc, QLibraryInfo::FinalPaths);
if (!propList[i].raw) {
@@ -164,11 +165,14 @@ QMakeProperty::exec()
ProString val = value(ProKey(prop));
ProString pval = value(ProKey(prop + "/raw"));
ProString gval = value(ProKey(prop + "/get"));
+ ProString sval = value(ProKey(prop + "/src"));
fprintf(stdout, "%s:%s\n", prop.toLatin1().constData(), val.toLatin1().constData());
if (!pval.isEmpty() && pval != val)
fprintf(stdout, "%s/raw:%s\n", prop.toLatin1().constData(), pval.toLatin1().constData());
if (!gval.isEmpty() && gval != (pval.isEmpty() ? val : pval))
fprintf(stdout, "%s/get:%s\n", prop.toLatin1().constData(), gval.toLatin1().constData());
+ if (!sval.isEmpty() && sval != gval)
+ fprintf(stdout, "%s/src:%s\n", prop.toLatin1().constData(), sval.toLatin1().constData());
}
return true;
}
diff --git a/qmake/qmake.pri b/qmake/qmake.pri
index a642f9bae0..39959efe7b 100644
--- a/qmake/qmake.pri
+++ b/qmake/qmake.pri
@@ -4,7 +4,7 @@ DEFINES += QT_NO_TEXTCODEC QT_NO_LIBRARY QT_NO_COMPRESS QT_NO_UNICODETABLES \
#qmake code
SOURCES += project.cpp property.cpp main.cpp \
- library/ioutils.cpp library/proitems.cpp library/qmakeglobals.cpp \
+ library/ioutils.cpp library/proitems.cpp library/qmakevfs.cpp library/qmakeglobals.cpp \
library/qmakeparser.cpp library/qmakeevaluator.cpp library/qmakebuiltins.cpp \
generators/makefile.cpp \
generators/unix/unixmake2.cpp generators/unix/unixmake.cpp meta.cpp \
@@ -19,7 +19,7 @@ SOURCES += project.cpp property.cpp main.cpp \
generators/win32/cesdkhandler.cpp
HEADERS += project.h property.h \
- library/qmake_global.h library/ioutils.h library/proitems.h library/qmakeglobals.h \
+ library/qmake_global.h library/ioutils.h library/proitems.h library/qmakevfs.h library/qmakeglobals.h \
library/qmakeparser.h library/qmakeevaluator.h library/qmakeevaluator_p.h \
generators/makefile.h \
generators/unix/unixmake.h meta.h option.h cachekeys.h \
diff --git a/qmake/qmake.pro b/qmake/qmake.pro
index a81d0cdf77..568ad41ce1 100644
--- a/qmake/qmake.pro
+++ b/qmake/qmake.pro
@@ -6,7 +6,7 @@ option(host_build)
CONFIG += console bootstrap
CONFIG -= qt shared app_bundle uic
DEFINES += QT_BUILD_QMAKE QT_BOOTSTRAPPED \
- PROEVALUATOR_FULL PROEVALUATOR_DEBUG
+ PROEVALUATOR_FULL
DESTDIR = ../bin/
OBJECTS_DIR = .
diff --git a/qtbase.pro b/qtbase.pro
index d6726b5e93..d3b03d1fba 100644
--- a/qtbase.pro
+++ b/qtbase.pro
@@ -107,7 +107,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 \
- $$files($$PWD/mkspecs/*) # $$OUT_PWD contains only symlinks under Unix
+ $$files($$PWD/mkspecs/*)
mkspecs.files -= $$PWD/mkspecs/modules
INSTALLS += mkspecs
diff --git a/src/3rdparty/harfbuzz-ng/AUTHORS b/src/3rdparty/harfbuzz-ng/AUTHORS
new file mode 100644
index 0000000000..c611d7d476
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/AUTHORS
@@ -0,0 +1,8 @@
+Behdad Esfahbod
+Simon Hausmann
+Martin Hosken
+Jonathan Kew
+Lars Knoll
+Werner Lemberg
+Owen Taylor
+David Turner
diff --git a/src/3rdparty/harfbuzz-ng/COPYING b/src/3rdparty/harfbuzz-ng/COPYING
new file mode 100644
index 0000000000..9d1056f40b
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/COPYING
@@ -0,0 +1,36 @@
+HarfBuzz is licensed under the so-called "Old MIT" license. Details follow.
+For parts of HarfBuzz that are licensed under different licenses see individual
+files names COPYING in subdirectories where applicable.
+
+Copyright © 2010,2011,2012 Google, Inc.
+Copyright © 2012 Mozilla Foundation
+Copyright © 2011 Codethink Limited
+Copyright © 2008,2010 Nokia Corporation and/or its subsidiary(-ies)
+Copyright © 2009 Keith Stribley
+Copyright © 2009 Martin Hosken and SIL International
+Copyright © 2007 Chris Wilson
+Copyright © 2006 Behdad Esfahbod
+Copyright © 2005 David Turner
+Copyright © 2004,2007,2008,2009,2010 Red Hat, Inc.
+Copyright © 1998-2004 David Turner and Werner Lemberg
+
+For full copyright notices consult the individual files in the package.
+
+
+Permission is hereby granted, without written agreement and without
+license or royalty fees, to use, copy, modify, and distribute this
+software and its documentation for any purpose, provided that the
+above copyright notice and the following two paragraphs appear in
+all copies of this software.
+
+IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+
+THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
diff --git a/src/3rdparty/harfbuzz-ng/NEWS b/src/3rdparty/harfbuzz-ng/NEWS
new file mode 100644
index 0000000000..c1618ba057
--- /dev/null
+++ b/src/3rdparty/harfbuzz-ng/NEWS
@@ -0,0 +1,749 @@
+Overview of changes leading to 0.9.19
+Tuesday, July 16, 2013
+=====================================
+
+- Build fixes.
+- Better handling of multiple variation selectors in a row.
+- Pass on variation selector to GSUB if not consumed by cmap.
+- Fix undefined memory access.
+- Add Javanese config to Indic shaper.
+- Misc bug fixes.
+
+Overview of changes leading to 0.9.18
+Tuesday, May 28, 2013
+=====================================
+
+New build system:
+
+- All unneeded code is all disabled by default,
+
+- Uniscribe and CoreText shapers can be enabled with their --with options,
+
+- icu_le and old shapers cannot be enabled for now,
+
+- glib, freetype, and cairo will be detected automatically.
+ They can be force on/off'ed with their --with options,
+
+- icu and graphite2 are default off, can be enabled with their --with
+ options,
+
+Moreover, ICU support is now build into a separate library:
+libharfbuzz-icu.so, and a new harfbuzz-icu.pc is shipped for it.
+Distros can enable ICU now without every application on earth
+getting linked to via libharfbuzz.so.
+
+For distros I recommend that they make sure they are building --with-glib
+--with-freetype --with-cairo, --with-icu, and optionally --with-graphite2;
+And package harfbuzz and harfbuzz-icu separately.
+
+
+Overview of changes leading to 0.9.17
+Monday, May 20, 2013
+=====================================
+
+- Build fixes.
+- Fix bug in hb_set_get_min().
+- Fix regression with Arabic mark positioning / width-zeroing.
+
+Overview of changes leading to 0.9.16
+Friday, April 19, 2013
+=====================================
+
+- Major speedup in OpenType lookup processing. With the Amiri
+ Arabic font, this release is over 3x faster than previous
+ release. All scripts / languages should see this speedup.
+
+- New --num-iterations option for hb-shape / hb-view; useful for
+ profiling.
+
+Overview of changes leading to 0.9.15
+Friday, April 05, 2013
+=====================================
+
+- Build fixes.
+- Fix crasher in graphite2 shaper.
+- Fix Arabic mark width zeroing regression.
+- Don't compose Hangul jamo into Unicode syllables.
+
+
+Overview of changes leading to 0.9.14
+Thursday, March 21, 2013
+=====================================
+
+- Build fixes.
+- Fix time-consuming sanitize with malicious fonts.
+- Implement hb_buffer_deserialize_glyphs() for both json and text.
+- Do not ignore Hangul filler characters.
+- Indic fixes:
+ * Fix Malayalam pre-base reordering interaction with post-forms.
+ * Further adjust ZWJ handling. Should fix known regressions from
+ 0.9.13.
+
+
+Overview of changes leading to 0.9.13
+Thursday, February 25, 2013
+=====================================
+
+- Build fixes.
+- Ngapi HarfBuzz Hackfest in London (February 2013):
+ * Fixed all known Indic bugs,
+ * New Win8-style Myanmar shaper,
+ * New South-East Asian shaper for Tai Tham, Cham, and New Tai Lue,
+ * Smartly ignore Default_Ignorable characters (joiners, etc) wheb
+ matching GSUB/GPOS lookups,
+ * Fix 'Phags-Pa U+A872 shaping,
+ * Fix partial disabling of default-on features,
+ * Allow disabling of TrueType kerning.
+- Fix possible crasher with broken fonts with overlapping tables.
+- Removed generated files from git again. So, one needs ragel to
+ bootstrap from the git tree.
+
+API changes:
+- hb_shape() and related APIs now abort if buffer direction is
+ HB_DIRECTION_INVALID. Previously, hb_shape() was calling
+ hb_buffer_guess_segment_properties() on the buffer before
+ shaping. The heuristics in that function are fragile. If the
+ user really wants the old behvaior, they can call that function
+ right before calling hb_shape() to get the old behavior.
+- hb_blob_create_sub_blob() always creates sub-blob with
+ HB_MEMORY_MODE_READONLY. See comments for the reason.
+
+
+Overview of changes leading to 0.9.12
+Thursday, January 18, 2013
+=====================================
+
+- Build fixes for Sun compiler.
+- Minor bug fix.
+
+Overview of changes leading to 0.9.11
+Thursday, January 10, 2013
+=====================================
+
+- Build fixes.
+- Fix GPOS mark attachment with null Anchor offsets.
+- [Indic] Fix old-spec reordering of viramas if sequence ends in one.
+- Fix multi-threaded shaper data creation crash.
+- Add atomic ops for Solaris.
+
+API changes:
+- Rename hb_buffer_clear() to hb_buffer_clear_contents().
+
+
+Overview of changes leading to 0.9.10
+Thursday, January 3, 2013
+=====================================
+
+- [Indic] Fixed rendering of Malayalam dot-reph
+- Updated OT language tags.
+- Updated graphite2 backend.
+- Improved hb_ot_layout_get_size_params() logic.
+- Improve hb-shape/hb-view help output.
+- Fixed hb-set.h implementation to not crash.
+- Fixed various issues with hb_ot_layout_collect_lookups().
+- Various build fixes.
+
+New API:
+
+hb_graphite2_face_get_gr_face()
+hb_graphite2_font_get_gr_font()
+hb_coretext_face_get_cg_font()
+
+Modified API:
+
+hb_ot_layout_get_size_params()
+
+
+Overview of changes leading to 0.9.9
+Wednesday, December 5, 2012
+====================================
+
+- Fix build on Windows.
+- Minor improvements.
+
+
+Overview of changes leading to 0.9.8
+Tuesday, December 4, 2012
+====================================
+
+
+- Actually implement hb_shape_plan_get_shaper ().
+- Make UCDB data tables const.
+- Lots of internal refactoring in OTLayout tables.
+- Flesh out hb_ot_layout_lookup_collect_glyphs().
+
+New API:
+
+hb_ot_layout_collect_lookups()
+hb_ot_layout_get_size_params()
+
+
+Overview of changes leading to 0.9.7
+Sunday, November 21, 2012
+====================================
+
+
+HarfBuzz "All-You-Can-Eat-Sushi" (aka Vancouver) Hackfest and follow-on fixes.
+
+- Fix Arabic contextual joining using pre-context text.
+- Fix Sinhala "split matra" mess.
+- Fix Khmer shaping with broken fonts.
+- Implement Thai "PUA" shaping for old fonts.
+- Do NOT route Kharoshthi script through the Indic shaper.
+- Disable fallback positioning for Indic and Thai shapers.
+- Misc fixes.
+
+
+hb-shape / hb-view changes:
+
+- Add --text-before and --text-after
+- Add --bot / --eot / --preserve-default-ignorables
+- hb-shape --output-format=json
+
+
+New API:
+
+hb_buffer_clear()
+
+hb_buffer_flags_t
+
+HB_BUFFER_FLAGS_DEFAULT
+HB_BUFFER_FLAG_BOT
+HB_BUFFER_FLAG_EOT
+HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES
+
+hb_buffer_set_flags()
+hb_buffer_get_flags()
+
+HB_BUFFER_SERIALIZE_FLAGS
+hb_buffer_serialize_glyphs()
+hb_buffer_deserialize_glyphs()
+hb_buffer_serialize_list_formats()
+
+hb_set_add_range()
+hb_set_del_range()
+hb_set_get_population()
+hb_set_next_range()
+
+hb_face_[sg]et_glyph_count()
+
+hb_segment_properties_t
+HB_SEGMENT_PROPERTIES_DEFAULT
+hb_segment_properties_equal()
+hb_segment_properties_hash()
+
+hb_buffer_set_segment_properties()
+hb_buffer_get_segment_properties()
+
+hb_ot_layout_glyph_class_t
+hb_ot_layout_get_glyph_class()
+hb_ot_layout_get_glyphs_in_class()
+
+hb_shape_plan_t
+hb_shape_plan_create()
+hb_shape_plan_create_cached()
+hb_shape_plan_get_empty()
+hb_shape_plan_reference()
+hb_shape_plan_destroy()
+hb_shape_plan_set_user_data()
+hb_shape_plan_get_user_data()
+hb_shape_plan_execute()
+hb_shape_plan_get_shaper()
+
+hb_ot_shape_plan_collect_lookups()
+
+
+API changes:
+
+- Remove "mask" parameter from hb_buffer_add().
+- Rename hb_ot_layout_would_substitute_lookup() and hb_ot_layout_substitute_closure_lookup().
+- hb-set.h API const correction.
+- Renamed hb_set_min/max() to hb_set_get_min/max().
+- Rename hb_ot_layout_feature_get_lookup_indexes() to hb_ot_layout_feature_get_lookups().
+- Rename hb_buffer_guess_properties() to hb_buffer_guess_segment_properties().
+
+
+
+Overview of changes leading to 0.9.6
+Sunday, November 13, 2012
+====================================
+
+- Don't clear pre-context text if no new context is provided.
+- Fix ReverseChainingSubstLookup, which was totally borked.
+- Adjust output format of hb-shape a bit.
+- Include config.h.in in-tree. Makes it easier for alternate build systems.
+- Fix hb_buffer_set_length(buffer, 0) invalid memory allocation.
+- Use ICU LayoutEngine's C API instead of C++. Avoids much headache.
+- Drop glyphs for all of Unicode Default_Ignorable characters.
+- Misc build fixes.
+
+Arabic shaper:
+- Enable 'dlig' and 'mset' features in Arabic shaper.
+- Implement 'Phags-pa shaping, improve Mongolian.
+
+Indic shaper:
+- Decompose Sinhala split matras the way old HarfBuzz / Pango did.
+- Initial support for Consonant Medials.
+- Start adding new-style Myanmar shaping.
+- Make reph and 'pref' logic introspect the font.
+- Route Meetei-Mayek through the Indic shaper.
+- Don't apply 'liga' in Indic shaper.
+- Improve Malayalam pre-base reordering Ra interaction with Chillus.
+
+
+
+Overview of changes leading to 0.9.5
+Sunday, October 14, 2012
+====================================
+
+- Synthetic-GSUB Arabic fallback shaping.
+
+- Misc Indic improvements.
+
+- Add build system support for pthread.
+
+- Imported UCDN for in-tree Unicode callbacks implementation.
+
+- Context-aware Arabic joining.
+
+- Misc other fixes.
+
+- New API:
+
+ hb_feature_to/from-string()
+ hb_buffer_[sg]et_content_type()
+
+
+
+Overview of changes leading to 0.9.4
+Tuesday, Sep 03, 2012
+====================================
+
+- Indic improvements with old-spec Malayalam.
+
+- Better fallback glyph positioning, specially with Thai / Lao marks.
+
+- Implement dotted-circle insertion.
+
+- Better Arabic fallback shaping / ligation.
+
+- Added ICU LayoutEngine backend for testing. Call it by the 'icu_le' name.
+
+- Misc fixes.
+
+
+
+Overview of changes leading to 0.9.3
+Friday, Aug 18, 2012
+====================================
+
+- Fixed fallback mark positioning for left-to-right text.
+
+- Improve mark positioning for the remaining combining classes.
+
+- Unbreak Thai and fallback Arabic shaping.
+
+- Port Arabic shaper to shape-plan caching.
+
+- Use new ICU normalizer functions.
+
+
+
+Overview of changes leading to 0.9.2
+Friday, Aug 10, 2012
+====================================
+
+- Over a thousand commits! This is the first major release of HarfBuzz.
+
+- HarfBuzz is feature-complete now! It should be in par, or better, than
+ both Pango's shapers and old HarfBuzz / Qt shapers.
+
+- New Indic shaper, supporting main Indic scripts, Sinhala, and Khmer.
+
+- Improved Arabic shaper, with fallback Arabic shaping, supporting Arabic,
+ Sinhala, N'ko, Mongolian, and Mandaic.
+
+- New Thai / Lao shaper.
+
+- Tibetan / Hangul support in the generic shaper.
+
+- Synthetic GDEF support for fonts without a GDEF table.
+
+- Fallback mark positioning for fonts without a GPOS table.
+
+- Unicode normalization shaping heuristic during glyph mapping.
+
+- New experimental Graphite2 backend.
+
+- New Uniscribe backend (primarily for testing).
+
+- New CoreText backend (primarily for testing).
+
+- Major optimization and speedup.
+
+- Test suites and testing infrastructure (work in progress).
+
+- Greatly improved hb-view cmdline tool.
+
+- hb-shape cmdline tool.
+
+- Unicode 6.1 support.
+
+Summary of API changes:
+
+o Changed API:
+
+ - Users are expected to only include main header files now (ie. hb.h,
+ hb-glib.h, hb-ft.h, ...)
+
+ - All struct tag names had their initial underscore removed.
+ Ie. "struct _hb_buffer_t" is "struct hb_buffer_t" now.
+
+ - All set_user_data() functions now take a "replace" boolean parameter.
+
+ - hb_buffer_create() takes zero arguments now.
+ Use hb_buffer_pre_allocate() to pre-allocate.
+
+ - hb_buffer_add_utf*() now accept -1 for length parameteres,
+ meaning "nul-terminated".
+
+ - hb_direction_t enum values changed.
+
+ - All *_from_string() APIs now take a length parameter to allow for
+ non-nul-terminated strings. A -1 length means "nul-terminated".
+
+ - Typedef for hb_language_t changed.
+
+ - hb_get_table_func_t renamed to hb_reference_table_func_t.
+
+ - hb_ot_layout_table_choose_script()
+
+ - Various renames in hb-unicode.h.
+
+o New API:
+
+ - hb_buffer_guess_properties()
+ Automatically called by hb_shape().
+
+ - hb_buffer_normalize_glyphs()
+
+ - hb_tag_from_string()
+
+ - hb-coretext.h
+
+ - hb-uniscribe.h
+
+ - hb_face_reference_blob()
+ - hb_face_[sg]et_index()
+ - hb_face_set_upem()
+
+ - hb_font_get_glyph_name_func_t
+ hb_font_get_glyph_from_name_func_t
+ hb_font_funcs_set_glyph_name_func()
+ hb_font_funcs_set_glyph_from_name_func()
+ hb_font_get_glyph_name()
+ hb_font_get_glyph_from_name()
+ hb_font_glyph_to_string()
+ hb_font_glyph_from_string()
+
+ - hb_font_set_funcs_data()
+
+ - hb_ft_font_set_funcs()
+ - hb_ft_font_get_face()
+
+ - hb-gobject.h (work in progress)
+
+ - hb_ot_shape_glyphs_closure()
+ hb_ot_layout_substitute_closure_lookup()
+
+ - hb-set.h
+
+ - hb_shape_full()
+
+ - hb_unicode_combining_class_t
+
+ - hb_unicode_compose_func_t
+ hb_unicode_decompose_func_t
+ hb_unicode_decompose_compatibility_func_t
+ hb_unicode_funcs_set_compose_func()
+ hb_unicode_funcs_set_decompose_func()
+ hb_unicode_funcs_set_decompose_compatibility_func()
+ hb_unicode_compose()
+ hb_unicode_decompose()
+ hb_unicode_decompose_compatibility()
+
+o Removed API:
+
+ - hb_ft_get_font_funcs()
+
+ - hb_ot_layout_substitute_start()
+ hb_ot_layout_substitute_lookup()
+ hb_ot_layout_substitute_finish()
+ hb_ot_layout_position_start()
+ hb_ot_layout_position_lookup()
+ hb_ot_layout_position_finish()
+
+
+
+Overview of changes leading to 0.6.0
+Friday, May 27, 2011
+====================================
+
+- Vertical text support in GPOS
+- Almost all API entries have unit tests now, under test/
+- All thread-safety issues are fixed
+
+Summary of API changes follows.
+
+
+* Simple Types API:
+
+ o New API:
+ HB_LANGUAGE_INVALID
+ hb_language_get_default()
+ hb_direction_to_string()
+ hb_direction_from_string()
+ hb_script_get_horizontal_direction()
+ HB_UNTAG()
+
+ o Renamed API:
+ hb_category_t renamed to hb_unicode_general_category_t
+
+ o Changed API:
+ hb_language_t is a typed pointers now
+
+ o Removed API:
+ HB_TAG_STR()
+
+
+* Use ISO 15924 tags for hb_script_t:
+
+ o New API:
+ hb_script_from_iso15924_tag()
+ hb_script_to_iso15924_tag()
+ hb_script_from_string()
+
+ o Changed API:
+ HB_SCRIPT_* enum members changed value.
+
+
+* Buffer API streamlined:
+
+ o New API:
+ hb_buffer_reset()
+ hb_buffer_set_length()
+ hb_buffer_allocation_successful()
+
+ o Renamed API:
+ hb_buffer_ensure() renamed to hb_buffer_pre_allocate()
+ hb_buffer_add_glyph() renamed to hb_buffer_add()
+
+ o Removed API:
+ hb_buffer_clear()
+ hb_buffer_clear_positions()
+
+ o Changed API:
+ hb_buffer_get_glyph_infos() takes an out length parameter now
+ hb_buffer_get_glyph_positions() takes an out length parameter now
+
+
+* Blob API streamlined:
+
+ o New API:
+ hb_blob_get_data()
+ hb_blob_get_data_writable()
+
+ o Renamed API:
+ hb_blob_create_empty() renamed to hb_blob_get_empty()
+
+ o Removed API:
+ hb_blob_lock()
+ hb_blob_unlock()
+ hb_blob_is_writable()
+ hb_blob_try_writable()
+
+ o Changed API:
+ hb_blob_create() takes user_data before destroy now
+
+
+* Unicode functions API:
+
+ o Unicode function vectors can subclass other unicode function vectors now.
+ Unimplemented callbacks in the subclass automatically chainup to the parent.
+
+ o All hb_unicode_funcs_t callbacks take a user_data now. Their setters
+ take a user_data and its respective destroy callback.
+
+ o New API:
+ hb_unicode_funcs_get_empty()
+ hb_unicode_funcs_get_default()
+ hb_unicode_funcs_get_parent()
+
+ o Changed API:
+ hb_unicode_funcs_create() now takes a parent_funcs.
+
+ o Removed func getter functions:
+ hb_unicode_funcs_get_mirroring_func()
+ hb_unicode_funcs_get_general_category_func()
+ hb_unicode_funcs_get_script_func()
+ hb_unicode_funcs_get_combining_class_func()
+ hb_unicode_funcs_get_eastasian_width_func()
+
+
+* Face API:
+
+ o Renamed API:
+ hb_face_get_table() renamed to hb_face_reference_table()
+ hb_face_create_for_data() renamed to hb_face_create()
+
+ o Changed API:
+ hb_face_create_for_tables() takes user_data before destroy now
+ hb_face_reference_table() returns empty blob instead of NULL
+ hb_get_table_func_t accepts the face as first parameter now
+
+* Font API:
+
+ o Fonts can subclass other fonts now. Unimplemented callbacks in the
+ subclass automatically chainup to the parent. When chaining up,
+ scale is adjusted if the parent font has a different scale.
+
+ o All hb_font_funcs_t callbacks take a user_data now. Their setters
+ take a user_data and its respective destroy callback.
+
+ o New API:
+ hb_font_get_parent()
+ hb_font_funcs_get_empty()
+ hb_font_create_sub_font()
+
+ o Removed API:
+ hb_font_funcs_copy()
+ hb_font_unset_funcs()
+
+ o Removed func getter functions:
+ hb_font_funcs_get_glyph_func()
+ hb_font_funcs_get_glyph_advance_func()
+ hb_font_funcs_get_glyph_extents_func()
+ hb_font_funcs_get_contour_point_func()
+ hb_font_funcs_get_kerning_func()
+
+ o Changed API:
+ hb_font_create() takes a face and references it now
+ hb_font_set_funcs() takes user_data before destroy now
+ hb_font_set_scale() accepts signed integers now
+ hb_font_get_contour_point_func_t now takes glyph first, then point_index
+ hb_font_get_glyph_func_t returns a success boolean now
+
+
+* Changed object model:
+
+ o All object types have a _get_empty() now:
+ hb_blob_get_empty()
+ hb_buffer_get_empty()
+ hb_face_get_empty()
+ hb_font_get_empty()
+ hb_font_funcs_get_empty()
+ hb_unicode_funcs_get_empty()
+
+ o Added _set_user_data() and _get_user_data() for all object types:
+ hb_blob_get_user_data()
+ hb_blob_set_user_data()
+ hb_buffer_get_user_data()
+ hb_buffer_set_user_data()
+ hb_face_get_user_data()
+ hb_face_set_user_data()
+ hb_font_funcs_get_user_data()
+ hb_font_funcs_set_user_data()
+ hb_font_get_user_data()
+ hb_font_set_user_data()
+ hb_unicode_funcs_get_user_data()
+ hb_unicode_funcs_set_user_data()
+
+ o Removed the _get_reference_count() from all object types:
+ hb_blob_get_reference_count()
+ hb_buffer_get_reference_count()
+ hb_face_get_reference_count()
+ hb_font_funcs_get_reference_count()
+ hb_font_get_reference_count()
+ hb_unicode_funcs_get_reference_count()
+
+ o Added _make_immutable() and _is_immutable() for all object types except for buffer:
+ hb_blob_make_immutable()
+ hb_blob_is_immutable()
+ hb_face_make_immutable()
+ hb_face_is_immutable()
+
+
+* Changed API for vertical text supp