diff --git a/utils/build-presets.ini b/utils/build-presets.ini index 854cb0f652a95..0a9d5cd2c68f7 100644 --- a/utils/build-presets.ini +++ b/utils/build-presets.ini @@ -595,3 +595,9 @@ installable-package=%(installable_package)s # Path to the .tar.gz symbols package symbols-package=%(symbols_package)s + +# Info.plist +darwin-toolchain-bundle-identifier=%(darwin_toolchain_bundle_identifier)s +darwin-toolchain-display-name=%(darwin_toolchain_display_name)s +darwin-toolchain-name=%(darwin_toolchain_xctoolchain_name)s +darwin-toolchain-version=%(darwin_toolchain_version)s diff --git a/utils/build-script-impl b/utils/build-script-impl index c41d7c722f9d3..4026b0e2fe243 100755 --- a/utils/build-script-impl +++ b/utils/build-script-impl @@ -175,6 +175,14 @@ KNOWN_SETTINGS=( swift-runtime-enable-dtrace "0" "Enable runtime dtrace support" swift-runtime-enable-leak-checker "0" "Enable leaks checking routines in the runtime" use-gold-linker "" "Enable using the gold linker" + darwin-toolchain-bundle-identifier "" "CFBundleIdentifier for xctoolchain info plist" + darwin-toolchain-display-name "" "Display Name for xctoolcain info plist" + darwin-toolchain-name "" "Directory name for xctoolchain" + darwin-toolchain-version "" "Version for xctoolchain info plist and installer pkg" + darwin-toolchain-application-cert "" "Application Cert name to codesign xctoolchain" + darwin-toolchain-installer-cert "" "Installer Cert name to create installer pkg" + darwin-toolchain-installer-package "" "The path to installer pkg" + ) function toupper() { @@ -2114,6 +2122,36 @@ if [[ "${INSTALLABLE_PACKAGE}" ]] ; then echo "--- Copy swift-stdlib-tool ---" cp "${SWIFT_SOURCE_DIR}/utils/swift-stdlib-tool-substitute" "${INSTALL_DESTDIR}/${INSTALL_PREFIX}/bin/swift-stdlib-tool" fi + + # Create plist for xctoolchain. + echo "-- Create Info.plist --" + PLISTBUDDY_BIN="/usr/libexec/PlistBuddy" + + DARWIN_TOOLCHAIN_INSTALL_LOCATION="/Library/Developer/Toolchains/${DARWIN_TOOLCHAIN_NAME}.xctoolchain" + DARWIN_TOOLCHAIN_INFO_PLIST="${INSTALL_DESTDIR}/${TOOLCHAIN_PREFIX}/Info.plist" + DARWIN_TOOLCHAIN_REPORT_URL="https://bugs.swift.org/" + + echo "-- Removing: ${DARWIN_TOOLCHAIN_INFO_PLIST}" + rm -f ${DARWIN_TOOLCHAIN_INFO_PLIST} + + ${PLISTBUDDY_BIN} -c "Add DisplayName string '${DARWIN_TOOLCHAIN_DISPLAY_NAME}'" "${DARWIN_TOOLCHAIN_INFO_PLIST}" + ${PLISTBUDDY_BIN} -c "Add Version string '${DARWIN_TOOLCHAIN_VERSION}'" "${DARWIN_TOOLCHAIN_INFO_PLIST}" + ${PLISTBUDDY_BIN} -c "Add CFBundleIdentifier string '${DARWIN_TOOLCHAIN_BUNDLE_IDENTIFIER}'" "${DARWIN_TOOLCHAIN_INFO_PLIST}" + ${PLISTBUDDY_BIN} -c "Add ReportProblemURL string '${DARWIN_TOOLCHAIN_REPORT_URL}'" "${DARWIN_TOOLCHAIN_INFO_PLIST}" + ${PLISTBUDDY_BIN} -c "Add OverrideEnvironment::DYLD_LIBRARY_PATH string '${DARWIN_TOOLCHAIN_INSTALL_LOCATION}/usr/lib'" "${DARWIN_TOOLCHAIN_INFO_PLIST}" + chmod a+r "${DARWIN_TOOLCHAIN_INFO_PLIST}" + + if [[ "${DARWIN_TOOLCHAIN_APPLICATION_CERT}" ]] ; then + echo "-- Codesign xctoolchain --" + "${SWIFT_SOURCE_DIR}/utils/toolchain-codesign" "${DARWIN_TOOLCHAIN_APPLICATION_CERT}" "${INSTALL_DESTDIR}/${TOOLCHAIN_PREFIX}" + fi + if [[ "${DARWIN_TOOLCHAIN_INSTALLER_PACKAGE}" ]] ; then + echo "-- Create Installer --" + "${SWIFT_SOURCE_DIR}/utils/toolchain-installer" "${INSTALL_DESTDIR}/${TOOLCHAIN_PREFIX}" "${DARWIN_TOOLCHAIN_BUNDLE_IDENTIFIER}" \ + "${DARWIN_TOOLCHAIN_INSTALLER_CERT}" "${DARWIN_TOOLCHAIN_INSTALLER_PACKAGE}" "${DARWIN_TOOLCHAIN_INSTALL_LOCATION}" \ + "${DARWIN_TOOLCHAIN_VERSION}" + fi + (cd "${INSTALL_DESTDIR}" && tar -c -z -f "${INSTALLABLE_PACKAGE}" "${TOOLCHAIN_PREFIX/#\/}") else diff --git a/utils/toolchain-codesign b/utils/toolchain-codesign new file mode 100755 index 0000000000000..81c7b364d2689 --- /dev/null +++ b/utils/toolchain-codesign @@ -0,0 +1,17 @@ +#!/bin/bash +#===--- toolchain-codesign - Creates code signed xctoolchain ---------------===# +# +## This source file is part of the Swift.org open source project +## +## Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors +## Licensed under Apache License v2.0 with Runtime Library Exception +## +## See http://swift.org/LICENSE.txt for license information +## See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +# +#===------------------------------------------------------------------------===# + +DARWIN_TOOLCHAIN_APPLICATION_CERT=$1 +TOOLCHAIN_PREFIX=$2 + +codesign -f --deep -s "${DARWIN_TOOLCHAIN_APPLICATION_CERT}" "${TOOLCHAIN_PREFIX}" diff --git a/utils/toolchain-installer b/utils/toolchain-installer new file mode 100755 index 0000000000000..d178b6791355e --- /dev/null +++ b/utils/toolchain-installer @@ -0,0 +1,22 @@ +#!/bin/bash +#===--- toolchain-installer - Creates installer pkg for OS X ---------------===# +# +## This source file is part of the Swift.org open source project +## +## Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors +## Licensed under Apache License v2.0 with Runtime Library Exception +## +## See http://swift.org/LICENSE.txt for license information +## See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +# +#===------------------------------------------------------------------------===# + +TOOLCHAIN_PREFIX=$1 +DARWIN_BUNDLE_IDENTIFIER=$2 +DARWIN_INSTALLER_CERT=$3 +DARWIN_INSTALLER_PACKAGE=$4 +DARWIN_TOOLCHAIN_INSTALL_LOCATION=$5 +DARWIN_TOOLCHAIN_VERSION=$6 + +pkgbuild --root "${TOOLCHAIN_PREFIX}" --install-location "${DARWIN_TOOLCHAIN_INSTALL_LOCATION}" "${DARWIN_INSTALLER_PACKAGE}" \ + --version "${DARWIN_TOOLCHAIN_VERSION}" --identifier "${DARWIN_BUNDLE_IDENTIFIER}" --sign "${DARWIN_INSTALLER_CERT}"