@@ -22,7 +22,6 @@ readonly execution_root_file="$PWD/%execution_root_file%"
2222readonly extra_flags_bazelrc=" $PWD /%extra_flags_bazelrc%"
2323readonly generator_build_file=" $PWD /%generator_build_file%"
2424readonly generator_defs_bzl=" $PWD /%generator_defs_bzl%"
25- readonly schemes_json=" $PWD /%schemes_json%"
2625readonly xcodeproj_bazelrc=" $PWD /%xcodeproj_bazelrc%"
2726
2827installer_flags=(
@@ -121,7 +120,7 @@ chmod u+w "$generator_package_directory/BUILD"
121120cp " $generator_defs_bzl " " $generator_package_directory /defs.bzl"
122121chmod u+w " $generator_package_directory /defs.bzl"
123122
124- cat >> " $generator_package_directory /defs.bzl" << EOF
123+ cat << EOF >> "$generator_package_directory /defs.bzl"
125124
126125# Constants
127126
@@ -146,27 +145,47 @@ if [[ -s "$extra_flags_bazelrc" ]]; then
146145 bazelrcs+=(" --bazelrc=$extra_flags_bazelrc " )
147146fi
148147
148+ if [[ -n " ${DEVELOPER_DIR:- } " ]]; then
149+ if [[ ! -f " ${DEVELOPER_DIR%/* } /version.plist" ]]; then
150+ echo >&2 " DEVELOPER_DIR is set to invalid path: $DEVELOPER_DIR "
151+ exit 1
152+ fi
153+
154+ developer_dir=" $DEVELOPER_DIR "
155+
156+ # We can use a fast path when `DEVELOPER_DIR` is set for us
157+ xcode_version=$(
158+ /usr/libexec/PlistBuddy \
159+ -c ' print ProductBuildVersion' \
160+ " ${DEVELOPER_DIR%/* } /version.plist"
161+ )
162+ elif command -v xcodebuild > /dev/null 2>&1 ; then
163+ developer_dir=" $( /usr/bin/xcode-select -p) "
164+
165+ # Xcode 15.4\nBuild version 15F31d -> 15F31d
166+ xcode_version=$( xcodebuild -version | awk ' /Build version/{print $NF}' )
167+ else
168+ developer_dir=" "
169+ xcode_version=" "
170+ fi
171+
149172# We write to a `.bazelrc` file instead of passing flags directly in order to
150173# support all Bazel commands via the `common` pseudo-command
151- cat > " $pre_xcodeproj_bazelrc_dir /pre_xcodeproj.bazelrc" << EOF
174+ if [[ -n " $xcode_version " ]]; then
175+ cat << EOF > "$pre_xcodeproj_bazelrc_dir /pre_xcodeproj.bazelrc"
152176# Be explicit about our desired Xcode version
153- common:rules_xcodeproj --xcode_version=% xcode_version%
177+ common:rules_xcodeproj --xcode_version=$ xcode_version
154178
155179# Work around https://github.com/bazelbuild/bazel/issues/8902
156180# \` USE_CLANG_CL\` is only used on Windows, we set it here to cause Bazel to
157181# re-evaluate the cc_toolchain for a different Xcode version
158- common:rules_xcodeproj --repo_env=USE_CLANG_CL=% xcode_version%
159- common:rules_xcodeproj --repo_env=XCODE_VERSION=% xcode_version%
182+ common:rules_xcodeproj --repo_env=USE_CLANG_CL=$ xcode_version
183+ common:rules_xcodeproj --repo_env=XCODE_VERSION=$ xcode_version
160184EOF
161-
162- if command -v /usr/bin/xcode-select > /dev/null 2>&1 ; then
163- developer_dir=" $( /usr/bin/xcode-select -p) "
164- else
165- developer_dir=" ${DEVELOPER_DIR:- } "
166185fi
167186
168187if [[ -n " $developer_dir " ]]; then
169- cat >> " $pre_xcodeproj_bazelrc_dir /pre_xcodeproj.bazelrc" << EOF
188+ cat << EOF >> "$pre_xcodeproj_bazelrc_dir /pre_xcodeproj.bazelrc"
170189
171190# Set \` DEVELOPER_DIR\` in case a bazel wrapper filters it
172191common:rules_xcodeproj --repo_env="DEVELOPER_DIR=$developer_dir "
0 commit comments