summaryrefslogtreecommitdiffstats
path: root/mkspecs/features
diff options
context:
space:
mode:
Diffstat (limited to 'mkspecs/features')
-rw-r--r--mkspecs/features/android/android.prf5
-rw-r--r--mkspecs/features/android/android_deployment_settings.prf17
-rw-r--r--mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in62
-rw-r--r--mkspecs/features/ltcg.prf6
-rw-r--r--mkspecs/features/mac/default_post.prf13
-rw-r--r--mkspecs/features/metatypes.prf21
-rw-r--r--mkspecs/features/qml_plugin.prf16
-rw-r--r--mkspecs/features/qt_configure.prf9
-rw-r--r--mkspecs/features/qt_docs.prf3
-rw-r--r--mkspecs/features/qt_functions.prf2
-rw-r--r--mkspecs/features/qt_targets.prf2
-rw-r--r--mkspecs/features/resources.prf69
-rw-r--r--mkspecs/features/resources_functions.prf80
-rw-r--r--mkspecs/features/sanitizer.prf6
-rw-r--r--mkspecs/features/testcase.prf3
-rw-r--r--mkspecs/features/wasm/default_pre.prf2
-rw-r--r--mkspecs/features/wasm/emcc_ver.prf23
-rw-r--r--mkspecs/features/wasm/wasm.prf7
-rw-r--r--mkspecs/features/win32/dumpcpp.prf4
19 files changed, 241 insertions, 109 deletions
diff --git a/mkspecs/features/android/android.prf b/mkspecs/features/android/android.prf
index fc0ff553d0..8290286ec6 100644
--- a/mkspecs/features/android/android.prf
+++ b/mkspecs/features/android/android.prf
@@ -36,14 +36,15 @@ build_pass {
}
}
} else: contains(TEMPLATE, "lib"):!static:!QTDIR_build:android_install {
+ tmpvar = $$str_member(TARGET, -$$str_size(QT_ARCH), -1)
+ !equals(tmpvar, $${QT_ARCH}): TARGET = $${TARGET}_$${QT_ARCH}
target.path = /libs/$$ANDROID_TARGET_ARCH/
INSTALLS *= target
}
} else {
- QMAKE_EXTRA_TARGETS *= aab apk apk_install_target
-
android-build-distclean.commands = \
$$QMAKE_DEL_TREE $$shell_quote($$shell_path($$OUT_PWD/android-build))
QMAKE_EXTRA_TARGETS *= android-build-distclean
CLEAN_DEPS += android-build-distclean
}
+QMAKE_EXTRA_TARGETS *= aab apk apk_install_target
diff --git a/mkspecs/features/android/android_deployment_settings.prf b/mkspecs/features/android/android_deployment_settings.prf
index 4d6101e297..f375a687a9 100644
--- a/mkspecs/features/android/android_deployment_settings.prf
+++ b/mkspecs/features/android/android_deployment_settings.prf
@@ -63,6 +63,23 @@ contains(TEMPLATE, ".*app"):!build_pass:!android-embedded {
QML_ROOT_PATH = $$_PRO_FILE_PWD_
FILE_CONTENT += " \"qml-root-path\": $$emitString($$QML_ROOT_PATH),"
FILE_CONTENT += " \"stdcpp-path\": $$emitString($$ANDROID_STDCPP_PATH),"
+ !isEmpty(RESOURCES)|!isEmpty(QMLCACHE_RESOURCE_FILES) {
+ # Make sure that qmake generated qrc files are accounted for
+ load(resources_functions)
+ qtFlattenResources()
+ NEWRESOURCES = $$RESOURCES $$QMLCACHE_RESOURCE_FILES
+ for(resource, NEWRESOURCES) {
+ contains(resource, ".*\\qmake_qmake_immediate.qrc$") {
+ # They will be created for each architecture, since they could be different
+ # we need to account for all of them
+ for (arch, ANDROID_ABIS): \
+ rescopy += $$absolute_path("qmake_qmake_immediate.qrc", $$OUT_PWD/$$arch)
+ } else {
+ contains(resource, ".*\\.qrc$"): rescopy += $$absolute_path($$resource, $$_PRO_FILE_PWD_)
+ }
+ }
+ FILE_CONTENT += " \"qrcFiles\": $$emitString($$join(rescopy, ",")),"
+ }
FILE_CONTENT += ""
FILE_CONTENT += " \"application-binary\": $$emitString($$TARGET)"
FILE_CONTENT += "}"
diff --git a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
index 364c23e750..26d4c17e6c 100644
--- a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
+++ b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
@@ -72,18 +72,28 @@ function(_qt5_$${CMAKE_MODULE_NAME}_process_prl_file prl_file_location Configura
string(REGEX REPLACE \"QMAKE_PRL_LIBS_FOR_CMAKE[ \\t]*=[ \\t]*([^\\n]*)\" \"\\\\1\" _static_depends \"${_prl_strings}\")
string(REGEX REPLACE \"[ \\t]+\" \";\" _standard_libraries \"${CMAKE_CXX_STANDARD_LIBRARIES}\")
set(_search_paths)
+ set(_framework_flag)
string(REPLACE \"\\$\\$[QT_INSTALL_LIBS]\" \"${_qt5_install_libs}\" _static_depends \"${_static_depends}\")
foreach(_flag ${_static_depends})
string(REPLACE \"\\\"\" \"\" _flag ${_flag})
- if(_flag MATCHES \"^-l(.*)$\")
- # Handle normal libraries passed as -lfoo
- set(_lib \"${CMAKE_MATCH_1}\")
- foreach(_standard_library ${_standard_libraries})
- if(_standard_library MATCHES \"^${_lib}(\\\\.lib)?$\")
- set(_lib_is_default_linked TRUE)
- break()
- endif()
- endforeach()
+ if(_flag MATCHES \"^-framework$\")
+ # Handle the next flag as framework name
+ set(_framework_flag 1)
+ elseif(_framework_flag OR _flag MATCHES \"^-l(.*)$\")
+ if(_framework_flag)
+ # Handle Darwin framework bundles passed as -framework Foo
+ unset(_framework_flag)
+ set(_lib ${_flag})
+ else()
+ # Handle normal libraries passed as -lfoo
+ set(_lib \"${CMAKE_MATCH_1}\")
+ foreach(_standard_library ${_standard_libraries})
+ if(_standard_library MATCHES \"^${_lib}(\\\\.lib)?$\")
+ set(_lib_is_default_linked TRUE)
+ break()
+ endif()
+ endforeach()
+ endif()
if (_lib_is_default_linked)
unset(_lib_is_default_linked)
elseif(_lib MATCHES \"^pthread$\")
@@ -173,11 +183,20 @@ macro(_populate_$${CMAKE_MODULE_NAME}_target_properties Configuration LIB_LOCATI
endif()
set(_static_link_flags \"${_Qt5$${CMAKE_MODULE_NAME}_STATIC_${Configuration}_LINK_FLAGS}\")
- if(NOT CMAKE_VERSION VERSION_LESS \"3.13\" AND _static_link_flags)
+ if(_static_link_flags)
set(_static_link_flags_genex \"$<${_genex_condition}:${_static_link_flags}>\")
- set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} APPEND PROPERTY INTERFACE_LINK_OPTIONS
- \"${_static_link_flags_genex}\"
- )
+ if(NOT CMAKE_VERSION VERSION_LESS \"3.13\")
+ set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} APPEND PROPERTY INTERFACE_LINK_OPTIONS
+ \"${_static_link_flags_genex}\"
+ )
+ else()
+ # Abuse INTERFACE_LINK_LIBRARIES to add link flags when CMake version is too low.
+ # Strip out SHELL:, because it is not supported in this property. And hope for the best.
+ string(REPLACE \"SHELL:\" \"\" _static_link_flags_genex \"${_static_link_flags_genex}\")
+ set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} APPEND PROPERTY INTERFACE_LINK_LIBRARIES
+ \"${_static_link_flags_genex}\"
+ )
+ endif()
endif()
!!ENDIF
@@ -546,11 +565,20 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
endif()
set(_static_link_flags \"${_Qt5${Plugin}_STATIC_${Configuration}_LINK_FLAGS}\")
- if(NOT CMAKE_VERSION VERSION_LESS \"3.13\" AND _static_link_flags)
+ if(_static_link_flags)
set(_static_link_flags_genex \"$<${_genex_condition}:${_static_link_flags}>\")
- set_property(TARGET Qt5::${Plugin} APPEND PROPERTY INTERFACE_LINK_OPTIONS
- \"${_static_link_flags_genex}\"
- )
+ if(NOT CMAKE_VERSION VERSION_LESS \"3.13\")
+ set_property(TARGET Qt5::${Plugin} APPEND PROPERTY INTERFACE_LINK_OPTIONS
+ \"${_static_link_flags_genex}\"
+ )
+ else()
+ # Abuse INTERFACE_LINK_LIBRARIES to add link flags when CMake version is too low.
+ # Strip out SHELL:, because it is not supported in this property. And hope for the best.
+ string(REPLACE \"SHELL:\" \"\" _static_link_flags_genex \"${_static_link_flags_genex}\")
+ set_property(TARGET Qt5::${Plugin} APPEND PROPERTY INTERFACE_LINK_LIBRARIES
+ \"${_static_link_flags_genex}\"
+ )
+ endif()
endif()
!!ENDIF
endmacro()
diff --git a/mkspecs/features/ltcg.prf b/mkspecs/features/ltcg.prf
index 10d14dfe85..d81f340edd 100644
--- a/mkspecs/features/ltcg.prf
+++ b/mkspecs/features/ltcg.prf
@@ -1,6 +1,12 @@
static:no-static-ltcg {
# Static library but no-static-ltcg enabled: skip LTCG
} else: CONFIG(release, debug|release) {
+ separate_debug_info {
+ # Evaluate single-$ variable references that have no valid value at mkspec loading time
+ QMAKE_LFLAGS_LTCG_SEPARATE_DEBUG_INFO ~= s/\\$\\{/\$\$\{/
+ eval(QMAKE_LFLAGS_LTCG += $$QMAKE_LFLAGS_LTCG_SEPARATE_DEBUG_INFO)
+ }
+
# We need fat object files when creating static libraries on some platforms
# so the linker will know to load a particular object from the library
# in the first place. On others, we have special ar and nm to create the symbol
diff --git a/mkspecs/features/mac/default_post.prf b/mkspecs/features/mac/default_post.prf
index 03084c7f07..ba163efc18 100644
--- a/mkspecs/features/mac/default_post.prf
+++ b/mkspecs/features/mac/default_post.prf
@@ -212,14 +212,17 @@ macx-xcode {
QMAKE_CXXFLAGS += $(EXPORT_QMAKE_XARCH_CFLAGS)
QMAKE_LFLAGS += $(EXPORT_QMAKE_XARCH_LFLAGS)
} else {
- simulator: \
+ simulator {
version_identifier = $$simulator.deployment_identifier
- else: \
+ sysroot_path = $$xcodeSDKInfo(Path, $$simulator.sdk)
+ } else {
version_identifier = $$device.deployment_identifier
+ sysroot_path = $$xcodeSDKInfo(Path, $$device.sdk)
+ }
version_min_flag = -m$${version_identifier}-version-min=$$deployment_target
- QMAKE_CFLAGS += -isysroot $$QMAKE_MAC_SDK_PATH $$version_min_flag
- QMAKE_CXXFLAGS += -isysroot $$QMAKE_MAC_SDK_PATH $$version_min_flag
- QMAKE_LFLAGS += -Wl,-syslibroot,$$QMAKE_MAC_SDK_PATH $$version_min_flag
+ QMAKE_CFLAGS += -isysroot $$sysroot_path $$version_min_flag
+ QMAKE_CXXFLAGS += -isysroot $$sysroot_path $$version_min_flag
+ QMAKE_LFLAGS += -Wl,-syslibroot,$$sysroot_path $$version_min_flag
}
# Enable precompiled headers for multiple architectures
diff --git a/mkspecs/features/metatypes.prf b/mkspecs/features/metatypes.prf
index 64387458ac..59ef914f63 100644
--- a/mkspecs/features/metatypes.prf
+++ b/mkspecs/features/metatypes.prf
@@ -1,5 +1,7 @@
qtPrepareTool(MOC_COLLECT_JSON, moc)
+load(qt_build_paths)
+
QMAKE_MOC_OPTIONS += --output-json
MOC_JSON_H_BASE = $${QMAKE_H_MOD_MOC}
@@ -26,17 +28,26 @@ moc_json_source.variable_out = MOC_JSON_FILES
MOC_COLLECT_JSON_OUTPUT = $$lower($$basename(TARGET))_metatypes.json
-moc_collect_json.CONFIG += no_link combine
+moc_collect_json.CONFIG += no_link combine target_predeps
moc_collect_json.commands = $$MOC_COLLECT_JSON --collect-json -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_IN}
moc_collect_json.input = MOC_JSON_FILES
moc_collect_json.output = $$MOC_COLLECT_JSON_OUTPUT
moc_collect_json.name = Collect moc JSON output into central file
install_metatypes {
- do_install.path = $$[QT_INSTALL_LIBS]/metatypes
- do_install.files = $$OUT_PWD/$$MOC_COLLECT_JSON_OUTPUT
- prefix_build: INSTALLS += do_install
- else: COPIES += do_install
+ do_install_metatypes.CONFIG += no_check_exist
+ do_install_metatypes.path = $$[QT_INSTALL_LIBS]/metatypes
+ do_install_metatypes.files = $$OUT_PWD/$$MOC_COLLECT_JSON_OUTPUT
+ prefix_build {
+ !isEmpty(MODULE_BASE_OUTDIR) {
+ metatypes_to_builddir.files = $$do_install_metatypes.files
+ metatypes_to_builddir.path = $$MODULE_BASE_OUTDIR/lib/metatypes
+ COPIES += metatypes_to_builddir
+ }
+ INSTALLS += do_install_metatypes
+ } else {
+ COPIES += do_install_metatypes
+ }
}
QMAKE_EXTRA_COMPILERS += moc_collect_json moc_json_header moc_json_source
diff --git a/mkspecs/features/qml_plugin.prf b/mkspecs/features/qml_plugin.prf
index f1c5658b04..74ab932f80 100644
--- a/mkspecs/features/qml_plugin.prf
+++ b/mkspecs/features/qml_plugin.prf
@@ -68,7 +68,10 @@ load(qt_common)
# To regenerate run 'make qmltypes' which will update the plugins.qmltypes file in the source
# directory. Then review and commit the changes made to plugins.qmltypes.
#
-!cross_compile {
+# Due to the above mentioned drawbacks, there is a better mechanism available now: qmltyperegistrar
+# can generate the .qmltypes files at compile time. It will do this when CONFIG += qmltypes is set.
+# Therefore, don't try to generate the qmltypes files via qmlplugindump in that case.
+!cross_compile:!qmltypes {
qmlplugindump = qmlplugindump
importpath.name = QML2_IMPORT_PATH
importpath.value =
@@ -84,12 +87,13 @@ load(qt_common)
# against concurrent wrapper creation by omitting it during build passes.
# However, creating the actual targets is reserved to the build passes.
build_pass|!debug_and_release {
- isEmpty(IMPORT_VERSION) {
+ isEmpty(QML_IMPORT_VERSION):!isEmpty(IMPORT_VERSION): QML_IMPORT_VERSION = $$IMPORT_VERSION
+ isEmpty(QML_IMPORT_VERSION) {
no_cxx_module {
- IMPORT_VERSION = $$section(MODULE_VERSION, ., 0, 1)
- isEmpty(IMPORT_VERSION): error("Must set IMPORT_VERSION")
+ QML_IMPORT_VERSION = $$section(MODULE_VERSION, ., 0, 1)
+ isEmpty(QML_IMPORT_VERSION): error("Must set QML_IMPORT_VERSION")
} else {
- IMPORT_VERSION = $$section(QT.$${CXX_MODULE}.VERSION, ., 0, 1)
+ QML_IMPORT_VERSION = $$section(QT.$${CXX_MODULE}.VERSION, ., 0, 1)
}
}
@@ -104,7 +108,7 @@ load(qt_common)
}
qmltypes.target = qmltypes
- qmltypes.commands = $$QMLPLUGINDUMP -nonrelocatable $$QMAKE_QMLPLUGINDUMP_FLAGS $$replace(IMPORT_NAME, /, .) $$IMPORT_VERSION > $$QMLTYPEFILE
+ qmltypes.commands = $$QMLPLUGINDUMP -nonrelocatable $$QMAKE_QMLPLUGINDUMP_FLAGS $$replace(IMPORT_NAME, /, .) $$QML_IMPORT_VERSION > $$QMLTYPEFILE
qmltypes.depends = $$QMAKE_RESOLVED_TARGET
} else {
qmltypes.CONFIG += recursive
diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf
index adac835c26..6537d98c5d 100644
--- a/mkspecs/features/qt_configure.prf
+++ b/mkspecs/features/qt_configure.prf
@@ -666,6 +666,7 @@ defineTest(qtConfLibrary_inline) {
vars += $$eval(config.commandline.rev_assignments.$${iv})
defined(config.input.$${iv}, var) {
eval($${1}.builds.$${b} = $$eval(config.input.$${iv}))
+ export($${1}.builds.$${b})
$${1}.builds._KEYS_ *= $${b}
any = true
} else {
@@ -680,11 +681,14 @@ defineTest(qtConfLibrary_inline) {
export($${1}.builds._KEYS_)
# we also reset the generic libs, to avoid surprises.
$${1}.libs =
+ export($${1}.libs)
}
# direct libs. overwrites inline libs.
- defined(config.input.$${input}.libs, var): \
+ defined(config.input.$${input}.libs, var) {
eval($${1}.libs = $$eval(config.input.$${input}.libs))
+ export($${1}.libs)
+ }
includes = $$eval(config.input.$${input}.incdir)
@@ -693,6 +697,7 @@ defineTest(qtConfLibrary_inline) {
!isEmpty(prefix) {
includes += $$prefix/include
$${1}.libs = -L$$prefix/lib $$eval($${1}.libs)
+ export($${1}.libs)
}
libdir = $$eval(config.input.$${input}.libdir)
@@ -759,6 +764,8 @@ defineTest(qtConfLibrary_pkgConfig) {
return(false)
contains($${1}.libs, ".*\\.$${QMAKE_EXTENSION_STATICLIB}$") {
qtRunLoggedCommand("$$pkg_config --static --libs $$args", libs)|return(false)
+ # Split by space
+ eval(libs = $$libs)
!qtConfResolveLibs($${1}.libs, $$libs): \
return(false)
}
diff --git a/mkspecs/features/qt_docs.prf b/mkspecs/features/qt_docs.prf
index deb4ac2829..095bf15dac 100644
--- a/mkspecs/features/qt_docs.prf
+++ b/mkspecs/features/qt_docs.prf
@@ -45,6 +45,8 @@ isEmpty(WIN_INCLUDETEMP) {
QDOC_INCLUDE_PATHS=@$$shell_quote($$WIN_INCLUDETEMP)
}
+macos: QDOC_INCLUDE_PATHS += $$join(QMAKE_DEFAULT_INCDIRS," -I","-I")
+
!build_online_docs: qtPrepareTool(QHELPGENERATOR, qhelpgenerator)
qtPrepareTool(QTATTRIBUTIONSSCANNER, qtattributionsscanner)
@@ -93,7 +95,6 @@ qtattributionsscanner.CONFIG += phony
QMAKE_EXTRA_TARGETS += qtattributionsscanner
doc_command = $$QDOC $$QMAKE_DOCS
-
prepare_docs {
prepare_docs.commands += $$doc_command -prepare $$PREP_DOC_INDEXES -no-link-errors $$QDOC_INCLUDE_PATHS
generate_docs.commands += $$doc_command -generate $$DOC_INDEXES $$QDOC_INCLUDE_PATHS
diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf
index 661b7dd961..45d4492788 100644
--- a/mkspecs/features/qt_functions.prf
+++ b/mkspecs/features/qt_functions.prf
@@ -5,7 +5,7 @@ defineReplace(qtPlatformTargetSuffix) {
else: CONFIG(debug, debug|release) {
!debug_and_release|build_pass {
mac: return($${suffix}_debug)
- win32:!gcc: return($${suffix}d)
+ win32: return($${suffix}d)
}
}
return($$suffix)
diff --git a/mkspecs/features/qt_targets.prf b/mkspecs/features/qt_targets.prf
index b3c289a90b..3810d1e0ad 100644
--- a/mkspecs/features/qt_targets.prf
+++ b/mkspecs/features/qt_targets.prf
@@ -1,4 +1,4 @@
QMAKE_TARGET_COMPANY = The Qt Company Ltd.
isEmpty(QMAKE_TARGET_PRODUCT): QMAKE_TARGET_PRODUCT = Qt5
isEmpty(QMAKE_TARGET_DESCRIPTION): QMAKE_TARGET_DESCRIPTION = C++ Application Development Framework
-QMAKE_TARGET_COPYRIGHT = Copyright (C) 2019 The Qt Company Ltd.
+QMAKE_TARGET_COPYRIGHT = Copyright (C) 2020 The Qt Company Ltd.
diff --git a/mkspecs/features/resources.prf b/mkspecs/features/resources.prf
index fa8ff1fb58..cee0981db0 100644
--- a/mkspecs/features/resources.prf
+++ b/mkspecs/features/resources.prf
@@ -6,73 +6,8 @@ isEmpty(QMAKE_MOD_RCC):QMAKE_MOD_RCC = qrc
!contains(QMAKE_RESOURCE_FLAGS, -root):!isEmpty(QMAKE_RESOURCE_ROOT):QMAKE_RESOURCE_FLAGS += -root $$QMAKE_RESOURCE_ROOT
!contains(QMAKE_RESOURCE_FLAGS, -name): QMAKE_RESOURCE_FLAGS += -name ${QMAKE_FILE_BASE}
-# http://www.w3.org/TR/xml/#syntax
-defineReplace(xml_escape) {
- 1 ~= s,&,&amp;,
- 1 ~= s,\',&apos;,
- 1 ~= s,\",&quot;,
- 1 ~= s,<,&lt;,
- 1 ~= s,>,&gt;,
- return($$1)
-}
-
-RESOURCES += qmake_immediate
-for(resource, RESOURCES) {
- # Regular case of user qrc file
- contains(resource, ".*\\.qrc$"): \
- next()
-
- # Fallback for stand-alone files/directories
- !defined($${resource}.files, var) {
- !equals(resource, qmake_immediate) {
- !exists($$absolute_path($$resource, $$_PRO_FILE_PWD_)): \
- warning("Failure to find: $$resource")
- qmake_immediate.files += $$resource
- OTHER_FILES *= $$resource
- }
- RESOURCES -= $$resource
- next()
- }
-
- resource_file = $$absolute_path($$RCC_DIR/qmake_$${resource}.qrc, $$OUT_PWD)
-
- isEmpty(BUILDS)|build_pass {
- # Collection of files, generate qrc file
- prefix = $$eval($${resource}.prefix)
- isEmpty(prefix): \
- prefix = "/"
-
- resource_file_content = \
- "<!DOCTYPE RCC><RCC version=\"1.0\">" \
- "<qresource prefix=\"$$xml_escape($$prefix)\">"
-
- abs_base = $$absolute_path($$eval($${resource}.base), $$_PRO_FILE_PWD_)
-
- for(file, $${resource}.files) {
- abs_path = $$absolute_path($$file, $$_PRO_FILE_PWD_)
- files = $$files($$abs_path/*, true)
- isEmpty(files): \
- files = $$abs_path
- for (file, files) {
- exists($$file/*): next() # exclude directories
- alias = $$relative_path($$file, $$abs_base)
- resource_file_content += \
- "<file alias=\"$$xml_escape($$alias)\">$$xml_escape($$file)</file>"
- OTHER_FILES *= $$file
- }
- }
-
- resource_file_content += \
- "</qresource>" \
- "</RCC>"
-
- !write_file($$resource_file, resource_file_content): \
- error()
- }
-
- RESOURCES -= $$resource
- RESOURCES += $$resource_file
-}
+load(resources_functions)
+qtFlattenResources()
!isEmpty(RESOURCES):contains(TEMPLATE, .*lib):plugin:static {
pluginBaseName = $$basename(TARGET)
diff --git a/mkspecs/features/resources_functions.prf b/mkspecs/features/resources_functions.prf
new file mode 100644
index 0000000000..b7a15fd1d9
--- /dev/null
+++ b/mkspecs/features/resources_functions.prf
@@ -0,0 +1,80 @@
+# http://www.w3.org/TR/xml/#syntax
+defineReplace(xml_escape) {
+ 1 ~= s,&,&amp;,
+ 1 ~= s,\',&apos;,
+ 1 ~= s,\",&quot;,
+ 1 ~= s,<,&lt;,
+ 1 ~= s,>,&gt;,
+ return($$1)
+}
+
+defineTest(qtFlattenResources) {
+ immediate = qmake_immediate$$QMAKE_RESOURCES_IMMEDIATE_NR
+ defined(QMAKE_RESOURCES_IMMEDIATE_NR, var): \
+ QMAKE_RESOURCES_IMMEDIATE_NR = $$num_add($$QMAKE_RESOURCES_IMMEDIATE_NR, 1)
+ else: \
+ QMAKE_RESOURCES_IMMEDIATE_NR = 1
+
+ RESOURCES += $$immediate
+ for(resource, RESOURCES) {
+ # Regular case of user qrc file
+ contains(resource, ".*\\.qrc$"): \
+ next()
+
+ # Fallback for stand-alone files/directories
+ !defined($${resource}.files, var) {
+ !equals(resource, $$immediate) {
+ !exists($$absolute_path($$resource, $$_PRO_FILE_PWD_)): \
+ warning("Failure to find: $$resource")
+ $${immediate}.files += $$resource
+ OTHER_FILES *= $$resource
+ }
+ RESOURCES -= $$resource
+ next()
+ }
+
+ resource_file = $$absolute_path($$RCC_DIR/qmake_$${resource}.qrc, $$OUT_PWD)
+
+ isEmpty(BUILDS)|build_pass {
+ # Collection of files, generate qrc file
+ prefix = $$eval($${resource}.prefix)
+ isEmpty(prefix): \
+ prefix = "/"
+
+ resource_file_content = \
+ "<!DOCTYPE RCC><RCC version=\"1.0\">" \
+ "<qresource prefix=\"$$xml_escape($$prefix)\">"
+
+ abs_base = $$absolute_path($$eval($${resource}.base), $$_PRO_FILE_PWD_)
+
+ for(file, $${resource}.files) {
+ abs_path = $$absolute_path($$file, $$_PRO_FILE_PWD_)
+ files = $$files($$abs_path/*, true)
+ isEmpty(files): \
+ files = $$abs_path
+ for (file, files) {
+ exists($$file/*): next() # exclude directories
+ alias = $$relative_path($$file, $$abs_base)
+ resource_file_content += \
+ "<file alias=\"$$xml_escape($$alias)\">$$xml_escape($$file)</file>"
+ OTHER_FILES *= $$file
+ }
+ }
+
+ resource_file_content += \
+ "</qresource>" \
+ "</RCC>"
+
+ !write_file($$resource_file, resource_file_content): \
+ error()
+ }
+
+ RESOURCES -= $$resource
+ RESOURCES += $$resource_file
+ }
+ export(QMAKE_RESOURCES_IMMEDIATE_NR)
+ export(RESOURCES)
+ export(OTHER_FILES)
+ export($${immediate}.files)
+ return(true)
+}
diff --git a/mkspecs/features/sanitizer.prf b/mkspecs/features/sanitizer.prf
index c7d72aec80..12ca1a17bd 100644
--- a/mkspecs/features/sanitizer.prf
+++ b/mkspecs/features/sanitizer.prf
@@ -42,6 +42,12 @@ sanitize_thread {
QMAKE_LFLAGS += $$QMAKE_SANITIZE_THREAD_LFLAGS
}
+sanitize_fuzzer_no_link {
+ QMAKE_CFLAGS += $$QMAKE_SANITIZE_FUZZERNL_CFLAGS
+ QMAKE_CXXFLAGS += $$QMAKE_SANITIZE_FUZZERNL_CXXFLAGS
+ QMAKE_LFLAGS += $$QMAKE_SANITIZE_FUZZERNL_LFLAGS
+}
+
sanitize_undefined {
QMAKE_CFLAGS += $$QMAKE_SANITIZE_UNDEFINED_CFLAGS
QMAKE_CXXFLAGS += $$QMAKE_SANITIZE_UNDEFINED_CXXFLAGS
diff --git a/mkspecs/features/testcase.prf b/mkspecs/features/testcase.prf
index d4f08835f1..7e9903d663 100644
--- a/mkspecs/features/testcase.prf
+++ b/mkspecs/features/testcase.prf
@@ -9,6 +9,9 @@ testcase_exceptions: CONFIG += exceptions
# Set in qt_build_config.prf
testcase_no_bundle: CONFIG -= app_bundle
+# cmdline may have been specified and not processed yet
+cmdline: CONFIG -= app_bundle
+
# Allow testcases to mark themselves as not supporting high-DPI
testcase_lowdpi {
macos {
diff --git a/mkspecs/features/wasm/default_pre.prf b/mkspecs/features/wasm/default_pre.prf
new file mode 100644
index 0000000000..2760889929
--- /dev/null
+++ b/mkspecs/features/wasm/default_pre.prf
@@ -0,0 +1,2 @@
+load(default_pre)
+load(emcc_ver)
diff --git a/mkspecs/features/wasm/emcc_ver.prf b/mkspecs/features/wasm/emcc_ver.prf
new file mode 100644
index 0000000000..505a321d64
--- /dev/null
+++ b/mkspecs/features/wasm/emcc_ver.prf
@@ -0,0 +1,23 @@
+defineReplace(qtEmccRecommendedVersion) {
+ return (1.38.27)
+}
+
+defineReplace(qtSystemEmccVersion) {
+ E_VERSION = $$system("emcc -v 2>&1 | perl -alne $$shell_quote($_ = $F[9]; s/://; print;) ")
+ return ($${E_VERSION})
+}
+
+defineTest(qtConfTest_emccVersion) {
+
+ REQ_VERSION = $$qtEmccRecommendedVersion()
+ EMCC_VERSION = $$qtSystemEmccVersion()
+
+ !defined(QT_EMCC_VERSION, var):!equals(EMCC_VERSION, $${REQ_VERSION}) {
+ warning ("You should use the recommended Emscripten version $$REQ_VERSION with this Qt. You have $${EMCC_VERSION} ")
+ }
+ contains(TEMPLATE, .*app) {
+ !equals(QT_EMCC_VERSION, $$EMCC_VERSION) {
+ warning("This Qt was built with Emscripten version $${QT_EMCC_VERSION}. You have $${EMCC_VERSION}. The difference may cause issues.")
+ }
+ }
+}
diff --git a/mkspecs/features/wasm/wasm.prf b/mkspecs/features/wasm/wasm.prf
index 25413d7470..2e886fc4a5 100644
--- a/mkspecs/features/wasm/wasm.prf
+++ b/mkspecs/features/wasm/wasm.prf
@@ -1,8 +1,11 @@
+
# DESTDIR will be empty if not set in the app .pro file; make sure it has a value
isEmpty(DESTDIR): DESTDIR = $$OUT_PWD
exists($$QMAKE_QT_CONFIG) {
+## this may be subject to change
+
qtConfig(thread) {
EMCC_THREAD_LFLAGS += -s USE_PTHREADS=1
@@ -71,7 +74,7 @@ contains(TEMPLATE, .*app) {
# replacing the app name placeholder with the actual app name.
apphtml.name = application main html file
apphtml.output = $$DESTDIR/$$TARGET_HTML
- apphtml.commands = sed -e s/@APPNAME@/$$TARGET_BASE/g $$WASM_PLUGIN_PATH/wasm_shell.html > $$DESTDIR/$$TARGET_HTML
+ apphtml.commands = $$QMAKE_STREAM_EDITOR -e s/@APPNAME@/$$TARGET_BASE/g $$WASM_PLUGIN_PATH/wasm_shell.html > $$DESTDIR/$$TARGET_HTML
apphtml.input = $$WASM_PLUGIN_PATH/wasm_shell.html
apphtml.depends = $$apphtml.input
QMAKE_EXTRA_COMPILERS += apphtml
@@ -109,6 +112,8 @@ contains(TEMPLATE, .*app) {
}
}
+qtConfTest_emccVersion()
+
# Pass --source-map-base on the linker line. This informs the
# browser where to find the source files when debugging.
WASM_SOURCE_MAP_BASE = http://localhost:8000/
diff --git a/mkspecs/features/win32/dumpcpp.prf b/mkspecs/features/win32/dumpcpp.prf
index d19da3d077..589d700e4e 100644
--- a/mkspecs/features/win32/dumpcpp.prf
+++ b/mkspecs/features/win32/dumpcpp.prf
@@ -26,9 +26,9 @@ QMAKE_EXTRA_COMPILERS += dumpcpp_impl
!build_pass:have_target:!contains(TEMPLATE, vc.*) {
for(tlb, TYPELIBS) {
tlbCopy = $$replace(tlb, \", )
- hdr = $$basename(tlb)
+ hdr = $$basename(tlbCopy)
hdr = $$section(hdr, ., 0, -2)
- tmp_command = $$QMAKE_DUMPCPP $$system_quote($$absolute_path($$tlb, $$_PRO_FILE_PWD_)) \
+ tmp_command = $$QMAKE_DUMPCPP $$system_quote($$absolute_path($$tlbCopy, $$_PRO_FILE_PWD_)) \
-o $$system_quote($$OUT_PWD/$$hdr)
qaxcontainer_compat: tmp_command += -compat
!exists($$OUT_PWD/$${hdr}.h): system($$tmp_command)