aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/main.yml6
-rw-r--r--VERSION2
-rw-r--r--doc/qbs-hugo.qdocconf3
-rw-r--r--docker-compose.yml14
-rw-r--r--docker/focal/test-android.Dockerfile10
-rw-r--r--share/qbs/module-providers/Qt/setup-qt.js29
-rw-r--r--share/qbs/modules/Android/sdk/sdk.qbs2
-rw-r--r--share/qbs/modules/bundle/MacOSX-Package-Types.xcspec943
-rw-r--r--share/qbs/modules/bundle/MacOSX-Product-Types.xcspec1345
-rw-r--r--src/app/config/configcommand.h2
-rw-r--r--src/app/config/configcommandexecutor.cpp12
-rw-r--r--src/app/config/configcommandlineparser.cpp31
m---------src/shared/qtscript0
-rw-r--r--tests/auto/blackbox/testdata-android/qt-app/TestQt6.java54
-rw-r--r--tests/auto/blackbox/testdata-android/qt-app/qt-app.qbs11
-rw-r--r--tests/auto/blackbox/testdata-windows/innosetup/inc/qbsinc.iss (renamed from tests/auto/blackbox/testdata/innosetup/inc/qbsinc.iss)0
-rw-r--r--tests/auto/blackbox/testdata-windows/innosetup/innosetup.qbs (renamed from tests/auto/blackbox/testdata/innosetup/innosetup.qbs)0
-rw-r--r--tests/auto/blackbox/testdata-windows/innosetup/test.iss (renamed from tests/auto/blackbox/testdata/innosetup/test.iss)0
-rw-r--r--tests/auto/blackbox/testdata-windows/innosetupDependencies/innosetupDependencies.qbs (renamed from tests/auto/blackbox/testdata/innosetupDependencies/innosetupDependencies.qbs)0
-rw-r--r--tests/auto/blackbox/testdata-windows/innosetupDependencies/main.c (renamed from tests/auto/blackbox/testdata/innosetupDependencies/main.c)0
-rw-r--r--tests/auto/blackbox/testdata-windows/innosetupDependencies/test.iss (renamed from tests/auto/blackbox/testdata/innosetupDependencies/test.iss)0
-rw-r--r--tests/auto/blackbox/testdata-windows/wix/ExampleScript.bat (renamed from tests/auto/blackbox/testdata/wix/ExampleScript.bat)0
-rw-r--r--tests/auto/blackbox/testdata-windows/wix/QbsBootstrapper.wxs (renamed from tests/auto/blackbox/testdata/wix/QbsBootstrapper.wxs)0
-rw-r--r--tests/auto/blackbox/testdata-windows/wix/QbsSetup.wxs (renamed from tests/auto/blackbox/testdata/wix/QbsSetup.wxs)0
-rw-r--r--tests/auto/blackbox/testdata-windows/wix/Qt.wxs (renamed from tests/auto/blackbox/testdata/wix/Qt.wxs)0
-rw-r--r--tests/auto/blackbox/testdata-windows/wix/WiXInstallers.qbs (renamed from tests/auto/blackbox/testdata/wix/WiXInstallers.qbs)0
-rw-r--r--tests/auto/blackbox/testdata-windows/wix/de.wxl (renamed from tests/auto/blackbox/testdata/wix/de.wxl)0
-rw-r--r--tests/auto/blackbox/testdata-windows/wixDependencies/QbsSetup.wxs (renamed from tests/auto/blackbox/testdata/wixDependencies/QbsSetup.wxs)0
-rw-r--r--tests/auto/blackbox/testdata-windows/wixDependencies/main.c (renamed from tests/auto/blackbox/testdata/wixDependencies/main.c)0
-rw-r--r--tests/auto/blackbox/testdata-windows/wixDependencies/wixDependencies.qbs (renamed from tests/auto/blackbox/testdata/wixDependencies/wixDependencies.qbs)0
-rw-r--r--tests/auto/blackbox/tst_blackbox.cpp190
-rw-r--r--tests/auto/blackbox/tst_blackbox.h6
-rw-r--r--tests/auto/blackbox/tst_blackboxandroid.cpp4
-rw-r--r--tests/auto/blackbox/tst_blackboxwindows.cpp133
-rw-r--r--tests/auto/blackbox/tst_blackboxwindows.h4
35 files changed, 1638 insertions, 1163 deletions
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 953f19949..98c1a8b11 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -264,6 +264,12 @@ jobs:
script: './scripts/test-qt-for-android.sh',
}
- {
+ name: 'Run Android tests (Qt 6.0.0)',
+ image: 'focal-android-600',
+ profile: '',
+ script: './scripts/test-qt-for-android.sh',
+ }
+ - {
name: 'Run Linux tests (Qt 4.8.7)',
image: 'focal-qt4',
profile: '',
diff --git a/VERSION b/VERSION
index 815d5ca06..398935591 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.19.0
+1.20.0
diff --git a/doc/qbs-hugo.qdocconf b/doc/qbs-hugo.qdocconf
new file mode 100644
index 000000000..cc8cdb532
--- /dev/null
+++ b/doc/qbs-hugo.qdocconf
@@ -0,0 +1,3 @@
+include(config/qbs-project.qdocconf)
+
+syntaxhighlighting = true
diff --git a/docker-compose.yml b/docker-compose.yml
index 2df603fc5..13b4f6a2f 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -21,24 +21,24 @@ services:
focal:
<< : *linux
hostname: focal
- image: ${DOCKER_USER:-qbsbuild}/qbsdev:focal-5.15.2_1.17.1-1
+ image: ${DOCKER_USER:-qbsbuild}/qbsdev:focal-5.15.2_1.18.2-0
build:
dockerfile: docker/focal/Dockerfile
context: .
args:
QT_VERSION: 5.15.2
- QTCREATOR_VERSION: 4.13.3
+ QTCREATOR_VERSION: 4.14.2
focal-qt6:
<< : *linux
hostname: focal-qt6
- image: ${DOCKER_USER:-qbsbuild}/qbsdev:focal-qt6-6.0.2_1.18.1-0
+ image: ${DOCKER_USER:-qbsbuild}/qbsdev:focal-qt6-6.0.2_1.18.2-0
build:
dockerfile: docker/focal/Dockerfile
context: .
args:
QT_VERSION: 6.0.2
- QTCREATOR_VERSION: 4.14.1
+ QTCREATOR_VERSION: 4.14.2
focal-android-513:
<< : *linux
@@ -73,7 +73,7 @@ services:
focal-android-600:
<< : *linux
hostname: focal-android
- image: ${DOCKER_USER:-qbsbuild}/qbsdev:focal-android-6.0.0-1
+ image: ${DOCKER_USER:-qbsbuild}/qbsdev:focal-android-6.0.0-2
build:
dockerfile: docker/focal/test-android.Dockerfile
context: .
@@ -97,13 +97,13 @@ services:
context: .
windows:
- image: ${DOCKER_USER:-qbsbuild}/qbsdev:windowsservercore-5.15.0_1.16.0-0
+ image: ${DOCKER_USER:-qbsbuild}/qbsdev:windowsservercore-5.15.0_1.18.2-0
build:
dockerfile: docker/windowsservercore/Dockerfile
context: .
args:
QT_VERSION: 5.15.0
- QBS_VERSION: 1.16.0
+ QBS_VERSION: 1.18.2
working_dir: 'C:/qbs'
environment:
- BUILD_OPTIONS
diff --git a/docker/focal/test-android.Dockerfile b/docker/focal/test-android.Dockerfile
index 72c84ca0c..11c4a5757 100644
--- a/docker/focal/test-android.Dockerfile
+++ b/docker/focal/test-android.Dockerfile
@@ -72,8 +72,14 @@ ARG ANDROID_PLATFORM="android-29"
ARG BUILD_TOOLS="29.0.2"
RUN yes | sdkmanager "--sdk_root=${ANDROID_HOME}" --verbose --licenses && \
sdkmanager "--sdk_root=${ANDROID_HOME}" --update && \
- sdkmanager "--sdk_root=${ANDROID_HOME}" "platforms;${ANDROID_PLATFORM}" "build-tools;${BUILD_TOOLS}" "platform-tools" "tools" "ndk-bundle" && \
- /usr/lib/jvm/java-8-openjdk-amd64/bin/keytool -genkey -keystore /home/${USER_NAME}/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname 'CN=Android Debug,O=Android,C=US'
+ sdkmanager "--sdk_root=${ANDROID_HOME}" "platforms;${ANDROID_PLATFORM}"
+
+RUN yes | sdkmanager "--sdk_root=${ANDROID_HOME}" "build-tools;${BUILD_TOOLS}"
+RUN yes | sdkmanager "--sdk_root=${ANDROID_HOME}" "platform-tools"
+RUN yes | sdkmanager "--sdk_root=${ANDROID_HOME}" "tools"
+RUN yes | sdkmanager "--sdk_root=${ANDROID_HOME}" "ndk-bundle"
+
+RUN /usr/lib/jvm/java-8-openjdk-amd64/bin/keytool -genkey -keystore /home/${USER_NAME}/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname 'CN=Android Debug,O=Android,C=US'
# Install ndk samples in ${ANDROID_NDK_ROOT}/samples
RUN cd ${ANDROID_NDK_ROOT} && \
diff --git a/share/qbs/module-providers/Qt/setup-qt.js b/share/qbs/module-providers/Qt/setup-qt.js
index 5cf1bcb44..7785bc5dc 100644
--- a/share/qbs/module-providers/Qt/setup-qt.js
+++ b/share/qbs/module-providers/Qt/setup-qt.js
@@ -268,8 +268,10 @@ function getQtProperties(qmakeFilePath, qbs) {
(pathQueryValue(queryResult, "QT_INSTALL_DATA"), "mkspecs");
}
- if (Utilities.versionCompare(qtProps.qtVersion, "6") >= 0)
- qtProps.libExecPath = pathQueryValue(queryResult, "QT_INSTALL_LIBEXECS");
+ if (Utilities.versionCompare(qtProps.qtVersion, "6") >= 0) {
+ qtProps.libExecPath = pathQueryValue(queryResult, "QT_HOST_LIBEXECS")
+ || pathQueryValue(queryResult, "QT_INSTALL_LIBEXECS");
+ }
if (!File.exists(qtProps.mkspecBasePath))
throw "Cannot extract the mkspecs directory.";
@@ -567,11 +569,15 @@ function libraryBaseName(modInfo, qtProps, debugBuild) {
|| modInfo.name === "DataVisualization"
|| modInfo.name === "Phonon";
- var libName = !modInfo.modulePrefix && !libNameBroken ? "Qt" : modInfo.modulePrefix;
- if (qtProps.qtMajorVersion >= 5 && !isFramework(modInfo, qtProps) && !libNameBroken)
- libName += qtProps.qtMajorVersion;
+ var libName = "";
+ if (!modInfo.isExternal) {
+ libName += !modInfo.modulePrefix && !libNameBroken ? "Qt" : modInfo.modulePrefix;
+ if (qtProps.qtMajorVersion >= 5 && !isFramework(modInfo, qtProps) && !libNameBroken)
+ libName += qtProps.qtMajorVersion;
+ }
libName += moduleNameWithoutPrefix(modInfo);
- libName += qtProps.qtLibInfix;
+ if (!modInfo.isExternal)
+ libName += qtProps.qtLibInfix;
return libBaseName(modInfo, libName, debugBuild, qtProps);
}
@@ -967,7 +973,8 @@ function extractPaths(rhs, filePath) {
if (endIndex === -1)
endIndex = rhs.length;
}
- paths.push(FileInfo.cleanPath(rhs.slice(startIndex, endIndex)));
+ paths.push(FileInfo.cleanPath(rhs.slice(startIndex, endIndex)
+ .replace("$$PWD", FileInfo.path(filePath))));
startIndex = endIndex + 1;
}
return paths;
@@ -1061,17 +1068,21 @@ function allQt5Modules(qtProps, androidAbi) {
for (var i = 0; i < modulePriFiles.length; ++i) {
var priFileName = modulePriFiles[i];
var priFilePath = FileInfo.joinPaths(modulesDir, priFileName);
+ var genericFileNamePrefix = "qt_";
var moduleFileNamePrefix = "qt_lib_";
var pluginFileNamePrefix = "qt_plugin_";
var moduleFileNameSuffix = ".pri";
var fileHasPluginPrefix = priFileName.startsWith(pluginFileNamePrefix);
- if (!fileHasPluginPrefix && (!priFileName.startsWith(moduleFileNamePrefix))
+ if (!fileHasPluginPrefix && !priFileName.startsWith(genericFileNamePrefix)
|| !priFileName.endsWith(moduleFileNameSuffix)) {
continue;
}
var moduleInfo = makeQtModuleInfo();
moduleInfo.isPlugin = fileHasPluginPrefix;
- var fileNamePrefix = moduleInfo.isPlugin ? pluginFileNamePrefix : moduleFileNamePrefix;
+ moduleInfo.isExternal = !moduleInfo.isPlugin
+ && !priFileName.startsWith(moduleFileNamePrefix);
+ var fileNamePrefix = moduleInfo.isPlugin ? pluginFileNamePrefix : moduleInfo.isExternal
+ ? genericFileNamePrefix : moduleFileNamePrefix;
moduleInfo.qbsName = priFileName.slice(fileNamePrefix.length, -moduleFileNameSuffix.length);
if (moduleInfo.isPlugin) {
moduleInfo.name = moduleInfo.qbsName;
diff --git a/share/qbs/modules/Android/sdk/sdk.qbs b/share/qbs/modules/Android/sdk/sdk.qbs
index cae5fc2e5..76f84dca6 100644
--- a/share/qbs/modules/Android/sdk/sdk.qbs
+++ b/share/qbs/modules/Android/sdk/sdk.qbs
@@ -150,7 +150,7 @@ Module {
}
property path buildToolsDir: FileInfo.joinPaths(sdkDir, "build-tools", buildToolsVersion)
- property string aaptName: "aapt"
+ property string aaptName: "aapt2"
PropertyOptions {
name: "aaptName"
allowedValues: ["aapt", "aapt2"]
diff --git a/share/qbs/modules/bundle/MacOSX-Package-Types.xcspec b/share/qbs/modules/bundle/MacOSX-Package-Types.xcspec
index b36353fc7..23f094641 100644
--- a/share/qbs/modules/bundle/MacOSX-Package-Types.xcspec
+++ b/share/qbs/modules/bundle/MacOSX-Package-Types.xcspec
@@ -1,462 +1,533 @@
-[
- {
- "DefaultBuildSettings" : {
- "EXECUTABLE_PATH" : "$(EXECUTABLE_NAME)",
- "EXECUTABLE_PREFIX" : "",
- "EXECUTABLE_SUFFIX" : "",
- "EXECUTABLE_NAME" : "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)"
- },
- "Identifier" : "com.apple.package-type.mach-o-executable",
- "Type" : "PackageType",
- "Name" : "Mach-O Executable",
- "Description" : "Mach-O executable",
- "ProductReference" : {
- "FileType" : "compiled.mach-o.executable",
- "Name" : "$(EXECUTABLE_NAME)",
- "IsLaunchable" : "YES"
- }
- },
- {
- "DefaultBuildSettings" : {
- "EXECUTABLE_PATH" : "$(EXECUTABLE_NAME)",
- "EXECUTABLE_PREFIX" : "",
- "EXECUTABLE_SUFFIX" : "",
- "EXECUTABLE_NAME" : "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)"
- },
- "Identifier" : "com.apple.package-type.mach-o-objfile",
- "Type" : "PackageType",
- "Name" : "Mach-O Object File",
- "Description" : "Mach-O Object File",
- "ProductReference" : {
- "FileType" : "compiled.mach-o.objfile",
- "Name" : "$(EXECUTABLE_NAME)",
- "IsLaunchable" : "NO"
- }
- },
- {
- "DefaultBuildSettings" : {
- "EXECUTABLE_PATH" : "$(EXECUTABLE_NAME)",
- "EXECUTABLE_PREFIX" : "",
- "EXECUTABLE_SUFFIX" : "",
- "EXECUTABLE_NAME" : "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)"
- },
- "Identifier" : "com.apple.package-type.mach-o-dylib",
- "Type" : "PackageType",
- "Name" : "Mach-O Dynamic Library",
- "Description" : "Mach-O dynamic library",
- "ProductReference" : {
- "FileType" : "compiled.mach-o.dylib",
- "Name" : "$(EXECUTABLE_NAME)",
- "IsLaunchable" : "NO"
- }
- },
- {
- "DefaultBuildSettings" : {
- "EXECUTABLE_PATH" : "$(EXECUTABLE_NAME)",
- "EXECUTABLE_PREFIX" : "lib",
- "EXECUTABLE_SUFFIX" : ".a",
- "EXECUTABLE_NAME" : "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)"
- },
- "Identifier" : "com.apple.package-type.static-library",
- "Type" : "PackageType",
- "Name" : "Mach-O Static Library",
- "Description" : "Mach-O static library",
- "ProductReference" : {
- "FileType" : "archive.ar",
- "Name" : "$(EXECUTABLE_NAME)",
- "IsLaunchable" : "NO"
- }
- },
- {
- "DefaultBuildSettings" : {
- "EXECUTABLE_PATH" : "$(EXECUTABLE_NAME)",
- "EXECUTABLE_PREFIX" : "",
- "EXECUTABLE_SUFFIX" : ".dylib",
- "EXECUTABLE_NAME" : "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)"
- },
- "Identifier" : "com.apple.package-type.mach-o-bundle",
- "Type" : "PackageType",
- "Name" : "Mach-O Loadable",
- "Description" : "Mach-O loadable",
- "ProductReference" : {
- "FileType" : "compiled.mach-o.bundle",
- "Name" : "$(EXECUTABLE_NAME)",
- "IsLaunchable" : "NO"
- }
- },
- {
- "DefaultBuildSettings" : {
- "PUBLIC_HEADERS_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)\/Headers",
- "EXECUTABLE_NAME" : "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)",
- "EXECUTABLE_PREFIX" : "",
- "PLUGINS_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)\/PlugIns",
- "DOCUMENTATION_FOLDER_PATH" : "$(LOCALIZED_RESOURCES_FOLDER_PATH)\/Documentation",
- "EXECUTABLES_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)\/Executables",
- "INFOSTRINGS_PATH" : "$(LOCALIZED_RESOURCES_FOLDER_PATH)\/InfoPlist.strings",
- "INFOPLIST_PATH" : "$(CONTENTS_FOLDER_PATH)\/Info.plist",
- "EXECUTABLE_SUFFIX" : "",
- "VERSIONPLIST_PATH" : "$(CONTENTS_FOLDER_PATH)\/version.plist",
- "SHARED_SUPPORT_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)\/SharedSupport",
- "EXECUTABLE_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)\/MacOS",
- "PBDEVELOPMENTPLIST_PATH" : "$(CONTENTS_FOLDER_PATH)\/pbdevelopment.plist",
- "FRAMEWORKS_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)\/Frameworks",
- "LOCALIZED_RESOURCES_FOLDER_PATH" : "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)\/$(DEVELOPMENT_LANGUAGE).lproj",
- "SCRIPTS_FOLDER_PATH" : "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)\/Scripts",
- "WRAPPER_PREFIX" : "",
- "PRIVATE_HEADERS_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)\/PrivateHeaders",
- "CONTENTS_FOLDER_PATH" : "$(WRAPPER_NAME)\/Contents",
- "WRAPPER_NAME" : "$(WRAPPER_PREFIX)$(PRODUCT_NAME)$(WRAPPER_SUFFIX)",
- "PKGINFO_PATH" : "$(CONTENTS_FOLDER_PATH)\/PkgInfo",
- "EXECUTABLE_PATH" : "$(EXECUTABLE_FOLDER_PATH)\/$(EXECUTABLE_NAME)",
- "UNLOCALIZED_RESOURCES_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)\/Resources",
- "JAVA_FOLDER_PATH" : "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)\/Java",
- "SHARED_FRAMEWORKS_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)\/SharedFrameworks",
- "WRAPPER_SUFFIX" : ".bundle"
- },
- "Identifier" : "com.apple.package-type.wrapper",
- "Type" : "PackageType",
- "Name" : "Wrapper",
- "Description" : "Wrapper",
- "ProductReference" : {
- "FileType" : "wrapper.cfbundle",
- "Name" : "$(WRAPPER_NAME)",
- "IsLaunchable" : "NO"
- }
- },
- {
- "ProductReference" : {
- "FileType" : "wrapper.cfbundle",
- "Name" : "$(WRAPPER_NAME)",
- "IsLaunchable" : "NO"
- },
- "DefaultBuildSettings" : {
- "CONTENTS_FOLDER_PATH" : "$(WRAPPER_NAME)",
- "UNLOCALIZED_RESOURCES_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)",
- "SHALLOW_BUNDLE" : "YES",
- "EXECUTABLE_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)"
- },
- "Type" : "PackageType",
- "BasedOn" : "com.apple.package-type.wrapper",
- "Name" : "Wrapper (Shallow)",
- "Identifier" : "com.apple.package-type.wrapper.shallow",
- "Description" : "Shallow Wrapper"
- },
- {
- "ProductReference" : {
- "FileType" : "wrapper.application",
- "Name" : "$(WRAPPER_NAME)",
- "IsLaunchable" : "YES"
- },
- "DefaultBuildSettings" : {
- "GENERATE_PKGINFO_FILE" : "YES"
- },
- "Type" : "PackageType",
- "BasedOn" : "com.apple.package-type.wrapper",
- "Name" : "Application Wrapper",
- "Identifier" : "com.apple.package-type.wrapper.application",
- "Description" : "Application Wrapper"
- },
- {
- "ProductReference" : {
- "FileType" : "wrapper.application",
- "Name" : "$(WRAPPER_NAME)",
- "IsLaunchable" : "YES"
- },
- "DefaultBuildSettings" : {
- "UNLOCALIZED_RESOURCES_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)",
- "SHALLOW_BUNDLE" : "YES",
- "GENERATE_PKGINFO_FILE" : "YES"
- },
- "Type" : "PackageType",
- "BasedOn" : "com.apple.package-type.wrapper.shallow",
- "Name" : "Application Wrapper (Shallow)",
- "Identifier" : "com.apple.package-type.wrapper.application.shallow",
- "Description" : "Shallow Application Wrapper"
- },
- {
- "ProductReference" : {
- "FileType" : "wrapper.cfbundle",
- "Name" : "$(WRAPPER_NAME)",
- "IsLaunchable" : "NO"
- },
- "DefaultBuildSettings" : {
- "PRIVATE_HEADERS_FOLDER_PATH" : "$(KEXT_FRAMEWORK)\/Contents\/PrivateHeaders\/$(KEXT_FAMILY_NAME)",
- "PUBLIC_HEADERS_FOLDER_PATH" : "$(KEXT_FRAMEWORK)\/Contents\/Headers\/$(KEXT_FAMILY_NAME)"
+/**
+ MacOSX Package Types.xcspec
+
+ Copyright (c) 1999-2015 Apple Inc. All rights reserved.
+
+ Package type specifications in the Mac OS X platform.
+*/
+(
+ // Mach-O executable
+ { Type = PackageType;
+ Identifier = com.apple.package-type.mach-o-executable;
+ Name = "Mach-O Executable";
+ Description = "Mach-O executable";
+ DefaultBuildSettings = {
+ EXECUTABLE_PREFIX = "";
+ EXECUTABLE_SUFFIX = "";
+ EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
+ EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
+ };
+ ProductReference = {
+ FileType = compiled.mach-o.executable;
+ Name = "$(EXECUTABLE_NAME)";
+ IsLaunchable = YES;
+ };
},
- "Type" : "PackageType",
- "BasedOn" : "com.apple.package-type.wrapper",
- "Name" : "Kernel Extension Wrapper",
- "Identifier" : "com.apple.package-type.wrapper.kernel-extension",
- "Description" : "Kernel Extension Wrapper"
- },
- {
- "ProductReference" : {
- "FileType" : "wrapper.cfbundle",
- "Name" : "$(WRAPPER_NAME)",
- "IsLaunchable" : "NO"
+
+ // Mach-O object file
+ { Type = PackageType;
+ Identifier = com.apple.package-type.mach-o-objfile;
+ Name = "Mach-O Object File";
+ Description = "Mach-O Object File";
+ DefaultBuildSettings = {
+ EXECUTABLE_PREFIX = "";
+ EXECUTABLE_SUFFIX = "";
+ EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
+ EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
+ };
+ ProductReference = {
+ FileType = compiled.mach-o.objfile;
+ Name = "$(EXECUTABLE_NAME)";
+ IsLaunchable = NO;
+ };
},
- "DefaultBuildSettings" : {
- "PRIVATE_HEADERS_FOLDER_PATH" : "$(KEXT_FRAMEWORK)\/Contents\/PrivateHeaders\/$(KEXT_FAMILY_NAME)",
- "PUBLIC_HEADERS_FOLDER_PATH" : "$(KEXT_FRAMEWORK)\/Contents\/Headers\/$(KEXT_FAMILY_NAME)",
- "SHALLOW_BUNDLE" : "YES"
+
+ // Mach-O dynamic library
+ { Type = PackageType;
+ Identifier = com.apple.package-type.mach-o-dylib;
+ Name = "Mach-O Dynamic Library";
+ Description = "Mach-O dynamic library";
+ DefaultBuildSettings = {
+ EXECUTABLE_PREFIX = "";
+ EXECUTABLE_SUFFIX = "";
+ EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
+ EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
+ };
+ ProductReference = {
+ FileType = compiled.mach-o.dylib;
+ Name = "$(EXECUTABLE_NAME)";
+ IsLaunchable = NO;
+ };
},
- "Type" : "PackageType",
- "BasedOn" : "com.apple.package-type.wrapper.shallow",
- "Name" : "Kernel Extension Wrapper (Shallow)",
- "Identifier" : "com.apple.package-type.wrapper.kernel-extension.shallow",
- "Description" : "Shallow Kernel Extension Wrapper"
- },
- {
- "DefaultBuildSettings" : {
- "PUBLIC_HEADERS_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)\/Headers",
- "EXECUTABLE_NAME" : "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)",
- "EXECUTABLE_PREFIX" : "",
- "PLUGINS_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)\/PlugIns",
- "DOCUMENTATION_FOLDER_PATH" : "$(LOCALIZED_RESOURCES_FOLDER_PATH)\/Documentation",
- "EXECUTABLES_FOLDER_PATH" : "$(LOCALIZED_RESOURCES_FOLDER_PATH)",
- "INFOPLIST_PATH" : "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)\/Info.plist",
- "EXECUTABLE_SUFFIX" : "",
- "INFOPLISTSTRINGS_PATH" : "$(LOCALIZED_RESOURCES_FOLDER_PATH)\/InfoPlist.strings",
- "VERSIONPLIST_PATH" : "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)\/version.plist",
- "SHARED_SUPPORT_FOLDER_PATH" : "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)",
- "EXECUTABLE_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)",
- "PBDEVELOPMENTPLIST_PATH" : "$(CONTENTS_FOLDER_PATH)\/pbdevelopment.plist",
- "VERSIONS_FOLDER_PATH" : "$(WRAPPER_NAME)\/Versions",
- "FRAMEWORKS_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)\/Frameworks",
- "CODESIGNING_FOLDER_PATH" : "$(TARGET_BUILD_DIR)\/$(CONTENTS_FOLDER_PATH)",
- "LOCALIZED_RESOURCES_FOLDER_PATH" : "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)\/$(DEVELOPMENT_LANGUAGE).lproj",
- "SCRIPTS_FOLDER_PATH" : "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)\/Scripts",
- "WRAPPER_PREFIX" : "",
- "PRIVATE_HEADERS_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)\/PrivateHeaders",
- "CURRENT_VERSION" : "Current",
- "PKGINFO_PATH" : "$(WRAPPER_NAME)\/PkgInfo",
- "WRAPPER_NAME" : "$(WRAPPER_PREFIX)$(PRODUCT_NAME)$(WRAPPER_SUFFIX)",
- "CONTENTS_FOLDER_PATH" : "$(VERSIONS_FOLDER_PATH)\/$(FRAMEWORK_VERSION)",
- "EXECUTABLE_PATH" : "$(EXECUTABLE_FOLDER_PATH)\/$(EXECUTABLE_NAME)",
- "UNLOCALIZED_RESOURCES_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)\/Resources",
- "JAVA_FOLDER_PATH" : "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)\/Java",
- "SHARED_FRAMEWORKS_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)\/SharedFrameworks",
- "WRAPPER_SUFFIX" : ".framework"
+
+ // Static library ('ar' archive containing .o files)
+ { Type = PackageType;
+ Identifier = com.apple.package-type.static-library;
+ Name = "Mach-O Static Library";
+ Description = "Mach-O static library";
+ DefaultBuildSettings = {
+ EXECUTABLE_PREFIX = "lib";
+ EXECUTABLE_SUFFIX = ".a";
+ EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
+ EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
+ };
+ ProductReference = {
+ FileType = archive.ar;
+ Name = "$(EXECUTABLE_NAME)";
+ IsLaunchable = NO;
+ };
},
- "Identifier" : "com.apple.package-type.wrapper.framework",
- "Type" : "PackageType",
- "Name" : "Framework Wrapper",
- "Description" : "Framework wrapper",
- "ProductReference" : {
- "FileType" : "wrapper.framework",
- "Name" : "$(WRAPPER_NAME)",
- "IsLaunchable" : "NO"
- }
- },
- {
- "ProductReference" : {
- "FileType" : "wrapper.framework.static",
- "Name" : "$(WRAPPER_NAME)",
- "IsLaunchable" : "NO"
+
+ // Mach-O bundle (not related to a CFBundle)
+ { Type = PackageType;
+ Identifier = com.apple.package-type.mach-o-bundle;
+ Name = "Mach-O Loadable";
+ Description = "Mach-O loadable";
+ DefaultBuildSettings = {
+ EXECUTABLE_PREFIX = "";
+ EXECUTABLE_SUFFIX = ".dylib";
+ EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
+ EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
+ };
+ ProductReference = {
+ FileType = compiled.mach-o.bundle;
+ Name = "$(EXECUTABLE_NAME)";
+ IsLaunchable = NO;
+ };
},
- "DefaultBuildSettings" : {
- "EXECUTABLE_SUFFIX" : "",
- "EXECUTABLE_NAME" : "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)",
- "EXECUTABLE_PREFIX" : ""
+
+ // CFBundle wrapper
+ { Type = PackageType;
+ Identifier = com.apple.package-type.wrapper;
+ Name = "Wrapper";
+ Description = "Wrapper";
+ DefaultBuildSettings = {
+ PRODUCT_BUNDLE_PACKAGE_TYPE = "BNDL";
+ WRAPPER_PREFIX = "";
+ WRAPPER_SUFFIX = ".bundle";
+ WRAPPER_NAME = "$(WRAPPER_PREFIX)$(PRODUCT_NAME)$(WRAPPER_SUFFIX)";
+ CONTENTS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH_SHALLOW_BUNDLE_$(SHALLOW_BUNDLE))";
+ EXECUTABLE_PREFIX = "";
+ EXECUTABLE_SUFFIX = "";
+ EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)";
+ EXECUTABLE_FOLDER_PATH = "$(EXECUTABLE_FOLDER_PATH_SHALLOW_BUNDLE_$(SHALLOW_BUNDLE))";
+ EXECUTABLE_PATH = "$(EXECUTABLE_FOLDER_PATH)/$(EXECUTABLE_NAME)";
+ INFOPLIST_PATH = "$(CONTENTS_FOLDER_PATH)/Info.plist";
+ INFOSTRINGS_PATH = "$(LOCALIZED_RESOURCES_FOLDER_PATH)/InfoPlist.strings";
+ PKGINFO_PATH = "$(CONTENTS_FOLDER_PATH)/PkgInfo";
+ PBDEVELOPMENTPLIST_PATH = "$(CONTENTS_FOLDER_PATH)/pbdevelopment.plist";
+ VERSIONPLIST_PATH = "$(CONTENTS_FOLDER_PATH)/version.plist";
+ PUBLIC_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Headers";
+ PRIVATE_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/PrivateHeaders";
+ EXECUTABLES_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Executables"; // Not the same as EXECUTABLE_FOLDER_PATH
+ FRAMEWORKS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Frameworks";
+ SHARED_FRAMEWORKS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/SharedFrameworks";
+ SHARED_SUPPORT_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/SharedSupport";
+ UNLOCALIZED_RESOURCES_FOLDER_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH_SHALLOW_BUNDLE_$(SHALLOW_BUNDLE))";
+ LOCALIZED_RESOURCES_FOLDER_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/$(DEVELOPMENT_LANGUAGE).lproj";
+ DOCUMENTATION_FOLDER_PATH = "$(LOCALIZED_RESOURCES_FOLDER_PATH)/Documentation";
+ MODULES_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Modules";
+ PLUGINS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/PlugIns";
+ SCRIPTS_FOLDER_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/Scripts";
+ JAVA_FOLDER_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/Java";
+ SYSTEM_EXTENSIONS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Library/SystemExtensions";
+
+ // Settings specific to deep bundles (macOS)
+ CONTENTS_FOLDER_PATH_SHALLOW_BUNDLE_NO = "$(WRAPPER_NAME)/Contents";
+ EXECUTABLE_FOLDER_PATH_SHALLOW_BUNDLE_NO = "$(CONTENTS_FOLDER_PATH)/MacOS";
+ UNLOCALIZED_RESOURCES_FOLDER_PATH_SHALLOW_BUNDLE_NO = "$(CONTENTS_FOLDER_PATH)/Resources";
+
+ // Settings specific to shallow bundles (iOS, DriverKit on any OS)
+ CONTENTS_FOLDER_PATH_SHALLOW_BUNDLE_YES = "$(WRAPPER_NAME)";
+ EXECUTABLE_FOLDER_PATH_SHALLOW_BUNDLE_YES = "$(CONTENTS_FOLDER_PATH)";
+ UNLOCALIZED_RESOURCES_FOLDER_PATH_SHALLOW_BUNDLE_YES = "$(CONTENTS_FOLDER_PATH)";
+
+ // DriverKit should always use shallow bundles
+ SHALLOW_BUNDLE = "$(SHALLOW_BUNDLE_$(SWIFT_PLATFORM_TARGET_PREFIX))";
+ SHALLOW_BUNDLE_ = YES;
+ SHALLOW_BUNDLE_macos = NO;
+ SHALLOW_BUNDLE_ios = NO; // for macCatalyst
+ SHALLOW_BUNDLE_driverkit = YES;
+ };
+ ProductReference = {
+ FileType = wrapper.cfbundle;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = NO;
+ };
},
- "Type" : "PackageType",
- "BasedOn" : "com.apple.package-type.wrapper.framework",
- "Name" : "Mach-O Static Framework",
- "Identifier" : "com.apple.package-type.wrapper.framework.static",
- "Description" : "Mach-O static framework"
- },
- {
- "ProductReference" : {
- "FileType" : "wrapper.framework",
- "Name" : "$(WRAPPER_NAME)",
- "IsLaunchable" : "NO"
+
+ // Shallow CFBundle wrapper
+ { Type = PackageType;
+ Identifier = com.apple.package-type.wrapper.shallow;
+ BasedOn = com.apple.package-type.wrapper;
+ Name = "Wrapper (Shallow)";
+ Description = "Shallow Wrapper";
+ DefaultBuildSettings = {
+ SHALLOW_BUNDLE = YES;
+ };
+ ProductReference = {
+ FileType = wrapper.cfbundle;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = NO;
+ };
},
- "DefaultBuildSettings" : {
- "UNLOCALIZED_RESOURCES_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)",
- "CONTENTS_FOLDER_PATH" : "$(WRAPPER_NAME)",
- "SHALLOW_BUNDLE" : "YES",
- "VERSIONS_FOLDER_PATH" : "$(WRAPPER_NAME)"
+
+ // Application wrapper
+ { Type = PackageType;
+ Identifier = com.apple.package-type.wrapper.application;
+ BasedOn = com.apple.package-type.wrapper;
+ Name = "Application Wrapper";
+ Description = "Application Wrapper";
+ DefaultBuildSettings = {
+ PRODUCT_BUNDLE_PACKAGE_TYPE = "APPL";
+ GENERATE_PKGINFO_FILE = YES;
+ };
+ ProductReference = {
+ FileType = wrapper.application;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = YES;
+ };
},
- "Type" : "PackageType",
- "BasedOn" : "com.apple.package-type.wrapper.framework",
- "Name" : "Shallow Framework Wrapper",
- "Identifier" : "com.apple.package-type.wrapper.framework.shallow",
- "Description" : "Shallow framework wrapper"
- },
- {
- "ProductReference" : {
- "FileType" : "wrapper.cfbundle",
- "Name" : "$(WRAPPER_NAME)",
- "IsLaunchable" : "NO"
+
+ // Shallow Application wrapper
+ { Type = PackageType;
+ Identifier = com.apple.package-type.wrapper.application.shallow;
+ BasedOn = com.apple.package-type.wrapper.shallow;
+ Name = "Application Wrapper (Shallow)";
+ Description = "Shallow Application Wrapper";
+ DefaultBuildSettings = {
+ PRODUCT_BUNDLE_PACKAGE_TYPE = "APPL";
+ GENERATE_PKGINFO_FILE = YES;
+ SHALLOW_BUNDLE = YES;
+ };
+ ProductReference = {
+ FileType = wrapper.application;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = YES;
+ };
},
- "DefaultBuildSettings" : {
- "WRAPPER_SUFFIX" : "xctest"
+
+ // System extension wrapper
+ {
+ Type = PackageType;
+ Identifier = com.apple.package-type.wrapper.system-extension;
+ BasedOn = com.apple.package-type.wrapper;
+ Name = "System Extension Wrapper";
+ Description = "System Extension Wrapper";
+ DefaultBuildSettings = {
+ PRODUCT_BUNDLE_PACKAGE_TYPE = "SYSX";
+ };
+ ProductReference = {
+ FileType = wrapper.system-extension;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = NO;
+ };
},
- "Type" : "PackageType",
- "BasedOn" : "com.apple.package-type.wrapper",
- "Name" : "Unit Test Bundle",
- "Identifier" : "com.apple.package-type.bundle.unit-test",
- "Description" : "Unit Test Bundle"
- },
- {
- "ProductReference" : {
- "FileType" : "wrapper.cfbundle",
- "Name" : "$(WRAPPER_NAME)",
- "IsLaunchable" : "NO"
+
+ // Driver extension wrapper
+ {
+ Type = PackageType;
+ Identifier = com.apple.package-type.wrapper.driver-extension;
+ BasedOn = com.apple.package-type.wrapper.system-extension;
+ Name = "Driver Extension Wrapper";
+ Description = "Driver Extension Wrapper";
+ DefaultBuildSettings = {
+ PRODUCT_BUNDLE_PACKAGE_TYPE = "DEXT";
+ };
+ ProductReference = {
+ FileType = wrapper.driver-extension;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = NO;
+ };
},
- "DefaultBuildSettings" : {
- "WRAPPER_SUFFIX" : "octest"
+
+ // Kernel extension wrapper
+ { Type = PackageType;
+ Identifier = com.apple.package-type.wrapper.kernel-extension;
+ BasedOn = com.apple.package-type.wrapper;
+ Name = "Kernel Extension Wrapper";
+ Description = "Kernel Extension Wrapper";
+ DefaultBuildSettings = {
+ PRODUCT_BUNDLE_PACKAGE_TYPE = "KEXT";
+ PUBLIC_HEADERS_FOLDER_PATH = "$(KEXT_FRAMEWORK)/Contents/Headers/$(KEXT_FAMILY_NAME)";
+ PRIVATE_HEADERS_FOLDER_PATH = "$(KEXT_FRAMEWORK)/Contents/PrivateHeaders/$(KEXT_FAMILY_NAME)";
+ };
+ ProductReference = {
+ FileType = wrapper.cfbundle;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = NO;
+ };
},
- "Type" : "PackageType",
- "BasedOn" : "com.apple.package-type.wrapper",
- "Name" : "OCUnit Test Bundle",
- "Identifier" : "com.apple.package-type.bundle.ocunit-test",
- "Description" : "OCUnit Test Bundle"
- },
- {
- "ProductReference" : {
- "FileType" : "folder",
- "Name" : "$(WRAPPER_NAME)",
- "IsLaunchable" : "NO"
+
+ // Shallow Kernel extension wrapper
+ { Type = PackageType;
+ Identifier = com.apple.package-type.wrapper.kernel-extension.shallow;
+ BasedOn = com.apple.package-type.wrapper.shallow;
+ Name = "Kernel Extension Wrapper (Shallow)";
+ Description = "Shallow Kernel Extension Wrapper";
+ DefaultBuildSettings = {
+ PRODUCT_BUNDLE_PACKAGE_TYPE = "KEXT";
+ PUBLIC_HEADERS_FOLDER_PATH = "$(KEXT_FRAMEWORK)/Contents/Headers/$(KEXT_FAMILY_NAME)";
+ PRIVATE_HEADERS_FOLDER_PATH = "$(KEXT_FRAMEWORK)/Contents/PrivateHeaders/$(KEXT_FAMILY_NAME)";
+ SHALLOW_BUNDLE = YES;
+ };
+ ProductReference = {
+ FileType = wrapper.cfbundle;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = NO;
+ };
},
- "DefaultBuildSettings" : {
- "EXECUTABLE_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)",
- "JAVA_FOLDER_PATH" : "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)",
- "INFOSTRINGS_PATH" : "$(LOCALIZED_RESOURCES_FOLDER_PATH)\/ContentInfo.strings",
- "INFOPLIST_PATH" : "$(WRAPPER_NAME)\/ContentInfo.plist",
- "WRAPPER_SUFFIX" : "",
- "UNLOCALIZED_RESOURCES_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)",
- "DOCUMENTATION_FOLDER_PATH" : "$(LOCALIZED_RESOURCES_FOLDER_PATH)",
- "EXECUTABLES_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)",
- "LOCALIZED_RESOURCES_FOLDER_PATH" : "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)\/$(DEVELOPMENT_LANGUAGE).lproj",
- "PLUGINS_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)",
- "PUBLIC_HEADERS_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)",
- "SHARED_SUPPORT_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)",
- "SHARED_FRAMEWORKS_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)",
- "PRIVATE_HEADERS_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)",
- "SCRIPTS_FOLDER_PATH" : "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)",
- "FRAMEWORKS_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)"
+
+ // Framework wrapper
+ { Type = PackageType;
+ Identifier = com.apple.package-type.wrapper.framework;
+ BasedOn = com.apple.package-type.wrapper;
+ Name = "Framework Wrapper";
+ Description = "Framework wrapper";
+ DefaultBuildSettings = {
+ PRODUCT_BUNDLE_PACKAGE_TYPE = "FMWK";
+ WRAPPER_SUFFIX = ".framework";
+ VERSIONS_FOLDER_PATH = "$(VERSIONS_FOLDER_PATH_SHALLOW_BUNDLE_$(SHALLOW_BUNDLE))";
+ CURRENT_VERSION = "Current";
+ INFOPLIST_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/Info.plist";
+ PKGINFO_PATH = "$(WRAPPER_NAME)/PkgInfo";
+ VERSIONPLIST_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/version.plist";
+ EXECUTABLES_FOLDER_PATH = "$(LOCALIZED_RESOURCES_FOLDER_PATH)"; // Not the same as EXECUTABLE_FOLDER_PATH
+ SHARED_SUPPORT_FOLDER_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)";
+ CODESIGNING_FOLDER_PATH = "$(TARGET_BUILD_DIR)/$(CONTENTS_FOLDER_PATH)";
+
+ // Settings specific to deep bundles (macOS)
+ VERSIONS_FOLDER_PATH_SHALLOW_BUNDLE_NO = "$(WRAPPER_NAME)/Versions";
+ CONTENTS_FOLDER_PATH_SHALLOW_BUNDLE_NO = "$(VERSIONS_FOLDER_PATH)/$(FRAMEWORK_VERSION)";
+ EXECUTABLE_FOLDER_PATH_SHALLOW_BUNDLE_NO = "$(CONTENTS_FOLDER_PATH)";
+
+ // Settings specific to shallow bundles (iOS, DriverKit on any OS)
+ VERSIONS_FOLDER_PATH_SHALLOW_BUNDLE_YES = "$(WRAPPER_NAME)";
+ };
+ ProductReference = {
+ FileType = wrapper.framework;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = NO;
+ };
},
- "Type" : "PackageType",
- "BasedOn" : "com.apple.package-type.wrapper",
- "Name" : "In-App Purchase Content",
- "Identifier" : "com.apple.package-type.in-app-purchase-content",
- "Description" : "In-App Purchase Content"
- },
- {
- "ProductReference" : {
- "FileType" : "wrapper.xpc-service",
- "Name" : "$(WRAPPER_NAME)",
- "IsLaunchable" : "NO"
+
+ // Static framework wrapper (like a framework, except that it contains a libX.a instead of a dylib)
+ { Type = PackageType;
+ Identifier = com.apple.package-type.wrapper.framework.static;
+ Name = "Mach-O Static Framework";
+ Description = "Mach-O static framework";
+ BasedOn = com.apple.package-type.wrapper.framework;
+ DefaultBuildSettings = {
+ };
+ ProductReference = {
+ FileType = wrapper.framework.static;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = NO;
+ };
},
- "DefaultBuildSettings" : {
- "WRAPPER_SUFFIX" : ".xpc"
+
+ // Shallow Framework Package
+ { Type = PackageType;
+ Identifier = com.apple.package-type.wrapper.framework.shallow;
+ Name = "Shallow Framework Wrapper";
+ Description = "Shallow framework wrapper";
+ BasedOn = com.apple.package-type.wrapper.framework;
+ DefaultBuildSettings = {
+ SHALLOW_BUNDLE = YES;
+ };
+ ProductReference = {
+ FileType = wrapper.framework;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = NO;
+ };
},
- "Type" : "PackageType",
- "BasedOn" : "com.apple.package-type.wrapper",
- "Name" : "XPC Service",
- "Identifier" : "com.apple.package-type.xpc-service",
- "Description" : "XPC Service"
- },
- {
- "ProductReference" : {
- "FileType" : "wrapper.app-extension",
- "Name" : "$(WRAPPER_NAME)",
- "IsLaunchable" : "NO"
+
+ // Unit Test Bundle wrapper
+ { Type = PackageType;
+ Identifier = com.apple.package-type.bundle.unit-test;
+ BasedOn = com.apple.package-type.wrapper;
+ Name = "Unit Test Bundle";
+ Description = "Unit Test Bundle";
+ DefaultBuildSettings = {
+ WRAPPER_SUFFIX = "xctest";
+ };
+ ProductReference = {
+ FileType = wrapper.cfbundle;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = NO;
+ };
},
- "DefaultBuildSettings" : {
- "WRAPPER_SUFFIX" : ".pluginkit"
+
+ // Legacy OCUnit Test Bundle wrapper
+ { Type = PackageType;
+ Identifier = com.apple.package-type.bundle.ocunit-test;
+ BasedOn = com.apple.package-type.wrapper;
+ Name = "OCUnit Test Bundle";
+ Description = "OCUnit Test Bundle";
+ DefaultBuildSettings = {
+ WRAPPER_SUFFIX = "octest";
+ };
+ ProductReference = {
+ FileType = wrapper.cfbundle;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = NO;
+ };
},
- "Type" : "PackageType",
- "BasedOn" : "com.apple.package-type.xpc-service",
- "Name" : "PlugInKit PlugIn",
- "Identifier" : "com.apple.package-type.pluginkit-plugin",
- "Description" : "PlugInKit PlugIn"
- },
- {
- "ProductReference" : {
- "FileType" : "wrapper.app-extension",
- "Name" : "$(WRAPPER_NAME)",
- "IsLaunchable" : "NO"
+
+ // In-app Purchase Content wrapper
+ { Type = PackageType;
+ Identifier = com.apple.package-type.in-app-purchase-content;
+ BasedOn = com.apple.package-type.wrapper;
+ Name = "In-App Purchase Content";
+ Description = "In-App Purchase Content";
+ DefaultBuildSettings = {
+ PRODUCT_BUNDLE_PACKAGE_TYPE = "";
+ WRAPPER_SUFFIX = "";
+ EXECUTABLE_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)";
+ INFOPLIST_PATH = "$(WRAPPER_NAME)/ContentInfo.plist";
+ INFOSTRINGS_PATH = "$(LOCALIZED_RESOURCES_FOLDER_PATH)/ContentInfo.strings";
+ PUBLIC_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)";
+ PRIVATE_HEADERS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)";
+ EXECUTABLES_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)";
+ FRAMEWORKS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)";
+ SHARED_FRAMEWORKS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)";
+ SHARED_SUPPORT_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)";
+ UNLOCALIZED_RESOURCES_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)";
+ LOCALIZED_RESOURCES_FOLDER_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/$(DEVELOPMENT_LANGUAGE).lproj";
+ DOCUMENTATION_FOLDER_PATH = "$(LOCALIZED_RESOURCES_FOLDER_PATH)";
+ MODULES_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)";
+ PLUGINS_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)";
+ SCRIPTS_FOLDER_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)";
+ JAVA_FOLDER_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)";
+ };
+ ProductReference = {
+ FileType = folder;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = NO;
+ };
},
- "DefaultBuildSettings" : {
- "WRAPPER_SUFFIX" : ".appex"
+
+ // XPC Service wrapper
+ { Type = PackageType;
+ Identifier = com.apple.package-type.xpc-service;
+ BasedOn = com.apple.package-type.wrapper;
+ Name = "XPC Service";
+ Description = "XPC Service";
+ DefaultBuildSettings = {
+ PRODUCT_BUNDLE_PACKAGE_TYPE = "XPC!";
+ WRAPPER_SUFFIX = ".xpc";
+ };
+ ProductReference = {
+ FileType = wrapper.xpc-service;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = NO;
+ };
},
- "Type" : "PackageType",
- "BasedOn" : "com.apple.package-type.pluginkit-plugin",
- "Name" : "App Extension",
- "Identifier" : "com.apple.package-type.app-extension",
- "Description" : "App Extension"
- },
- {
- "ProductReference" : {
- "FileType" : "wrapper.spotlight-importer",
- "Name" : "$(WRAPPER_NAME)",
- "IsLaunchable" : "NO"
+
+ // PlugInKit PlugIn wrapper
+ { Type = PackageType;
+ Identifier = com.apple.package-type.pluginkit-plugin;
+ BasedOn = com.apple.package-type.xpc-service;
+ Name = "PlugInKit PlugIn";
+ Description = "PlugInKit PlugIn";
+ DefaultBuildSettings = {
+ WRAPPER_SUFFIX = ".pluginkit";
+ };
+ ProductReference = {
+ FileType = wrapper.app-extension;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = NO;
+ };
},
- "DefaultBuildSettings" : {
+
+ // App Extension wrapper
+ { Type = PackageType;
+ Identifier = com.apple.package-type.app-extension;
+ BasedOn = com.apple.package-type.pluginkit-plugin;
+ Name = "App Extension";
+ Description = "App Extension";
+ DefaultBuildSettings = {
+ WRAPPER_SUFFIX = ".appex";
+ };
+ ProductReference = {
+ FileType = wrapper.app-extension;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = NO;
+ };
},
- "Type" : "PackageType",
- "BasedOn" : "com.apple.package-type.wrapper",
- "Name" : "Spotlight Importer",
- "Identifier" : "com.apple.package-type.spotlight-importer",
- "Description" : "Spotlight Importer"
- },
- {
- "DefaultBuildSettings" : {
- "EXECUTABLE_PATH" : "$(EXECUTABLE_NAME)",
- "JAVA_MAKE_ZIPFILE" : "NO",
- "JAVA_ARCHIVE_CLASSES" : "YES",
- "EXECUTABLE_PREFIX" : "",
- "EXECUTABLE_SUFFIX" : ".jar",
- "EXECUTABLE_NAME" : "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_SUFFIX)"
+
+ // Spotlight Importer wrapper
+ { Type = PackageType;
+ Identifier = com.apple.package-type.spotlight-importer;
+ BasedOn = com.apple.package-type.wrapper;
+ Name = "Spotlight Importer";
+ Description = "Spotlight Importer";
+ DefaultBuildSettings = {
+ };
+ ProductReference = {
+ FileType = wrapper.spotlight-importer;
+ Name = "$(WRAPPER_NAME)";
+ IsLaunchable = NO;
+ };
},
- "Identifier" : "com.apple.package-type.jarfile",
- "Type" : "PackageType",
- "Name" : "Jar File",
- "Description" : "Jar file",
- "ProductReference" : {
- "FileType" : "archive.jar",
- "Name" : "$(EXECUTABLE_NAME)",
- "IsLaunchable" : "NO"
- }
- },
- {
- "DefaultBuildSettings" : {
- "EXECUTABLE_PATH" : "$(EXECUTABLE_NAME)",
- "JAVA_MAKE_ZIPFILE" : "YES",
- "JAVA_ARCHIVE_CLASSES" : "YES",
- "EXECUTABLE_PREFIX" : "",
- "EXECUTABLE_SUFFIX" : ".zip",
- "EXECUTABLE_NAME" : "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_SUFFIX)"
+
+ // Jar file
+ { Type = PackageType;
+ Identifier = com.apple.package-type.jarfile;
+ Name = "Jar File";
+ Description = "Jar file";
+ DefaultBuildSettings = {
+ EXECUTABLE_PREFIX = "";
+ EXECUTABLE_SUFFIX = ".jar";
+ EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_SUFFIX)";
+ EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
+ JAVA_ARCHIVE_CLASSES = YES;
+ JAVA_MAKE_ZIPFILE = NO;
+ };
+ ProductReference = {
+ FileType = archive.jar;
+ Name = "$(EXECUTABLE_NAME)";
+ IsLaunchable = NO;
+ };
},
- "Identifier" : "com.apple.package-type.zipfile",
- "Type" : "PackageType",
- "Name" : "Zip File",
- "Description" : "Zip file",
- "ProductReference" : {
- "FileType" : "archive.zip",
- "Name" : "$(EXECUTABLE_NAME)",
- "IsLaunchable" : "NO"
- }
- },
- {
- "DefaultBuildSettings" : {
- "EXECUTABLE_PATH" : "$(EXECUTABLE_NAME)",
- "JAVA_ARCHIVE_CLASSES" : "NO",
- "EXECUTABLE_PREFIX" : "",
- "EXECUTABLE_SUFFIX" : "",
- "EXECUTABLE_NAME" : "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_SUFFIX)"
+
+ // Zip file
+ { Type = PackageType;
+ Identifier = com.apple.package-type.zipfile;
+ Name = "Zip File";
+ Description = "Zip file";
+ DefaultBuildSettings = {
+ EXECUTABLE_PREFIX = "";
+ EXECUTABLE_SUFFIX = ".zip";
+ EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_SUFFIX)";
+ EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
+ JAVA_ARCHIVE_CLASSES = YES;
+ JAVA_MAKE_ZIPFILE = YES;
+ };
+ ProductReference = {
+ FileType = archive.zip;
+ Name = "$(EXECUTABLE_NAME)";
+ IsLaunchable = NO;
+ };
},
- "Identifier" : "com.apple.package-type.javaclassfolder",
- "Type" : "PackageType",
- "Name" : "Class Folder",
- "Description" : "Class folder",
- "ProductReference" : {
- "FileType" : "wrapper.java-classfolder",
- "Name" : "$(EXECUTABLE_NAME)",
- "IsLaunchable" : "NO"
- }
- }
-]
+
+ // Java class folder
+ { Type = PackageType;
+ Identifier = com.apple.package-type.javaclassfolder;
+ Name = "Class Folder";
+ Description = "Class folder";
+ DefaultBuildSettings = {
+ EXECUTABLE_PREFIX = "";
+ EXECUTABLE_SUFFIX = "";
+ EXECUTABLE_NAME = "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_SUFFIX)";
+ EXECUTABLE_PATH = "$(EXECUTABLE_NAME)";
+ JAVA_ARCHIVE_CLASSES = NO;
+ };
+ ProductReference = {
+ FileType = wrapper.java-classfolder;
+ Name = "$(EXECUTABLE_NAME)";
+ IsLaunchable = NO;
+ };
+ },
+)
diff --git a/share/qbs/modules/bundle/MacOSX-Product-Types.xcspec b/share/qbs/modules/bundle/MacOSX-Product-Types.xcspec
index 8d8450869..bc1d087d6 100644
--- a/share/qbs/modules/bundle/MacOSX-Product-Types.xcspec
+++ b/share/qbs/modules/bundle/MacOSX-Product-Types.xcspec
@@ -1,590 +1,803 @@
-[
- {
- "IconNamePrefix" : "TargetExecutable",
- "DefaultBuildProperties" : {
- "REZ_EXECUTABLE" : "YES",
- "FULL_PRODUCT_NAME" : "$(EXECUTABLE_NAME)",
- "LIBRARY_FLAG_NOSPACE" : "YES",
- "FRAMEWORK_FLAG_PREFIX" : "-framework",
- "INSTALL_PATH" : "\/usr\/local\/bin",
- "GCC_INLINES_ARE_PRIVATE_EXTERN" : "YES",
- "GCC_DYNAMIC_NO_PIC" : "NO",
- "GCC_SYMBOLS_PRIVATE_EXTERN" : "YES",
- "CODE_SIGNING_ALLOWED" : "YES",
- "STRIP_STYLE" : "all",
- "EXECUTABLE_PREFIX" : "",
- "MACH_O_TYPE" : "mh_execute",
- "EXECUTABLE_SUFFIX" : "",
- "LIBRARY_FLAG_PREFIX" : "-l"
+//
+// MacOSX Product Types.xcspec
+//
+// Copyright © 1999-2020 Apple Inc. All rights reserved.
+//
+// Product type specifications in the macOS platform.
+//
+(
+ //
+ // Single-file product types
+ //
+
+ // Tool (normal Unix command-line executable)
+ { Type = ProductType;
+ Identifier = com.apple.product-type.tool;
+ Class = PBXToolProductType;
+ Name = "Command-line Tool";
+ Description = "Standalone command-line tool";
+ IconNamePrefix = "TargetExecutable";
+ DefaultTargetName = "Command-line Tool";
+ DefaultBuildProperties = {
+ FULL_PRODUCT_NAME = "$(EXECUTABLE_NAME)";
+ MACH_O_TYPE = "mh_execute";
+ EXECUTABLE_PREFIX = "";
+ EXECUTABLE_SUFFIX = "";
+ REZ_EXECUTABLE = YES;
+ INSTALL_PATH = "/usr/local/bin";
+ FRAMEWORK_FLAG_PREFIX = "-framework";
+ LIBRARY_FLAG_PREFIX = "-l";
+ LIBRARY_FLAG_NOSPACE = YES;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
+ STRIP_STYLE = "all";
+ CODE_SIGNING_ALLOWED = YES;
+ };
+ PackageTypes = (
+ com.apple.package-type.mach-o-executable // default
+ );
+ WantsSigningEditing = YES;
+ WantsBundleIdentifierEditing = YES;
},
- "PackageTypes" : [
- "com.apple.package-type.mach-o-executable"
- ],
- "Type" : "ProductType",
- "DefaultTargetName" : "Command-line Tool",
- "Name" : "Command-line Tool",
- "Identifier" : "com.apple.product-type.tool",
- "Description" : "Standalone command-line tool",
- "Class" : "PBXToolProductType"
- },
- {
- "IconNamePrefix" : "TargetExecutable",
- "IsJava" : "YES",
- "PackageTypes" : [
- "com.apple.package-type.jarfile",
- "com.apple.package-type.zipfile",
- "com.apple.package-type.javaclassfolder"
- ],
- "Type" : "ProductType",
- "DefaultTargetName" : "Java Command-line Tool",
- "Name" : "Java Command-line Tool",
- "Identifier" : "com.apple.product-type.tool.java",
- "Description" : "Java Command-line tool",
- "DefaultBuildProperties" : {
- "REZ_EXECUTABLE" : "YES",
- "INSTALL_PATH" : "\/usr\/local\/bin",
- "FULL_PRODUCT_NAME" : "$(EXECUTABLE_NAME)"
- }
- },
- {
- "IconNamePrefix" : "TargetPlugin",
- "DefaultBuildProperties" : {
- "DEAD_CODE_STRIPPING" : "NO",
- "REZ_EXECUTABLE" : "YES",
- "LINK_WITH_STANDARD_LIBRARIES" : "NO",
- "FULL_PRODUCT_NAME" : "$(EXECUTABLE_NAME)",
- "LIBRARY_FLAG_NOSPACE" : "YES",
- "FRAMEWORK_FLAG_PREFIX" : "-framework",
- "INSTALL_PATH" : "$(HOME)\/Objects",
- "SKIP_INSTALL" : "YES",
- "GCC_INLINES_ARE_PRIVATE_EXTERN" : "YES",
- "KEEP_PRIVATE_EXTERNS" : "YES",
- "EXECUTABLE_EXTENSION" : "o",
- "PUBLIC_HEADERS_FOLDER_PATH" : "\/usr\/local\/include",
- "MACH_O_TYPE" : "mh_object",
- "EXECUTABLE_SUFFIX" : ".$(EXECUTABLE_EXTENSION)",
- "LIBRARY_FLAG_PREFIX" : "-l",
- "PRIVATE_HEADERS_FOLDER_PATH" : "\/usr\/local\/include",
- "STRIP_STYLE" : "debugging"
+
+ // Java tool
+ { Type = ProductType;
+ Identifier = com.apple.product-type.tool.java;
+ Name = "Java Command-line Tool";
+ Description = "Java Command-line tool";
+ IconNamePrefix = "TargetExecutable";
+ DefaultTargetName = "Java Command-line Tool";
+ DefaultBuildProperties = {
+ FULL_PRODUCT_NAME = "$(EXECUTABLE_NAME)";
+ REZ_EXECUTABLE = YES;
+ INSTALL_PATH = "/usr/local/bin";
+ };
+ IsJava = YES;
+ PackageTypes = (
+ com.apple.package-type.jarfile, // default
+ com.apple.package-type.zipfile,
+ com.apple.package-type.javaclassfolder
+ );
},
- "PackageTypes" : [
- "com.apple.package-type.mach-o-objfile"
- ],
- "Type" : "ProductType",
- "DefaultTargetName" : "Object File",
- "Name" : "Object File",
- "Identifier" : "com.apple.product-type.objfile",
- "Description" : "Object File",
- "Class" : "XCStandaloneExecutableProductType"
- },
- {
- "IconNamePrefix" : "TargetLibrary",
- "DefaultBuildProperties" : {
- "LIBRARY_FLAG_PREFIX" : "-l",
- "STRIP_STYLE" : "debugging",
- "REZ_EXECUTABLE" : "YES",
- "FULL_PRODUCT_NAME" : "$(EXECUTABLE_NAME)",
- "LD_DYLIB_INSTALL_NAME" : "$(DYLIB_INSTALL_NAME_BASE:standardizepath)\/$(EXECUTABLE_PATH)",
- "DYLIB_COMPATIBILITY_VERSION" : "1",
- "INSTALL_PATH" : "\/usr\/local\/lib",
- "FRAMEWORK_FLAG_PREFIX" : "-framework",
- "LIBRARY_FLAG_NOSPACE" : "YES",
- "GCC_INLINES_ARE_PRIVATE_EXTERN" : "YES",
- "CODE_SIGNING_ALLOWED" : "YES",
- "CODE_SIGNING_REQUIRED" : "NO",
- "EXECUTABLE_EXTENSION" : "dylib",
- "PUBLIC_HEADERS_FOLDER_PATH" : "\/usr\/local\/include",
- "DYLIB_INSTALL_NAME_BASE" : "$(INSTALL_PATH)",
- "EXECUTABLE_SUFFIX" : ".$(EXECUTABLE_EXTENSION)",
- "PRIVATE_HEADERS_FOLDER_PATH" : "\/usr\/local\/include",
- "MACH_O_TYPE" : "mh_dylib",
- "DYLIB_CURRENT_VERSION" : "1"
+
+ // Object file
+ { Type = ProductType;
+ Identifier = com.apple.product-type.objfile;
+ Class = XCStandaloneExecutableProductType;
+ Name = "Object File";
+ Description = "Object File";
+ IconNamePrefix = "TargetPlugin";
+ DefaultTargetName = "Object File";
+ DefaultBuildProperties = {
+ FULL_PRODUCT_NAME = "$(EXECUTABLE_NAME)";
+ MACH_O_TYPE = "mh_object";
+ LINK_WITH_STANDARD_LIBRARIES = NO;
+ REZ_EXECUTABLE = YES;
+ EXECUTABLE_SUFFIX = ".$(EXECUTABLE_EXTENSION)";
+ EXECUTABLE_EXTENSION = "o";
+ PUBLIC_HEADERS_FOLDER_PATH = "/usr/local/include";
+ PRIVATE_HEADERS_FOLDER_PATH = "/usr/local/include";
+ INSTALL_PATH = "$(HOME)/Objects";
+ FRAMEWORK_FLAG_PREFIX = "-framework";
+ LIBRARY_FLAG_PREFIX = "-l";
+ LIBRARY_FLAG_NOSPACE = YES;
+ SKIP_INSTALL = YES;
+ STRIP_STYLE = "debugging";
+ GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
+ KEEP_PRIVATE_EXTERNS = YES;
+ DEAD_CODE_STRIPPING = NO;
+ };
+ PackageTypes = (
+ com.apple.package-type.mach-o-objfile // default
+ );
},
- "PackageTypes" : [
- "com.apple.package-type.mach-o-dylib"
- ],
- "Type" : "ProductType",
- "DefaultTargetName" : "Dynamic Library",
- "Name" : "Dynamic Library",
- "Identifier" : "com.apple.product-type.library.dynamic",
- "Description" : "Dynamic library",
- "Class" : "PBXDynamicLibraryProductType"
- },
- {
- "IconNamePrefix" : "TargetLibrary",
- "DefaultBuildProperties" : {
- "STRIP_STYLE" : "debugging",
- "CLANG_ENABLE_MODULE_DEBUGGING" : "NO",
- "REZ_EXECUTABLE" : "YES",
- "FULL_PRODUCT_NAME" : "$(EXECUTABLE_NAME)",
- "LIBRARY_FLAG_NOSPACE" : "YES",
- "FRAMEWORK_FLAG_PREFIX" : "-framework",
- "INSTALL_PATH" : "\/usr\/local\/lib",
- "EXECUTABLE_EXTENSION" : "a",
- "EXECUTABLE_PREFIX" : "lib",
- "PUBLIC_HEADERS_FOLDER_PATH" : "\/usr\/local\/include",
- "EXECUTABLE_SUFFIX" : ".$(EXECUTABLE_EXTENSION)",
- "LIBRARY_FLAG_PREFIX" : "-l",
- "PRIVATE_HEADERS_FOLDER_PATH" : "\/usr\/local\/include",
- "MACH_O_TYPE" : "staticlib"
+
+ // Dynamic library
+ { Type = ProductType;
+ Identifier = com.apple.product-type.library.dynamic;
+ Class = PBXDynamicLibraryProductType;
+ Name = "Dynamic Library";
+ Description = "Dynamic library";
+ IconNamePrefix = "TargetLibrary";
+ DefaultTargetName = "Dynamic Library";
+ DefaultBuildProperties = {
+ FULL_PRODUCT_NAME = "$(EXECUTABLE_NAME)";
+ MACH_O_TYPE = "mh_dylib";
+ REZ_EXECUTABLE = YES;
+ EXECUTABLE_SUFFIX = ".$(EXECUTABLE_EXTENSION)";
+ EXECUTABLE_EXTENSION = "dylib";
+ PUBLIC_HEADERS_FOLDER_PATH = "/usr/local/include";
+ PRIVATE_HEADERS_FOLDER_PATH = "/usr/local/include";
+ INSTALL_PATH = "/usr/local/lib";
+ DYLIB_INSTALL_NAME_BASE = "$(INSTALL_PATH)";
+ LD_DYLIB_INSTALL_NAME = "$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)";
+ DYLIB_COMPATIBILITY_VERSION = "1";
+ DYLIB_CURRENT_VERSION = "1";
+ FRAMEWORK_FLAG_PREFIX = "-framework";
+ LIBRARY_FLAG_PREFIX = "-l";
+ LIBRARY_FLAG_NOSPACE = YES;
+ STRIP_STYLE = "debugging";
+ GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
+ CODE_SIGNING_ALLOWED = YES;
+ CODE_SIGNING_REQUIRED = NO;
+ };
+ PackageTypes = (
+ com.apple.package-type.mach-o-dylib // default
+ );
},
- "AlwaysPerformSeparateStrip" : "YES",
- "PackageTypes" : [
- "com.apple.package-type.static-library"
- ],
- "Type" : "ProductType",
- "DefaultTargetName" : "Static Library",
- "Name" : "Static Library",
- "Identifier" : "com.apple.product-type.library.static",
- "Description" : "Static library",
- "Class" : "PBXStaticLibraryProductType"
- },
- {
- "IconNamePrefix" : "TargetPlugin",
- "IsJava" : "YES",
- "PackageTypes" : [
- "com.apple.package-type.jarfile",
- "com.apple.package-type.zipfile",
- "com.apple.package-type.javaclassfolder"
- ],
- "Type" : "ProductType",
- "DefaultTargetName" : "Java Library",
- "Name" : "Java Library",
- "Identifier" : "com.apple.product-type.library.java.archive",
- "Description" : "Java library packaged as a Jar file, Zip file, or class folder",
- "DefaultBuildProperties" : {
- "INSTALL_PATH" : "\/usr\/local\/lib",
- "FULL_PRODUCT_NAME" : "$(PRODUCT_NAME)"
- }
- },
- {
- "HasInfoPlistStrings" : "YES",
- "Description" : "Generic bundle",
- "HasInfoPlist" : "YES",
- "Name" : "Bundle",
- "Class" : "PBXBundleProductType",
- "DefaultTargetName" : "Bundle",
- "DefaultBuildProperties" : {
- "LIBRARY_FLAG_NOSPACE" : "YES",
- "WRAPPER_NAME" : "$(WRAPPER_PREFIX)$(PRODUCT_NAME)$(WRAPPER_SUFFIX)",
- "FRAMEWORK_FLAG_PREFIX" : "-framework",
- "GCC_INLINES_ARE_PRIVATE_EXTERN" : "YES",
- "WRAPPER_SUFFIX" : ".$(WRAPPER_EXTENSION)",
- "FULL_PRODUCT_NAME" : "$(WRAPPER_NAME)",
- "WRAPPER_EXTENSION" : "bundle",
- "CODE_SIGNING_ALLOWED" : "YES",
- "WRAPPER_PREFIX" : "",
- "STRIP_STYLE" : "non-global",
- "MACH_O_TYPE" : "mh_bundle",
- "LIBRARY_FLAG_PREFIX" : "-l"
+
+ // Static library
+ { Type = ProductType;
+ Identifier = com.apple.product-type.library.static;
+ Class = PBXStaticLibraryProductType;
+ Name = "Static Library";
+ Description = "Static library";
+ IconNamePrefix = "TargetLibrary";
+ DefaultTargetName = "Static Library";
+ DefaultBuildProperties = {
+ FULL_PRODUCT_NAME = "$(EXECUTABLE_NAME)";
+ MACH_O_TYPE = "staticlib";
+ REZ_EXECUTABLE = YES;
+ EXECUTABLE_PREFIX = "lib";
+ EXECUTABLE_SUFFIX = ".$(EXECUTABLE_EXTENSION)";
+ EXECUTABLE_EXTENSION = "a";
+ PUBLIC_HEADERS_FOLDER_PATH = "/usr/local/include";
+ PRIVATE_HEADERS_FOLDER_PATH = "/usr/local/include";
+ INSTALL_PATH = "/usr/local/lib";
+ FRAMEWORK_FLAG_PREFIX = "-framework";
+ LIBRARY_FLAG_PREFIX = "-l";
+ LIBRARY_FLAG_NOSPACE = YES;
+ STRIP_STYLE = "debugging";
+ CLANG_ENABLE_MODULE_DEBUGGING = NO;
+ CODE_SIGNING_ALLOWED = NO;
+ };
+ AlwaysPerformSeparateStrip = YES;
+ PackageTypes = (
+ com.apple.package-type.static-library // default
+ );
},
- "PackageTypes" : [
- "com.apple.package-type.wrapper",
- "com.apple.package-type.wrapper.shallow"
- ],
- "IsWrapper" : "YES",
- "Type" : "ProductType",
- "Identifier" : "com.apple.product-type.bundle",
- "IconNamePrefix" : "TargetPlugin"
- },
- {
- "PackageTypes" : [
- "com.apple.package-type.wrapper.shallow"
- ],
- "Type" : "ProductType",
- "BasedOn" : "com.apple.product-type.bundle",
- "Name" : "Bundle (Shallow)",
- "Identifier" : "com.apple.product-type.bundle.shallow",
- "Description" : "Bundle (Shallow)",
- "Class" : "PBXBundleProductType"
- },
- {
- "Description" : "Application",
- "Class" : "PBXApplicationProductType",
- "Name" : "Application",
- "RunpathSearchPathForEmbeddedFrameworks" : "@executable_path\/..\/Frameworks",
- "ValidateEmbeddedBinaries" : "YES",
- "ProvisioningProfileSupported" : "YES",
- "DefaultTargetName" : "Application",
- "DefaultBuildProperties" : {
- "INSTALL_PATH" : "$(LOCAL_APPS_DIR)",
- "WRAPPER_EXTENSION" : "app",
- "GCC_DYNAMIC_NO_PIC" : "NO",
- "STRIP_STYLE" : "all",
- "CODE_SIGNING_ALLOWED" : "YES",
- "GCC_INLINES_ARE_PRIVATE_EXTERN" : "YES",
- "WRAPPER_SUFFIX" : ".$(WRAPPER_EXTENSION)",
- "GCC_SYMBOLS_PRIVATE_EXTERN" : "YES",
- "MACH_O_TYPE" : "mh_execute"
+
+ // Java library (jar or zip file)
+ { Type = ProductType;
+ Identifier = com.apple.product-type.library.java.archive;
+ Name = "Java Library";
+ Description = "Java library packaged as a Jar file, Zip file, or class folder";
+ IconNamePrefix = "TargetPlugin";
+ DefaultTargetName = "Java Library";
+ DefaultBuildProperties = {
+ FULL_PRODUCT_NAME = "$(PRODUCT_NAME)";
+ INSTALL_PATH = "/usr/local/lib";
+ };
+ IsJava = YES;
+ PackageTypes = (
+ com.apple.package-type.jarfile, // default
+ com.apple.package-type.zipfile,
+ com.apple.package-type.javaclassfolder
+ );
},
- "BasedOn" : "com.apple.product-type.bundle",
- "ProvisioningProfileRequired" : "NO",
- "PackageTypes" : [
- "com.apple.package-type.wrapper.application"
- ],
- "Type" : "ProductType",
- "CanEmbedCompilerSanitizerLibraries" : "YES",
- "Identifier" : "com.apple.product-type.application",
- "IconNamePrefix" : "TargetApp"
- },
- {
- "PackageTypes" : [
- "com.apple.package-type.wrapper.application.shallow"
- ],
- "Type" : "ProductType",
- "BasedOn" : "com.apple.product-type.application",
- "Name" : "Application (Shallow Bundle)",
- "Identifier" : "com.apple.product-type.application.shallow",
- "Description" : "Application (Shallow Bundle)",
- "Class" : "PBXApplicationProductType"
- },
- {
- "DefaultBuildProperties" : {
- "PKGINFO_PATH" : "",
- "INFOPLIST_PATH" : ""
+
+
+ //
+ // Wrapper product types
+ //
+
+ // Bundle
+ { Type = ProductType;
+ Identifier = com.apple.product-type.bundle;
+ Class = PBXBundleProductType;
+ Name = "Bundle";
+ Description = "Generic bundle";
+ IconNamePrefix = "TargetPlugin";
+ DefaultTargetName = "Bundle";
+ DefaultBuildProperties = {
+ FULL_PRODUCT_NAME = "$(WRAPPER_NAME)";
+ MACH_O_TYPE = "mh_bundle";
+ WRAPPER_PREFIX = "";
+ WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)";
+ WRAPPER_EXTENSION = "bundle";
+ WRAPPER_NAME = "$(WRAPPER_PREFIX)$(PRODUCT_NAME)$(WRAPPER_SUFFIX)";
+ FRAMEWORK_FLAG_PREFIX = "-framework";
+ LIBRARY_FLAG_PREFIX = "-l";
+ LIBRARY_FLAG_NOSPACE = YES;
+ STRIP_STYLE = "non-global";
+ GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
+ CODE_SIGNING_ALLOWED = YES;
+ };
+ PackageTypes = (
+ com.apple.package-type.wrapper, // default
+ com.apple.package-type.wrapper.shallow // Not clear if this is needed in the presence of the Shallow Bundle product type below.
+ );
+ IsWrapper = YES;
+ HasInfoPlist = YES;
+ HasInfoPlistStrings = YES;
+ WantsBundleIdentifierEditing = YES;
+ WantsSigningEditing = YES;
},
- "IsJava" : "YES",
- "Type" : "ProductType",
- "BasedOn" : "com.apple.product-type.application",
- "Name" : "Java Application",
- "Identifier" : "com.apple.product-type.application.java",
- "Description" : "Java Application",
- "DefaultTargetName" : "Java Application"
- },
- {
- "IconNamePrefix" : "TargetFramework",
- "DefaultTargetName" : "Framework",
- "DefaultBuildProperties" : {
- "CODE_SIGNING_REQUIRES_TEAM" : "YES",
- "LD_DYLIB_INSTALL_NAME" : "$(DYLIB_INSTALL_NAME_BASE:standardizepath)\/$(EXECUTABLE_PATH)",
- "CODE_SIGNING_REQUIRED" : "NO",
- "CODE_SIGNING_ALLOWED" : "YES",
- "INSTALL_PATH" : "$(LOCAL_LIBRARY_DIR)\/Frameworks",
- "WRAPPER_SUFFIX" : ".$(WRAPPER_EXTENSION)",
- "WRAPPER_EXTENSION" : "framework",
- "FRAMEWORK_VERSION" : "A",
- "ENTITLEMENTS_REQUIRED" : "NO",
- "STRIP_STYLE" : "debugging",
- "DYLIB_INSTALL_NAME_BASE" : "$(INSTALL_PATH)",
- "MACH_O_TYPE" : "mh_dylib"
+
+ // Shallow Bundle Product
+ { Type = ProductType;
+ Identifier = com.apple.product-type.bundle.shallow;
+ BasedOn = com.apple.product-type.bundle;
+ Class = PBXBundleProductType;
+ Name = "Bundle (Shallow)";
+ Description = "Bundle (Shallow)";
+ PackageTypes = (
+ com.apple.package-type.wrapper.shallow
+ );
},
- "PackageTypes" : [
- "com.apple.package-type.wrapper.framework"
- ],
- "Type" : "ProductType",
- "BasedOn" : "com.apple.product-type.bundle",
- "Name" : "Framework",
- "Identifier" : "com.apple.product-type.framework",
- "Description" : "Framework",
- "Class" : "PBXFrameworkProductType"
- },
- {
- "PackageTypes" : [
- "com.apple.package-type.wrapper.framework.shallow"
- ],
- "Type" : "ProductType",
- "BasedOn" : "com.apple.product-type.framework",
- "Name" : "Framework (Shallow Bundle)",
- "Identifier" : "com.apple.product-type.framework.shallow",
- "Description" : "Framework (Shallow Bundle)",
- "Class" : "PBXFrameworkProductType"
- },
- {
- "IconNamePrefix" : "TargetFramework",
- "DefaultTargetName" : "Static Framework",
- "DefaultBuildProperties" : {
- "WRAPPER_EXTENSION" : "framework",
- "DYLIB_INSTALL_NAME_BASE" : "",
- "CODE_SIGNING_ALLOWED" : "NO",
- "FRAMEWORK_VERSION" : "A",
- "LD_DYLIB_INSTALL_NAME" : "",
- "GCC_INLINES_ARE_PRIVATE_EXTERN" : "NO",
- "INSTALL_PATH" : "$(LOCAL_LIBRARY_DIR)\/Frameworks",
- "WRAPPER_SUFFIX" : ".$(WRAPPER_EXTENSION)",
- "MACH_O_TYPE" : "staticlib"
+
+ // Application
+ { Type = ProductType;
+ Identifier = com.apple.product-type.application;
+ BasedOn = com.apple.product-type.bundle;
+ Class = PBXApplicationProductType;
+ Name = "Application";
+ Description = "Application";
+ IconNamePrefix = "TargetApp";
+ DefaultTargetName = "Application";
+ DefaultBuildProperties = {
+ MACH_O_TYPE = "mh_execute";
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_SYMBOLS_PRIVATE_EXTERN = YES;
+ GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
+ WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)";
+ WRAPPER_EXTENSION = "app";
+ INSTALL_PATH = "$(LOCAL_APPS_DIR)";
+ STRIP_STYLE = "all";
+ CODE_SIGNING_ALLOWED = YES;
+ LD_RUNPATH_SEARCH_PATHS = "$(LD_RUNPATH_SEARCH_PATHS_$(IS_MACCATALYST))";
+ LD_RUNPATH_SEARCH_PATHS_YES = ( "@loader_path/../Frameworks", );
+ };
+ PackageTypes = (
+ com.apple.package-type.wrapper.application // default
+ );
+
+ /** Product type validation hooks */
+ Validation = {
+
+ // Checks - a dictionary of checks that are perform just prior to building the product
+ // Each dictionary key is the "XCPropertyMacroExpression" to evaluate
+ // The dictionary value contains the error message to display if the condition evaluates to false.
+ Checks = {
+ // This is intentially empty as currently all of the checks are done in-code for this particular application type. However, we enable the plubmbing for the validation tool spec infrastructure to be called to avoid any further hacks in pbxbuild or xcbuild. This is to enable rdar://problem/45590882.
+ };
+
+ // Determines if the legacy build system has support for this validation hook. This is a workaround for enabling additional validation in xcbuild (specifically for rdar://problem/45590882), which does not have the same plugin restriction that is imposed on pbxbuild's implementation of the validation hooks.
+ EnabledForLegacyBuildSystem = NO;
+
+ // ValidationToolSpec - the identifier of the tool (script) to run after a target is constructed.
+ ValidationToolSpec = "com.apple.build-tools.platform.validate";
+ };
+ CanEmbedCompilerSanitizerLibraries = YES;
+ RunpathSearchPathForEmbeddedFrameworks = "@executable_path/../Frameworks";
+ ValidateEmbeddedBinaries = YES;
+ ProvisioningProfileSupported = YES;
+ ProvisioningProfileRequired = NO;
+ WantsBundleIdentifierEditing = YES;
+ WantsSigningEditing = YES;
},
- "AlwaysPerformSeparateStrip" : "YES",
- "PackageTypes" : [
- "com.apple.package-type.wrapper.framework.static"
- ],
- "Type" : "ProductType",
- "BasedOn" : "com.apple.product-type.framework",
- "Name" : "Static Framework",
- "Identifier" : "com.apple.product-type.framework.static",
- "Description" : "Static Framework",
- "Class" : "XCStaticFrameworkProductType"
- },
- {
- "DefaultTargetName" : "Kernel Extension",
- "DefaultBuildProperties" : {
- "GCC_ENABLE_BUILTIN_FUNCTIONS" : "NO",
- "MODULE_START" : "0",
- "PRIVATE_HEADERS_FOLDER_PATH" : "$(KEXT_FRAMEWORK)\/Contents\/PrivateHeaders\/$(KEXT_FAMILY_NAME)",
- "WRAPPER_SUFFIX" : ".$(WRAPPER_EXTENSION)",
- "MACH_O_TYPE" : "mh_execute",
- "GCC_ENABLE_KERNEL_DEVELOPMENT" : "YES",
- "PRODUCT_TYPE_CPLUSPLUSFLAGS" : "$(inherited) $(KEXT_CPLUSPLUSFLAGS)",
- "MODULE_STOP" : "0",
- "GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS" : "YES",
- "GCC_PRODUCT_TYPE_PREPROCESSOR_DEFINITIONS" : "$(inherited) KERNEL KERNEL_PRIVATE DRIVER_PRIVATE APPLE NeXT",
- "GCC_DISABLE_STATIC_FUNCTION_INLINING" : "YES",
- "ENABLE_APPLE_KEXT_CODE_GENERATION" : "YES",
- "CODE_SIGNING_ALLOWED" : "YES",
- "GCC_FORCE_CPU_SUBTYPE_ALL" : "YES",
- "PRODUCT_SPECIFIC_LDFLAGS" : "$(inherited) $(KEXT_LDFLAGS)",
- "WRAPPER_EXTENSION" : "kext",
- "KERNEL_EXTENSION_HEADER_SEARCH_PATHS" : "$(KERNEL_FRAMEWORK)\/PrivateHeaders $(KERNEL_FRAMEWORK_HEADERS)",
- "GCC_INLINES_ARE_PRIVATE_EXTERN" : "NO",
- "PRODUCT_TYPE_CFLAGS" : "$(inherited) $(KEXT_CFLAGS)",
- "KEXT_FRAMEWORK_NAME" : "Kernel",
- "GCC_NO_COMMON_BLOCKS" : "YES",
- "GCC_ENABLE_PASCAL_STRINGS" : "NO",
- "PUBLIC_HEADERS_FOLDER_PATH" : "$(KEXT_FRAMEWORK)\/Contents\/Headers\/$(KEXT_FAMILY_NAME)",
- "GCC_ENABLE_FUNCTION_INLINING" : "YES",
- "KERNEL_FRAMEWORK_HEADERS" : "$(KERNEL_FRAMEWORK)\/Headers",
- "KEXT_FAMILY_NAME" : "family",
- "KEXT_FRAMEWORK" : "$(SYSTEM_LIBRARY_DIR)\/Frameworks\/$(KEXT_FRAMEWORK_NAME).framework",
- "GCC_ENABLE_CPP_EXCEPTIONS" : "NO",
- "GCC_ENABLE_CPP_RTTI" : "NO",
- "MODULE_NAME" : "com.company.driver.modulename",
- "GCC_USE_STANDARD_INCLUDE_SEARCHING" : "NO",
- "KERNEL_FRAMEWORK" : "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)\/Frameworks\/Kernel.framework",
- "MODULE_VERSION" : "1.0",
- "INSTALL_PATH" : "$(DEFAULT_KEXT_INSTALL_PATH)",
- "PRODUCT_TYPE_HEADER_SEARCH_PATHS" : "$(inherited) $(KERNEL_EXTENSION_HEADER_SEARCH_PATHS)",
- "GCC_CHECK_RETURN_VALUE_OF_OPERATOR_NEW" : "YES",
- "STRIP_STYLE" : "debugging"
+
+ // Shallow Application Product
+ { Type = ProductType;
+ Identifier = com.apple.product-type.application.shallow;
+ BasedOn = com.apple.product-type.application;
+ Class = PBXApplicationProductType; // see radar 5604879, this shouldn't be necesary
+ Name = "Application (Shallow Bundle)";
+ Description = "Application (Shallow Bundle)";
+ PackageTypes = (
+ com.apple.package-type.wrapper.application.shallow
+ );
},
- "PackageTypes" : [
- "com.apple.package-type.wrapper.kernel-extension",
- "com.apple.package-type.wrapper.kernel-extension.shallow"
- ],
- "Type" : "ProductType",
- "BasedOn" : "com.apple.product-type.bundle",
- "Name" : "Kernel Extension",
- "Identifier" : "com.apple.product-type.kernel-extension",
- "Description" : "Kernel extension",
- "Class" : "XCKernelExtensionProductType"
- },
- {
- "DefaultBuildProperties" : {
+ // Java Application
+ { Type = ProductType;
+ Identifier = com.apple.product-type.application.java;
+ BasedOn = com.apple.product-type.application;
+ Name = "Java Application";
+ Description = "Java Application";
+ DefaultTargetName = "Java Application";
+ DefaultBuildProperties = {
+ INFOPLIST_PATH = "";
+ PKGINFO_PATH = "";
+ };
+ IsJava = YES;
},
- "PackageTypes" : [
- "com.apple.package-type.wrapper.kernel-extension.shallow"
- ],
- "Type" : "ProductType",
- "BasedOn" : "com.apple.product-type.kernel-extension",
- "Name" : "Kernel Extension (Shallow)",
- "Identifier" : "com.apple.product-type.kernel-extension.shallow",
- "Description" : "Kernel extension (shallow)",
- "Class" : "XCKernelExtensionProductType"
- },
- {
- "DefaultTargetName" : "IOKit Kernel Extension",
- "DefaultBuildProperties" : {
- "CODE_SIGNING_ALLOWED" : "YES"
+
+ // Framework
+ { Type = ProductType;
+ Identifier = com.apple.product-type.framework;
+ BasedOn = com.apple.product-type.bundle;
+ Class = PBXFrameworkProductType;
+ Name = "Framework";
+ Description = "Framework";
+ IconNamePrefix = "TargetFramework";
+ DefaultTargetName = "Framework";
+ DefaultBuildProperties = {
+ MACH_O_TYPE = "mh_dylib";
+ FRAMEWORK_VERSION = "A";
+ WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)";
+ WRAPPER_EXTENSION = "framework";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ DYLIB_INSTALL_NAME_BASE = "$(INSTALL_PATH)";
+ LD_DYLIB_INSTALL_NAME = "$(DYLIB_INSTALL_NAME_BASE:standardizepath)/$(EXECUTABLE_PATH)";
+ STRIP_STYLE = "debugging";
+ CODE_SIGNING_ALLOWED = YES;
+ CODE_SIGNING_REQUIRED = NO;
+ ENTITLEMENTS_REQUIRED = NO;
+ CODE_SIGNING_REQUIRES_TEAM = YES;
+ };
+ PackageTypes = (
+ com.apple.package-type.wrapper.framework // default
+ );
},
- "PackageTypes" : [
- "com.apple.package-type.wrapper.kernel-extension",
- "com.apple.package-type.wrapper.kernel-extension.shallow"
- ],
- "Type" : "ProductType",
- "BasedOn" : "com.apple.product-type.kernel-extension",
- "Name" : "IOKit Kernel Extension",
- "Identifier" : "com.apple.product-type.kernel-extension.iokit",
- "Description" : "IOKit Kernel extension",
- "Class" : "XCKernelExtensionProductType"
- },
- {
- "DefaultTargetName" : "IOKit Kernel Extension (Shallow)",
- "DefaultBuildProperties" : {
+ // Shallow Framework Product
+ { Type = ProductType;
+ Identifier = com.apple.product-type.framework.shallow;
+ BasedOn = com.apple.product-type.framework;
+ Class = PBXFrameworkProductType;
+ Name = "Framework (Shallow Bundle)";
+ Description = "Framework (Shallow Bundle)";
+ PackageTypes = (
+ com.apple.package-type.wrapper.framework.shallow
+ );
},
- "PackageTypes" : [
- "com.apple.package-type.wrapper.kernel-extension.shallow"
- ],
- "Type" : "ProductType",
- "BasedOn" : "com.apple.product-type.kernel-extension",
- "Name" : "IOKit Kernel Extension (Shallow)",
- "Identifier" : "com.apple.product-type.kernel-extension.iokit.shallow",
- "Description" : "IOKit Kernel extension (Shallow)",
- "Class" : "XCKernelExtensionProductType"
- },
- {
- "DefaultBuildProperties" : {
- "TEST_FRAMEWORK_SEARCH_PATHS" : [
- "$(inherited)",
- "$(PLATFORM_DIR)\/Developer\/Library\/Frameworks"
- ],
- "PRODUCT_SPECIFIC_LDFLAGS" : "-framework XCTest",
- "WRAPPER_EXTENSION" : "xctest",
- "PRODUCT_TYPE_FRAMEWORK_SEARCH_PATHS" : "$(TEST_FRAMEWORK_SEARCH_PATHS)"
+
+ // Static framework
+ { Type = ProductType;
+ Identifier = com.apple.product-type.framework.static;
+ BasedOn = com.apple.product-type.framework;
+ Class = XCStaticFrameworkProductType;
+ Name = "Static Framework";
+ Description = "Static Framework";
+ IconNamePrefix = "TargetFramework";
+ DefaultTargetName = "Static Framework";
+ DefaultBuildProperties = {
+ MACH_O_TYPE = "staticlib";
+ FRAMEWORK_VERSION = "A";
+ WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)";
+ WRAPPER_EXTENSION = "framework";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ DYLIB_INSTALL_NAME_BASE = "";
+ LD_DYLIB_INSTALL_NAME = "";
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO;
+ CODE_SIGNING_ALLOWED = NO;
+ };
+ AlwaysPerformSeparateStrip = YES;
+ PackageTypes = (
+ com.apple.package-type.wrapper.framework.static // default
+ );
},
- "PackageTypes" : [
- "com.apple.package-type.bundle.unit-test"
- ],
- "CanEmbedCompilerSanitizerLibraries" : "YES",
- "IsUnitTest" : "YES",
- "Type" : "ProductType",
- "BasedOn" : "com.apple.product-type.bundle",
- "Name" : "Unit Test Bundle",
- "Identifier" : "com.apple.product-type.bundle.unit-test",
- "Description" : "Unit Test Bundle",
- "Class" : "PBXXCTestBundleProductType"
- },
- {
- "DefaultBuildProperties" : {
- "TEST_FRAMEWORK_SEARCH_PATHS" : [
- "$(inherited)",
- "$(PLATFORM_DIR)\/Developer\/Library\/Frameworks"
- ],
- "PRODUCT_SPECIFIC_LDFLAGS" : "-framework XCTest",
- "WRAPPER_EXTENSION" : "xctest",
- "USES_XCTRUNNER" : "YES",
- "PRODUCT_TYPE_FRAMEWORK_SEARCH_PATHS" : "$(TEST_FRAMEWORK_SEARCH_PATHS)"
+
+ // System extension
+ { Type = ProductType;
+ Identifier = com.apple.product-type.system-extension;
+ BasedOn = com.apple.product-type.bundle;
+ Name = "DriverKit Driver";
+ Description = "DriverKit driver";
+ DefaultTargetName = "DriverKit Driver";
+ DefaultBuildProperties = {
+ MACH_O_TYPE = "mh_execute";
+ WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)";
+ WRAPPER_EXTENSION = "systemextension";
+
+ PRODUCT_NAME = "$(PRODUCT_BUNDLE_IDENTIFIER)";
+ };
+ PackageTypes = (
+ com.apple.package-type.wrapper.system-extension,
+ );
+ ProvisioningProfileSupported = YES;
+ ProvisioningProfileRequired = NO;
},
- "PackageTypes" : [
- "com.apple.package-type.bundle.unit-test"
- ],
- "ProvisioningProfileSupported" : "YES",
- "IsUITest" : "YES",
- "Type" : "ProductType",
- "BasedOn" : "com.apple.product-type.bundle.unit-test",
- "Name" : "UI Testing Bundle",
- "Identifier" : "com.apple.product-type.bundle.ui-testing",
- "Description" : "UI Testing Bundle",
- "Class" : "PBXXCTestBundleProductType"
- },
- {
- "DefaultBuildProperties" : {
- "WRAPPER_EXTENSION" : "octest"
+
+ // DriverKit driver
+ { Type = ProductType;
+ Identifier = com.apple.product-type.driver-extension;
+ BasedOn = com.apple.product-type.system-extension;
+ Name = "DriverKit Driver";
+ Description = "DriverKit driver";
+ DefaultTargetName = "DriverKit Driver";
+ DefaultBuildProperties = {
+ SDKROOT = "driverkit";
+ MACH_O_TYPE = "mh_execute";
+ WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)";
+ WRAPPER_EXTENSION = "dext";
+ INSTALL_PATH = "$(DEFAULT_DEXT_INSTALL_PATH)";
+ STRIP_STYLE = "debugging";
+
+ DEXT_FRAMEWORK_NAME = "DriverKit";
+ DEXT_FRAMEWORK = "$(SYSTEM_LIBRARY_DIR)/Frameworks/$(DEXT_FRAMEWORK_NAME).framework";
+
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+
+ PRODUCT_NAME = "$(PRODUCT_BUNDLE_IDENTIFIER)";
+ PRODUCT_TYPE_HEADER_SEARCH_PATHS = "$(inherited) $(IIG_HEADERS_DIR)";
+ };
+ DefaultEntitlements = {
+ "com.apple.developer.driverkit" = YES;
+ };
+ PackageTypes = (
+ com.apple.package-type.wrapper.driver-extension,
+ );
},
- "PackageTypes" : [
- "com.apple.package-type.bundle.ocunit-test"
- ],
- "IsUnitTest" : "YES",
- "Type" : "ProductType",
- "BasedOn" : "com.apple.product-type.bundle",
- "Name" : "OCUnit Test Bundle",
- "Identifier" : "com.apple.product-type.bundle.ocunit-test",
- "Description" : "OCUnit Test Bundle",
- "Class" : "PBXBundleProductType"
- },
- {
- "HasInfoPlistStrings" : "NO",
- "PackageTypes" : [
- "com.apple.package-type.in-app-purchase-content"
- ],
- "HasInfoPlist" : "YES",
- "IsWrapper" : "YES",
- "Type" : "ProductType",
- "DefaultBuildProperties" : {
- "FULL_PRODUCT_NAME" : "$(WRAPPER_NAME)"
+
+ // Kernel Extension
+ { Type = ProductType;
+ Identifier = com.apple.product-type.kernel-extension;
+ BasedOn = com.apple.product-type.bundle;
+ Class = XCKernelExtensionProductType;
+ Name = "Kernel Extension";
+ Description = "Kernel extension";
+ DefaultTargetName = "Kernel Extension";
+ DefaultBuildProperties = {
+ MACH_O_TYPE = "mh_execute";
+ WRAPPER_SUFFIX = ".$(WRAPPER_EXTENSION)";
+ WRAPPER_EXTENSION = "kext";
+ INSTALL_PATH = "$(DEFAULT_KEXT_INSTALL_PATH)";
+ STRIP_STYLE = "debugging";
+
+ KEXT_FRAMEWORK_NAME = "Kernel";
+ KEXT_FRAMEWORK = "$(SYSTEM_LIBRARY_DIR)/Frameworks/$(KEXT_FRAMEWORK_NAME).framework";
+ KEXT_FAMILY_NAME = "family";
+ PUBLIC_HEADERS_FOLDER_PATH = "$(KEXT_FRAMEWORK)/Contents/Headers/$(KEXT_FAMILY_NAME)";
+ PRIVATE_HEADERS_FOLDER_PATH = "$(KEXT_FRAMEWORK)/Contents/PrivateHeaders/$(KEXT_FAMILY_NAME)";
+ MODULE_NAME = "com.company.driver.modulename";
+ MODULE_VERSION = "1.0";
+ MODULE_START = "0";
+ MODULE_STOP = "0";
+
+ ENABLE_APPLE_KEXT_CODE_GENERATION = YES; // -fapple-kext
+ GCC_ENABLE_KERNEL_DEVELOPMENT = YES; // -mkernel
+
+ GCC_USE_STANDARD_INCLUDE_SEARCHING = NO; // -nostdinc
+ GCC_ENABLE_PASCAL_STRINGS = NO; // Disables -fpascal-strings
+ GCC_FORCE_CPU_SUBTYPE_ALL = YES; // -force_cpusubtype_ALL
+ GCC_CHECK_RETURN_VALUE_OF_OPERATOR_NEW = YES; // -fcheck-new
+ GCC_INLINES_ARE_PRIVATE_EXTERN = NO; // -fvisibility-inlines-hidden
+ GCC_ENABLE_BUILTIN_FUNCTIONS = NO; // -fno-builtin
+ GCC_NO_COMMON_BLOCKS = YES; // -fno-common
+ GCC_ENABLE_CPP_EXCEPTIONS = NO; // -fno-exceptions
+ GCC_ENABLE_CPP_RTTI = NO; // -fno-rtti
+
+ // Supposedly these two flags are the default in GCC, but they're provided here for compatibility with older Xcode versions.
+ GCC_ENABLE_FUNCTION_INLINING = YES; // -finline
+ GCC_DISABLE_STATIC_FUNCTION_INLINING = YES; // -fno-keep-inline-functions
+
+ // Per-product-type settings.
+ // The KERNEL_*** settings are defined differently for some SDKs, so we continue to use them for compatibility reasons.
+ KERNEL_FRAMEWORK = "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/Frameworks/Kernel.framework";
+ KERNEL_FRAMEWORK_HEADERS = "$(KERNEL_FRAMEWORK)/Headers";
+ KERNEL_EXTENSION_HEADER_SEARCH_PATHS = "$(KERNEL_FRAMEWORK)/PrivateHeaders $(KERNEL_FRAMEWORK_HEADERS)";
+ // These settings are reserved for use by product types.
+ GCC_PRODUCT_TYPE_PREPROCESSOR_DEFINITIONS = "$(inherited) KERNEL KERNEL_PRIVATE DRIVER_PRIVATE APPLE NeXT";
+ PRODUCT_TYPE_CFLAGS = "$(inherited) $(KEXT_CFLAGS)";
+ PRODUCT_TYPE_CPLUSPLUSFLAGS = "$(inherited) $(KEXT_CPLUSPLUSFLAGS)";
+ PRODUCT_SPECIFIC_LDFLAGS = "$(inherited) $(KEXT_LDFLAGS)";
+ PRODUCT_TYPE_HEADER_SEARCH_PATHS = "$(inherited) $(KERNEL_EXTENSION_HEADER_SEARCH_PATHS)";
+
+ CODE_SIGNING_ALLOWED = YES;
+
+ ARCHS_STANDARD = "arm64e x86_64";
+ ARCHS_STANDARD_64_BIT = "$(ARCHS_STANDARD)";
+ ARCHS_STANDARD_INCLUDING_64_BIT = "$(ARCHS_STANDARD)";
+ };
+ PackageTypes = (
+ com.apple.package-type.wrapper.kernel-extension, // Default
+ com.apple.package-type.wrapper.kernel-extension.shallow,
+ );
+ },
+
+ // Shallow Kernel Extension
+ {
+ Type = ProductType;
+ Identifier = com.apple.product-type.kernel-extension.shallow;
+ BasedOn = com.apple.product-type.kernel-extension;
+ Class = XCKernelExtensionProductType;
+ Name = "Kernel Extension (Shallow)";
+ Description = "Kernel extension (shallow)";
+ DefaultBuildProperties = {
+ // None yet
+ };
+ PackageTypes = (
+ com.apple.package-type.wrapper.kernel-extension.shallow,
+ );
+ },
+
+ // IOKit Kernel Extension
+ { Type = ProductType;
+ Identifier = com.apple.product-type.kernel-extension.iokit;
+ BasedOn = com.apple.product-type.kernel-extension;
+ Class = XCKernelExtensionProductType;
+ Name = "IOKit Kernel Extension";
+ Description = "IOKit Kernel extension";
+ DefaultTargetName = "IOKit Kernel Extension";
+ DefaultBuildProperties = {
+ CODE_SIGNING_ALLOWED = YES;
+ };
+ PackageTypes = (
+ com.apple.package-type.wrapper.kernel-extension, // Default
+ com.apple.package-type.wrapper.kernel-extension.shallow,
+ );
+ },
+
+ // Shallow IOKit Kernel Extension
+ { Type = ProductType;
+ Identifier = com.apple.product-type.kernel-extension.iokit.shallow;
+ BasedOn = com.apple.product-type.kernel-extension;
+ Class = XCKernelExtensionProductType;
+ Name = "IOKit Kernel Extension (Shallow)";
+ Description = "IOKit Kernel extension (Shallow)";
+ DefaultTargetName = "IOKit Kernel Extension (Shallow)";
+ DefaultBuildProperties = {
+ // None yet
+ };
+ PackageTypes = (
+ com.apple.package-type.wrapper.kernel-extension.shallow,
+ );
+ },
+
+ // Unit Test Bundle
+ { Type = ProductType;
+ Identifier = com.apple.product-type.bundle.unit-test;
+ BasedOn = com.apple.product-type.bundle;
+ Class = PBXXCTestBundleProductType;
+ Name = "Unit Test Bundle";
+ Description = "Unit Test Bundle";
+ DefaultBuildProperties = {
+ WRAPPER_EXTENSION = "xctest";
+ ENABLE_TESTING_SEARCH_PATHS = YES;
+ PRODUCT_SPECIFIC_LDFLAGS = "-framework XCTest";
+ XCTRUNNER_PATH = "$(XCTRUNNER_PATH$(TEST_BUILD_STYLE))";
+ LD_RUNPATH_SEARCH_PATHS = "$(LD_RUNPATH_SEARCH_PATHS_$(IS_MACCATALYST))";
+ LD_RUNPATH_SEARCH_PATHS_YES = (
+ "@loader_path/../Frameworks",
+ "@executable_path/../Frameworks",
+ );
+ };
+ PackageTypes = (
+ com.apple.package-type.bundle.unit-test
+ );
+ CanEmbedCompilerSanitizerLibraries = YES;
+ IsUnitTest = YES;
+ WantsBundleIdentifierEditing = NO;
+ },
+
+ // UI Testing Bundle
+ { Type = ProductType;
+ Identifier = com.apple.product-type.bundle.ui-testing;
+ BasedOn = com.apple.product-type.bundle.unit-test;
+ Class = PBXXCTestBundleProductType;
+ Name = "UI Testing Bundle";
+ Description = "UI Testing Bundle";
+ DefaultBuildProperties = {
+ USES_XCTRUNNER = "YES";
+ };
+ PackageTypes = (
+ com.apple.package-type.bundle.unit-test
+ );
+ ProvisioningProfileSupported = YES;
+ IsUITest = YES;
+ InfoPlistAdditions = {
+ XCTContainsUITests = YES;
+ };
+ WantsBundleIdentifierEditing = NO;
},
- "Name" : "In-App Purchase Content",
- "Identifier" : "com.apple.product-type.in-app-purchase-content",
- "Description" : "In-App Purchase Content",
- "Class" : "PBXBundleProductType"
- },
- {
- "IconNamePrefix" : "XPCService",
- "DefaultTargetName" : "XPC Service",
- "CanEmbedCompilerSanitizerLibraries" : "YES",
- "DefaultBuildProperties" : {
- "MACH_O_TYPE" : "mh_execute",
- "WRAPPER_EXTENSION" : "xpc"
+
+ // Legacy OCUnit Test Bundle
+ { Type = ProductType;
+ Identifier = com.apple.product-type.bundle.ocunit-test;
+ BasedOn = com.apple.product-type.bundle;
+ Class = PBXBundleProductType;
+ Name = "OCUnit Test Bundle";
+ Description = "OCUnit Test Bundle";
+ DefaultBuildProperties = {
+ WRAPPER_EXTENSION = "octest";
+ };
+ PackageTypes = (
+ com.apple.package-type.bundle.ocunit-test
+ );
+ IsUnitTest = YES;
+ },
+
+ // In-App Purchase Content
+ { Type = ProductType;
+ Identifier = com.apple.product-type.in-app-purchase-content;
+ Class = PBXBundleProductType;
+ Name = "In-App Purchase Content";
+ Description = "In-App Purchase Content";
+ DefaultBuildProperties = {
+ CODE_SIGNING_ALLOWED = NO;
+ FULL_PRODUCT_NAME = "$(WRAPPER_NAME)";
+ };
+ PackageTypes = (
+ com.apple.package-type.in-app-purchase-content, // default
+ );
+ IsWrapper = YES;
+ HasInfoPlist = YES;
+ HasInfoPlistStrings = NO;
+ },
+
+ // XPC Service
+ {
+ Type = ProductType;
+ Identifier = "com.apple.product-type.xpc-service";
+ BasedOn = "com.apple.product-type.bundle";
+ Class = PBXBundleProductType;
+ Name = "XPC Service";
+ Description = "XPC Service";
+ IconNamePrefix = XPCService;
+ DefaultTargetName = "XPC Service";
+ CanEmbedCompilerSanitizerLibraries = YES;
+ "DefaultBuildProperties" = {
+ "MACH_O_TYPE" = "mh_execute";
+ WRAPPER_EXTENSION = "xpc";
+ LD_RUNPATH_SEARCH_PATHS = "$(LD_RUNPATH_SEARCH_PATHS_$(IS_MACCATALYST)_$(_BOOL_$(SKIP_INSTALL)))";
+ LD_RUNPATH_SEARCH_PATHS_YES_YES = (
+ "@loader_path/../Frameworks",
+ "@loader_path/../../../../Frameworks",
+ );
+ LD_RUNPATH_SEARCH_PATHS_YES_NO = ( "@loader_path/../Frameworks", );
+ };
+ PackageTypes = (
+ "com.apple.package-type.xpc-service",
+ );
+ ProvisioningProfileSupported = YES;
+ ProvisioningProfileRequired = NO;
+ WantsBundleIdentifierEditing = YES;
+ WantsSigningEditing = YES;
+ },
+
+ // PlugIn-Kit PlugIn
+ {
+ Type = ProductType;
+ Identifier = "com.apple.product-type.pluginkit-plugin";
+ BasedOn = "com.apple.product-type.xpc-service";
+ Class = PBXBundleProductType;
+ Name = "PlugInKit PlugIn";
+ Description = "PlugInKit PlugIn";
+ IconNamePrefix = XPCService;
+ DefaultTargetName = "PlugInKit PlugIn";
+ "DefaultBuildProperties" = {
+ "PRODUCT_SPECIFIC_LDFLAGS" = "$(SDKROOT)/System/Library/PrivateFrameworks/PlugInKit.framework/PlugInKit";
+ WRAPPER_EXTENSION = "pluginkit";
+ };
+ PackageTypes = (
+ "com.apple.package-type.pluginkit-plugin",
+ );
},
- "PackageTypes" : [
- "com.apple.package-type.xpc-service"
- ],
- "Type" : "ProductType",
- "BasedOn" : "com.apple.product-type.bundle",
- "Name" : "XPC Service",
- "Identifier" : "com.apple.product-type.xpc-service",
- "Description" : "XPC Service",
- "Class" : "PBXBundleProductType"
- },
- {
- "IconNamePrefix" : "XPCService",
- "DefaultTargetName" : "PlugInKit PlugIn",
- "DefaultBuildProperties" : {
- "WRAPPER_EXTENSION" : "pluginkit",
- "PRODUCT_SPECIFIC_LDFLAGS" : "$(SDKROOT)\/System\/Library\/PrivateFrameworks\/PlugInKit.framework\/PlugInKit"
+
+ // App Extension
+ {
+ Type = ProductType;
+ Identifier = "com.apple.product-type.app-extension";
+ BasedOn = "com.apple.product-type.pluginkit-plugin";
+ Class = PBXBundleProductType;
+ Name = "App Extension";
+ Description = "App Extension";
+ IconNamePrefix = AppExtension;
+ DefaultTargetName = "App Extension";
+ "DefaultBuildProperties" = {
+ "CODE_SIGNING_ALLOWED" = YES;
+ "APPLICATION_EXTENSION_API_ONLY" = YES;
+ "PRODUCT_SPECIFIC_LDFLAGS" = "-e _NSExtensionMain";
+ WRAPPER_EXTENSION = "appex";
+ };
+ PackageTypes = (
+ "com.apple.package-type.app-extension",
+ );
+ ProvisioningProfileSupported = YES;
+ ProvisioningProfileRequired = NO;
+ WantsBundleIdentifierEditing = YES;
+ WantsSigningEditing = YES;
},
- "PackageTypes" : [
- "com.apple.package-type.pluginkit-plugin"
- ],
- "Type" : "ProductType",
- "BasedOn" : "com.apple.product-type.xpc-service",
- "Name" : "PlugInKit PlugIn",
- "Identifier" : "com.apple.product-type.pluginkit-plugin",
- "Description" : "PlugInKit PlugIn",
- "Class" : "PBXBundleProductType"
- },
- {
- "Description" : "App Extension",
- "Class" : "PBXBundleProductType",
- "Name" : "App Extension",
- "ProvisioningProfileSupported" : "YES",
- "DefaultTargetName" : "App Extension",
- "DefaultBuildProperties" : {
- "APPLICATION_EXTENSION_API_ONLY" : "YES",
- "PRODUCT_SPECIFIC_LDFLAGS" : "-e _NSExtensionMain",
- "WRAPPER_EXTENSION" : "appex",
- "CODE_SIGNING_ALLOWED" : "YES"
+
+ // Xcode Extension
+ {
+ Type = ProductType;
+ Identifier = "com.apple.product-type.xcode-extension";
+ BasedOn = "com.apple.product-type.app-extension";
+ Name = "Xcode Extension";
+ Description = "Xcode Extension";
+ IconNamePrefix = XcodeExtension;
+ DefaultTargetName = "Xcode Extension";
+ "DefaultBuildProperties" = {
+ "CODE_SIGNING_ALLOWED" = YES;
+ "APPLICATION_EXTENSION_API_ONLY" = YES;
+ "PRODUCT_SPECIFIC_LDFLAGS" = "-e _XCExtensionMain -lXcodeExtension";
+ "PRODUCT_TYPE_FRAMEWORK_SEARCH_PATHS" = (
+ "$(inherited)",
+ "$(DEVELOPER_FRAMEWORKS_DIR)",
+ );
+ "PRODUCT_TYPE_LIBRARY_SEARCH_PATHS" = (
+ "$(inherited)",
+ "$(DEVELOPER_USR_DIR)/lib",
+ );
+ LD_RUNPATH_SEARCH_PATHS = (
+ "@loader_path/../Frameworks",
+ );
+ WRAPPER_EXTENSION = "appex";
+ };
+ PackageTypes = (
+ "com.apple.package-type.app-extension",
+ );
+ ProvisioningProfileSupported = YES;
+ ProvisioningProfileRequired = NO;
+ WantsBundleIdentifierEditing = YES;
+ WantsSigningEditing = YES;
},
- "BasedOn" : "com.apple.product-type.pluginkit-plugin",
- "ProvisioningProfileRequired" : "NO",
- "PackageTypes" : [
- "com.apple.package-type.app-extension"
- ],
- "Type" : "ProductType",
- "Identifier" : "com.apple.product-type.app-extension",
- "IconNamePrefix" : "AppExtension"
- },
- {
- "Description" : "Xcode Extension",
- "Class" : "PBXBundleProductType",
- "Name" : "Xcode Extension",
- "ProvisioningProfileSupported" : "YES",
- "DefaultTargetName" : "Xcode Extension",
- "DefaultBuildProperties" : {
- "APPLICATION_EXTENSION_API_ONLY" : "YES",
- "PRODUCT_SPECIFIC_LDFLAGS" : "-e _XCExtensionMain -lXcodeExtension -weak_framework XcodeKit",
- "PRODUCT_TYPE_LIBRARY_SEARCH_PATHS" : [
- "$(inherited)",
- "$(DEVELOPER_USR_DIR)\/lib"
- ],
- "CODE_SIGNING_ALLOWED" : "YES",
- "WRAPPER_EXTENSION" : "appex",
- "PRODUCT_TYPE_FRAMEWORK_SEARCH_PATHS" : [
- "$(inherited)",
- "$(DEVELOPER_FRAMEWORKS_DIR)"
- ]
+
+ // Spotlight Importer
+ {
+ Type = ProductType;
+ Identifier = "com.apple.product-type.spotlight-importer";
+ BasedOn = "com.apple.product-type.bundle";
+ Class = PBXBundleProductType;
+ Name = "Spotlight Importer";
+ Description = "Spotlight Importer";
+ DefaultTargetName = "Spotlight";
+ "DefaultBuildProperties" = {
+ "CODE_SIGNING_ALLOWED" = YES;
+ };
+ PackageTypes = (
+ "com.apple.package-type.spotlight-importer",
+ );
},
- "BasedOn" : "com.apple.product-type.app-extension",
- "ProvisioningProfileRequired" : "NO",
- "PackageTypes" : [
- "com.apple.package-type.app-extension"
- ],
- "Type" : "ProductType",
- "Identifier" : "com.apple.product-type.xcode-extension",
- "IconNamePrefix" : "XcodeExtension"
- },
- {
- "DefaultTargetName" : "Spotlight",
- "DefaultBuildProperties" : {
- "CODE_SIGNING_ALLOWED" : "YES"
+
+ // Copied from iOS specs to aid in build system diagnostic support.
+ // Later, we should put these in some central place.
+ {
+ Type = ProductType;
+ Identifier = "com.apple.product-type.app-extension.messages";
+ BasedOn = "com.apple.product-type.app-extension";
+ },
+
+ {
+ Type = ProductType;
+ Identifier = "com.apple.product-type.app-extension.messages-sticker-pack";
+ BasedOn = "com.apple.product-type.app-extension";
+ IsCapabilitiesUnsupported = YES;
+ WantsSimpleTargetEditing = YES;
+ DefaultBuildProperties = {
+ MESSAGES_APPLICATION_EXTENSION_PRODUCT_BINARY_SOURCE_PATH = "$(PLATFORM_DIR)/Library/Application Support/MessagesApplicationExtensionStub/MessagesApplicationExtensionStub";
+ ASSETCATALOG_COMPILER_INCLUDE_STICKER_CONTENT = YES;
+ ASSETCATALOG_COMPILER_TARGET_STICKERS_ICON_ROLE = "extension";
+ ASSETCATALOG_COMPILER_STICKER_PACK_IDENTIFIER_PREFIX = "$(PRODUCT_BUNDLE_IDENTIFIER).sticker-pack.";
+ };
+ AllowedBuildPhases = (
+ "com.apple.buildphase.resources",
+ "com.apple.buildphase.shell-script",
+ );
+ InfoPlistAdditions = {
+ LSApplicationIsStickerProvider = YES;
+ };
+ },
+
+ {
+ Type = ProductType;
+ Identifier = "com.apple.product-type.application.on-demand-install-capable";
+ BasedOn = "com.apple.product-type.application";
+ Name = "App Clip";
+ Description = "App Clip";
+ DefaultBuildProperties = {
+ ENABLE_ON_DEMAND_RESOURCES = NO;
+ ASSETCATALOG_COMPILER_STANDALONE_ICON_BEHAVIOR = none; // Don't include standalone icons to keep size down
+ PRODUCT_SPECIFIC_LDFLAGS = "$(inherited) -framework AppClip";
+ SKIP_INSTALL = YES;
+ };
+ DefaultEntitlements = {
+ "com.apple.developer.on-demand-install-capable" = YES;
+ };
+ SupportsOnDemandResources = NO;
+ IsEmbeddable = YES;
+ BuildPhaseInjectionsWhenEmbedding = (
+ {
+ BuildPhase = "CopyFiles";
+ Name = "Embed App Clips";
+ RunOnlyForDeploymentPostprocessing = NO;
+ DstSubFolderSpec = 16;
+ DstPath = "$(CONTENTS_FOLDER_PATH)/AppClips";
+ }
+ );
},
- "PackageTypes" : [
- "com.apple.package-type.spotlight-importer"
- ],
- "Type" : "ProductType",
- "BasedOn" : "com.apple.product-type.bundle",
- "Name" : "Spotlight Importer",
- "Identifier" : "com.apple.product-type.spotlight-importer",
- "Description" : "Spotlight Importer",
- "Class" : "PBXBundleProductType"
- }
-]
+)
diff --git a/src/app/config/configcommand.h b/src/app/config/configcommand.h
index 1574e3745..f8e2a8ae9 100644
--- a/src/app/config/configcommand.h
+++ b/src/app/config/configcommand.h
@@ -47,7 +47,7 @@
class ConfigCommand
{
public:
- enum Command { CfgSet, CfgUnset, CfgList, CfgExport, CfgImport, CfgNone };
+ enum Command { CfgSet, CfgUnset, CfgList, CfgExport, CfgImport, CfgAddProfile, CfgNone };
ConfigCommand() : command(CfgNone) {}
diff --git a/src/app/config/configcommandexecutor.cpp b/src/app/config/configcommandexecutor.cpp
index 0a6883aa7..a01058b11 100644
--- a/src/app/config/configcommandexecutor.cpp
+++ b/src/app/config/configcommandexecutor.cpp
@@ -42,6 +42,7 @@
#include "../shared/logging/consolelogger.h"
#include <tools/error.h>
+#include <tools/profile.h>
#include <tools/qttools.h>
#include <tools/settingsrepresentation.h>
@@ -73,6 +74,17 @@ void ConfigCommandExecutor::execute(const ConfigCommand &command)
for (const QString &varName : command.varNames)
m_settings->remove(varName);
break;
+ case ConfigCommand::CfgAddProfile: {
+ Profile profile(command.varValue, m_settings);
+ profile.removeProfile();
+ Q_ASSERT(command.varNames.size() % 2 == 0);
+ for (int i = 0; i < command.varNames.size(); i += 2) {
+ const QString &key = command.varNames.at(i);
+ const QString &rawValue = command.varNames.at(i + 1);
+ profile.setValue(key, representationToSettingsValue(rawValue));
+ }
+ break;
+ }
case ConfigCommand::CfgExport:
exportSettings(command.fileName);
break;
diff --git a/src/app/config/configcommandlineparser.cpp b/src/app/config/configcommandlineparser.cpp
index 2f2d1610e..8652a58bc 100644
--- a/src/app/config/configcommandlineparser.cpp
+++ b/src/app/config/configcommandlineparser.cpp
@@ -71,6 +71,8 @@ void ConfigCommandLineParser::parse(const QStringList &commandLine)
setCommand(ConfigCommand::CfgExport);
else if (arg == QLatin1String("import"))
setCommand(ConfigCommand::CfgImport);
+ else if (arg == QLatin1String("add-profile"))
+ setCommand(ConfigCommand::CfgAddProfile);
else if (arg == QLatin1String("settings-dir"))
assignOptionArgument(arg, m_settingsDir);
else if (arg == QLatin1String("user"))
@@ -113,6 +115,22 @@ void ConfigCommandLineParser::parse(const QStringList &commandLine)
case ConfigCommand::CfgList:
m_command.varNames = m_commandLine;
break;
+ case ConfigCommand::CfgAddProfile:
+ if (m_commandLine.empty())
+ throw Error(Tr::tr("Profile name missing."));
+ m_command.varValue = m_commandLine.takeFirst();
+ if (m_command.varValue.isEmpty())
+ throw Error(Tr::tr("Profile name must not be empty."));
+ m_command.varNames = m_commandLine;
+ if (m_command.varNames.isEmpty())
+ throw Error(Tr::tr("Profile properties must be provided."));
+ if (m_command.varNames.size() % 2 != 0)
+ throw Error(Tr::tr("Profile properties must be key/value pairs."));
+ for (int i = 0; i < m_command.varNames.size(); ++i) {
+ if (m_command.varNames.at(i).isEmpty())
+ throw Error(Tr::tr("Property names must not be empty."));
+ }
+ break;
default:
break;
}
@@ -140,12 +158,13 @@ void ConfigCommandLineParser::printUsage() const
" qbs config [--settings-dir <settings directory] <key> <value>"
"\n"
"Options:\n"
- " --list [<root> ...] list keys under key <root> or all keys\n"
- " --user consider only user-level settings\n"
- " --system consider only system-level settings\n"
- " --unset <name> remove key with given name\n"
- " --import <file> import settings from given file\n"
- " --export <file> export settings to given file\n");
+ " --list [<root> ...] list keys under key <root> or all keys\n"
+ " --user consider only user-level settings\n"
+ " --system consider only system-level settings\n"
+ " --unset <name> remove key with given name\n"
+ " --add-profile <name> <key> <value> ... add profile with the given name and properties\n"
+ " --import <file> import settings from given file\n"
+ " --export <file> export settings to given file\n");
}
void ConfigCommandLineParser::assignOptionArgument(const QString &option, QString &argument)
diff --git a/src/shared/qtscript b/src/shared/qtscript
-Subproject 0d3b268f3880dea9555601fbd4d559201c239b7
+Subproject e19477e1129a4c64e023006c59878637d594e99
diff --git a/tests/auto/blackbox/testdata-android/qt-app/TestQt6.java b/tests/auto/blackbox/testdata-android/qt-app/TestQt6.java
new file mode 100644
index 000000000..239507122
--- /dev/null
+++ b/tests/auto/blackbox/testdata-android/qt-app/TestQt6.java
@@ -0,0 +1,54 @@
+package org.qbs.example;
+
+import org.qtproject.qt.android.bindings.QtActivity;
+import android.os.*;
+import android.content.*;
+import android.app.*;
+import android.util.Log;
+
+import java.lang.String;
+import android.content.Intent;
+
+import org.qbs.example.*;
+
+
+public class TestQt6 extends QtActivity
+{
+ public static native void testFunc(String test);
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ Log.d("qbs", "onCreate Test");
+ Intent theIntent = getIntent();
+ if (theIntent != null) {
+ String theAction = theIntent.getAction();
+ if (theAction != null) {
+ Log.d("qbs onCreate ", theAction);
+ }
+ }
+ }
+
+ @Override
+ public void onDestroy() {
+ Log.d("qbs", "onDestroy");
+ System.exit(0);
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ Log.d("qbs onActivityResult", "requestCode: "+requestCode);
+ if (resultCode == RESULT_OK) {
+ Log.d("qbs onActivityResult - resultCode: ", "SUCCESS");
+ } else {
+ Log.d("qbs onActivityResult - resultCode: ", "CANCEL");
+ }
+ }
+
+ @Override
+ public void onNewIntent(Intent intent) {
+ Log.d("qbs", "onNewIntent");
+ super.onNewIntent(intent);
+ setIntent(intent);
+ }
+}
diff --git a/tests/auto/blackbox/testdata-android/qt-app/qt-app.qbs b/tests/auto/blackbox/testdata-android/qt-app/qt-app.qbs
index 94093af64..04dcbf403 100644
--- a/tests/auto/blackbox/testdata-android/qt-app/qt-app.qbs
+++ b/tests/auto/blackbox/testdata-android/qt-app/qt-app.qbs
@@ -1,7 +1,16 @@
Project {
QtGuiApplication {
Depends { name: "Lib" }
- files: ["main.cpp", "MainWindow.cpp", "MainWindow.h", "Test.java"]
+ files: ["main.cpp", "MainWindow.cpp", "MainWindow.h" ]
+ Group {
+ condition: Qt.core.versionMajor == 5
+ files: ["Test.java"]
+ }
+ Group {
+ condition: Qt.core.versionMajor == 6
+ files: ["TestQt6.java"]
+ }
+
Android.sdk.packageName: "my.qtapp"
Android.sdk.apkBaseName: name
Depends { name: "Qt"; submodules: ["core", "widgets"] }
diff --git a/tests/auto/blackbox/testdata/innosetup/inc/qbsinc.iss b/tests/auto/blackbox/testdata-windows/innosetup/inc/qbsinc.iss
index e69de29bb..e69de29bb 100644
--- a/tests/auto/blackbox/testdata/innosetup/inc/qbsinc.iss
+++ b/tests/auto/blackbox/testdata-windows/innosetup/inc/qbsinc.iss
diff --git a/tests/auto/blackbox/testdata/innosetup/innosetup.qbs b/tests/auto/blackbox/testdata-windows/innosetup/innosetup.qbs
index 718dec6f5..718dec6f5 100644
--- a/tests/auto/blackbox/testdata/innosetup/innosetup.qbs
+++ b/tests/auto/blackbox/testdata-windows/innosetup/innosetup.qbs
diff --git a/tests/auto/blackbox/testdata/innosetup/test.iss b/tests/auto/blackbox/testdata-windows/innosetup/test.iss
index f9f9195a6..f9f9195a6 100644
--- a/tests/auto/blackbox/testdata/innosetup/test.iss
+++ b/tests/auto/blackbox/testdata-windows/innosetup/test.iss
diff --git a/tests/auto/blackbox/testdata/innosetupDependencies/innosetupDependencies.qbs b/tests/auto/blackbox/testdata-windows/innosetupDependencies/innosetupDependencies.qbs
index ab68d3011..ab68d3011 100644
--- a/tests/auto/blackbox/testdata/innosetupDependencies/innosetupDependencies.qbs
+++ b/tests/auto/blackbox/testdata-windows/innosetupDependencies/innosetupDependencies.qbs
diff --git a/tests/auto/blackbox/testdata/innosetupDependencies/main.c b/tests/auto/blackbox/testdata-windows/innosetupDependencies/main.c
index 76e819701..76e819701 100644
--- a/tests/auto/blackbox/testdata/innosetupDependencies/main.c
+++ b/tests/auto/blackbox/testdata-windows/innosetupDependencies/main.c
diff --git a/tests/auto/blackbox/testdata/innosetupDependencies/test.iss b/tests/auto/blackbox/testdata-windows/innosetupDependencies/test.iss
index 430f9941b..430f9941b 100644
--- a/tests/auto/blackbox/testdata/innosetupDependencies/test.iss
+++ b/tests/auto/blackbox/testdata-windows/innosetupDependencies/test.iss
diff --git a/tests/auto/blackbox/testdata/wix/ExampleScript.bat b/tests/auto/blackbox/testdata-windows/wix/ExampleScript.bat
index 3af583cd8..3af583cd8 100644
--- a/tests/auto/blackbox/testdata/wix/ExampleScript.bat
+++ b/tests/auto/blackbox/testdata-windows/wix/ExampleScript.bat
diff --git a/tests/auto/blackbox/testdata/wix/QbsBootstrapper.wxs b/tests/auto/blackbox/testdata-windows/wix/QbsBootstrapper.wxs
index 272f6af5b..272f6af5b 100644
--- a/tests/auto/blackbox/testdata/wix/QbsBootstrapper.wxs
+++ b/tests/auto/blackbox/testdata-windows/wix/QbsBootstrapper.wxs
diff --git a/tests/auto/blackbox/testdata/wix/QbsSetup.wxs b/tests/auto/blackbox/testdata-windows/wix/QbsSetup.wxs
index 8f97ff667..8f97ff667 100644
--- a/tests/auto/blackbox/testdata/wix/QbsSetup.wxs
+++ b/tests/auto/blackbox/testdata-windows/wix/QbsSetup.wxs
diff --git a/tests/auto/blackbox/testdata/wix/Qt.wxs b/tests/auto/blackbox/testdata-windows/wix/Qt.wxs
index fbd992c43..fbd992c43 100644
--- a/tests/auto/blackbox/testdata/wix/Qt.wxs
+++ b/tests/auto/blackbox/testdata-windows/wix/Qt.wxs
diff --git a/tests/auto/blackbox/testdata/wix/WiXInstallers.qbs b/tests/auto/blackbox/testdata-windows/wix/WiXInstallers.qbs
index 07f61ba2c..07f61ba2c 100644
--- a/tests/auto/blackbox/testdata/wix/WiXInstallers.qbs
+++ b/tests/auto/blackbox/testdata-windows/wix/WiXInstallers.qbs
diff --git a/tests/auto/blackbox/testdata/wix/de.wxl b/tests/auto/blackbox/testdata-windows/wix/de.wxl
index 75394cfdd..75394cfdd 100644
--- a/tests/auto/blackbox/testdata/wix/de.wxl
+++ b/tests/auto/blackbox/testdata-windows/wix/de.wxl
diff --git a/tests/auto/blackbox/testdata/wixDependencies/QbsSetup.wxs b/tests/auto/blackbox/testdata-windows/wixDependencies/QbsSetup.wxs
index ec839a269..ec839a269 100644
--- a/tests/auto/blackbox/testdata/wixDependencies/QbsSetup.wxs
+++ b/tests/auto/blackbox/testdata-windows/wixDependencies/QbsSetup.wxs
diff --git a/tests/auto/blackbox/testdata/wixDependencies/main.c b/tests/auto/blackbox/testdata-windows/wixDependencies/main.c
index 76e819701..76e819701 100644
--- a/tests/auto/blackbox/testdata/wixDependencies/main.c
+++ b/tests/auto/blackbox/testdata-windows/wixDependencies/main.c
diff --git a/tests/auto/blackbox/testdata/wixDependencies/wixDependencies.qbs b/tests/auto/blackbox/testdata-windows/wixDependencies/wixDependencies.qbs
index d42a18054..d42a18054 100644
--- a/tests/auto/blackbox/testdata/wixDependencies/wixDependencies.qbs
+++ b/tests/auto/blackbox/testdata-windows/wixDependencies/wixDependencies.qbs
diff --git a/tests/auto/blackbox/tst_blackbox.cpp b/tests/auto/blackbox/tst_blackbox.cpp
index 1b9fa0b15..1082ba595 100644
--- a/tests/auto/blackbox/tst_blackbox.cpp
+++ b/tests/auto/blackbox/tst_blackbox.cpp
@@ -5958,6 +5958,67 @@ void TestBlackbox::qbsConfig()
}
}
+void TestBlackbox::qbsConfigAddProfile()
+{
+ QbsRunParameters params("config");
+ QTemporaryDir settingsDir1;
+ QTemporaryDir settingsDir2;
+ QVERIFY(settingsDir1.isValid());
+ QVERIFY(settingsDir2.isValid());
+ const QStringList settingsDir1Args = QStringList{"--settings-dir", settingsDir1.path()};
+ const QStringList settingsDir2Args = QStringList{"--settings-dir", settingsDir2.path()};
+
+ QFETCH(QStringList, args);
+ QFETCH(QString, errorMsg);
+
+ // Step 1: Run --add-profile.
+ params.arguments = settingsDir1Args;
+ params.arguments << "--add-profile";
+ params.arguments << args;
+ params.expectFailure = !errorMsg.isEmpty();
+ QCOMPARE(runQbs(params) == 0, !params.expectFailure);
+ if (params.expectFailure) {
+ QVERIFY(QString::fromLocal8Bit(m_qbsStderr).contains(errorMsg));
+ return;
+ }
+ params.expectFailure = false;
+ params.arguments = settingsDir1Args;
+ params.arguments << "--list";
+ QCOMPARE(runQbs(params), 0);
+ const QByteArray output1 = m_qbsStdout;
+
+ // Step 2: Set properties manually.
+ for (int i = 1; i < args.size(); i += 2) {
+ params.arguments = settingsDir2Args;
+ params.arguments << ("profiles." + args.first() + '.' + args.at(i)) << args.at(i + 1);
+ QCOMPARE(runQbs(params), 0);
+ }
+ params.arguments = settingsDir2Args;
+ params.arguments << "--list";
+ QCOMPARE(runQbs(params), 0);
+ const QByteArray output2 = m_qbsStdout;
+
+ // Step3: Compare results.
+ QCOMPARE(output1, output2);
+}
+
+void TestBlackbox::qbsConfigAddProfile_data()
+{
+ QTest::addColumn<QStringList>("args");
+ QTest::addColumn<QString>("errorMsg");
+ QTest::newRow("no arguments") << QStringList() << QString("Profile name missing");
+ QTest::newRow("empty name") << QStringList{"", "p", "v"}
+ << QString("Profile name must not be empty");
+ QTest::newRow("no properties") << QStringList("p")
+ << QString("Profile properties must be provided");
+ QTest::newRow("one property") << QStringList{"p", "p", "v"} << QString();
+ QTest::newRow("two properties") << QStringList{"p", "p1", "v1", "p2", "v2"} << QString();
+ QTest::newRow("missing value") << QStringList{"p", "p"}
+ << QString("Profile properties must be key/value pairs");
+ QTest::newRow("missing values") << QStringList{"p", "p1", "v1", "p2"}
+ << QString("Profile properties must be key/value pairs");
+}
+
static QJsonObject getNextSessionPacket(QProcess &session, QByteArray &data)
{
int totalSize = -1;
@@ -7362,94 +7423,6 @@ void TestBlackbox::generator_data()
QTest::newRow("no update") << QString() << QStringList();
}
-static bool haveWiX(const Profile &profile)
-{
- if (profile.value("wix.toolchainInstallPath").isValid() &&
- profile.value("wix.toolchainInstallRoot").isValid()) {
- return true;
- }
-
- QStringList regKeys;
- regKeys << QStringLiteral("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows Installer XML\\")
- << QStringLiteral("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Installer XML\\");
-
- QStringList paths = QProcessEnvironment::systemEnvironment().value("PATH")
- .split(HostOsInfo::pathListSeparator(), QBS_SKIP_EMPTY_PARTS);
-
- for (const QString &key : qAsConst(regKeys)) {
- const QStringList versions = QSettings(key, QSettings::NativeFormat).childGroups();
- for (const QString &version : versions) {
- QSettings settings(key + version, QSettings::NativeFormat);
- QString str = settings.value(QStringLiteral("InstallRoot")).toString();
- if (!str.isEmpty())
- paths.prepend(str);
- }
- }
-
- for (const QString &path : qAsConst(paths)) {
- if (regularFileExists(QDir::fromNativeSeparators(path) +
- HostOsInfo::appendExecutableSuffix(QStringLiteral("/candle"))) &&
- regularFileExists(QDir::fromNativeSeparators(path) +
- HostOsInfo::appendExecutableSuffix(QStringLiteral("/light")))) {
- return true;
- }
- }
-
- return false;
-}
-
-void TestBlackbox::wix()
-{
- const SettingsPtr s = settings();
- Profile profile(profileName(), s.get());
-
- if (!haveWiX(profile)) {
- QSKIP("WiX is not installed");
- return;
- }
-
- QByteArray arch = profile.value("qbs.architecture").toString().toLatin1();
- if (arch.isEmpty())
- arch = QByteArrayLiteral("x86");
-
- QDir::setCurrent(testDataDir + "/wix");
- QCOMPARE(runQbs(), 0);
- QVERIFY2(m_qbsStdout.contains("compiling QbsSetup.wxs"), m_qbsStdout);
- QVERIFY2(m_qbsStdout.contains("linking qbs.msi"), m_qbsStdout);
- QVERIFY(regularFileExists(relativeProductBuildDir("QbsSetup") + "/qbs.msi"));
-
- if (HostOsInfo::isWindowsHost()) {
- QVERIFY2(m_qbsStdout.contains("compiling QbsBootstrapper.wxs"), m_qbsStdout);
- QVERIFY2(m_qbsStdout.contains("linking qbs-setup-" + arch + ".exe"), m_qbsStdout);
- QVERIFY(regularFileExists(relativeProductBuildDir("QbsBootstrapper")
- + "/qbs-setup-" + arch + ".exe"));
- }
-}
-
-void TestBlackbox::wixDependencies()
-{
- const SettingsPtr s = settings();
- Profile profile(profileName(), s.get());
-
- if (!haveWiX(profile)) {
- QSKIP("WiX is not installed");
- return;
- }
-
- QByteArray arch = profile.value("qbs.architecture").toString().toLatin1();
- if (arch.isEmpty())
- arch = QByteArrayLiteral("x86");
-
- QDir::setCurrent(testDataDir + "/wixDependencies");
- QbsRunParameters params;
- if (!HostOsInfo::isWindowsHost())
- params.arguments << "qbs.targetOS:windows";
- QCOMPARE(runQbs(params), 0);
- QVERIFY2(m_qbsStdout.contains("compiling QbsSetup.wxs"), m_qbsStdout);
- QVERIFY2(m_qbsStdout.contains("linking qbs.msi"), m_qbsStdout);
- QVERIFY(regularFileExists(relativeBuildDir() + "/qbs.msi"));
-}
-
void TestBlackbox::nodejs()
{
const SettingsPtr s = settings();
@@ -7567,47 +7540,6 @@ void TestBlackbox::includeLookup()
QVERIFY2(m_qbsStdout.contains("definition.."), m_qbsStdout.constData());
}
-void TestBlackbox::innoSetup()
-{
- const SettingsPtr s = settings();
- Profile profile(profileName(), s.get());
-
- QDir::setCurrent(testDataDir + "/innosetup");
-
- QCOMPARE(runQbs({"resolve"}), 0);
- const bool withInnosetup = m_qbsStdout.contains("has innosetup: true");
- const bool withoutInnosetup = m_qbsStdout.contains("has innosetup: false");
- QVERIFY2(withInnosetup || withoutInnosetup, m_qbsStdout.constData());
- if (withoutInnosetup)
- QSKIP("innosetup module not present");
-
- QCOMPARE(runQbs(), 0);
- QVERIFY(m_qbsStdout.contains("compiling test.iss"));
- QVERIFY(m_qbsStdout.contains("compiling Example1.iss"));
- QVERIFY(regularFileExists(relativeProductBuildDir("QbsSetup") + "/qbs.setup.test.exe"));
- QVERIFY(regularFileExists(relativeProductBuildDir("Example1") + "/Example1.exe"));
-}
-
-void TestBlackbox::innoSetupDependencies()
-{
- const SettingsPtr s = settings();
- Profile profile(profileName(), s.get());
-
- QDir::setCurrent(testDataDir + "/innosetupDependencies");
-
- QCOMPARE(runQbs({"resolve"}), 0);
- const bool withInnosetup = m_qbsStdout.contains("has innosetup: true");
- const bool withoutInnosetup = m_qbsStdout.contains("has innosetup: false");
- QVERIFY2(withInnosetup || withoutInnosetup, m_qbsStdout.constData());
- if (withoutInnosetup)
- QSKIP("innosetup module not present");
-
- QbsRunParameters params;
- QCOMPARE(runQbs(params), 0);
- QVERIFY(m_qbsStdout.contains("compiling test.iss"));
- QVERIFY(regularFileExists(relativeBuildDir() + "/qbs.setup.test.exe"));
-}
-
void TestBlackbox::inputTagsChangeTracking_data()
{
QTest::addColumn<QString>("generateInput");
diff --git a/tests/auto/blackbox/tst_blackbox.h b/tests/auto/blackbox/tst_blackbox.h
index 8cc21378a..6395eb679 100644
--- a/tests/auto/blackbox/tst_blackbox.h
+++ b/tests/auto/blackbox/tst_blackbox.h
@@ -143,8 +143,6 @@ private slots:
void importingProduct();
void importsConflict();
void includeLookup();
- void innoSetup();
- void innoSetupDependencies();
void inputTagsChangeTracking_data();
void inputTagsChangeTracking();
void inputsFromDependencies();
@@ -258,6 +256,8 @@ private slots:
void protobufLibraryInstall();
void pseudoMultiplexing();
void qbsConfig();
+ void qbsConfigAddProfile();
+ void qbsConfigAddProfile_data();
void qbsSession();
void qbsVersion();
void qtBug51237();
@@ -335,8 +335,6 @@ private slots:
void wholeArchive_data();
void wildCardsAndRules();
void wildcardRenaming();
- void wix();
- void wixDependencies();
void zip();
void zip_data();
void zipInvalid();
diff --git a/tests/auto/blackbox/tst_blackboxandroid.cpp b/tests/auto/blackbox/tst_blackboxandroid.cpp
index f8ed8a0b9..df48c35e9 100644
--- a/tests/auto/blackbox/tst_blackboxandroid.cpp
+++ b/tests/auto/blackbox/tst_blackboxandroid.cpp
@@ -619,6 +619,8 @@ void TestBlackboxAndroid::android_data()
"lib/${ARCH}/libqml_QtQml_Models_modelsplugin_${ARCH}.so",
"lib/${ARCH}/libqml_QtQml_WorkerScript_workerscriptplugin_${ARCH}.so",
"lib/${ARCH}/libqml_QtQml_qmlplugin_${ARCH}.so",
+ "lib/${ARCH}/libqml_QtQuick_Window_quickwindow_${ARCH}.so",
+ "lib/${ARCH}/libqml_QtQuick_tooling_quicktooling_${ARCH}.so",
"lib/${ARCH}/libqml_QtQuick_Controls_Basic_impl_qtquickcontrols2basicstyleimplplugin_${ARCH}.so",
"lib/${ARCH}/libqml_QtQuick_Controls_Basic_qtquickcontrols2basicstyleplugin_${ARCH}.so",
"lib/${ARCH}/libqml_QtQuick_Controls_Fusion_impl_qtquickcontrols2fusionstyleimplplugin_${ARCH}.so",
@@ -774,6 +776,8 @@ void TestBlackboxAndroid::android_data()
"lib/${ARCH}/libqml_QtQml_Models_modelsplugin_${ARCH}.so",
"lib/${ARCH}/libqml_QtQml_WorkerScript_workerscriptplugin_${ARCH}.so",
"lib/${ARCH}/libqml_QtQml_qmlplugin_${ARCH}.so",
+ "lib/${ARCH}/libqml_QtQuick_Window_quickwindow_${ARCH}.so",
+ "lib/${ARCH}/libqml_QtQuick_tooling_quicktooling_${ARCH}.so",
"lib/${ARCH}/libqml_QtQuick_Controls_Basic_impl_qtquickcontrols2basicstyleimplplugin_${ARCH}.so",
"lib/${ARCH}/libqml_QtQuick_Controls_Basic_qtquickcontrols2basicstyleplugin_${ARCH}.so",
"lib/${ARCH}/libqml_QtQuick_Controls_Fusion_impl_qtquickcontrols2fusionstyleimplplugin_${ARCH}.so",
diff --git a/tests/auto/blackbox/tst_blackboxwindows.cpp b/tests/auto/blackbox/tst_blackboxwindows.cpp
index e3fb98457..94257c062 100644
--- a/tests/auto/blackbox/tst_blackboxwindows.cpp
+++ b/tests/auto/blackbox/tst_blackboxwindows.cpp
@@ -33,11 +33,14 @@
#include "../shared.h"
#include <tools/hostosinfo.h>
+#include <tools/profile.h>
+#include <tools/qttools.h>
#include <QtCore/qdir.h>
#include <QtCore/qregularexpression.h>
using qbs::Internal::HostOsInfo;
+using qbs::Profile;
struct SigntoolInfo
{
@@ -117,6 +120,47 @@ void TestBlackboxWindows::initTestCase()
TestBlackboxBase::initTestCase();
}
+void TestBlackboxWindows::innoSetup()
+{
+ const SettingsPtr s = settings();
+ Profile profile(profileName(), s.get());
+
+ QDir::setCurrent(testDataDir + "/innosetup");
+
+ QCOMPARE(runQbs({"resolve"}), 0);
+ const bool withInnosetup = m_qbsStdout.contains("has innosetup: true");
+ const bool withoutInnosetup = m_qbsStdout.contains("has innosetup: false");
+ QVERIFY2(withInnosetup || withoutInnosetup, m_qbsStdout.constData());
+ if (withoutInnosetup)
+ QSKIP("innosetup module not present");
+
+ QCOMPARE(runQbs(), 0);
+ QVERIFY(m_qbsStdout.contains("compiling test.iss"));
+ QVERIFY(m_qbsStdout.contains("compiling Example1.iss"));
+ QVERIFY(regularFileExists(relativeProductBuildDir("QbsSetup") + "/qbs.setup.test.exe"));
+ QVERIFY(regularFileExists(relativeProductBuildDir("Example1") + "/Example1.exe"));
+}
+
+void TestBlackboxWindows::innoSetupDependencies()
+{
+ const SettingsPtr s = settings();
+ Profile profile(profileName(), s.get());
+
+ QDir::setCurrent(testDataDir + "/innosetupDependencies");
+
+ QCOMPARE(runQbs({"resolve"}), 0);
+ const bool withInnosetup = m_qbsStdout.contains("has innosetup: true");
+ const bool withoutInnosetup = m_qbsStdout.contains("has innosetup: false");
+ QVERIFY2(withInnosetup || withoutInnosetup, m_qbsStdout.constData());
+ if (withoutInnosetup)
+ QSKIP("innosetup module not present");
+
+ QbsRunParameters params;
+ QCOMPARE(runQbs(params), 0);
+ QVERIFY(m_qbsStdout.contains("compiling test.iss"));
+ QVERIFY(regularFileExists(relativeBuildDir() + "/qbs.setup.test.exe"));
+}
+
void TestBlackboxWindows::standaloneCodesign()
{
QFETCH(SigntoolInfo::CodeSignResult, result);
@@ -171,4 +215,93 @@ void TestBlackboxWindows::standaloneCodesign_data()
<< "http://timestamp.digicert.com";
}
+
+static bool haveWiX(const Profile &profile)
+{
+ if (profile.value("wix.toolchainInstallPath").isValid() &&
+ profile.value("wix.toolchainInstallRoot").isValid()) {
+ return true;
+ }
+
+ QStringList regKeys;
+ regKeys << QStringLiteral("HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows Installer XML\\")
+ << QStringLiteral("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows Installer XML\\");
+
+ QStringList paths = QProcessEnvironment::systemEnvironment().value("PATH")
+ .split(HostOsInfo::pathListSeparator(), QBS_SKIP_EMPTY_PARTS);
+
+ for (const QString &key : qAsConst(regKeys)) {
+ const QStringList versions = QSettings(key, QSettings::NativeFormat).childGroups();
+ for (const QString &version : versions) {
+ QSettings settings(key + version, QSettings::NativeFormat);
+ QString str = settings.value(QStringLiteral("InstallRoot")).toString();
+ if (!str.isEmpty())
+ paths.prepend(str);
+ }
+ }
+
+ for (const QString &path : qAsConst(paths)) {
+ if (regularFileExists(QDir::fromNativeSeparators(path) +
+ HostOsInfo::appendExecutableSuffix(QStringLiteral("/candle"))) &&
+ regularFileExists(QDir::fromNativeSeparators(path) +
+ HostOsInfo::appendExecutableSuffix(QStringLiteral("/light")))) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+void TestBlackboxWindows::wix()
+{
+ const SettingsPtr s = settings();
+ Profile profile(profileName(), s.get());
+
+ if (!haveWiX(profile)) {
+ QSKIP("WiX is not installed");
+ return;
+ }
+
+ QByteArray arch = profile.value("qbs.architecture").toString().toLatin1();
+ if (arch.isEmpty())
+ arch = QByteArrayLiteral("x86");
+
+ QDir::setCurrent(testDataDir + "/wix");
+ QCOMPARE(runQbs(), 0);
+ QVERIFY2(m_qbsStdout.contains("compiling QbsSetup.wxs"), m_qbsStdout);
+ QVERIFY2(m_qbsStdout.contains("linking qbs.msi"), m_qbsStdout);
+ QVERIFY(regularFileExists(relativeProductBuildDir("QbsSetup") + "/qbs.msi"));
+
+ if (HostOsInfo::isWindowsHost()) {
+ QVERIFY2(m_qbsStdout.contains("compiling QbsBootstrapper.wxs"), m_qbsStdout);
+ QVERIFY2(m_qbsStdout.contains("linking qbs-setup-" + arch + ".exe"), m_qbsStdout);
+ QVERIFY(regularFileExists(relativeProductBuildDir("QbsBootstrapper")
+ + "/qbs-setup-" + arch + ".exe"));
+ }
+}
+
+void TestBlackboxWindows::wixDependencies()
+{
+ const SettingsPtr s = settings();
+ Profile profile(profileName(), s.get());
+
+ if (!haveWiX(profile)) {
+ QSKIP("WiX is not installed");
+ return;
+ }
+
+ QByteArray arch = profile.value("qbs.architecture").toString().toLatin1();
+ if (arch.isEmpty())
+ arch = QByteArrayLiteral("x86");
+
+ QDir::setCurrent(testDataDir + "/wixDependencies");
+ QbsRunParameters params;
+ if (!HostOsInfo::isWindowsHost())
+ params.arguments << "qbs.targetOS:windows";
+ QCOMPARE(runQbs(params), 0);
+ QVERIFY2(m_qbsStdout.contains("compiling QbsSetup.wxs"), m_qbsStdout);
+ QVERIFY2(m_qbsStdout.contains("linking qbs.msi"), m_qbsStdout);
+ QVERIFY(regularFileExists(relativeBuildDir() + "/qbs.msi"));
+}
+
QTEST_MAIN(TestBlackboxWindows)
diff --git a/tests/auto/blackbox/tst_blackboxwindows.h b/tests/auto/blackbox/tst_blackboxwindows.h
index fbc597313..ad8d60ca3 100644
--- a/tests/auto/blackbox/tst_blackboxwindows.h
+++ b/tests/auto/blackbox/tst_blackboxwindows.h
@@ -44,8 +44,12 @@ public slots:
void initTestCase() override;
private slots:
+ void innoSetup();
+ void innoSetupDependencies();
void standaloneCodesign();
void standaloneCodesign_data();
+ void wix();
+ void wixDependencies();
};
#endif // TST_BLACKBOXWINDOWS_H