diff --git a/Library/Homebrew/os/mac.rb b/Library/Homebrew/os/mac.rb index f643f13fd1..abca18c82a 100644 --- a/Library/Homebrew/os/mac.rb +++ b/Library/Homebrew/os/mac.rb @@ -91,17 +91,7 @@ module OS CLTSDKLocator.new end - begin - sdk = if v.nil? - (Xcode.version.to_i >= 7) ? @locator.latest_sdk : @locator.sdk_for(version) - else - @locator.sdk_for v - end - rescue BaseSDKLocator::NoSDKError - sdk = @locator.latest_sdk - end - # Only return an SDK older than the OS version if it was specifically requested - sdk if v || (!sdk.nil? && sdk.version >= version) + @locator.sdk_if_applicable(v) end # Returns the path to an SDK or nil, following the rules set by #sdk. diff --git a/Library/Homebrew/os/mac/sdk.rb b/Library/Homebrew/os/mac/sdk.rb index 3da35cc7ae..36250fcbc6 100644 --- a/Library/Homebrew/os/mac/sdk.rb +++ b/Library/Homebrew/os/mac/sdk.rb @@ -28,8 +28,26 @@ module OS SDK.new v, path end + def sdk_if_applicable(v = nil) + begin + sdk = if v.nil? + (source_version.to_i >= 7) ? latest_sdk : sdk_for(OS::Mac.version) + else + sdk_for v + end + rescue BaseSDKLocator::NoSDKError + sdk = latest_sdk + end + # Only return an SDK older than the OS version if it was specifically requested + sdk if v || (!sdk.nil? && sdk.version >= OS::Mac.version) + end + private + def source_version + OS::Mac::Version::NULL + end + def sdk_prefix "" end @@ -56,6 +74,10 @@ module OS class XcodeSDKLocator < BaseSDKLocator private + def source_version + OS::Mac::Xcode.version + end + def sdk_prefix @sdk_prefix ||= begin # Xcode.prefix is pretty smart, so let's look inside to find the sdk @@ -73,6 +95,10 @@ module OS class CLTSDKLocator < BaseSDKLocator private + def source_version + OS::Mac::CLT.version + end + # While CLT SDKs existed prior to Xcode 10, those packages also # installed a traditional Unix-style header layout and we prefer # using that diff --git a/Library/Homebrew/os/mac/xcode.rb b/Library/Homebrew/os/mac/xcode.rb index b1b25a60b9..d873120acc 100644 --- a/Library/Homebrew/os/mac/xcode.rb +++ b/Library/Homebrew/os/mac/xcode.rb @@ -96,6 +96,16 @@ module OS !prefix.nil? end + def sdk(v = nil) + @locator ||= XcodeSDKLocator.new + + @locator.sdk_if_applicable(v) + end + + def sdk_path(v = nil) + sdk(v)&.path + end + def update_instructions if MacOS.version >= "10.9" && !OS::Mac.prerelease? <<~EOS @@ -226,6 +236,16 @@ module OS end end + def sdk(v = nil) + @locator ||= CLTSDKLocator.new + + @locator.sdk_if_applicable(v) + end + + def sdk_path(v = nil) + sdk(v)&.path + end + def update_instructions if MacOS.version >= "10.9" <<~EOS