aboutsummaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorJake Petroules <jake.petroules@theqtcompany.com>2016-03-31 17:27:20 -0700
committerJoerg Bornemann <joerg.bornemann@theqtcompany.com>2016-04-13 08:22:33 +0000
commit4e442c034dcfee45c24a12d289894dbce09fdbc6 (patch)
treef88cf93cc2427c95fd7d91c7d2e09d7996889148 /share
parent09e7966f23b547508eec24afc96a7c6d020ecece (diff)
Add a validate script to the bundle module.
Also, adjust autotests to be more flexible. Some product types (for example, application extensions) may not exist in older versions of Xcode. This fixes the bundleStructure autotest. Change-Id: I2e73cd65f50f44017780001e9e0d5fb184edba31 Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
Diffstat (limited to 'share')
-rw-r--r--share/qbs/modules/bundle/BundleModule.qbs67
-rw-r--r--share/qbs/modules/bundle/MacOSX-Package-Types.xcspec462
-rw-r--r--share/qbs/modules/bundle/MacOSX-Product-Types.xcspec545
-rw-r--r--share/qbs/modules/bundle/bundle.js46
-rwxr-xr-xshare/qbs/modules/bundle/update-specs.sh10
5 files changed, 1117 insertions, 13 deletions
diff --git a/share/qbs/modules/bundle/BundleModule.qbs b/share/qbs/modules/bundle/BundleModule.qbs
index 08c473356..6f45b07ed 100644
--- a/share/qbs/modules/bundle/BundleModule.qbs
+++ b/share/qbs/modules/bundle/BundleModule.qbs
@@ -70,11 +70,25 @@ Module {
property var xcodeSettings: ({})
configure: {
- if (xcodeDeveloperPath) {
- var reader = new Bundle.XcodeBuildSpecsReader(xcodeDeveloperPath,
- additionalSettings,
- !qbs.targetOS.contains("osx"));
- xcodeSettings = reader.expandedSettings(_productTypeIdentifier) || {};
+ var specsPath = path;
+ var specsSeparator = "-";
+ if (xcodeDeveloperPath && _useXcodeBuildSpecs) {
+ specsPath = xcodeDeveloperPath
+ + "/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications";
+ specsSeparator = " ";
+ }
+
+ var reader = new Bundle.XcodeBuildSpecsReader(specsPath,
+ specsSeparator,
+ additionalSettings,
+ !qbs.targetOS.contains("osx"));
+ var settings = reader.expandedSettings(_productTypeIdentifier);
+ if (settings) {
+ xcodeSettings = settings;
+ found = true;
+ } else {
+ xcodeSettings = {};
+ found = false;
}
}
}
@@ -163,9 +177,11 @@ Module {
readonly property string unlocalizedResourcesFolderPath: bundleSettingsProbe.xcodeSettings["UNLOCALIZED_RESOURCES_FOLDER_PATH"]
readonly property string versionsFolderPath: bundleSettingsProbe.xcodeSettings["VERSIONS_FOLDER_PATH"]
+ // private properties
property string _productTypeIdentifier: Bundle.productTypeIdentifier(product.type)
- // private properties
+ property bool _useXcodeBuildSpecs: true // false to use ONLY the qbs build specs
+
readonly property var extraEnv: ({
"PRODUCT_BUNDLE_IDENTIFIER": identifier
})
@@ -197,6 +213,45 @@ Module {
};
}
+ validate: {
+ if (!bundleSettingsProbe.found) {
+ var error = "Bundle product type " + _productTypeIdentifier + " is not supported.";
+ if ((_productTypeIdentifier || "").startsWith("com.apple.product-type."))
+ error += " You may need to upgrade Xcode.";
+ throw error;
+ }
+
+ var validator = new ModUtils.PropertyValidator("bundle");
+ validator.setRequiredProperty("bundleName", bundleName);
+ validator.setRequiredProperty("infoPlistPath", infoPlistPath);
+ validator.setRequiredProperty("pbdevelopmentPlistPath", pbdevelopmentPlistPath);
+ validator.setRequiredProperty("pkgInfoPath", pkgInfoPath);
+ validator.setRequiredProperty("versionPlistPath", versionPlistPath);
+ validator.setRequiredProperty("executablePath", executablePath);
+ validator.setRequiredProperty("contentsFolderPath", contentsFolderPath);
+ validator.setRequiredProperty("documentationFolderPath", documentationFolderPath);
+ validator.setRequiredProperty("executableFolderPath", executableFolderPath);
+ validator.setRequiredProperty("executablesFolderPath", executablesFolderPath);
+ validator.setRequiredProperty("frameworksFolderPath", frameworksFolderPath);
+ validator.setRequiredProperty("javaFolderPath", javaFolderPath);
+ validator.setRequiredProperty("localizedResourcesFolderPath", localizedResourcesFolderPath);
+ validator.setRequiredProperty("pluginsFolderPath", pluginsFolderPath);
+ validator.setRequiredProperty("privateHeadersFolderPath", privateHeadersFolderPath);
+ validator.setRequiredProperty("publicHeadersFolderPath", publicHeadersFolderPath);
+ validator.setRequiredProperty("scriptsFolderPath", scriptsFolderPath);
+ validator.setRequiredProperty("sharedFrameworksFolderPath", sharedFrameworksFolderPath);
+ validator.setRequiredProperty("sharedSupportFolderPath", sharedSupportFolderPath);
+ validator.setRequiredProperty("unlocalizedResourcesFolderPath", unlocalizedResourcesFolderPath);
+
+ if (packageType === "FMWK") {
+ validator.setRequiredProperty("frameworkVersion", frameworkVersion);
+ validator.setRequiredProperty("versionsFolderPath", versionsFolderPath);
+ }
+
+ // extension and infoStringsPath might not be set
+ return validator.validate();
+ }
+
FileTagger {
fileTags: ["infoplist"]
patterns: ["Info.plist", "*-Info.plist"]
diff --git a/share/qbs/modules/bundle/MacOSX-Package-Types.xcspec b/share/qbs/modules/bundle/MacOSX-Package-Types.xcspec
new file mode 100644
index 000000000..b36353fc7
--- /dev/null
+++ b/share/qbs/modules/bundle/MacOSX-Package-Types.xcspec
@@ -0,0 +1,462 @@
+[
+ {
+ "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)"
+ },
+ "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"
+ },
+ "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"
+ },
+ "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"
+ },
+ "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"
+ },
+ "DefaultBuildSettings" : {
+ "EXECUTABLE_SUFFIX" : "",
+ "EXECUTABLE_NAME" : "$(EXECUTABLE_PREFIX)$(PRODUCT_NAME)$(EXECUTABLE_VARIANT_SUFFIX)$(EXECUTABLE_SUFFIX)",
+ "EXECUTABLE_PREFIX" : ""
+ },
+ "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"
+ },
+ "DefaultBuildSettings" : {
+ "UNLOCALIZED_RESOURCES_FOLDER_PATH" : "$(CONTENTS_FOLDER_PATH)",
+ "CONTENTS_FOLDER_PATH" : "$(WRAPPER_NAME)",
+ "SHALLOW_BUNDLE" : "YES",
+ "VERSIONS_FOLDER_PATH" : "$(WRAPPER_NAME)"
+ },
+ "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"
+ },
+ "DefaultBuildSettings" : {
+ "WRAPPER_SUFFIX" : "xctest"
+ },
+ "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"
+ },
+ "DefaultBuildSettings" : {
+ "WRAPPER_SUFFIX" : "octest"
+ },
+ "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"
+ },
+ "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)"
+ },
+ "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"
+ },
+ "DefaultBuildSettings" : {
+ "WRAPPER_SUFFIX" : ".xpc"
+ },
+ "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"
+ },
+ "DefaultBuildSettings" : {
+ "WRAPPER_SUFFIX" : ".pluginkit"
+ },
+ "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"
+ },
+ "DefaultBuildSettings" : {
+ "WRAPPER_SUFFIX" : ".appex"
+ },
+ "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"
+ },
+ "DefaultBuildSettings" : {
+
+ },
+ "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)"
+ },
+ "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)"
+ },
+ "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)"
+ },
+ "Identifier" : "com.apple.package-type.javaclassfolder",
+ "Type" : "PackageType",
+ "Name" : "Class Folder",
+ "Description" : "Class folder",
+ "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
new file mode 100644
index 000000000..f7766be24
--- /dev/null
+++ b/share/qbs/modules/bundle/MacOSX-Product-Types.xcspec
@@ -0,0 +1,545 @@
+[
+ {
+ "IconNamePrefix" : "TargetExecutable",
+ "DefaultBuildProperties" : {
+ "REZ_EXECUTABLE" : "YES",
+ "FULL_PRODUCT_NAME" : "$(EXECUTABLE_NAME)",
+ "LIBRARY_FLAG_NOSPACE" : "YES",
+ "INSTALL_PATH" : "\/usr\/local\/bin",
+ "GCC_INLINES_ARE_PRIVATE_EXTERN" : "YES",
+ "FRAMEWORK_FLAG_PREFIX" : "-framework",
+ "GCC_DYNAMIC_NO_PIC" : "NO",
+ "GCC_SYMBOLS_PRIVATE_EXTERN" : "YES",
+ "CODE_SIGNING_ALLOWED" : "YES",
+ "STRIP_STYLE" : "all",
+ "EXECUTABLE_PREFIX" : "",
+ "EXECUTABLE_SUFFIX" : "",
+ "LIBRARY_FLAG_PREFIX" : "-l"
+ },
+ "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"
+ },
+ "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",
+ "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"
+ },
+ "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",
+ "REZ_EXECUTABLE" : "YES",
+ "FULL_PRODUCT_NAME" : "$(EXECUTABLE_NAME)",
+ "LIBRARY_FLAG_NOSPACE" : "YES",
+ "FRAMEWORK_FLAG_PREFIX" : "-framework",
+ "INSTALL_PATH" : "\/usr\/local\/lib",
+ "SEPARATE_STRIP" : "YES",
+ "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"
+ },
+ "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"
+ },
+ "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",
+ "CanEmbedAddressSanitizerLibraries" : "YES",
+ "ValidateEmbeddedBinaries" : "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"
+ },
+ "BasedOn" : "com.apple.product-type.bundle",
+ "PackageTypes" : [
+ "com.apple.package-type.wrapper.application"
+ ],
+ "Type" : "ProductType",
+ "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" : ""
+ },
+ "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" : {
+ "WRAPPER_EXTENSION" : "framework",
+ "DYLIB_INSTALL_NAME_BASE" : "$(INSTALL_PATH)",
+ "STRIP_STYLE" : "debugging",
+ "FRAMEWORK_VERSION" : "A",
+ "CODE_SIGNING_ALLOWED" : "YES",
+ "LD_DYLIB_INSTALL_NAME" : "$(DYLIB_INSTALL_NAME_BASE:standardizepath)\/$(EXECUTABLE_PATH)",
+ "INSTALL_PATH" : "$(LOCAL_LIBRARY_DIR)\/Frameworks",
+ "WRAPPER_SUFFIX" : ".$(WRAPPER_EXTENSION)",
+ "MACH_O_TYPE" : "mh_dylib"
+ },
+ "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" : {
+ "SEPARATE_STRIP" : "YES",
+ "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"
+ },
+ "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",
+ "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",
+ "WRAPPER_EXTENSION" : "kext",
+ "KERNEL_EXTENSION_HEADER_SEARCH_PATHS" : "$(KERNEL_FRAMEWORK)\/PrivateHeaders $(KERNEL_FRAMEWORK_HEADERS)",
+ "GCC_INLINES_ARE_PRIVATE_EXTERN" : "NO",
+ "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"
+ },
+ "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" : {
+
+ },
+ "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"
+ },
+ "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" : {
+
+ },
+ "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)"
+ },
+ "PackageTypes" : [
+ "com.apple.package-type.bundle.unit-test"
+ ],
+ "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)"
+ },
+ "PackageTypes" : [
+ "com.apple.package-type.bundle.unit-test"
+ ],
+ "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"
+ },
+ "PackageTypes" : [
+ "com.apple.package-type.bundle.ocunit-test"
+ ],
+ "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)"
+ },
+ "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",
+ "CanEmbedAddressSanitizerLibraries" : "YES",
+ "DefaultBuildProperties" : {
+ "MACH_O_TYPE" : "mh_execute",
+ "WRAPPER_EXTENSION" : "xpc"
+ },
+ "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"
+ },
+ "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"
+ },
+ {
+ "IconNamePrefix" : "AppExtension",
+ "DefaultTargetName" : "App Extension",
+ "DefaultBuildProperties" : {
+ "APPLICATION_EXTENSION_API_ONLY" : "YES",
+ "PRODUCT_SPECIFIC_LDFLAGS" : "-e _NSExtensionMain",
+ "WRAPPER_EXTENSION" : "appex",
+ "CODE_SIGNING_ALLOWED" : "YES"
+ },
+ "PackageTypes" : [
+ "com.apple.package-type.app-extension"
+ ],
+ "Type" : "ProductType",
+ "BasedOn" : "com.apple.product-type.pluginkit-plugin",
+ "Name" : "App Extension",
+ "Identifier" : "com.apple.product-type.app-extension",
+ "Description" : "App Extension",
+ "Class" : "PBXBundleProductType"
+ },
+ {
+ "DefaultTargetName" : "Spotlight",
+ "DefaultBuildProperties" : {
+ "CODE_SIGNING_ALLOWED" : "YES"
+ },
+ "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/share/qbs/modules/bundle/bundle.js b/share/qbs/modules/bundle/bundle.js
index 95425c90b..d6ab4b56a 100644
--- a/share/qbs/modules/bundle/bundle.js
+++ b/share/qbs/modules/bundle/bundle.js
@@ -29,7 +29,40 @@
****************************************************************************/
var DarwinTools = loadExtension("qbs.DarwinTools");
-var PropertyList = loadExtension("qbs.PropertyList");
+var Process = loadExtension("qbs.Process");
+
+// HACK: Workaround until the PropertyList extension is supported cross-platform
+var PropertyList2 = (function () {
+ function PropertyList2() {
+ }
+ PropertyList2.prototype.readFromFile = function (filePath) {
+ var str;
+ var process = new Process();
+ try {
+ if (process.exec("plutil", ["-convert", "json", "-o", "-", filePath], false) === 0) {
+ str = process.readStdOut();
+ } else {
+ var tf = new TextFile(filePath);
+ try {
+ str = tf.readAll();
+ } finally {
+ tf.close();
+ }
+ }
+ } finally {
+ process.close();
+ }
+
+ if (str)
+ this.obj = JSON.parse(str);
+ };
+ PropertyList2.prototype.toObject = function () {
+ return this.obj;
+ };
+ PropertyList2.prototype.clear = function () {
+ };
+ return PropertyList2;
+}());
// Order is significant due to productTypeIdentifier() search path
var _productTypeIdentifiers = {
@@ -52,16 +85,15 @@ function productTypeIdentifier(productType) {
}
var XcodeBuildSpecsReader = (function () {
- function XcodeBuildSpecsReader(developerPath, additionalSettings, useShallowBundles) {
+ function XcodeBuildSpecsReader(specsPath, separator, additionalSettings, useShallowBundles) {
this._additionalSettings = additionalSettings;
this._useShallowBundles = useShallowBundles;
var i;
- var plist = new PropertyList();
- var plist2 = new PropertyList();
+ var plist = new PropertyList2();
+ var plist2 = new PropertyList2();
try {
- developerPath += "/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications";
- plist.readFromFile(developerPath + "/MacOSX Package Types.xcspec");
- plist2.readFromFile(developerPath + "/MacOSX Product Types.xcspec");
+ plist.readFromFile(specsPath + ["/MacOSX", "Package", "Types.xcspec"].join(separator));
+ plist2.readFromFile(specsPath + ["/MacOSX", "Product", "Types.xcspec"].join(separator));
this._packageTypes = plist.toObject();
this._productTypes = plist2.toObject();
this._types = {};
diff --git a/share/qbs/modules/bundle/update-specs.sh b/share/qbs/modules/bundle/update-specs.sh
new file mode 100755
index 000000000..869fb011f
--- /dev/null
+++ b/share/qbs/modules/bundle/update-specs.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+# Update build specs from Xcode - this script should be run when new Xcode releases are made.
+specs_dir="$(xcrun --sdk macosx --show-sdk-platform-path)/Developer/Library/Xcode/Specifications"
+spec_files=("MacOSX Package Types.xcspec" "MacOSX Product Types.xcspec")
+for spec_file in "${spec_files[@]}" ; do
+ printf "%s\n" "$(plutil -convert json -r -o - "$specs_dir/$spec_file")" > "${spec_file// /-}"
+done
+xcode_version="$(/usr/libexec/PlistBuddy -c 'Print CFBundleShortVersionString' \
+ "$(xcode-select --print-path)/../Info.plist")"
+echo "Updated build specs from Xcode $xcode_version"