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.