diff options
46 files changed, 342 insertions, 196 deletions
diff --git a/doc/reference/items/convenience/application.qdoc b/doc/reference/items/convenience/application.qdoc index de2bbae48..3c87f51f6 100644 --- a/doc/reference/items/convenience/application.qdoc +++ b/doc/reference/items/convenience/application.qdoc @@ -39,9 +39,30 @@ An Application item is a \l{Product} of the \l{Product::}{type} \c "application". - It exists for the convenience of project file authors. - \note On Android, an Application item instead builds a shared library for products whose \l{Product::}{consoleApplication} property is set to \c false. */ + +/*! + \qmlproperty bool Application::install + + If \c{true}, the executable that is produced when building the application will be installed + to \l installDir. + + \defaultvalue \c false + \since Qbs 1.13 +*/ + +/*! + \qmlproperty string Application::installDir + + Where to install the executable that is produced when building the application, if \l install + is enabled. + + The value is appended to \l{qbs::installPrefix}{qbs.installPrefix} + when constructing the actual installation directory. + + \defaultvalue \c Applications if the app is a \l{bundle::isBundle}{bundle}, \c bin otherwise. + \since Qbs 1.13 +*/ diff --git a/doc/reference/items/convenience/dynamiclibrary.qdoc b/doc/reference/items/convenience/dynamiclibrary.qdoc index 27aa978d1..488aef3eb 100644 --- a/doc/reference/items/convenience/dynamiclibrary.qdoc +++ b/doc/reference/items/convenience/dynamiclibrary.qdoc @@ -38,7 +38,7 @@ \brief Dynamic library. A DynamicLibrary item is a \l{Product} of the \l{Product::}{type} - \c "dynamiclibrary". It exists for the convenience of project file authors. + \c "dynamiclibrary". For Android targets, the following applies: \list @@ -48,3 +48,50 @@ \endlist */ +/*! + \qmlproperty bool DynamicLibrary::install + + If \c{true}, the library will be installed to \l installDir. + + \defaultvalue \c false + \since Qbs 1.13 +*/ + +/*! + \qmlproperty string DynamicLibrary::installDir + + Where to install the library, if \l install is enabled. On Unix, the symbolic links + are also installed to this location. + + The value is appended to \l{qbs::installPrefix}{qbs.installPrefix} + when constructing the actual installation directory. + + \defaultvalue \c Library/Frameworks if the library is a \l{bundle::isBundle}{bundle}, + otherwise \c bin for Windows and \c lib for Unix-like targets. + \since Qbs 1.13 +*/ + +/*! + \qmlproperty bool DynamicLibrary::installImportLib + + If \c{true}, the import library will be installed to \l importLibInstallDir. + This property is only relevant for Windows targets. + Enable it if you want to create a development package. + + \defaultvalue \c false + \since Qbs 1.13 +*/ + +/*! + \qmlproperty string DynamicLibrary::importLibInstallDir + + Where to install the import library, if \l installImportLib is enabled. + + The value is appended to \l{qbs::installPrefix}{qbs.installPrefix} + when constructing the actual installation directory. + + This property is only relevant for Windows targets. + + \defaultvalue \c lib + \since Qbs 1.13 +*/ diff --git a/doc/reference/items/convenience/staticlibrary.qdoc b/doc/reference/items/convenience/staticlibrary.qdoc index a7a94cc43..cd459cf6e 100644 --- a/doc/reference/items/convenience/staticlibrary.qdoc +++ b/doc/reference/items/convenience/staticlibrary.qdoc @@ -37,11 +37,27 @@ \brief Static library. A StaticLibrary item is a \l{Product}{product} of the \l{Product::}{type} - \c "staticlibrary" that is normally entirely equivalent to the following: + \c "staticlibrary". +*/ + +/*! + \qmlproperty bool StaticLibrary::install + + If \c{true}, the library will be installed to \l installDir. + + \defaultvalue \c false + \since Qbs 1.13 +*/ + +/*! + \qmlproperty string StaticLibrary::installDir + + Where to install the library, if \l install is enabled. + + The value is appended to \l{qbs::installPrefix}{qbs.installPrefix} + when constructing the actual installation directory. - \code - Product { - type: "staticlibrary" - } - \endcode + \defaultvalue \c Library/Frameworks if the library is a \l{bundle::isBundle}{bundle}, + \c lib otherwise. + \since Qbs 1.13 */ diff --git a/share/qbs/imports/qbs/base/Application.qbs b/share/qbs/imports/qbs/base/Application.qbs index e16a93761..7f26279c8 100644 --- a/share/qbs/imports/qbs/base/Application.qbs +++ b/share/qbs/imports/qbs/base/Application.qbs @@ -36,4 +36,14 @@ NativeBinary { return ["dynamiclibrary", "android.nativelibrary"]; return ["application"]; } + + installDir: isBundle ? "Applications" : "bin" + + Group { + condition: install + fileTagsFilter: isBundle ? "bundle.content" : "application"; + qbs.install: true + qbs.installDir: installDir + qbs.installSourceBase: isBundle ? destinationDirectory : outer + } } diff --git a/share/qbs/imports/qbs/base/DynamicLibrary.qbs b/share/qbs/imports/qbs/base/DynamicLibrary.qbs index 32d8fec41..4853b9598 100644 --- a/share/qbs/imports/qbs/base/DynamicLibrary.qbs +++ b/share/qbs/imports/qbs/base/DynamicLibrary.qbs @@ -32,4 +32,24 @@ import qbs Library { type: ["dynamiclibrary"].concat(isForAndroid ? ["android.nativelibrary"] : []) + + installDir: isBundle ? "Library/Frameworks" : qbs.targetOS.contains("windows") + ? "bin" : "lib" + property bool installImportLib: false + property string importLibInstallDir: "lib" + + Group { + condition: install + fileTagsFilter: isBundle ? "bundle.content" : ["dynamiclibrary", "dynamiclibrary_symlink"] + qbs.install: true + qbs.installDir: installDir + qbs.installSourceBase: isBundle ? destinationDirectory : outer + } + + Group { + condition: installImportLib + fileTagsFilter: "dynamiclibrary_import" + qbs.install: true + qbs.installDir: importLibInstallDir + } } diff --git a/share/qbs/imports/qbs/base/NativeBinary.qbs b/share/qbs/imports/qbs/base/NativeBinary.qbs index 0a772b60c..ce8f458f4 100644 --- a/share/qbs/imports/qbs/base/NativeBinary.qbs +++ b/share/qbs/imports/qbs/base/NativeBinary.qbs @@ -33,6 +33,10 @@ import qbs Product { property bool isForAndroid: qbs.targetOS.contains("android") property bool isForDarwin: qbs.targetOS.contains("darwin") + property bool isBundle: isForDarwin && bundle.isBundle + + property bool install: false + property string installDir Depends { name: "bundle" } diff --git a/share/qbs/imports/qbs/base/StaticLibrary.qbs b/share/qbs/imports/qbs/base/StaticLibrary.qbs index 1609bdcea..be5f7a7c4 100644 --- a/share/qbs/imports/qbs/base/StaticLibrary.qbs +++ b/share/qbs/imports/qbs/base/StaticLibrary.qbs @@ -32,4 +32,13 @@ import qbs Library { type: ["staticlibrary"] + + installDir: isBundle ? "Library/Frameworks" : "lib" + Group { + condition: install + fileTagsFilter: isBundle ? "bundle.content" : "staticlibrary"; + qbs.install: true + qbs.installDir: installDir + qbs.installSourceBase: isBundle ? destinationDirectory : outer + } } diff --git a/share/qbs/modules/qbs/common.qbs b/share/qbs/modules/qbs/common.qbs index 86ce27c59..4e96a320b 100644 --- a/share/qbs/modules/qbs/common.qbs +++ b/share/qbs/modules/qbs/common.qbs @@ -102,7 +102,7 @@ Module { property path installSourceBase property string installRoot: project.buildDirectory + "/install-root" property string installDir - property string installPrefix: "" + property string installPrefix: qbs.targetOS.contains("unix") ? "/usr/local" : "" property path sysroot PropertyOptions { diff --git a/tests/auto/api/testdata/build-single-file/build-single-file.qbs b/tests/auto/api/testdata/build-single-file/build-single-file.qbs index eeb38a5ff..6389713d9 100644 --- a/tests/auto/api/testdata/build-single-file/build-single-file.qbs +++ b/tests/auto/api/testdata/build-single-file/build-single-file.qbs @@ -2,6 +2,7 @@ import qbs import qbs.TextFile CppApplication { + consoleApplication: true files: ["ignored1.cpp", "ignored2.cpp", "compiled.cpp"] cpp.includePaths: [buildDirectory] @@ -10,10 +11,8 @@ CppApplication { fileTags: ["cpp_pch_src"] } - Group { - fileTagsFilter: ["application"] - qbs.install: true - } + install: true + installDir: "" Rule { multiplex: true diff --git a/tests/auto/api/testdata/installed-artifact/installed-artifact.qbs b/tests/auto/api/testdata/installed-artifact/installed-artifact.qbs index e2d18b2ea..4a355c385 100644 --- a/tests/auto/api/testdata/installed-artifact/installed-artifact.qbs +++ b/tests/auto/api/testdata/installed-artifact/installed-artifact.qbs @@ -18,11 +18,8 @@ Project { qbs.installDir: "src" } qbs.installPrefix: "/usr" - Group { - fileTagsFilter: "application" - qbs.install: true - qbs.installDir: "bin" - } + install: true + installDir: "bin" Group { fileTagsFilter: "obj" qbs.install: true diff --git a/tests/auto/api/testdata/multi-arch/multi-arch.qbs b/tests/auto/api/testdata/multi-arch/multi-arch.qbs index d54809a41..99d9aa817 100644 --- a/tests/auto/api/testdata/multi-arch/multi-arch.qbs +++ b/tests/auto/api/testdata/multi-arch/multi-arch.qbs @@ -14,6 +14,7 @@ Project { files: "host+target.input" fileTags: "input" } + qbs.installPrefix: "" Group { fileTagsFilter: "output" qbs.install: true @@ -28,6 +29,7 @@ Project { files: "host-tool.input" fileTags: "input" } + qbs.installPrefix: "" Group { fileTagsFilter: "output" qbs.install: true diff --git a/tests/auto/api/testdata/recursive-wildcards/recursive-wildcards.qbs b/tests/auto/api/testdata/recursive-wildcards/recursive-wildcards.qbs index a1970e1c4..df54577f6 100644 --- a/tests/auto/api/testdata/recursive-wildcards/recursive-wildcards.qbs +++ b/tests/auto/api/testdata/recursive-wildcards/recursive-wildcards.qbs @@ -1,4 +1,5 @@ Product { + qbs.installPrefix: "" Group { files: "dir/**" qbs.install: true diff --git a/tests/auto/api/testdata/tool-in-module/use-within-project/use-within-project.qbs b/tests/auto/api/testdata/tool-in-module/use-within-project/use-within-project.qbs index bd480fb08..bbeb29664 100644 --- a/tests/auto/api/testdata/tool-in-module/use-within-project/use-within-project.qbs +++ b/tests/auto/api/testdata/tool-in-module/use-within-project/use-within-project.qbs @@ -3,12 +3,15 @@ import qbs Project { CppApplication { name: "thetool" + consoleApplication: true files: "main.cpp" + install: true + installDir: "" + qbs.installPrefix: "" Group { fileTagsFilter: ["application"] fileTags: ["thetool.thetool"] - qbs.install: true } Export { diff --git a/tests/auto/blackbox/testdata-apple/apple-dmg/apple-dmg.qbs b/tests/auto/blackbox/testdata-apple/apple-dmg/apple-dmg.qbs index 3bccebfd0..010e5f7c7 100644 --- a/tests/auto/blackbox/testdata-apple/apple-dmg/apple-dmg.qbs +++ b/tests/auto/blackbox/testdata-apple/apple-dmg/apple-dmg.qbs @@ -18,12 +18,7 @@ Project { targetName: "My Great App" files: ["main.c"] - Group { - fileTagsFilter: ["bundle.content"] - qbs.install: true - qbs.installDir: "/Applications" - qbs.installSourceBase: product.buildDirectory - } + install: true } AppleDiskImage { diff --git a/tests/auto/blackbox/testdata-apple/apple-multiconfig/apple-multiconfig.qbs b/tests/auto/blackbox/testdata-apple/apple-multiconfig/apple-multiconfig.qbs index ae2fcd402..ea67b6e44 100644 --- a/tests/auto/blackbox/testdata-apple/apple-multiconfig/apple-multiconfig.qbs +++ b/tests/auto/blackbox/testdata-apple/apple-multiconfig/apple-multiconfig.qbs @@ -17,11 +17,8 @@ Project { aggregate: false multiplexByQbsProperties: [] - Group { - fileTagsFilter: ["bundle.content"] - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } CppApplication { @@ -38,11 +35,8 @@ Project { qbs.architectures: ["x86_64"] qbs.buildVariants: ["release"] - Group { - fileTagsFilter: ["bundle.content"] - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } DynamicLibrary { @@ -58,11 +52,8 @@ Project { aggregate: false multiplexByQbsProperties: [] - Group { - fileTagsFilter: ["bundle.content"] - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } CppApplication { @@ -74,11 +65,8 @@ Project { cpp.rpaths: [cpp.rpathOrigin + "/../../../"] cpp.minimumMacosVersion: "10.5" - Group { - fileTagsFilter: ["bundle.content"] - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } CppApplication { @@ -91,11 +79,8 @@ Project { cpp.minimumMacosVersion: "10.5" qbs.architectures: ["x86", "x86_64"] - Group { - fileTagsFilter: ["bundle.content"] - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } CppApplication { @@ -109,11 +94,8 @@ Project { qbs.architectures: ["x86", "x86_64"] qbs.buildVariants: ["debug", "profile"] - Group { - fileTagsFilter: ["bundle.content"] - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } DynamicLibrary { @@ -127,11 +109,8 @@ Project { qbs.architectures: ["x86", "x86_64"] qbs.buildVariants: ["release", "debug", "profile"] - Group { - fileTagsFilter: ["bundle.content"] - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } DynamicLibrary { @@ -145,11 +124,8 @@ Project { qbs.architectures: ["x86", "x86_64"] qbs.buildVariants: ["debug", "profile"] - Group { - fileTagsFilter: ["bundle.content"] - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } DynamicLibrary { @@ -162,11 +138,8 @@ Project { cpp.defines: ["VARIANT=" + Utilities.cStringQuote(qbs.buildVariant)] qbs.architectures: ["x86", "x86_64"] qbs.buildVariants: ["debug", "profile"] - Group { - fileTagsFilter: ["bundle.content"] - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } DynamicLibrary { Depends { name: "cpp" } @@ -177,10 +150,7 @@ Project { cpp.defines: ["VARIANT=" + Utilities.cStringQuote(qbs.buildVariant)] qbs.architectures: ["x86", "x86_64"] qbs.buildVariants: ["debug", "profile"] - Group { - fileTagsFilter: ["bundle.content"] - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } } diff --git a/tests/auto/blackbox/testdata-apple/bundle-structure/bundle-structure.qbs b/tests/auto/blackbox/testdata-apple/bundle-structure/bundle-structure.qbs index a7c3e20bf..13a205730 100644 --- a/tests/auto/blackbox/testdata-apple/bundle-structure/bundle-structure.qbs +++ b/tests/auto/blackbox/testdata-apple/bundle-structure/bundle-structure.qbs @@ -17,11 +17,8 @@ Project { bundle.privateHeaders: ["dummy_p.h"] bundle.resources: ["resource.txt"] files: ["dummy.c"] - Group { - fileTagsFilter: product.type.concat(project.bundleFileTags) - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } Application { @@ -37,11 +34,8 @@ Project { bundle.privateHeaders: ["dummy_p.h"] bundle.resources: ["resource.txt"] files: ["dummy.c"] - Group { - fileTagsFilter: product.type.concat(project.bundleFileTags) - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } Application { @@ -57,11 +51,8 @@ Project { bundle.privateHeaders: ["dummy_p.h"] bundle.resources: ["resource.txt"] files: ["dummy.c"] - Group { - fileTagsFilter: product.type.concat(project.bundleFileTags) - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } DynamicLibrary { @@ -73,11 +64,8 @@ Project { bundle.privateHeaders: ["dummy_p.h"] bundle.resources: ["resource.txt"] files: ["dummy.c"] - Group { - fileTagsFilter: product.type.concat(project.bundleFileTags) - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } StaticLibrary { @@ -89,11 +77,8 @@ Project { bundle.privateHeaders: ["dummy_p.h"] bundle.resources: ["resource.txt"] files: ["dummy.c"] - Group { - fileTagsFilter: product.type.concat(project.bundleFileTags) - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } LoadableModule { @@ -105,11 +90,8 @@ Project { bundle.privateHeaders: ["dummy_p.h"] bundle.resources: ["resource.txt"] files: ["dummy.c"] - Group { - fileTagsFilter: product.type.concat(project.bundleFileTags) - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } ApplicationExtension { @@ -121,11 +103,8 @@ Project { bundle.privateHeaders: ["dummy_p.h"] bundle.resources: ["resource.txt"] files: ["dummy.c"] - Group { - fileTagsFilter: product.type.concat(project.bundleFileTags) - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } XPCService { @@ -137,11 +116,8 @@ Project { bundle.privateHeaders: ["dummy_p.h"] bundle.resources: ["resource.txt"] files: ["dummy.c"] - Group { - fileTagsFilter: product.type.concat(project.bundleFileTags) - qbs.install: true - qbs.installSourceBase: product.buildDirectory - } + install: true + installDir: "" } Product { diff --git a/tests/auto/blackbox/testdata-apple/embedInfoPlist/embedInfoPlist.qbs b/tests/auto/blackbox/testdata-apple/embedInfoPlist/embedInfoPlist.qbs index c0d77aefd..87f6c1750 100644 --- a/tests/auto/blackbox/testdata-apple/embedInfoPlist/embedInfoPlist.qbs +++ b/tests/auto/blackbox/testdata-apple/embedInfoPlist/embedInfoPlist.qbs @@ -13,10 +13,8 @@ Project { bundle.infoPlist: ({ "QBS": "org.qt-project.qbs.testdata.embedInfoPlist" }) - Group { - fileTagsFilter: product.type - qbs.install: true - } + install: true + installDir: "" } DynamicLibrary { @@ -30,10 +28,8 @@ Project { bundle.infoPlist: ({ "QBS": "org.qt-project.qbs.testdata.embedInfoPlist.dylib" }) - Group { - fileTagsFilter: product.type - qbs.install: true - } + install: true + installDir: "" } LoadableModule { diff --git a/tests/auto/blackbox/testdata-java/java/vehicles.qbs b/tests/auto/blackbox/testdata-java/java/vehicles.qbs index 86d1f7d32..4051bb6e4 100644 --- a/tests/auto/blackbox/testdata-java/java/vehicles.qbs +++ b/tests/auto/blackbox/testdata-java/java/vehicles.qbs @@ -14,10 +14,9 @@ Project { name: "native" files: ["engine.c"] - Group { - fileTagsFilter: ["dynamiclibrary"] - qbs.install: true - } + qbs.installPrefix: "" + install: true + installDir: "" } JavaClassCollection { @@ -44,6 +43,7 @@ Project { name: "random_stuff" files: ["RandomStuff.java"] + qbs.installPrefix: "" Group { fileTagsFilter: ["java.jar"] qbs.install: true @@ -78,6 +78,7 @@ Project { java.manifestClassPath: [product.targetName + ".jar"] } + qbs.installPrefix: "" Group { fileTagsFilter: ["java.jar"] qbs.install: true @@ -98,6 +99,7 @@ Project { return mf; } + qbs.installPrefix: "" Group { fileTagsFilter: ["java.jar"] qbs.install: true diff --git a/tests/auto/blackbox/testdata-qt/cached-qml/cached-qml.qbs b/tests/auto/blackbox/testdata-qt/cached-qml/cached-qml.qbs index 398d3f4a9..db9dcae0c 100644 --- a/tests/auto/blackbox/testdata-qt/cached-qml/cached-qml.qbs +++ b/tests/auto/blackbox/testdata-qt/cached-qml/cached-qml.qbs @@ -2,9 +2,13 @@ import qbs CppApplication { name: "app" + consoleApplication: true Depends { name: "Qt.core" } Depends { name: "Qt.quick" } Depends { name: "Qt.qml" } + install: true + installDir: "" + qbs.installPrefix: "" Qt.qml.generateCacheFiles: true Qt.qml.cacheFilesInstallDir: "data" @@ -15,11 +19,6 @@ CppApplication { "stuff.js" ] - Group { - fileTagsFilter: ["application"] - qbs.install: true - } - // Install the C++ sources to tell the blackbox test that Qt.qmlcache is not available. Group { condition: !Qt.qml.cachingEnabled diff --git a/tests/auto/blackbox/testdata/autotest-with-dependencies/autotest-with-dependencies.qbs b/tests/auto/blackbox/testdata/autotest-with-dependencies/autotest-with-dependencies.qbs index 6850ee138..24c3ef075 100644 --- a/tests/auto/blackbox/testdata/autotest-with-dependencies/autotest-with-dependencies.qbs +++ b/tests/auto/blackbox/testdata/autotest-with-dependencies/autotest-with-dependencies.qbs @@ -6,13 +6,12 @@ Project { name: "helper-app" type: ["application", "test-helper"] consoleApplication: true + install: true files: "helper-main.cpp" cpp.executableSuffix: ".exe" Group { fileTagsFilter: "application" fileTags: "test-helper" - qbs.install: true - qbs.installDir: "bin" } } CppApplication { diff --git a/tests/auto/blackbox/testdata/dynamic-library-in-module/Dll.qbs b/tests/auto/blackbox/testdata/dynamic-library-in-module/Dll.qbs index 0f897df67..565402a31 100644 --- a/tests/auto/blackbox/testdata/dynamic-library-in-module/Dll.qbs +++ b/tests/auto/blackbox/testdata/dynamic-library-in-module/Dll.qbs @@ -9,8 +9,9 @@ DynamicLibrary { cpp.minimumMacosVersion: "10.5" // For -rpath } - Group { - fileTagsFilter: ["dynamiclibrary", "dynamiclibrary_import"] - qbs.install: true - } + install: true + installImportLib: true + qbs.installPrefix: "" + installDir: "" + importLibInstallDir: "" } diff --git a/tests/auto/blackbox/testdata/exports-qbs/lib.qbs b/tests/auto/blackbox/testdata/exports-qbs/lib.qbs index 6ae0885d5..54f524c23 100644 --- a/tests/auto/blackbox/testdata/exports-qbs/lib.qbs +++ b/tests/auto/blackbox/testdata/exports-qbs/lib.qbs @@ -28,11 +28,9 @@ DynamicLibrary { qbs.install: true qbs.installDir: headersInstallDir } - Group { - fileTagsFilter: ["dynamiclibrary", "dynamiclibrary_import"] - qbs.install: true - qbs.installDir: "lib" - } + install: true + installImportLib: true + installDir: "lib" Group { fileTagsFilter: ["Exporter.qbs.module"] qbs.install: true diff --git a/tests/auto/blackbox/testdata/exports-qbs/tool.qbs b/tests/auto/blackbox/testdata/exports-qbs/tool.qbs index b0078a75c..01521405f 100644 --- a/tests/auto/blackbox/testdata/exports-qbs/tool.qbs +++ b/tests/auto/blackbox/testdata/exports-qbs/tool.qbs @@ -11,6 +11,7 @@ CppApplication { Depends { name: "Exporter.qbs" } Exporter.qbs.artifactTypes: ["installable", "blubb"] files: ["tool.cpp"] + install: true qbs.installPrefix: project.installPrefix Group { files: ["helper.js"] @@ -25,8 +26,6 @@ CppApplication { Group { fileTagsFilter: ["application"] - qbs.install: true - qbs.installDir: "bin" fileTags: toolTags } Group { diff --git a/tests/auto/blackbox/testdata/install-locations/install-locations.qbs b/tests/auto/blackbox/testdata/install-locations/install-locations.qbs new file mode 100644 index 000000000..7bdb3f396 --- /dev/null +++ b/tests/auto/blackbox/testdata/install-locations/install-locations.qbs @@ -0,0 +1,28 @@ +import qbs + +Project { + property bool dummy: { + if (qbs.targetOS.contains("windows")) + console.info("is windows"); + else if (qbs.targetOS.contains("macos")) + console.info("is mac"); + else + console.info("is unix"); + } + CppApplication { + name: "theapp" + install: true + files: "main.cpp" + Group { + fileTagsFilter: "application" + fileTags: "some-tag" + } + } + DynamicLibrary { + name: "thelib" + install: true + installImportLib: true + Depends { name: "cpp" } + files: "thelib.cpp" + } +} diff --git a/tests/auto/blackbox/testdata/install-locations/main.cpp b/tests/auto/blackbox/testdata/install-locations/main.cpp new file mode 100644 index 000000000..237c8ce18 --- /dev/null +++ b/tests/auto/blackbox/testdata/install-locations/main.cpp @@ -0,0 +1 @@ +int main() {} diff --git a/tests/auto/blackbox/testdata/install-locations/thelib.cpp b/tests/auto/blackbox/testdata/install-locations/thelib.cpp new file mode 100644 index 000000000..d3877db26 --- /dev/null +++ b/tests/auto/blackbox/testdata/install-locations/thelib.cpp @@ -0,0 +1,3 @@ +#include "../dllexport.h" + +DLL_EXPORT void libFunc() {} diff --git a/tests/auto/blackbox/testdata/install-tree/install-tree.qbs b/tests/auto/blackbox/testdata/install-tree/install-tree.qbs index cbd7300d6..69571d58a 100644 --- a/tests/auto/blackbox/testdata/install-tree/install-tree.qbs +++ b/tests/auto/blackbox/testdata/install-tree/install-tree.qbs @@ -2,6 +2,7 @@ import qbs CppApplication { files: ["main.cpp"] + qbs.installPrefix: "" Group { files: ["data/**/*.txt"] qbs.install: true diff --git a/tests/auto/blackbox/testdata/installable-as-auxiliary-input/installable-as-auxiliary-input.qbs b/tests/auto/blackbox/testdata/installable-as-auxiliary-input/installable-as-auxiliary-input.qbs index 822473157..75ff10c80 100644 --- a/tests/auto/blackbox/testdata/installable-as-auxiliary-input/installable-as-auxiliary-input.qbs +++ b/tests/auto/blackbox/testdata/installable-as-auxiliary-input/installable-as-auxiliary-input.qbs @@ -34,6 +34,7 @@ Project { property string installDir: "include" + qbs.installPrefix: "" Group { fileTagsFilter: "header" qbs.install: true diff --git a/tests/auto/blackbox/testdata/installable/installable.qbs b/tests/auto/blackbox/testdata/installable/installable.qbs index 7ce41867b..eeb0875ad 100644 --- a/tests/auto/blackbox/testdata/installable/installable.qbs +++ b/tests/auto/blackbox/testdata/installable/installable.qbs @@ -5,15 +5,14 @@ Project { CppApplication { type: ["application"] name: "app" + consoleApplication: true Group { files: ["main.cpp"] qbs.install: true } - Group { - fileTagsFilter: ["application"] - qbs.install: true - } + install: true + installDir: "" } Product { diff --git a/tests/auto/blackbox/testdata/installed-source-files/installed-source-files.qbs b/tests/auto/blackbox/testdata/installed-source-files/installed-source-files.qbs index 1aa564553..fca3fcca3 100644 --- a/tests/auto/blackbox/testdata/installed-source-files/installed-source-files.qbs +++ b/tests/auto/blackbox/testdata/installed-source-files/installed-source-files.qbs @@ -3,6 +3,7 @@ import qbs CppApplication { consoleApplication: true files: ["main.cpp"] + qbs.installPrefix: "" Group { fileTagsFilter: ["cpp"] qbs.install: true diff --git a/tests/auto/blackbox/testdata/installed-transformer-output/qbs668.qbs b/tests/auto/blackbox/testdata/installed-transformer-output/qbs668.qbs index 99acc5585..244f80abe 100644 --- a/tests/auto/blackbox/testdata/installed-transformer-output/qbs668.qbs +++ b/tests/auto/blackbox/testdata/installed-transformer-output/qbs668.qbs @@ -4,6 +4,7 @@ import qbs.TextFile Product { name: "install-test" type: ["text"] + qbs.installPrefix: "" Group { qbs.install: true qbs.installDir: "textfiles" diff --git a/tests/auto/blackbox/testdata/invalid-install-dir/invalid-install-dir.qbs b/tests/auto/blackbox/testdata/invalid-install-dir/invalid-install-dir.qbs index f4a608904..ffa92dabb 100644 --- a/tests/auto/blackbox/testdata/invalid-install-dir/invalid-install-dir.qbs +++ b/tests/auto/blackbox/testdata/invalid-install-dir/invalid-install-dir.qbs @@ -3,9 +3,7 @@ import qbs CppApplication { consoleApplication: true files: ["main.cpp"] - Group { - fileTagsFilter: ["application"] - qbs.install: true - qbs.installDir: "../whatever" - } + qbs.installPrefix: "" + install: true + installDir: "../whatever" } diff --git a/tests/auto/blackbox/testdata/linkerscripts/linkerscripts.qbs b/tests/auto/blackbox/testdata/linkerscripts/linkerscripts.qbs index 6d94da346..1601baf3c 100644 --- a/tests/auto/blackbox/testdata/linkerscripts/linkerscripts.qbs +++ b/tests/auto/blackbox/testdata/linkerscripts/linkerscripts.qbs @@ -23,8 +23,7 @@ DynamicLibrary { } } - Group { - fileTagsFilter: ["dynamiclibrary"] - qbs.install: true - } + qbs.installPrefix: "" + install: true + installDir: "" } diff --git a/tests/auto/blackbox/testdata/makefile-generator/app.qbs b/tests/auto/blackbox/testdata/makefile-generator/app.qbs index 103f71ecf..c0f423d5c 100644 --- a/tests/auto/blackbox/testdata/makefile-generator/app.qbs +++ b/tests/auto/blackbox/testdata/makefile-generator/app.qbs @@ -14,9 +14,5 @@ CppApplication { files: "main.cpp" qbs.installPrefix: "/usr/local" - Group { - fileTagsFilter: "application" - qbs.install: true - qbs.installDir: "bin" - } + install: true } diff --git a/tests/auto/blackbox/testdata/new-output-artifact/new-output-artifact.qbs b/tests/auto/blackbox/testdata/new-output-artifact/new-output-artifact.qbs index 10e0e4305..fa70aee8d 100644 --- a/tests/auto/blackbox/testdata/new-output-artifact/new-output-artifact.qbs +++ b/tests/auto/blackbox/testdata/new-output-artifact/new-output-artifact.qbs @@ -9,6 +9,7 @@ Product { files: ["input.txt"] fileTags: ["input"] } + qbs.installPrefix: "" Group { fileTagsFilter: product.type qbs.install: true diff --git a/tests/auto/blackbox/testdata/recursive_renaming/recursive_renaming.qbs b/tests/auto/blackbox/testdata/recursive_renaming/recursive_renaming.qbs index 5c2c4ec48..0ed6fa72f 100644 --- a/tests/auto/blackbox/testdata/recursive_renaming/recursive_renaming.qbs +++ b/tests/auto/blackbox/testdata/recursive_renaming/recursive_renaming.qbs @@ -1,6 +1,7 @@ import qbs 1.0 Product { + qbs.installPrefix: "" Group { qbs.install: true qbs.installSourceBase: "." diff --git a/tests/auto/blackbox/testdata/recursive_wildcards/recursive_wildcards.qbs b/tests/auto/blackbox/testdata/recursive_wildcards/recursive_wildcards.qbs index 703a65e0e..dc993ae23 100644 --- a/tests/auto/blackbox/testdata/recursive_wildcards/recursive_wildcards.qbs +++ b/tests/auto/blackbox/testdata/recursive_wildcards/recursive_wildcards.qbs @@ -3,6 +3,7 @@ import qbs.TextFile Product { type: ["txt.out"] + qbs.installPrefix: "" Group { files: "dir/**" qbs.install: true diff --git a/tests/auto/blackbox/testdata/response-files/response-files.qbs b/tests/auto/blackbox/testdata/response-files/response-files.qbs index 73eb720fe..1e1e75314 100644 --- a/tests/auto/blackbox/testdata/response-files/response-files.qbs +++ b/tests/auto/blackbox/testdata/response-files/response-files.qbs @@ -13,6 +13,7 @@ Project { type: ["text"] Depends { name: "cpp" } Depends { name: "cat-response-file" } + qbs.installPrefix: "" Group { fileTagsFilter: ["text"] qbs.install: true diff --git a/tests/auto/blackbox/testdata/setup-run-environment/setup-run-environment.qbs b/tests/auto/blackbox/testdata/setup-run-environment/setup-run-environment.qbs index 9f841effd..8a5312d75 100644 --- a/tests/auto/blackbox/testdata/setup-run-environment/setup-run-environment.qbs +++ b/tests/auto/blackbox/testdata/setup-run-environment/setup-run-environment.qbs @@ -8,12 +8,11 @@ Project { files: ["lib1.cpp"] - Group { - condition: !qbs.targetOS.contains("darwin") - fileTagsFilter: ["dynamiclibrary", "dynamiclibrary_import"] - qbs.install: true - qbs.installDir: "/lib1" - } + install: !qbs.targetOS.contains("darwin") + installImportLib: true + installDir: "lib1" + importLibInstallDir: installDir + Group { condition: qbs.targetOS.contains("darwin") fileTagsFilter: ["bundle.content"] @@ -41,16 +40,15 @@ Project { files: ["lib3.cpp"] - Properties { + Properties { condition: qbs.targetOS.contains("darwin") bundle.isBundle: false } - Group { - fileTagsFilter: ["dynamiclibrary", "dynamiclibrary_import"] - qbs.install: true - qbs.installDir: "/lib3" - } + install: true + installImportLib: true + installDir: "lib3" + importLibInstallDir: installDir } DynamicLibrary { // Non-dependency, referred to by name @@ -59,16 +57,15 @@ Project { files: ["lib4.cpp"] - Properties { + Properties { condition: qbs.targetOS.contains("darwin") bundle.isBundle: false } - Group { - fileTagsFilter: ["dynamiclibrary", "dynamiclibrary_import"] - qbs.install: true - qbs.installDir: "/lib4" - } + install: true + installImportLib: true + installDir: "lib4" + importLibInstallDir: installDir } DynamicLibrary { // Recursive product dependency diff --git a/tests/auto/blackbox/testdata/system-run-paths/system-run-paths.qbs b/tests/auto/blackbox/testdata/system-run-paths/system-run-paths.qbs index 81778d6f7..7f9fa3000 100644 --- a/tests/auto/blackbox/testdata/system-run-paths/system-run-paths.qbs +++ b/tests/auto/blackbox/testdata/system-run-paths/system-run-paths.qbs @@ -6,6 +6,7 @@ Project { name: "theLib" type: ["dynamiclibrary"] Depends { name: "cpp" } + qbs.installPrefix: "" Group { fileTagsFilter: product.type qbs.install: true diff --git a/tests/auto/blackbox/testdata/variant-suffix/variant-suffix.qbs b/tests/auto/blackbox/testdata/variant-suffix/variant-suffix.qbs index b919f84eb..a1dff378e 100644 --- a/tests/auto/blackbox/testdata/variant-suffix/variant-suffix.qbs +++ b/tests/auto/blackbox/testdata/variant-suffix/variant-suffix.qbs @@ -22,11 +22,8 @@ StaticLibrary { cpp.staticLibraryPrefix: "lib" cpp.staticLibrarySuffix: ".ext" - Group { - fileTagsFilter: ["staticlibrary"] - qbs.install: true - qbs.installDir: "lib" - } + qbs.installPrefix: "" + install: true Depends { name: "cpp" } diff --git a/tests/auto/blackbox/testdata/versionscript/versionscript.qbs b/tests/auto/blackbox/testdata/versionscript/versionscript.qbs index 24035a84d..5af798f5f 100644 --- a/tests/auto/blackbox/testdata/versionscript/versionscript.qbs +++ b/tests/auto/blackbox/testdata/versionscript/versionscript.qbs @@ -23,8 +23,7 @@ DynamicLibrary { } } - Group { - fileTagsFilter: ["dynamiclibrary"] - qbs.install: true - } + qbs.installPrefix: "" + install: true + installDir: "" } diff --git a/tests/auto/blackbox/testdata/wildcard_renaming/wildcard_renaming.qbs b/tests/auto/blackbox/testdata/wildcard_renaming/wildcard_renaming.qbs index 4cb2c071c..68043f991 100644 --- a/tests/auto/blackbox/testdata/wildcard_renaming/wildcard_renaming.qbs +++ b/tests/auto/blackbox/testdata/wildcard_renaming/wildcard_renaming.qbs @@ -1,6 +1,7 @@ import qbs 1.0 Product { + qbs.installPrefix: "" Group { qbs.install: true files: "*" diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp index 8da721f28..3c03c6b3e 100644 --- a/tests/auto/blackbox/tst_blackbox.cpp +++ b/tests/auto/blackbox/tst_blackbox.cpp @@ -3443,6 +3443,59 @@ void TestBlackbox::installedTransformerOutput() QVERIFY2(QFile::exists(installedFilePath), qPrintable(installedFilePath)); } +void TestBlackbox::installLocations_data() +{ + QTest::addColumn<QString>("binDir"); + QTest::addColumn<QString>("dllDir"); + QTest::addColumn<QString>("libDir"); + QTest::newRow("explicit values") << QString("bindir") << QString("dlldir") << QString("libdir"); + QTest::newRow("default values") << QString() << QString() << QString(); +} + +void TestBlackbox::installLocations() +{ + QDir::setCurrent(testDataDir + "/install-locations"); + QFETCH(QString, binDir); + QFETCH(QString, dllDir); + QFETCH(QString, libDir); + QbsRunParameters params("resolve"); + if (!binDir.isEmpty()) + params.arguments.push_back("products.theapp.installDir:" + binDir); + if (!dllDir.isEmpty()) + params.arguments.push_back("products.thelib.installDir:" + dllDir); + if (!libDir.isEmpty()) + params.arguments.push_back("products.thelib.importLibInstallDir:" + libDir); + QCOMPARE(runQbs(params), 0); + const bool isWindows = m_qbsStdout.contains("is windows"); + const bool isMac = m_qbsStdout.contains("is mac"); + const bool isUnix = m_qbsStdout.contains("is unix"); + QVERIFY(isWindows || isMac || isUnix); + QCOMPARE(runQbs(QbsRunParameters(QStringList("--clean-install-root"))), 0); + const QString dllFileName = isWindows ? "thelib.dll" : isMac ? "thelib" : "libthelib.so"; + const QString appFileName = isWindows ? "theapp.exe" : "theapp"; + if (binDir.isEmpty()) + binDir = isMac ? "/Applications" : "/bin"; + if (dllDir.isEmpty()) + dllDir = isMac ? "/Library/Frameworks" : isWindows ? "/bin" : "/lib"; + if (libDir.isEmpty()) + libDir = "/lib"; + if (isMac) { + binDir += "/theapp.app/Contents/MacOS"; + dllDir += "/thelib.framework"; + } + const QString installRoot = QDir::currentPath() + "/default/install-root"; + const QString installPrefix = isWindows ? QString() : "/usr/local"; + const QString fullInstallPrefix = installRoot + '/' + installPrefix + '/'; + const QString appFilePath = fullInstallPrefix + binDir + '/' + appFileName; + QVERIFY2(QFile::exists(appFilePath), qPrintable(appFilePath)); + const QString dllFilePath = fullInstallPrefix + dllDir + '/' + dllFileName; + QVERIFY2(QFile::exists(dllFilePath), qPrintable(dllFilePath)); + if (isWindows) { + const QString libFilePath = fullInstallPrefix + libDir + "/thelib.lib"; + QVERIFY2(QFile::exists(libFilePath), qPrintable(libFilePath)); + } +} + void TestBlackbox::inputsFromDependencies() { QDir::setCurrent(testDataDir + "/inputs-from-dependencies"); @@ -3847,7 +3900,7 @@ void TestBlackbox::symbolLinkMode() QbsRunParameters params; params.command = "run"; const QStringList commonArgs{"-p", "driver", "--setup-run-env-config", - "ignore-lib-dependencies"}; + "ignore-lib-dependencies", "qbs.installPrefix:''"}; rmDirR(relativeBuildDir()); params.arguments = QStringList() << commonArgs << "project.shouldInstallLibrary:true"; @@ -3879,7 +3932,7 @@ void TestBlackbox::linkerMode() QSKIP("only applies on Unix"); QDir::setCurrent(testDataDir + "/linkerMode"); - QCOMPARE(runQbs(), 0); + QCOMPARE(runQbs(QbsRunParameters(QStringList("qbs.installPrefix:''"))), 0); auto testCondition = [&](const QString &lang, const std::function<bool(const QByteArray &)> &condition) { diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h index 33c365fda..af95e12a6 100644 --- a/tests/auto/blackbox/tst_blackbox.h +++ b/tests/auto/blackbox/tst_blackbox.h @@ -133,6 +133,8 @@ private slots: void installDuplicatesNoError(); void installedSourceFiles(); void installedTransformerOutput(); + void installLocations_data(); + void installLocations(); void installPackage(); void installRootFromProjectFile(); void installTree(); diff --git a/tests/auto/blackbox/tst_blackboxapple.cpp b/tests/auto/blackbox/tst_blackboxapple.cpp index 6fc526cd8..64aca99f1 100644 --- a/tests/auto/blackbox/tst_blackboxapple.cpp +++ b/tests/auto/blackbox/tst_blackboxapple.cpp @@ -77,7 +77,7 @@ void TestBlackboxApple::initTestCase() void TestBlackboxApple::appleMultiConfig() { QDir::setCurrent(testDataDir + "/apple-multiconfig"); - QCOMPARE(runQbs(), 0); + QCOMPARE(runQbs(QbsRunParameters(QStringList{"qbs.installPrefix:''"})), 0); QVERIFY(QFileInfo2(defaultInstallRoot + "/singleapp.app/Contents/MacOS/singleapp").isExecutable()); QVERIFY(QFileInfo2(defaultInstallRoot + "/singleapp.app/Contents/Info.plist").isRegularFile()); @@ -285,7 +285,7 @@ void TestBlackboxApple::bundleStructure() QFETCH(bool, isShallow); QDir::setCurrent(testDataDir + "/bundle-structure"); - QbsRunParameters params; + QbsRunParameters params(QStringList{"qbs.installPrefix:''"}); params.arguments << "project.buildableProducts:" + productName; if (isShallow) { // Coerce shallow bundles - don't set bundle.isShallow directly because we want to test the @@ -624,7 +624,7 @@ void TestBlackboxApple::embedInfoPlist() { QDir::setCurrent(testDataDir + QLatin1String("/embedInfoPlist")); - QbsRunParameters params; + QbsRunParameters params(QStringList{"qbs.installPrefix:''"}); QCOMPARE(runQbs(params), 0); QVERIFY(!getEmbeddedBinaryPlist(defaultInstallRoot + "/app").isEmpty()); |