summaryrefslogtreecommitdiffstats
path: root/Tools/qmake/mkspecs/features/functions.prf
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/qmake/mkspecs/features/functions.prf')
-rw-r--r--Tools/qmake/mkspecs/features/functions.prf405
1 files changed, 0 insertions, 405 deletions
diff --git a/Tools/qmake/mkspecs/features/functions.prf b/Tools/qmake/mkspecs/features/functions.prf
deleted file mode 100644
index dc0c78f97..000000000
--- a/Tools/qmake/mkspecs/features/functions.prf
+++ /dev/null
@@ -1,405 +0,0 @@
-# -------------------------------------------------------------------
-# This file defines a few useful functions that are exposed to the
-# real project files.
-#
-# See 'Tools/qmake/README' for an overview of the build system
-# -------------------------------------------------------------------
-
-defineReplace(toSanitizedPath) {
- path = $$1
- win32-msvc*|wince* {
- components = $$split(path, :)
- count(components, 2): path = $$lower($$first(components)):$$last(components)
- return($$replace(path, \\\\, /))
- } else {
- return($$path)
- }
-}
-
-defineReplace(toSystemPath) {
- return($$replace(1, [/\\\\], $${QMAKE_DIR_SEP}))
-}
-
-defineReplace(toEvaluatablePath) {
- return($$replace(1, \\\\, \\\\\\\\))
-}
-
-defineReplace(targetSubDir) {
- # The paths to the elements of the thin archive are stored
- # relative to the archive itself, thus we have to prevent
- # qmake from moving the archive after creation.
- gnu_thin_archives: return()
- else: CONFIG(debug, debug|release): return(debug)
- else: return(release)
-}
-
-defineReplace(computeSubdirVariables) {
- unset(subdir)
- subdir = $$1
-
- scope = $$subdir
- path = $$eval($${subdir}.file)
- isEmpty(path): path = $$eval($${subdir}.subdir)
- isEmpty(path) {
- path = $${subdir}
- # We can't use scope as a variable scope, so unset it for
- # now and we'll compute a new scope based on the target.
- unset(scope)
- }
-
- # Technically this could be a directory, but we assume sane naming.
- is_file = $$find(path, \\.pr[io]$)
- isEmpty(is_file) {
- subdirectory = $$path
- } else {
- subdirectory = $$dirname(path)
- filename = $$basename(path)
- }
-
- # Make directory relative
- !isEmpty(subdirectory):subdirectory = $$replace(subdirectory, ^$$re_escape($${_PRO_FILE_PWD_})/,)
-
- !isEmpty(subdirectory) {
- subdir_command = cd $$toSystemPath($${subdirectory}$${QMAKE_DIR_SEP}) &&
- }
-
- target = $$eval($${subdir}.target)
- isEmpty(target) {
- sanitizedPath = $$toSanitizedPath($$path)
- target = sub-$$replace(sanitizedPath, [^a-zA-Z0-9_], -)
- }
-
- isEmpty(scope): scope = $$target
-
- makefile = $$eval($${subdir}.makefile)
- isEmpty(makefile) {
- !isEmpty(filename) {
- filebase = $$replace(filename, \\..*$,)
- dirbase = $$basename(subdirectory)
- !equals(filebase, $$dirbase) {
- makefile = $(MAKEFILE).$$filebase
- } else {
- makefile = $(MAKEFILE)
- }
- } else {
- makefile = $(MAKEFILE)
- }
- }
-
- subdir_command = $$toEvaluatablePath($$subdir_command)
- eval($${scope}.subdir_command = $$subdir_command)
- export($${scope}.subdir_command)
-
- eval($${scope}.target = $$target)
- export($${scope}.target)
-
- eval($${scope}.makefile = $$makefile)
- export($${scope}.makefile)
-
- return($$scope)
-}
-
-# Qmake has QMAKE_FILE_IN_PATH, but nothing for the out file
-# This allows you do do ${QMAKE_FUNC_FILE_OUT_PATH}
-defineReplace(PATH) {
- return($$dirname(1))
-}
-
-# We need both versions, in case the first one returns an empty string
-defineReplace(FILE_OUT_PATH) {
- return($$dirname(2))
-}
-
-# addStrictSubdirOrderBetween(firstSubdir, secondSubdir)
-defineTest(addStrictSubdirOrderBetween) {
- unset(firstSubdir)
- unset(secondSubdir)
-
- firstSubdir = $$1
- secondSubdir = $$2
-
- firstVariables = $$computeSubdirVariables($${firstSubdir})
- secondVariables = $$computeSubdirVariables($${secondSubdir})
-
- !contains(TEMPLATE, subdirs) {
- error("Strict subdir dependencies can only be used with subdirs template")
- }
-
- firstSubdirFile = $$eval($${firstSubdir}.file)
- secondSubdirFile = $$eval($${secondSubdir}.file)
-
- isEmpty(firstSubdirFile)|isEmpty(secondSubdirFile) {
- error("Missing subdir file ($$firstSubdirFile, $$secondSubdirFile)")
- }
-
- # Make sure the order is right
- SUBDIRS -= $$secondSubdir
- SUBDIRS += $$secondSubdir
- NO_RECURSIVE_QMAKE_SUBDIRS += $$firstSubdir $$secondSubdir
- CONFIG *= ordered
-
- first_base_target = sub-$$replace(firstSubdirFile, [^a-zA-Z0-9_], -)
- second_base_target = sub-$$replace(secondSubdirFile, [^a-zA-Z0-9_], -)
-
- # Use a custom target for making the derived sources, as the default target
- # will do 'test -f $(MAKEFILE).DerivedSources || $(QMAKE) ...', which clashes
- # with the qmake-run of the -qmake_all target, and we end up with a race
- # and potentially half-written makefiles. The custom target depends explicitly
- # on -qmake_all, to ensure that we have a makefile, and then calls make.
- derived_make_for_qmake = $${first_base_target}-make_for_qmake
- eval($${derived_make_for_qmake}.depends = $${first_base_target}-qmake_all)
- eval($${derived_make_for_qmake}.commands = $(MAKE) -f $$eval($${firstSubdir}.makefile))
- QMAKE_EXTRA_TARGETS += $${derived_make_for_qmake}
-
- # This target ensures that running "make qmake_all" will force both qmake and make
- # to be run on the derived sources before running qmake on the target, so that
- # qmake can pick up the right dependencies for the target based on the derived
- # sources that were generated.
- target_make_qmake = $${second_base_target}-qmake_all
- eval($${target_make_qmake}.depends = $${derived_make_for_qmake})
- QMAKE_EXTRA_TARGETS += $${target_make_qmake}
-
- # Make things work even if qmake -r is used.
- CONFIG += dont_recurse
-
- export(SUBDIRS)
- export(NO_RECURSIVE_QMAKE_SUBDIRS)
- export(CONFIG)
- export($${target_make_qmake}.target)
- export($${target_make_qmake}.depends)
- export($${derived_make_for_qmake}.depends)
- export($${derived_make_for_qmake}.commands)
- export(QMAKE_EXTRA_TARGETS)
- return(true)
-}
-
-# Check if we have the given Qt version. The major version needs
-# to be exact, the minor and patch version is same or higher
-defineTest(haveQt) {
- count(ARGS, 1, lessThan)|count(ARGS, 3, greaterThan) {
- error("Unexpected number of arguments: haveQt($$ARGS)")
- }
-
- !equals(QT_MAJOR_VERSION, $$1): return(false)
-
- count(ARGS, 1, greaterThan) {
- lessThan(QT_MINOR_VERSION, $$2): return(false)
- greaterThan(QT_MINOR_VERSION, $$2): return(true)
-
- count(ARGS, 2, greaterThan) {
- lessThan(QT_PATCH_VERSION, $$3): return(false)
- greaterThan(QT_PATCH_VERSION, $$3): return(true)
- }
- }
-
- return(true)
-}
-
-defineTest(programExistsInPath) {
- equals(QMAKE_HOST.os, Windows): program = $${1}.exe
- else: program = $$1
-
- PATH = "$$(PATH)"
- paths=$$split(PATH, $$QMAKE_DIRLIST_SEP)
-
- GNUTOOLS_DIR=$$[QT_HOST_DATA]/../gnuwin32/bin
- exists($$GNUTOOLS_DIR): paths += $$GNUTOOLS_DIR
-
- for(p, paths): exists($$p/$$program):return(true)
- return(false)
-}
-
-defineTest(addReasonForSkippingBuild) {
- skipBuildReason = "$$skipBuildReason$${EOL} * $$1"
- export(skipBuildReason)
-}
-
-defineTest(prependEach) {
- unset(variable)
- unset(prefix)
-
- variable = $$1
- prefix = $$2
-
- original_values = $$unique($$variable)
-
- for(value, original_values) {
- values += $${prefix}$${value}
- }
-
- eval($$variable = $$values)
- export($$variable)
-
- return(true)
-}
-
-defineReplace(resolveFinalLibraryName) {
- !debug_and_release: return($$1)
-
- original_framework_name = $$QMAKE_FRAMEWORK_BUNDLE_NAME
-
- TEMPLATE = lib # So that qtLibraryTarget works
- target = $$qtLibraryTarget($$1)
-
- # qtLibraryTarget will export QMAKE_FRAMEWORK_BUNDLE_NAME, which gets
- # exported not only to this function scope, but to our call site.
- QMAKE_FRAMEWORK_BUNDLE_NAME = $$original_framework_name
- export(QMAKE_FRAMEWORK_BUNDLE_NAME)
-
- return($$target)
-}
-
-defineTest(linkAgainstLibrary) {
- unset(target)
- target = $$1
-
- unset(source_dir)
- source_dir = $$2
-
- library = $$lower($$target)
-
- target = $$resolveFinalLibraryName($$target)
-
- path = $$replace(source_dir, $$re_escape($${ROOT_WEBKIT_DIR}), $${ROOT_BUILD_DIR})/$$targetSubDir()
-
- force_static_libs_as_shared {
- LIBS += -L$${ROOT_BUILD_DIR}/lib -l$$target
- } else {
-
- mac {
- LIBS += -Wl,-force_load,$${path}$${QMAKE_DIR_SEP}lib$${target}.a
- } else:win32-msvc*|wince*|win32-icc {
- LIBS += -l$$target
- QMAKE_LFLAGS += /OPT:REF
- } else {
- CONFIG *= no_smart_library_merge
- LIBS += -Wl,-whole-archive -l$$target -Wl,-no-whole-archive
- }
-
- LIBS += -L$$path
-
- win32-msvc*|wince*|win32-icc {
- POST_TARGETDEPS += $${path}$${QMAKE_DIR_SEP}$${target}.lib
- } else {
- POST_TARGETDEPS += $${path}$${QMAKE_DIR_SEP}lib$${target}.a
- }
- }
-
- export(LIBS)
- export(QMAKE_LIBDIR)
- export(POST_TARGETDEPS)
- export(CONFIG)
- return(true)
-}
-
-defineTest(xlibAvailable) {
- contains(QT_CONFIG, xcb-xlib) {
- return(true)
- } else {
- return(false)
- }
-}
-
-defineTest(build?) {
- contains(WEBKIT_CONFIG, build_$$lower($$1)): return(true)
- return(false)
-}
-
-defineTest(have?) {
- contains(WEBKIT_CONFIG, have_$$lower($$1)): return(true)
- return(false)
-}
-
-defineTest(use?) {
- contains(WEBKIT_CONFIG, use_$$lower($$1)): return(true)
- return(false)
-}
-
-defineTest(enable?) {
- contains(WEBKIT_CONFIG, $$lower($$1)): return(true)
- return(false)
-}
-
-# Used by configDefines below
-include(features.pri)
-
-# Turn Webkit config into defines
-defineReplace(configDefines) {
- unset(defines)
-
- args = $$split(1, |)
-
- possible_args = enable have use plugin_architecture
- !isEmpty(args) {
- for(arg, possible_args): contains(args, $$arg): CONFIG += $$arg
- } else {
- CONFIG += $$possible_args
- }
-
- for(config, WEBKIT_CONFIG) {
- match = $$find(config, "^build_")
- !isEmpty(match) {
- # We don't translate build_ to defines
- next()
- }
- match = $$find(config, "^have_")
- !isEmpty(match) {
- have: defines += $$upper($$config)=1
- next()
- }
- match = $$find(config, "^plugin_architecture_")
- !isEmpty(match) {
- plugin_architecture: defines += $$upper($$config)=1
- next()
- }
- equals(config, "use_system_malloc") {
- use: defines += $$upper($$config)=1
- next()
- }
- match = $$find(config, "^use_")
- !isEmpty(match) {
- use: defines += WTF_$$upper($$config)=1
- next()
- }
-
- enable: defines += ENABLE_$$upper($$config)=1
- }
-
- # To prevent clashes with Platform.h, we have to explicitly
- # disable features that are not enabled.
- for(define, FEATURE_DEFAULTS) {
- anyFeatureDefine = $$find(define, =.$)
- isEmpty(anyFeatureDefine): next()
-
- enabledFeature = $$replace(anyFeatureDefine, =.$, =1)
- disabledFeature = $$replace(anyFeatureDefine, =.$, =0)
-
- !contains(defines, $$enabledFeature) {
- defines += $$disabledFeature
- }
- }
-
- return($$defines)
-}
-
-defineReplace(javascriptFeatureDefines) {
- defines = LANGUAGE_JAVASCRIPT=1 $$configDefines(enable)
-
- # Omit disabled features when generating bindings to shrink the
- # generator's command line on Windows.
- disabledFeatures = $$find(defines, ^.+=0$)
- for (disabledFeature, disabledFeatures) {
- defines -= $$disabledFeature
- }
-
- return($$defines)
-}
-
-defineReplace(setEnvironmentVariable) {
- variable = $$1
- value = $$2
- win_cmd_shell {
- return((set \"$$variable=$$value\"))
- }
- return(export \"$$variable=$$value\")
-}