Merge pull request #7301 from Bo98/cmake-sdkroot

formula: make CMake SDK root choice consistent with superenv (+ SDK root refactoring)
This commit is contained in:
Bo Anderson 2020-04-07 19:22:04 +01:00 committed by GitHub
commit 2ae26808a6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 18 deletions

View File

@ -107,16 +107,17 @@ module Superenv
# @private # @private
def setup_build_environment(formula = nil) def setup_build_environment(formula = nil)
if formula&.requirements&.find { |req| req.is_a? XcodeRequirement } sdk = formula ? MacOS.sdk_for_formula(formula) : MacOS.sdk
self["HOMEBREW_SDKROOT"] = MacOS.sdk_path_if_needed && MacOS::Xcode.sdk_path if MacOS.sdk_root_needed?
self["HOMEBREW_DEVELOPER_DIR"] = MacOS::Xcode.prefix self["HOMEBREW_SDKROOT"] = sdk.path
else self["HOMEBREW_DEVELOPER_DIR"] = if sdk.source == :xcode
self["HOMEBREW_SDKROOT"] = MacOS.sdk_path_if_needed&.to_s
self["HOMEBREW_DEVELOPER_DIR"] = if MacOS::CLT.installed? && MacOS::CLT.provides_sdk?
MacOS::CLT::PKG_PATH
else
MacOS::Xcode.prefix MacOS::Xcode.prefix
else
MacOS::CLT::PKG_PATH
end end
else
self["HOMEBREW_SDKROOT"] = nil
self["HOMEBREW_DEVELOPER_DIR"] = nil
end end
generic_setup_build_environment(formula) generic_setup_build_environment(formula)

View File

@ -1352,8 +1352,7 @@ class Formula
args << "-DHAVE_CLOCK_GETTIME:INTERNAL=0" if MacOS.version == "10.11" && MacOS::Xcode.version >= "8.0" args << "-DHAVE_CLOCK_GETTIME:INTERNAL=0" if MacOS.version == "10.11" && MacOS::Xcode.version >= "8.0"
# Ensure CMake is using the same SDK we are using. # Ensure CMake is using the same SDK we are using.
sdk = MacOS.sdk_path_if_needed args << "-DCMAKE_OSX_SYSROOT=#{MacOS.sdk_for_formula(self).path}" if MacOS.sdk_root_needed?
args << "-DCMAKE_OSX_SYSROOT=#{sdk}" if sdk
args args
end end

View File

@ -53,6 +53,10 @@ module OS
languages.first languages.first
end end
def sdk_root_needed?
false
end
def sdk_path_if_needed(_v = nil) def sdk_path_if_needed(_v = nil)
nil nil
end end

View File

@ -74,6 +74,17 @@ module OS
@active_developer_dir ||= Utils.popen_read("/usr/bin/xcode-select", "-print-path").strip @active_developer_dir ||= Utils.popen_read("/usr/bin/xcode-select", "-print-path").strip
end end
def sdk_root_needed?
if MacOS::CLT.installed?
# If there's no CLT SDK, return false
return false unless MacOS::CLT.provides_sdk?
# If the CLT is installed and headers are provided by the system, return false
return false unless MacOS::CLT.separate_header_package?
end
true
end
# If a specific SDK is requested: # If a specific SDK is requested:
# #
# 1. The requested SDK is returned, if it's installed. # 1. The requested SDK is returned, if it's installed.
@ -94,6 +105,13 @@ module OS
@locator.sdk_if_applicable(v) @locator.sdk_if_applicable(v)
end end
def sdk_for_formula(f, v = nil)
# If the formula requires Xcode, don't return the CLT SDK
return Xcode.sdk if f.requirements.any? { |req| req.is_a? XcodeRequirement }
sdk(v)
end
# Returns the path to an SDK or nil, following the rules set by {.sdk}. # Returns the path to an SDK or nil, following the rules set by {.sdk}.
def sdk_path(v = nil) def sdk_path(v = nil)
s = sdk(v) s = sdk(v)
@ -109,10 +127,7 @@ module OS
# 4. On CLT-only systems with a CLT SDK, where headers are provided by the system, return nil. # 4. On CLT-only systems with a CLT SDK, where headers are provided by the system, return nil.
# 5. On CLT-only systems with a CLT SDK, where headers are not provided by the system, return the CLT SDK. # 5. On CLT-only systems with a CLT SDK, where headers are not provided by the system, return the CLT SDK.
# If there's no CLT SDK, return early return unless sdk_root_needed?
return if MacOS::CLT.installed? && !MacOS::CLT.provides_sdk?
# If the CLT is installed and headers are provided by the system, return early
return if MacOS::CLT.installed? && !MacOS::CLT.separate_header_package?
sdk_path(v) sdk_path(v)
end end

View File

@ -5,11 +5,12 @@ require "os/mac/version"
module OS module OS
module Mac module Mac
class SDK class SDK
attr_reader :version, :path attr_reader :version, :path, :source
def initialize(version, path) def initialize(version, path, source)
@version = OS::Mac::Version.new version @version = OS::Mac::Version.new version
@path = Pathname.new(path) @path = Pathname.new(path)
@source = source
end end
end end
@ -20,14 +21,14 @@ module OS
path = sdk_paths[v] path = sdk_paths[v]
raise NoSDKError if path.nil? raise NoSDKError if path.nil?
SDK.new v, path SDK.new v, path, source
end end
def latest_sdk def latest_sdk
return if sdk_paths.empty? return if sdk_paths.empty?
v, path = sdk_paths.max { |a, b| OS::Mac::Version.new(a[0]) <=> OS::Mac::Version.new(b[0]) } v, path = sdk_paths.max { |a, b| OS::Mac::Version.new(a[0]) <=> OS::Mac::Version.new(b[0]) }
SDK.new v, path SDK.new v, path, source
end end
def sdk_if_applicable(v = nil) def sdk_if_applicable(v = nil)
@ -48,6 +49,10 @@ module OS
private private
def source
nil
end
def source_version def source_version
OS::Mac::Version::NULL OS::Mac::Version::NULL
end end
@ -78,6 +83,10 @@ module OS
class XcodeSDKLocator < BaseSDKLocator class XcodeSDKLocator < BaseSDKLocator
private private
def source
:xcode
end
def source_version def source_version
OS::Mac::Xcode.version OS::Mac::Xcode.version
end end
@ -98,6 +107,10 @@ module OS
class CLTSDKLocator < BaseSDKLocator class CLTSDKLocator < BaseSDKLocator
private private
def source
:clt
end
def source_version def source_version
OS::Mac::CLT.version OS::Mac::CLT.version
end end