From bb8a3dfc9584f3178e615308a6ade583d3e1ba95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Micha=C3=ABl=20Celerier?= Date: Thu, 7 Mar 2019 11:11:54 +0100 Subject: CMake: fix generation of config files for external Qt modules on macOS This is a follow-up to f5850cb0da5d9b610711d4fd3c1eaded9d6414e1, which did not take into account some special-casing for macOS framework build, thus causing CMake to look for QtFoo.framework instead of Foo.framework. Change-Id: I261b14e75fde66fb57486bde43fc936f796a6f96 Reviewed-by: Joerg Bornemann Reviewed-by: Kevin Funk --- mkspecs/features/create_cmake.prf | 25 +++++++++++++--------- .../features/data/cmake/Qt5BasicConfig.cmake.in | 10 ++++----- 2 files changed, 20 insertions(+), 15 deletions(-) (limited to 'mkspecs/features') diff --git a/mkspecs/features/create_cmake.prf b/mkspecs/features/create_cmake.prf index 6bf1380716..2ab7775fea 100644 --- a/mkspecs/features/create_cmake.prf +++ b/mkspecs/features/create_cmake.prf @@ -26,20 +26,29 @@ contains(CMAKE_INSTALL_LIBS_DIR, ^(/usr)?/lib(64)?.*): CMAKE_USR_MOVE_WORKAROUND CMAKE_OUT_DIR = $$MODULE_BASE_OUTDIR/lib/cmake +# Core, Network, an external module named Foo CMAKE_MODULE_NAME = $$cmakeModuleName($${MODULE}) +# QtCore, QtNetwork, still Foo +CMAKE_INCLUDE_NAME = $$eval(QT.$${MODULE}.name) + +# TARGET here is the one changed at the end of qt_module.prf, +# which already contains the Qt5 prefix and QT_LIBINFIX suffix : +# Qt5Core_suffix, Qt5Network_suffix, Foo_suffix +# (or QtCore_suffix, Foo_suffix on macos with -framework) +CMAKE_QT_STEM = $${TARGET} + !generated_privates { isEmpty(SYNCQT.INJECTED_PRIVATE_HEADER_FILES):isEmpty(SYNCQT.PRIVATE_HEADER_FILES): \ CMAKE_NO_PRIVATE_INCLUDES = true } - split_incpath { CMAKE_ADD_SOURCE_INCLUDE_DIRS = true CMAKE_SOURCE_INCLUDES = \ - $$cmakeTargetPaths($$QT_MODULE_INCLUDE_BASE $$QT_MODULE_INCLUDE_BASE/Qt$${CMAKE_MODULE_NAME}) + $$cmakeTargetPaths($$QT_MODULE_INCLUDE_BASE $$QT_MODULE_INCLUDE_BASE/$${CMAKE_INCLUDE_NAME}) CMAKE_SOURCE_PRIVATE_INCLUDES = \ - $$cmakeTargetPaths($$QT_MODULE_INCLUDE_BASE/Qt$${CMAKE_MODULE_NAME}/$$eval(QT.$${MODULE}.VERSION) \ - $$QT_MODULE_INCLUDE_BASE/Qt$${CMAKE_MODULE_NAME}/$$eval(QT.$${MODULE}.VERSION)/Qt$${CMAKE_MODULE_NAME}) + $$cmakeTargetPaths($$QT_MODULE_INCLUDE_BASE/$${CMAKE_INCLUDE_NAME}/$$eval(QT.$${MODULE}.VERSION) \ + $$QT_MODULE_INCLUDE_BASE/$${CMAKE_INCLUDE_NAME}/$$eval(QT.$${MODULE}.VERSION)/$${CMAKE_INCLUDE_NAME}) cmake_extra_source_includes.input = $$PWD/data/cmake/ExtraSourceIncludes.cmake.in cmake_extra_source_includes.output = $$CMAKE_OUT_DIR/Qt5$${CMAKE_MODULE_NAME}/ExtraSourceIncludes.cmake @@ -200,10 +209,6 @@ CMAKE_QT5_MODULE_DEPS = $$join(lib_deps, ";") CMAKE_INTERFACE_MODULE_DEPS = $$join(aux_mod_deps, ";") CMAKE_INTERFACE_QT5_MODULE_DEPS = $$join(aux_lib_deps, ";") -# TARGET here is the one changed at the end of qt_module.prf, -# which already contains the Qt5 prefix and QT_LIBINFIX suffix -CMAKE_QT_STEM = $${TARGET} - mac { !isEmpty(CMAKE_STATIC_TYPE) { CMAKE_LIB_FILE_LOCATION_DEBUG = lib$${CMAKE_QT_STEM}_debug.a @@ -213,8 +218,8 @@ mac { CMAKE_PRL_FILE_LOCATION_RELEASE = lib$${CMAKE_QT_STEM}.prl } else { qt_framework { - CMAKE_LIB_FILE_LOCATION_DEBUG = Qt$${CMAKE_MODULE_NAME}$${QT_LIBINFIX}.framework/Qt$${CMAKE_MODULE_NAME}$${QT_LIBINFIX} - CMAKE_LIB_FILE_LOCATION_RELEASE = Qt$${CMAKE_MODULE_NAME}$${QT_LIBINFIX}.framework/Qt$${CMAKE_MODULE_NAME}$${QT_LIBINFIX} + CMAKE_LIB_FILE_LOCATION_DEBUG = $${CMAKE_QT_STEM}.framework/$${CMAKE_QT_STEM} + CMAKE_LIB_FILE_LOCATION_RELEASE = $${CMAKE_QT_STEM}.framework/$${CMAKE_QT_STEM} CMAKE_BUILD_IS_FRAMEWORK = "true" } else { CMAKE_LIB_FILE_LOCATION_DEBUG = lib$${CMAKE_QT_STEM}_debug.$$eval(QT.$${MODULE}.VERSION).dylib diff --git a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in index 3ed6dd5889..c729892889 100644 --- a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in +++ b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in @@ -89,13 +89,13 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME}) !!IF !no_module_headers !!IF !isEmpty(CMAKE_BUILD_IS_FRAMEWORK) set(_Qt5$${CMAKE_MODULE_NAME}_OWN_INCLUDE_DIRS - \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}Qt$${CMAKE_MODULE_NAME}.framework\" - \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}Qt$${CMAKE_MODULE_NAME}.framework/Headers\" + \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_QT_STEM}.framework\" + \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_QT_STEM}.framework/Headers\" ) !!IF isEmpty(CMAKE_NO_PRIVATE_INCLUDES) set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS - \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}Qt$${CMAKE_MODULE_NAME}.framework/Versions/$$section(VERSION, ., 0, 0)/Headers/$$VERSION/\" - \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}Qt$${CMAKE_MODULE_NAME}.framework/Versions/$$section(VERSION, ., 0, 0)/Headers/$$VERSION/$${MODULE_INCNAME}\" + \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_QT_STEM}.framework/Versions/$$section(VERSION, ., 0, 0)/Headers/$$VERSION/\" + \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}$${CMAKE_QT_STEM}.framework/Versions/$$section(VERSION, ., 0, 0)/Headers/$$VERSION/$${MODULE_INCNAME}\" ) !!ELSE set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS \"\") @@ -112,7 +112,7 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME}) set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS \"\") !!ENDIF !!ELSE - set(_Qt5$${CMAKE_MODULE_NAME}_OWN_INCLUDE_DIRS \"$$CMAKE_INCLUDE_DIR\" \"$${CMAKE_INCLUDE_DIR}Qt$${CMAKE_MODULE_NAME}\") + set(_Qt5$${CMAKE_MODULE_NAME}_OWN_INCLUDE_DIRS \"$$CMAKE_INCLUDE_DIR\" \"$${CMAKE_INCLUDE_DIR}$${CMAKE_INCLUDE_NAME}\") !!IF isEmpty(CMAKE_NO_PRIVATE_INCLUDES) set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS \"$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}/$$VERSION\" -- cgit v1.2.3 From 5b3dfa470ed7ea40103daa785286ab71fb7aa230 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 19 Dec 2018 12:46:52 +0100 Subject: qmake: link qt libraries by full path this avoids the scenario where the linker would pick up the wrong qt libraries for LIBS_PRIVATE because LIBS added the "wrong" path first. this is also consistent with configure-supplied dependencies as of recently. as a side effect, this also removes pretenses of lsb linker handling, as it makes no sense after the change and is certainly obsolete anyway. Fixes: QTBUG-50921 Change-Id: I84398c9143f393c2eefb3c69a31bd9f633669924 Reviewed-by: Oswald Buddenhagen Reviewed-by: Joerg Bornemann --- mkspecs/features/qt.prf | 31 +++++++++++++------------------ mkspecs/features/win32/opengl.prf | 16 ++++++++++++---- mkspecs/features/win32/windows.prf | 7 +++---- 3 files changed, 28 insertions(+), 26 deletions(-) (limited to 'mkspecs/features') diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf index d8d5acaafd..89f4946c50 100644 --- a/mkspecs/features/qt.prf +++ b/mkspecs/features/qt.prf @@ -145,12 +145,14 @@ import_plugins:qtConfig(static) { # the plugin path. Unknown plugins must rely on the default link path. plug_type = $$eval(QT_PLUGIN.$${plug}.TYPE) !isEmpty(plug_type) { + plug_name = $$QMAKE_PREFIX_STATICLIB$${plug}$$qtPlatformTargetSuffix().$$QMAKE_EXTENSION_STATICLIB plug_path = $$eval(QT_PLUGIN.$${plug}.PATH) isEmpty(plug_path): \ plug_path = $$[QT_INSTALL_PLUGINS/get] - LIBS += -L$$plug_path/$$plug_type + LIBS += $$plug_path/$$plug_type/$$plug_name + } else { + LIBS += -l$${plug}$$qtPlatformTargetSuffix() } - LIBS += -l$${plug}$$qtPlatformTargetSuffix() } } @@ -195,8 +197,6 @@ for(ever) { qtProcessModuleFlags(DEFINES, QT.$${QTLIB}.DEFINES) MODULE_INCLUDES -= $$QMAKE_DEFAULT_INCDIRS - MODULE_LIBS_ADD = $$MODULE_LIBS - MODULE_LIBS_ADD -= $$QMAKE_DEFAULT_LIBDIRS # Frameworks shouldn't need include paths, but much code does not use # module-qualified #includes, so by default we add paths which point @@ -209,23 +209,17 @@ for(ever) { !isEmpty(MODULE_MODULE) { contains(MODULE_CONFIG, lib_bundle) { framework = $$MODULE_MODULE + # Linking frameworks by absolute path does not work. LIBS$$var_sfx += -framework $$framework } else { - !isEmpty(MODULE_LIBS_ADD): \ - LIBS$$var_sfx += -L$$MODULE_LIBS_ADD - lib = $$MODULE_MODULE$$qtPlatformTargetSuffix() - LIBS$$var_sfx += -l$$lib - - contains(MODULE_CONFIG, staticlib): \ - PRE_TARGETDEPS *= $$MODULE_LIBS/$${QMAKE_PREFIX_STATICLIB}$${lib}.$${QMAKE_EXTENSION_STATICLIB} - - !isEmpty(QMAKE_LSB) { - !isEmpty(MODULE_LIBS_ADD): \ - QMAKE_LFLAGS *= --lsb-libpath=$$MODULE_LIBS_ADD - QMAKE_LFLAGS *= --lsb-shared-libs=$$lib - QMAKE_LIBDIR *= /opt/lsb/lib + win32|contains(MODULE_CONFIG, staticlib) { + lib = $$MODULE_LIBS/$$QMAKE_PREFIX_STATICLIB$${lib}.$$QMAKE_EXTENSION_STATICLIB + PRE_TARGETDEPS += $$lib + } else { + lib = $$MODULE_LIBS/$$QMAKE_PREFIX_SHLIB$${lib}.$$QMAKE_EXTENSION_SHLIB } + LIBS$$var_sfx += $$lib } } QMAKE_USE$$var_sfx += $$MODULE_USES @@ -295,7 +289,8 @@ contains(all_qt_module_deps, qml): \ for (key, IMPORTS._KEYS_) { PATH = $$eval(IMPORTS.$${key}.path) PLUGIN = $$eval(IMPORTS.$${key}.plugin) - !isEmpty(PATH):!isEmpty(PLUGIN): LIBS *= -L$$PATH -l$${PLUGIN}$$qtPlatformTargetSuffix() + !isEmpty(PATH):!isEmpty(PLUGIN): \ + LIBS += $$PATH/$$QMAKE_PREFIX_STATICLIB$${PLUGIN}$$qtPlatformTargetSuffix().$$QMAKE_EXTENSION_STATICLIB } # create qml_plugin_import.cpp diff --git a/mkspecs/features/win32/opengl.prf b/mkspecs/features/win32/opengl.prf index c6fba7770f..f21848f941 100644 --- a/mkspecs/features/win32/opengl.prf +++ b/mkspecs/features/win32/opengl.prf @@ -1,13 +1,21 @@ QT_FOR_CONFIG += gui +defineTest(prependOpenGlLib) { + path = $$QT.core.libs/$$QMAKE_PREFIX_STATICLIB$$1 + ext = .$$QMAKE_EXTENSION_STATICLIB + QMAKE_LIBS_OPENGL_ES2 = $${path}$${ext} $$QMAKE_LIBS_OPENGL_ES2 + QMAKE_LIBS_OPENGL_ES2_DEBUG = $${path}d$${ext} $$QMAKE_LIBS_OPENGL_ES2_DEBUG + export(QMAKE_LIBS_OPENGL_ES2) + export(QMAKE_LIBS_OPENGL_ES2_DEBUG) +} + qtConfig(opengles2) { # Depending on the configuration we use libQtANGLE or libEGL and libGLESv2 qtConfig(combined-angle-lib) { - QMAKE_LIBS_OPENGL_ES2 = -l$${LIBQTANGLE_NAME} $$QMAKE_LIBS_OPENGL_ES2 - QMAKE_LIBS_OPENGL_ES2_DEBUG = -l$${LIBQTANGLE_NAME}d $$QMAKE_LIBS_OPENGL_ES2_DEBUG + prependOpenGlLib($$LIBQTANGLE_NAME) } else { - QMAKE_LIBS_OPENGL_ES2 = -l$${LIBEGL_NAME} -l$${LIBGLESV2_NAME} $$QMAKE_LIBS_OPENGL_ES2 - QMAKE_LIBS_OPENGL_ES2_DEBUG = -l$${LIBEGL_NAME}d -l$${LIBGLESV2_NAME}d $$QMAKE_LIBS_OPENGL_ES2_DEBUG + prependOpenGlLib($$LIBGLESV2_NAME) + prependOpenGlLib($$LIBEGL_NAME) } # For Desktop, use the ANGLE library location passed on from configure. INCLUDEPATH += $$QMAKE_INCDIR_OPENGL_ES2 diff --git a/mkspecs/features/win32/windows.prf b/mkspecs/features/win32/windows.prf index ecb167bf18..272170d428 100644 --- a/mkspecs/features/win32/windows.prf +++ b/mkspecs/features/win32/windows.prf @@ -6,10 +6,9 @@ contains(TEMPLATE, ".*app") { qt:for(entryLib, $$list($$unique(QMAKE_LIBS_QT_ENTRY))) { isEqual(entryLib, -lqtmain) { - !contains(QMAKE_DEFAULT_LIBDIRS, $$QT.core.libs): \ - QMAKE_LIBS += -L$$QT.core.libs - CONFIG(debug, debug|release): QMAKE_LIBS += $${entryLib}$${QT_LIBINFIX}d - else: QMAKE_LIBS += $${entryLib}$${QT_LIBINFIX} + lib = $$QT.core.libs/$${QMAKE_PREFIX_STATICLIB}qtmain$$QT_LIBINFIX$$qtPlatformTargetSuffix().$$QMAKE_EXTENSION_STATICLIB + PRE_TARGETDEPS += $$lib + QMAKE_LIBS += $$lib } else { QMAKE_LIBS += $${entryLib} } -- cgit v1.2.3 From 51bae0331c1fde52d0b3f1184d38a2be462ebd42 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 17 Apr 2019 16:01:46 +0200 Subject: Add qmake support for c++2a Makes it possible to build user projects and Qt with C++2a. It is not automatically upgraded to yet though. Change-Id: I949ce94871ddc53f21b7265a52b9c0e1370456c8 Reviewed-by: Thiago Macieira --- mkspecs/features/default_post.prf | 7 ++++--- mkspecs/features/qt_common.prf | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'mkspecs/features') diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf index 69da78c5b7..9df99b8648 100644 --- a/mkspecs/features/default_post.prf +++ b/mkspecs/features/default_post.prf @@ -121,15 +121,16 @@ breakpad { c++17: CONFIG += c++1z -!c++11:!c++14:!c++1z { +!c++11:!c++14:!c++1z:!c++2a { # Qt requires C++11 since 5.7, check if we need to force a compiler option QT_COMPILER_STDCXX_no_L = $$replace(QT_COMPILER_STDCXX, "L$", "") !greaterThan(QT_COMPILER_STDCXX_no_L, 199711): CONFIG += c++11 } -c++11|c++14|c++1z { +c++11|c++14|c++1z|c++2a { # Disable special compiler flags for host builds !host_build|!cross_compile { - c++1z: cxxstd = CXX1Z + c++2a: cxxstd = CXX2A + else: c++1z: cxxstd = CXX1Z else: c++14: cxxstd = CXX14 else: cxxstd = CXX11 } else { diff --git a/mkspecs/features/qt_common.prf b/mkspecs/features/qt_common.prf index ae859a81ff..004b32fd22 100644 --- a/mkspecs/features/qt_common.prf +++ b/mkspecs/features/qt_common.prf @@ -17,6 +17,7 @@ DEFINES *= QT_NO_NARROWING_CONVERSIONS_IN_CONNECT qtConfig(c++11): CONFIG += c++11 strict_c++ qtConfig(c++14): CONFIG += c++14 qtConfig(c++1z): CONFIG += c++1z +qtConfig(c++2a): CONFIG += c++2a qtConfig(c99): CONFIG += c99 qtConfig(c11): CONFIG += c11 qtConfig(stack-protector-strong): CONFIG += stack_protector_strong -- cgit v1.2.3 From c2917243a96d19c9cd49c827e63d40b7c0110d7d Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Mon, 15 Apr 2019 12:41:52 +0200 Subject: syncqt: Fix resolution of injected headers for external modules Injected headers were made relative to MODULE_BASE_OUTDIR by syncqt and made absolute by resolving against REAL_MODULE_BASE_OUTDIR. This breaks for modules that reside outside the original Qt source tree (if the directory depth doesn't coincidentally match). Now, we resolve injected headers against build_basedir, which is REAL_MODULE_BASE_OUTDIR. To emphasize the equivalence of REAL_MODULE_BASE_OUTDIR and syncqt's build_basedir, use the former for syncqt's -output argument. This commit amends 2aa779e8. Fixes: QTBUG-70587 Change-Id: I2935d87d7ee681fa4aa795a270b94ab7a43abe59 Reviewed-by: Dominik Holland Reviewed-by: Oliver Wolff --- mkspecs/features/qt_module_headers.prf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mkspecs/features') diff --git a/mkspecs/features/qt_module_headers.prf b/mkspecs/features/qt_module_headers.prf index 6b4b9143fa..37b69e31c8 100644 --- a/mkspecs/features/qt_module_headers.prf +++ b/mkspecs/features/qt_module_headers.prf @@ -23,7 +23,7 @@ load(qt_build_paths) QMAKE_SYNCQT += -module $$mod QMAKE_SYNCQT += \ -version $$VERSION -outdir $$system_quote($$MODULE_BASE_OUTDIR) \ - -builddir $$system_quote($$shadowed($$MODULE_BASE_INDIR)) $$MODULE_SYNCQT_DIR + -builddir $$system_quote($$REAL_MODULE_BASE_OUTDIR) $$MODULE_SYNCQT_DIR !silent: message($$QMAKE_SYNCQT) system($$QMAKE_SYNCQT)|error("Failed to run: $$QMAKE_SYNCQT") -- cgit v1.2.3 From f36a306563b4e77e4c64884382da22f3412708a0 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Wed, 17 Apr 2019 14:16:36 +0200 Subject: configure: Support the = prefix for -I and -L For gcc's -I and -L arguments a = prefix is replaced by the sysroot. Since we're resolving include paths and library paths, we have to support this feature. For example, the linux-rasp-pi3-g++ makes use of this and is broken without this patch. Change-Id: Ie39e63322bd35e2a93aa8e55d52260164b8c6a6b Reviewed-by: Kai Koehne --- mkspecs/features/qt_configure.prf | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'mkspecs/features') diff --git a/mkspecs/features/qt_configure.prf b/mkspecs/features/qt_configure.prf index 62ad972796..aa4348235e 100644 --- a/mkspecs/features/qt_configure.prf +++ b/mkspecs/features/qt_configure.prf @@ -515,6 +515,17 @@ defineTest(qtConfSetupLibraries) { } } +defineReplace(qtGccSysrootifiedPath) { + return($$replace(1, ^=, $$[QT_SYSROOT])) +} + +defineReplace(qtGccSysrootifiedPaths) { + sysrootified = + for (path, 1): \ + sysrootified += $$qtGccSysrootifiedPath($$path) + return($$sysrootified) +} + # libs-var, libs, in-paths, out-paths-var defineTest(qtConfResolveLibs) { ret = true @@ -531,6 +542,7 @@ defineTest(qtConfResolveLibs) { out += $$l } else: contains(l, "^-L.*") { lp = $$replace(l, "^-L", ) + gcc: lp = $$qtGccSysrootifiedPath($$lp) !exists($$lp/.) { qtLog("Library path $$val_escape(lp) is invalid.") ret = false @@ -604,6 +616,7 @@ defineTest(qtConfResolveAllLibs) { # libs-var, in-paths, libs defineTest(qtConfResolvePathLibs) { ret = true + gcc: 2 = $$qtGccSysrootifiedPaths($$2) for (libdir, 2) { !exists($$libdir/.) { qtLog("Library path $$val_escape(libdir) is invalid.") @@ -654,6 +667,7 @@ defineReplace(qtConfGetTestIncludes) { # includes-var, in-paths, test-object-var defineTest(qtConfResolvePathIncs) { ret = true + gcc: 2 = $$qtGccSysrootifiedPaths($$2) for (incdir, 2) { !exists($$incdir/.) { qtLog("Include path $$val_escape(incdir) is invalid.") -- cgit v1.2.3