OS::Mac: look up CLT SDK on 10.14+
This commit is contained in:
parent
3bce1c78bc
commit
8450ffa8ad
@ -85,14 +85,19 @@ module OS
|
|||||||
# specifically been requested according to the rules above.
|
# specifically been requested according to the rules above.
|
||||||
|
|
||||||
def sdk(v = nil)
|
def sdk(v = nil)
|
||||||
@locator ||= SDKLocator.new
|
@locator ||= if Xcode.without_clt?
|
||||||
|
XcodeSDKLocator.new
|
||||||
|
else
|
||||||
|
CLTSDKLocator.new
|
||||||
|
end
|
||||||
|
|
||||||
begin
|
begin
|
||||||
sdk = if v.nil?
|
sdk = if v.nil?
|
||||||
(Xcode.version.to_i >= 7) ? @locator.latest_sdk : @locator.sdk_for(version)
|
(Xcode.version.to_i >= 7) ? @locator.latest_sdk : @locator.sdk_for(version)
|
||||||
else
|
else
|
||||||
@locator.sdk_for v
|
@locator.sdk_for v
|
||||||
end
|
end
|
||||||
rescue SDKLocator::NoSDKError
|
rescue BaseSDKLocator::NoSDKError
|
||||||
sdk = @locator.latest_sdk
|
sdk = @locator.latest_sdk
|
||||||
end
|
end
|
||||||
# Only return an SDK older than the OS version if it was specifically requested
|
# Only return an SDK older than the OS version if it was specifically requested
|
||||||
|
|||||||
@ -11,7 +11,7 @@ module OS
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class SDKLocator
|
class BaseSDKLocator
|
||||||
class NoSDKError < StandardError; end
|
class NoSDKError < StandardError; end
|
||||||
|
|
||||||
def sdk_for(v)
|
def sdk_for(v)
|
||||||
@ -30,15 +30,12 @@ module OS
|
|||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def sdk_prefix
|
||||||
|
""
|
||||||
|
end
|
||||||
|
|
||||||
def sdk_paths
|
def sdk_paths
|
||||||
@sdk_paths ||= begin
|
@sdk_paths ||= begin
|
||||||
# Xcode.prefix is pretty smart, so let's look inside to find the sdk
|
|
||||||
sdk_prefix = "#{Xcode.prefix}/Platforms/MacOSX.platform/Developer/SDKs"
|
|
||||||
# Xcode < 4.3 style
|
|
||||||
sdk_prefix = "/Developer/SDKs" unless File.directory? sdk_prefix
|
|
||||||
# Finally query Xcode itself (this is slow, so check it last)
|
|
||||||
sdk_prefix = File.join(Utils.popen_read(DevelopmentTools.locate("xcrun"), "--show-sdk-platform-path").chomp, "Developer", "SDKs") unless File.directory? sdk_prefix
|
|
||||||
|
|
||||||
# Bail out if there is no SDK prefix at all
|
# Bail out if there is no SDK prefix at all
|
||||||
if !File.directory? sdk_prefix
|
if !File.directory? sdk_prefix
|
||||||
{}
|
{}
|
||||||
@ -55,5 +52,43 @@ module OS
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class XcodeSDKLocator < BaseSDKLocator
|
||||||
|
private
|
||||||
|
|
||||||
|
def sdk_prefix
|
||||||
|
@sdk_prefix ||= begin
|
||||||
|
# Xcode.prefix is pretty smart, so let's look inside to find the sdk
|
||||||
|
sdk_prefix = "#{Xcode.prefix}/Platforms/MacOSX.platform/Developer/SDKs"
|
||||||
|
# Xcode < 4.3 style
|
||||||
|
sdk_prefix = "/Developer/SDKs" unless File.directory? sdk_prefix
|
||||||
|
# Finally query Xcode itself (this is slow, so check it last)
|
||||||
|
sdk_prefix = File.join(Utils.popen_read(DevelopmentTools.locate("xcrun"), "--show-sdk-platform-path").chomp, "Developer", "SDKs") unless File.directory? sdk_prefix
|
||||||
|
|
||||||
|
sdk_prefix
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class CLTSDKLocator < BaseSDKLocator
|
||||||
|
private
|
||||||
|
|
||||||
|
# While CLT SDKs existed prior to Xcode 10, those packages also
|
||||||
|
# installed a traditional Unix-style header layout and we prefer
|
||||||
|
# using that
|
||||||
|
# As of Xcode 10, the Unix-style headers are installed via a
|
||||||
|
# separate package, so we can't rely on their being present.
|
||||||
|
# This will only look up SDKs on Xcode 10 or newer, and still
|
||||||
|
# return nil SDKs for Xcode 9 and older.
|
||||||
|
def sdk_prefix
|
||||||
|
@sdk_prefix ||= begin
|
||||||
|
if !CLT.separate_header_package?
|
||||||
|
""
|
||||||
|
else
|
||||||
|
"#{CLT::PKG_PATH}/SDKs"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user