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:
commit
2ae26808a6
@ -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)
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user