diff options
author | Liang Qi <liang.qi@qt.io> | 2016-11-01 10:27:41 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-11-02 09:24:11 +0100 |
commit | d7e4980132057aa10e54137114bf65e06c455030 (patch) | |
tree | 9d6ae36efa0cf84a612bfec6cf3dd2ea7f7e3446 /mkspecs/features | |
parent | 44c402b4bfba44480382244b8409fb3cf34d7ac1 (diff) | |
parent | a732576a66ff2bbd9c0b41cd5f3505a4d2fbf043 (diff) |
Merge remote-tracking branch 'origin/5.8' into dev
Blacklist tst_QMenuBar::taskQTBUG46812_doNotLeaveMenubarHighlighted() on macOS.
Conflicts:
mkspecs/features/mac/default_post.prf
mkspecs/features/mac/sdk.prf
mkspecs/features/uikit/default_post.prf
mkspecs/features/uikit/sdk.prf
src/angle/src/libEGL/libEGL.pro
src/platformsupport/fontdatabases/fontdatabases.pro
src/platformsupport/platformsupport.pro
src/plugins/platforms/cocoa/qnswindowdelegate.mm
src/plugins/platforms/direct2d/qwindowsdirect2dintegration.cpp
src/plugins/platforms/ios/ios.pro
src/plugins/platforms/ios/kernel.pro
tests/auto/widgets/widgets/qmenubar/BLACKLIST
tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
Task-number: QTBUG-56853
Change-Id: If58785210feee3550892fc7768cce90e75a2416c
Diffstat (limited to 'mkspecs/features')
28 files changed, 196 insertions, 144 deletions
diff --git a/mkspecs/features/data/unix/findclasslist.pl b/mkspecs/features/data/unix/findclasslist.pl index fb4357d0d4..b74b8b6a58 100644 --- a/mkspecs/features/data/unix/findclasslist.pl +++ b/mkspecs/features/data/unix/findclasslist.pl @@ -55,7 +55,7 @@ while (<STDIN>) { my $comment = " /* $1 */"; while (my $line = <HDR>) { # Match a struct or class declaration, but not a forward declaration - $line =~ /^(?:struct|class) (?:Q_.*_EXPORT)? (\w+)(?!;)/ or next; + $line =~ /^(?:struct|class|namespace) (?:Q_.*_EXPORT)? (\w+)(?!;)/ or next; print $comment if $comment; printf " *%d%s*;\n", length $1, $1; $comment = 0; diff --git a/mkspecs/features/default_pre.prf b/mkspecs/features/default_pre.prf index b655f2e0ca..2d52525190 100644 --- a/mkspecs/features/default_pre.prf +++ b/mkspecs/features/default_pre.prf @@ -23,49 +23,4 @@ CONFIG = \ unset(today) } -isEmpty(QMAKE_DEFAULT_INCDIRS):!host_build { - # - # Get default include and library paths from compiler - # - gcc { - !equals(QMAKE_HOST.os, Windows) { - cmd_prefix = "LC_ALL=C" - cmd_suffix = "</dev/null >/dev/null" - } else { - cmd_prefix = "set LC_ALL=C&" - cmd_suffix = "<NUL >NUL" - } - output = $$system("$$cmd_prefix $$QMAKE_CXX $$QMAKE_CXXFLAGS -xc++ -E -v - 2>&1 $$cmd_suffix", lines) - add_includes = false - for (line, output) { - line ~= s/^ *// # remove leading spaces - contains(line, "LIBRARY_PATH=.*") { - line ~= s/^LIBRARY_PATH=// # remove leading LIBRARY_PATH= - paths = $$split(line, $$QMAKE_DIRLIST_SEP) - for (path, paths): \ - QMAKE_DEFAULT_LIBDIRS += $$clean_path($$path) - } else: contains(line, "$${LITERAL_HASH}include <.*") { # #include <...> search starts here: - add_includes = true - } else: contains(line, "End of search.*") { - add_includes = false - } else: $$add_includes { - !contains(line, ".* \\(framework directory\\)"): \ - QMAKE_DEFAULT_INCDIRS += $$clean_path($$line) - } - } - QMAKE_DEFAULT_LIBDIRS = $$unique(QMAKE_DEFAULT_LIBDIRS) - } else: msvc { - LIB = $$getenv("LIB") - QMAKE_DEFAULT_LIBDIRS = $$split(LIB, $$QMAKE_DIRLIST_SEP) - INCLUDE = $$getenv("INCLUDE") - QMAKE_DEFAULT_INCDIRS = $$split(INCLUDE, $$QMAKE_DIRLIST_SEP) - } - - unix { - isEmpty(QMAKE_DEFAULT_INCDIRS): QMAKE_DEFAULT_INCDIRS = /usr/include /usr/local/include - isEmpty(QMAKE_DEFAULT_LIBDIRS): QMAKE_DEFAULT_LIBDIRS = /lib /usr/lib - } - - !isEmpty(QMAKE_DEFAULT_INCDIRS): cache(QMAKE_DEFAULT_INCDIRS, set stash) - !isEmpty(QMAKE_DEFAULT_LIBDIRS): cache(QMAKE_DEFAULT_LIBDIRS, set stash) -} +load(toolchain) diff --git a/mkspecs/features/exclusive_builds.prf b/mkspecs/features/exclusive_builds.prf index 5d06198ae4..f40cc99172 100644 --- a/mkspecs/features/exclusive_builds.prf +++ b/mkspecs/features/exclusive_builds.prf @@ -1,12 +1,9 @@ -defineTest(addExclusiveBuilds) { - lessThan(ARGC, 2): \ - error("addExclusiveBuilds() requires at least two arguments") - - !$$join(ARGS, _and_):!fix_output_dirs: \ +defineTest(addExclusiveBuildsProper) { + !$$1:!fix_output_dirs: \ return(true) - for(build, ARGS) { + for(build, 2) { isEmpty($${build}.name) { $${build}.name = $$title($$build) export($${build}.name) @@ -20,7 +17,7 @@ defineTest(addExclusiveBuilds) { export($${build}.dir_affix) } - $${build}.exclusive = $$ARGS + $${build}.exclusive = $$2 export($${build}.exclusive) QMAKE_EXCLUSIVE_BUILDS += $$build @@ -33,6 +30,13 @@ defineTest(addExclusiveBuilds) { return(true) } +defineTest(addExclusiveBuilds) { + lessThan(ARGC, 2): \ + error("addExclusiveBuilds() requires at least two arguments") + + addExclusiveBuildsProper($$join(ARGS, _and_), $$ARGS) +} + # Default directories to process QMAKE_DIR_REPLACE = OBJECTS_DIR MOC_DIR RCC_DIR PRECOMPILED_DIR QGLTF_DIR DESTDIR QMAKE_DIR_REPLACE_SANE += QGLTF_DIR diff --git a/mkspecs/features/mac/default_post.prf b/mkspecs/features/mac/default_post.prf index c799487354..33dffe603e 100644 --- a/mkspecs/features/mac/default_post.prf +++ b/mkspecs/features/mac/default_post.prf @@ -66,7 +66,7 @@ macx-xcode { QMAKE_MAC_XCODE_SETTINGS += only_active_arch } else { VALID_ARCHS = - !simulator|simulator_and_device: VALID_ARCHS += $$QMAKE_APPLE_DEVICE_ARCHS + device|!simulator: VALID_ARCHS += $$QMAKE_APPLE_DEVICE_ARCHS simulator: VALID_ARCHS += $$QMAKE_APPLE_SIMULATOR_ARCHS single_arch: VALID_ARCHS = $$first(VALID_ARCHS) diff --git a/mkspecs/features/mac/default_pre.prf b/mkspecs/features/mac/default_pre.prf index 2064d976d7..e21e749ee9 100644 --- a/mkspecs/features/mac/default_pre.prf +++ b/mkspecs/features/mac/default_pre.prf @@ -1,4 +1,4 @@ -CONFIG = asset_catalogs sdk rez $$CONFIG +CONFIG = asset_catalogs rez $$CONFIG load(default_pre) isEmpty(QMAKE_XCODE_DEVELOPER_PATH) { diff --git a/mkspecs/features/mac/objective_c.prf b/mkspecs/features/mac/objective_c.prf index b3b1d4be99..ed1ad8ad38 100644 --- a/mkspecs/features/mac/objective_c.prf +++ b/mkspecs/features/mac/objective_c.prf @@ -1,6 +1,7 @@ # Objective-C/C++ sources go in SOURCES, like all other sources SOURCES += $$OBJECTIVE_SOURCES +unset(OBJECTIVE_SOURCES) # Strip C/C++ flags from QMAKE_OBJECTIVE_CFLAGS just in case QMAKE_OBJECTIVE_CFLAGS -= $$QMAKE_CFLAGS $$QMAKE_CXXFLAGS @@ -8,3 +9,4 @@ QMAKE_OBJECTIVE_CFLAGS -= $$QMAKE_CFLAGS $$QMAKE_CXXFLAGS # Add Objective-C/C++ flags to C/C++ flags, the compiler can handle it QMAKE_CFLAGS += $$QMAKE_OBJECTIVE_CFLAGS QMAKE_CXXFLAGS += $$QMAKE_OBJECTIVE_CFLAGS +unset(QMAKE_OBJECTIVE_CFLAGS) diff --git a/mkspecs/features/mac/sdk.prf b/mkspecs/features/mac/sdk.prf index bea46fa8cb..be885e52ee 100644 --- a/mkspecs/features/mac/sdk.prf +++ b/mkspecs/features/mac/sdk.prf @@ -54,24 +54,27 @@ for(tool, $$list(QMAKE_CC QMAKE_CXX QMAKE_FIX_RPATH QMAKE_AR QMAKE_RANLIB QMAKE_ tvos: deployment_target = $$QMAKE_TVOS_DEPLOYMENT_TARGET watchos: deployment_target = $$QMAKE_WATCHOS_DEPLOYMENT_TARGET - !simulator|simulator_and_device: device_archs = $$QMAKE_APPLE_DEVICE_ARCHS + device|!simulator: device_archs = $$QMAKE_APPLE_DEVICE_ARCHS simulator: simulator_archs = $$QMAKE_APPLE_SIMULATOR_ARCHS archs = $$device_archs $$simulator_archs + isEmpty(archs): \ + error("QMAKE_APPLE_DEVICE_ARCHS or QMAKE_APPLE_SIMULATOR_ARCHS must contain at least one architecture") + single_arch { device_archs = $$first(device_archs) simulator_archs = $$first(simulator_archs) archs = $$first(archs) } - # If we're doing a simulator_and_device build, device and simulator architectures + # If we're doing a simulator and device build, device and simulator architectures # use different paths and flags for the sysroot and deployment target switch, so we # must multiplex them across multiple architectures using -Xarch. Otherwise we fall # back to the simple path. This is not strictly necessary but results in cleaner # command lines and makes it easier for people to override EXPORT_VALID_ARCHS to # limit individual rules to a different set of architecture(s) from the overall # build (such as machtest in QtCore). - simulator_and_device { + simulator:device { QMAKE_XARCH_CFLAGS = QMAKE_XARCH_LFLAGS = QMAKE_EXTRA_VARIABLES += QMAKE_XARCH_CFLAGS QMAKE_XARCH_LFLAGS diff --git a/mkspecs/features/mac/toolchain.prf b/mkspecs/features/mac/toolchain.prf new file mode 100644 index 0000000000..df191eb13c --- /dev/null +++ b/mkspecs/features/mac/toolchain.prf @@ -0,0 +1,5 @@ +# Ensure that we process sdk.prf first, as it will update QMAKE_CXX, +# which the default path determination uses. +sdk: load(sdk) + +load(toolchain) diff --git a/mkspecs/features/moc.prf b/mkspecs/features/moc.prf index 20916f9035..35626e343f 100644 --- a/mkspecs/features/moc.prf +++ b/mkspecs/features/moc.prf @@ -79,7 +79,7 @@ moc_source.CONFIG = no_link moc_verify moc_source.dependency_type = TYPE_C moc_source.commands = ${QMAKE_FUNC_mocCmdBase} ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT} moc_source.output = $$MOC_DIR/$${QMAKE_CPP_MOD_MOC}${QMAKE_FILE_BASE}$${QMAKE_EXT_CPP_MOC} -moc_source.input = SOURCES OBJECTIVE_SOURCES +moc_source.input = SOURCES moc_source.name = MOC ${QMAKE_FILE_IN} moc_source.depends += $$WIN_INCLUDETEMP $$moc_predefs.output silent:moc_source.commands = @echo moc ${QMAKE_FILE_IN} && $$moc_source.commands diff --git a/mkspecs/features/qml_plugin.prf b/mkspecs/features/qml_plugin.prf index 149b3cff56..7e12626db3 100644 --- a/mkspecs/features/qml_plugin.prf +++ b/mkspecs/features/qml_plugin.prf @@ -15,7 +15,6 @@ TEMPLATE = lib CONFIG += plugin if(win32|mac):!macx-xcode { - qtConfig(simulator_and_device): CONFIG += simulator_and_device qtConfig(debug_and_release): CONFIG += debug_and_release qtConfig(build_all): CONFIG += build_all } diff --git a/mkspecs/features/qpa/basicunixfontdatabase.prf b/mkspecs/features/qpa/basicunixfontdatabase.prf deleted file mode 100644 index 72449c8f6b..0000000000 --- a/mkspecs/features/qpa/basicunixfontdatabase.prf +++ /dev/null @@ -1,3 +0,0 @@ -qtConfig(system-freetype) { - QMAKE_USE_PRIVATE += freetype/linkonly -} diff --git a/mkspecs/features/qpa/genericunixfontdatabase.prf b/mkspecs/features/qpa/genericunixfontdatabase.prf deleted file mode 100644 index ef8384a245..0000000000 --- a/mkspecs/features/qpa/genericunixfontdatabase.prf +++ /dev/null @@ -1,6 +0,0 @@ -CONFIG += qpa/basicunixfontdatabase -qtConfig(fontconfig) { - DEFINES += Q_FONTCONFIGDATABASE - QMAKE_USE_PRIVATE += fontconfig/linkonly -} - diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf index e58e452620..07b7565f48 100644 --- a/mkspecs/features/qt.prf +++ b/mkspecs/features/qt.prf @@ -71,6 +71,7 @@ for(ever) { MODULE_INCLUDES = $$eval(QT.$${QTLIB}.includes) MODULE_LIBS = $$eval(QT.$${QTLIB}.libs) MODULE_FRAMEWORKS = $$eval(QT.$${QTLIB}.frameworks) + MODULE_USES = $$eval(QT.$${QTLIB}.uses) MODULE_CONFIG = $$eval(QT.$${QTLIB}.module_config) isEmpty(MODULE_NAME) { @@ -141,6 +142,7 @@ for(ever) { } } } + QMAKE_USE$$var_sfx += $$MODULE_USES # Add capabilities as defined by modules used in the project winrt { MODULE_WINRT_CAPABILITIES = $$eval(QT.$${QTLIB}.winrt_capabilities) @@ -290,7 +292,8 @@ contains(TEMPLATE, .*app) { autoplugs = for (qtmod, qt_module_deps) { for (ptype, QT.$${qtmod}.plugin_types) { - isEmpty(QTPLUGIN.$$ptype) { + nptype = $$replace(ptype, [-/], _) + isEmpty(QTPLUGIN.$$nptype) { for (plug, QT_PLUGINS) { equals(QT_PLUGIN.$${plug}.TYPE, $$ptype) { for (dep, QT_PLUGIN.$${plug}.EXTENDS) { @@ -303,7 +306,7 @@ contains(TEMPLATE, .*app) { } } } else { - plug = $$eval(QTPLUGIN.$$ptype) + plug = $$eval(QTPLUGIN.$$nptype) !equals(plug, -): \ autoplugs += $$plug } diff --git a/mkspecs/features/qt_app.prf b/mkspecs/features/qt_app.prf index 90135b00a3..87e32d6d42 100644 --- a/mkspecs/features/qt_app.prf +++ b/mkspecs/features/qt_app.prf @@ -36,3 +36,27 @@ INSTALLS += target load(qt_targets) load(qt_common) + +no_launch_target: return() + +load(resolve_target) +launch.commands = $$shell_quote($$shell_path($$QMAKE_RESOLVED_TARGET)) +QMAKE_EXTRA_TARGETS += launch + +# Add environment for non-installed builds. +QT_TOOL_NAME = target +qtAddTargetEnv(launch.commands, QT) + +isEmpty(BUILDS)|build_pass { + launch.depends = first +} else { + # For exclusive builds, run the app only once. + launch.CONFIG = recursive + launch.target = launch_all + launch.recurse_target = launch + launch.commands = + + launch_first.depends = $$eval($$first(BUILDS).target)-launch + launch_first.target = launch + QMAKE_EXTRA_TARGETS += launch_first +} diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf index 9d870faeac..88f3166e3d 100644 --- a/mkspecs/features/qt_configure.prf +++ b/mkspecs/features/qt_configure.prf @@ -376,7 +376,7 @@ defineReplace(qtConfPkgConfig) { $$host { pkg_config = $$qtConfFindInPath("pkg-config") } else { - pkg_config = "$$qtConfPkgConfigEnv()$$PKG_CONFIG" + pkg_config = "$$qtConfPkgConfigEnv()$$PKG_CONFIG_EXECUTABLE" } return($$pkg_config) @@ -557,18 +557,6 @@ defineReplace(qtConfLibraryArgs) { return($$qmake_args) } -defineReplace(qtConfGetHexVersion) { - version = $$split(1, '.') - number = - for(i, 0..2) { - n = $$member(version, $$i) - isEmpty(n): n = 0 - number += $$format_number($$n, obase=16 zeropad width=2) - } - number = "0x$$join(number)" - return($$number) -} - defineTest(qtConfExportLibrary) { isEmpty(2): return() !$$qtConfEvaluate($$eval($${1}.export)): return() @@ -578,7 +566,6 @@ defineTest(qtConfExportLibrary) { eval(libs = $$eval($${1}.libs)) eval(cflags = $$eval($${1}.cflags)) eval(includes = $$eval($${1}.includedir)) - version = $$eval($${1}.version) # Split $$cflags into stuff that goes into DEFINES, INCLUDEPATH, and other stuff. defines = @@ -606,14 +593,6 @@ defineTest(qtConfExportLibrary) { $$eval($${1}.builds.$${b})) !isEmpty(defines): qtConfOutputVar(assign, $$output, QMAKE_DEFINES_$$NAME, $$defines) !isEmpty(includes): qtConfOutputVar(assign, $$output, QMAKE_INCDIR_$$NAME, $$includes) - !isEmpty(version) { - qtConfOutputVar(assign, $$output, QMAKE_$${NAME}_VERSION, $$version) - qtConfOutputSetDefine("privateHeader", "QT_LIBRARY_VERSION_$${2}", $$qtConfGetHexVersion($$version)) - version = $$split(version, '.') - qtConfOutputVar(assign, $$output, QMAKE_$${NAME}_VERSION_MAJOR, $$member(version, 0)) - qtConfOutputVar(assign, $$output, QMAKE_$${NAME}_VERSION_MINOR, $$member(version, 1)) - qtConfOutputVar(assign, $$output, QMAKE_$${NAME}_VERSION_PATCH, $$member(version, 2)) - } !isEmpty($${currentConfig}.module): \ qtConfExtendVar($$output, "QT.$${currentModule}_private.libraries", $$2) } @@ -623,6 +602,8 @@ defineTest(qtConfHandleLibrary) { defined($${lpfx}.result, var): return() qtConfEnsureTestTypeDeps("library") + qtConfTestPrepare_compile($$lpfx) + use_args = $$eval($${lpfx}.literal_args) qtConfLoadResult($${lpfx}, $$1) { $$eval($${lpfx}.result): \ @@ -636,7 +617,6 @@ defineTest(qtConfHandleLibrary) { result = false for (s, $${lpfx}.sources._KEYS_) { - qtLog("Trying source $$s of library $${1}.") spfx = $${lpfx}.sources.$${s} t = $$eval($${spfx}.type) @@ -644,26 +624,30 @@ defineTest(qtConfHandleLibrary) { !defined($$call, test): \ error("Library $${1} source $${s} has unknown type '$$t'") + qtLog("Trying source $$s (type $$t) of library $${1} ...") + !$$qtConfEvaluate($$eval($${spfx}.condition)) { - qtLog("Source $$s of library $$1 failed condition.") + qtLog(" => source failed condition.") next() } !$${call}($$spfx) { - qtLog("Source $$s of library $$1 produced no result.") + qtLog(" => source produced no result.") next() } # if the library defines a test, use it to verify the source. !isEmpty($${lpfx}.test) { - $${lpfx}.literal_args = $$qtConfLibraryArgs($$spfx) + $${lpfx}.literal_args = $$use_args $$qtConfLibraryArgs($$spfx) $${lpfx}.host = $$eval($${spfx}.host) !qtConfTest_compile($$lpfx) { - qtLog("Source $$s of library $$1 failed verification.") + qtLog(" => source failed verification.") next() } } + qtLog(" => source accepted.") + $${lpfx}.cache += source for (v, $$list(libs includes cflags version export)): \ $${lpfx}.cache += sources.$${s}.$${v} diff --git a/mkspecs/features/qt_helper_lib.prf b/mkspecs/features/qt_helper_lib.prf index 8890866c64..07e4f48771 100644 --- a/mkspecs/features/qt_helper_lib.prf +++ b/mkspecs/features/qt_helper_lib.prf @@ -15,16 +15,40 @@ TEMPLATE = lib CONFIG -= qt QT = # In case qt is re-added. +INCLUDEPATH += $$MODULE_INCLUDEPATH +DEFINES += $$MODULE_DEFINES + CONFIG -= warning_clean # Don't presume 3rd party code to be clean load(qt_common) -qtConfig(simulator_and_device): CONFIG += simulator_and_device qtConfig(debug_and_release): CONFIG += debug_and_release qtConfig(build_all): CONFIG += build_all DESTDIR = $$MODULE_BASE_OUTDIR/lib DLLDESTDIR = $$MODULE_BASE_OUTDIR/bin +!build_pass { + MODULE = $$replace(TARGET, ^qt, ) + MODULE_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_ext_$${MODULE}.pri + ucmodule = $$upper($$MODULE) + + MODULE_PRI_CONT = \ + "QMAKE_INCDIR_$${ucmodule} = $$val_escape(MODULE_INCLUDEPATH)" \ + "QMAKE_DEFINES_$${ucmodule} = $$val_escape(MODULE_DEFINES)" + MODULE_LIBS = -L$$DESTDIR -l$$TARGET + debug_and_release { + win32: MODULE_DEBUG_LIBS = -L$$DESTDIR -l$${TARGET}d + darwin: MODULE_DEBUG_LIBS = -L$$DESTDIR -l$${TARGET}_debug + MODULE_PRI_CONT += \ + "QMAKE_LIBS_$${ucmodule}_DEBUG = $$val_escape(MODULE_DEBUG_LIBS)" \ + "QMAKE_LIBS_$${ucmodule}_RELEASE = $$val_escape(MODULE_LIBS)" + } else { + MODULE_PRI_CONT += \ + "QMAKE_LIBS_$${ucmodule} = $$val_escape(MODULE_LIBS)" + } + write_file($$MODULE_PRI, MODULE_PRI_CONT)|error() +} + # In static builds of Qt, convenience libraries must be installed, # as in this case they are not linked to the final library/plugin. installed|if(!not_installed:qtConfig(static)): load(qt_installs) diff --git a/mkspecs/features/qt_installs.prf b/mkspecs/features/qt_installs.prf index 3a5dbb6274..0d3dfb6b93 100644 --- a/mkspecs/features/qt_installs.prf +++ b/mkspecs/features/qt_installs.prf @@ -36,7 +36,7 @@ qt_install_headers { targ_headers.path = $$[QT_INSTALL_HEADERS]/$$MODULE_INCNAME INSTALLS += targ_headers - private_headers.files = $$SYNCQT.PRIVATE_HEADER_FILES + private_headers.files = $$SYNCQT.PRIVATE_HEADER_FILES $$SYNCQT.INJECTED_PRIVATE_HEADER_FILES private_headers.path = $$[QT_INSTALL_HEADERS]/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME/private INSTALLS += private_headers diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf index 46ec6bc4bf..954fdb2501 100644 --- a/mkspecs/features/qt_module.prf +++ b/mkspecs/features/qt_module.prf @@ -13,6 +13,11 @@ isEmpty(MODULE):MODULE = $$section($$list($$basename(_PRO_FILE_)), ., 0, 0) isEmpty(VERSION): VERSION = $$MODULE_VERSION isEmpty(VERSION): error("Module does not define version.") +exists($$OUT_PWD/qt$${MODULE}-config.pri) { + include($$OUT_PWD/qt$${MODULE}-config.pri) + CONFIG += generated_privates +} + # Compile as shared/DLL or static according to the option given to configure # unless overridden. Host builds are always static host_build|staticlib: CONFIG += static @@ -79,15 +84,16 @@ INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}_private.inclu # If Qt was configured with -debug-and-release then build the module the same way # - unless this is a host library !host_build:if(win32|mac):!macx-xcode { - qtConfig(simulator_and_device): CONFIG += simulator_and_device qtConfig(debug_and_release): CONFIG += debug_and_release qtConfig(build_all): CONFIG += build_all } QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF -QT += $$QT_FOR_PRIVATE +QT_PRIVATE += $$QT_FOR_PRIVATE unset(QT_FOR_PRIVATE) +QMAKE_USE_PRIVATE += $$QMAKE_USE_FOR_PRIVATE +unset(QMAKE_USE_FOR_PRIVATE) !internal_module:CONFIG += create_cmake @@ -114,7 +120,7 @@ lib_bundle { FRAMEWORK_HEADERS.files = $$SYNCQT.HEADER_FILES $$SYNCQT.HEADER_CLASSES FRAMEWORK_HEADERS.path = Headers FRAMEWORK_PRIVATE_HEADERS.version = Versions - FRAMEWORK_PRIVATE_HEADERS.files = $$SYNCQT.PRIVATE_HEADER_FILES + FRAMEWORK_PRIVATE_HEADERS.files = $$SYNCQT.PRIVATE_HEADER_FILES $$SYNCQT.INJECTED_PRIVATE_HEADER_FILES FRAMEWORK_PRIVATE_HEADERS.path = Headers/$$VERSION/$$MODULE_INCNAME/private FRAMEWORK_QPA_HEADERS.version = Versions FRAMEWORK_QPA_HEADERS.files = $$SYNCQT.QPA_HEADER_FILES diff --git a/mkspecs/features/qt_module_headers.prf b/mkspecs/features/qt_module_headers.prf index 5a45007820..790a4ee29e 100644 --- a/mkspecs/features/qt_module_headers.prf +++ b/mkspecs/features/qt_module_headers.prf @@ -113,7 +113,7 @@ exists($$OUT_PWD/qt$${MODULE}-config.h) { $$fwd_rel/qt$${MODULE}-config_p.h:$$MODULE_VERSION/$$MODULE_INCNAME/private/qt$${MODULE}-config_p.h inst_rel = $$relative_path($$OUT_PWD, $$_PRO_FILE_PWD_) SYNCQT.HEADER_FILES += $$inst_rel/qt$${MODULE}-config.h - SYNCQT.PRIVATE_HEADER_FILES += $$inst_rel/qt$${MODULE}-config_p.h + SYNCQT.INJECTED_PRIVATE_HEADER_FILES += $$inst_rel/qt$${MODULE}-config_p.h } for (injection, SYNCQT.INJECTIONS) { diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf index 9542a362d0..57160d11eb 100644 --- a/mkspecs/features/qt_module_pris.prf +++ b/mkspecs/features/qt_module_pris.prf @@ -35,9 +35,6 @@ else: \ MODULE_PRI = $$mod_inst_pfx/qt_lib_$${MODULE_ID}.pri MODULE_FWD_PRI = $$mod_work_pfx/qt_lib_$${MODULE_ID}.pri -exists($$OUT_PWD/qt$${MODULE}-config.pri): \ - include($$OUT_PWD/qt$${MODULE}-config.pri) - defineReplace(qtGetFeaturesForModule) { enabled = $$unique(QT.$${1}.enabled_features) disabled = $$unique(QT.$${1}.disabled_features) @@ -60,8 +57,7 @@ defineReplace(qtExportLibsForModule) { NAME = $$upper($$lib) vars = \ QMAKE_LIBS_$$NAME QMAKE_LIBS_$${NAME}_DEBUG QMAKE_LIBS_$${NAME}_RELEASE \ - QMAKE_CFLAGS_$$NAME QMAKE_INCDIR_$$NAME QMAKE_$${NAME}_VERSION \ - QMAKE_$${NAME}_VERSION_MAJOR QMAKE_$${NAME}_VERSION_MINOR QMAKE_$${NAME}_VERSION_PATCH + QMAKE_DEFINES_$$NAME QMAKE_INCDIR_$$NAME for (var, vars) { !isEmpty($$var): \ result += "$$var = $$val_escape($$var)" @@ -105,7 +101,7 @@ defineReplace(qtExportLibsForModule) { else: \ module_config = !isEmpty(MODULE_PLUGIN_TYPES): \ - module_plugtypes = "QT.$${MODULE_ID}.plugin_types = $$replace(MODULE_PLUGIN_TYPES, /.*$, )" + module_plugtypes = "QT.$${MODULE_ID}.plugin_types = $$replace(MODULE_PLUGIN_TYPES, /[^.]+\\.[^.]+$, )" else: \ module_plugtypes = !isEmpty(MODULE_MASTER_HEADER): \ @@ -134,6 +130,7 @@ defineReplace(qtExportLibsForModule) { MODULE_PRI_CONT += \ "QT.$${MODULE_ID}.depends =$$join(MODULE_DEPENDS, " ", " ")" \ $$module_rundep \ + "QT.$${MODULE_ID}.uses =$$join(QMAKE_USE, " ", " ")" \ "QT.$${MODULE_ID}.module_config =$$join(module_build_type, " ", " ")" \ $$module_config \ "QT.$${MODULE_ID}.DEFINES = $$val_escape(MODULE_DEFINES)" \ @@ -164,6 +161,7 @@ defineReplace(qtExportLibsForModule) { "QT.$${MODULE}_private.includes = $$MODULE_PRIVATE_INCLUDES" \ "QT.$${MODULE}_private.frameworks =" \ "QT.$${MODULE}_private.depends = $$private_deps" \ + "QT.$${MODULE}_private.uses =$$join(QMAKE_USE_FOR_PRIVATE, " ", " ")" \ "QT.$${MODULE}_private.module_config =$$join(module_build_type, " ", " ")" \ $$qtGetFeaturesForModule($${MODULE}_private) \ "" \ diff --git a/mkspecs/features/qt_plugin.prf b/mkspecs/features/qt_plugin.prf index 2179c7ca22..265b4ea8a2 100644 --- a/mkspecs/features/qt_plugin.prf +++ b/mkspecs/features/qt_plugin.prf @@ -26,7 +26,6 @@ win32:CONFIG(shared, static|shared) { tool_plugin { !build_pass:qtConfig(debug_and_release): CONFIG += release } else:if(win32|mac):!macx-xcode { - qtConfig(simulator_and_device): CONFIG += simulator_and_device qtConfig(debug_and_release): CONFIG += debug_and_release qtConfig(build_all): CONFIG += build_all } diff --git a/mkspecs/features/qt_tool.prf b/mkspecs/features/qt_tool.prf index 93c952617d..4b73b4b8f7 100644 --- a/mkspecs/features/qt_tool.prf +++ b/mkspecs/features/qt_tool.prf @@ -9,6 +9,7 @@ # We mean it. # +CONFIG += no_launch_target load(qt_app) CONFIG += console diff --git a/mkspecs/features/testcase.prf b/mkspecs/features/testcase.prf index e42343f434..06b29ea04b 100644 --- a/mkspecs/features/testcase.prf +++ b/mkspecs/features/testcase.prf @@ -1,4 +1,4 @@ -have_target { +!have_target: return() # qt_build_config.prf disables execptions for all Qt modules which don't # explicitly turn it on again, while the qmake default is to build with @@ -207,5 +207,3 @@ macx-xcode:bundle:isEmpty(QMAKE_BUNDLE_EXTENSION) { QMAKE_BUNDLE_EXTENSION = .xctest } -} # have_target - diff --git a/mkspecs/features/toolchain.prf b/mkspecs/features/toolchain.prf new file mode 100644 index 0000000000..3f266dd2a4 --- /dev/null +++ b/mkspecs/features/toolchain.prf @@ -0,0 +1,57 @@ + +defineReplace(qtMakeExpand) { + out = "$$1" + for(ever) { + m = $$replace(out, ".*\\$\\(EXPORT_([^)]+)\\).*", \\1) + equals(m, $$out): \ + return($$out) + out = $$replace(out, "\\$\\(EXPORT_$$m\\)", $$eval($$m)) + } +} + +isEmpty(QMAKE_DEFAULT_INCDIRS):!host_build { + # + # Get default include and library paths from compiler + # + gcc { + !equals(QMAKE_HOST.os, Windows) { + cmd_prefix = "LC_ALL=C" + cmd_suffix = "</dev/null >/dev/null" + } else { + cmd_prefix = "set LC_ALL=C&" + cmd_suffix = "<NUL >NUL" + } + output = $$system("$$cmd_prefix $$QMAKE_CXX $$qtMakeExpand($$QMAKE_CXXFLAGS) -xc++ -E -v - 2>&1 $$cmd_suffix", lines) + add_includes = false + for (line, output) { + line ~= s/^ *// # remove leading spaces + contains(line, "LIBRARY_PATH=.*") { + line ~= s/^LIBRARY_PATH=// # remove leading LIBRARY_PATH= + paths = $$split(line, $$QMAKE_DIRLIST_SEP) + for (path, paths): \ + QMAKE_DEFAULT_LIBDIRS += $$clean_path($$path) + } else: contains(line, "$${LITERAL_HASH}include <.*") { # #include <...> search starts here: + add_includes = true + } else: contains(line, "End of search.*") { + add_includes = false + } else: $$add_includes { + !contains(line, ".* \\(framework directory\\)"): \ + QMAKE_DEFAULT_INCDIRS += $$clean_path($$line) + } + } + QMAKE_DEFAULT_LIBDIRS = $$unique(QMAKE_DEFAULT_LIBDIRS) + } else: msvc { + LIB = $$getenv("LIB") + QMAKE_DEFAULT_LIBDIRS = $$split(LIB, $$QMAKE_DIRLIST_SEP) + INCLUDE = $$getenv("INCLUDE") + QMAKE_DEFAULT_INCDIRS = $$split(INCLUDE, $$QMAKE_DIRLIST_SEP) + } + + unix { + isEmpty(QMAKE_DEFAULT_INCDIRS): QMAKE_DEFAULT_INCDIRS = /usr/include /usr/local/include + isEmpty(QMAKE_DEFAULT_LIBDIRS): QMAKE_DEFAULT_LIBDIRS = /lib /usr/lib + } + + !isEmpty(QMAKE_DEFAULT_INCDIRS): cache(QMAKE_DEFAULT_INCDIRS, set stash) + !isEmpty(QMAKE_DEFAULT_LIBDIRS): cache(QMAKE_DEFAULT_LIBDIRS, set stash) +} diff --git a/mkspecs/features/uikit/default_post.prf b/mkspecs/features/uikit/default_post.prf index 49b2c3a2ee..0a2e4122f5 100644 --- a/mkspecs/features/uikit/default_post.prf +++ b/mkspecs/features/uikit/default_post.prf @@ -52,3 +52,11 @@ macx-xcode { } } } + +!xcodebuild:equals(TEMPLATE, app):!isEmpty(QMAKE_INFO_PLIST) { + # Only link in photo library support if Info.plist contains + # NSPhotoLibraryUsageDescription. Otherwise it will be rejected from AppStore. + plist_path = $$absolute_path($$QMAKE_INFO_PLIST, $$_PRO_FILE_PWD_) + system("/usr/libexec/PlistBuddy -c 'Print NSPhotoLibraryUsageDescription' $$system_quote($$plist_path) &>/dev/null"): \ + QTPLUGIN += qiosnsphotolibrarysupport +} diff --git a/mkspecs/features/uikit/default_pre.prf b/mkspecs/features/uikit/default_pre.prf index 908828be18..00e29a5c8b 100644 --- a/mkspecs/features/uikit/default_pre.prf +++ b/mkspecs/features/uikit/default_pre.prf @@ -1,22 +1,25 @@ +sim_and_dev = false +!isEmpty(QT_VERSION):qtConfig(simulator_and_device): \ + sim_and_dev = true -load(default_pre) - -!isEmpty(QT_VERSION) { - qtConfig(simulator_and_device)|contains(QMAKE_MAC_SDK, ^$${device.sdk}.*): \ - CONFIG += device $${device.sdk} - qtConfig(simulator_and_device)|contains(QMAKE_MAC_SDK, ^$${simulator.sdk}.*): \ - CONFIG += simulator $${simulator.sdk} +$$sim_and_dev|contains(QMAKE_MAC_SDK, ^$${device.sdk}.*): \ + CONFIG += device $${device.sdk} +$$sim_and_dev|contains(QMAKE_MAC_SDK, ^$${simulator.sdk}.*): \ + CONFIG += simulator $${simulator.sdk} - qtConfig(simulator_and_device) { - # For a simulator_and_device build all the config tests - # are based on the device's ARM SDK, but we know that the simulator - # is Intel and that we support SSE/SSE2. - QT_CPU_FEATURES.$$QT_ARCH += sse sse2 - CONFIG += sse sse2 - DEFINES += QT_COMPILER_SUPPORTS_SSE2 - } +$$sim_and_dev { + # For a simulator_and_device build all the config tests + # are based on the device's ARM SDK, but we know that the simulator + # is Intel and that we support SSE/SSE2. + QT_CPU_FEATURES.$$QT_ARCH += sse sse2 + CONFIG += sse sse2 + DEFINES += QT_COMPILER_SUPPORTS_SSE2 } +unset(sim_and_dev) + +load(default_pre) + # Check for supported Xcode versions lessThan(QMAKE_XCODE_VERSION, "4.3"): \ error("This mkspec requires Xcode 4.3 or later") diff --git a/mkspecs/features/uikit/resolve_config.prf b/mkspecs/features/uikit/resolve_config.prf index 868813dcbd..e3c9ae23a9 100644 --- a/mkspecs/features/uikit/resolve_config.prf +++ b/mkspecs/features/uikit/resolve_config.prf @@ -11,7 +11,7 @@ load(resolve_config) !macx-xcode:xcodebuild { # Switch the order to make sure that the first Makefile target is the right one !qtConfig(simulator_and_device):contains(QMAKE_MAC_SDK, ^$${simulator.sdk}.*): \ - addExclusiveBuilds(simulator, device) + addExclusiveBuildsProper(simulator_and_device, simulator device) else: \ - addExclusiveBuilds(device, simulator) + addExclusiveBuildsProper(simulator_and_device, device simulator) } diff --git a/mkspecs/features/uikit/sdk.prf b/mkspecs/features/uikit/sdk.prf index 0ab553f587..0bfc26211a 100644 --- a/mkspecs/features/uikit/sdk.prf +++ b/mkspecs/features/uikit/sdk.prf @@ -1,15 +1,3 @@ - -# In case the user sets the SDK manually -contains(QMAKE_MAC_SDK, ^$${simulator.sdk}.*) { - !isEmpty(QT_VERSION):qtConfig(simulator_and_device): \ - error("Simulator is handled automatically for simulator_and_device") - - CONFIG += simulator $${simulator.sdk} -} - -build_pass:!simulator_and_device:simulator: \ - QMAKE_MAC_SDK ~= s,^$${device.sdk},$${simulator.sdk}, - load(sdk) macx-xcode { |