On Mar 20, 2018, at 17:22, Jeremy Huddleston Sequoia wrote:

> On Mar 19, 2018, at 4:34 PM, Ryan Schmidt wrote:
> 
>> Ok, I've figured out that the reason why I'm not seeing the "Unable to 
>> determine location of a macOS SDK" message is that I was running MacPorts 
>> 2.4.2 and the message is new for MacPorts 2.5. MacPorts 2.5 considers it an 
>> error when it can't find an SDK. MacPorts 2.4.x and earlier just returned 
>> the empty string. So you must be running the unreleased MacPorts 2.5.
>> 
>> Jeremy added this error message and the change in configure.sdk_root 
>> behavior. Jeremy, what should we do about this?
> 
> We definitely want to err out if we cannot find an SDK, so we should figure 
> out a way to support a better pattern that addresses the problems below.
> 
>> For background: the textmate2 port requires the 10.11 SDK or later, so if 
>> configure.sdk_version is less than 10.11, it sets it to 10.11. It then tests 
>> if configure.sdkroot is nonempty, and if so, uses it. I've used this idiom 
>> in a handful of other ports.
> 
> Eek. We should figure out a nicer way to describe that.  Perhaps we should 
> add support for SDK version requirements.

Yes we should have a way to specify a requirement on a range of SDK versions. I 
mentioned it in another thread. I proposed a syntax similar to the one used for 
compiler blacklist versions.

>> This user is on 10.8, which doesn't have the 10.11 SDK. So with MacPorts 
>> 2.4.2, configure.sdkroot is empty, the port tries to build without an SDK, 
>> and fails. Fine; we know about that and it's on my to-do list to fix it. But 
>> MacPorts 2.5 changes it so that configure.sdkroot is undefined, and the port 
>> thus fails to be usable at all, preventing even "port info" and "portindex" 
>> from working:
>> 
>> Error: Unable to determine location of a macOS SDK.
>> Can't map the URL 'file://.' to a port description file ("can't read 
>> "configure.sdkroot": Unable to determine location of a macOS SDK.").
>> Please verify that the directory and portfile syntax are correct.
>> To use the current port, you must be in a port's directory.
> 
> For now, can you maybe do the shenanigans with configure.sdk_version  in 
> pre-configure?

Possibly, but it's crappier to have to do that.

>> One possible solution: I've been working on a project to make all SDKs 
>> available on all macOS versions, via a set of new ports. (I'm sure we're not 
>> allowed to distribute the SDKs, so these new ports work by requiring the 
>> user to download a specific version of Xcode from Apple, and it extracts the 
>> SDK from there.) My intention is that if a port requires an SDK that does 
>> not exist in the installed version of Xcode, it will add a dependency on the 
>> corresponding macOS SDK port and use that. If that behavior were in base, 
>> then that should eliminate the situations (other than user error) where 
>> configure.sdk_root would return an error.
> 
> This starts getting complicated because SDKs are very tied to the toolchains. 
>  It's hard enough trying to get the OSS toolchains to work with all of the 
> SDKs we support.  I cringe at trying to get an older Xcode's toolchain to 
> work with a newer SDK.

I'm not concerned about that at all. The ports will simply blacklist 
unacceptable compiler versions, as they would for any other reason.


Reply via email to