[cmake-developers] -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING="" -DCMAKE_OSX_SYSROOT:STRING=/ broken in 3.7.0-rc2
Jack Howarth
howarth.mailing.lists at gmail.com
Sun Oct 30 15:54:28 EDT 2016
One other comment. For new Xcode releases on the prior OS release (eg
Xcode 8 on 10.11), the SDK files installed in / by the Command Line
Tools are actually those for the 10.11 SDK and *not* those from the
10.12 SDK. This is why the Xcode 8 release lacks a Command Line Tools
package for 10.11 (since Swift 3 requires the 10.12 SDK to properly
work). So the current code in Modules/Platform/Darwin-Initialize.cmake
in cmake 3.7.0-rc2 and proposed patch are both returning non-sensical
SDK versions for the SDK in / on 10.11 from 'xcodebuild -sdk'. FYI.
On Sun, Oct 30, 2016 at 3:37 PM, Jack Howarth
<howarth.mailing.lists at gmail.com> wrote:
> Proposed fix to restore functionality for
> -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING="" -DCMAKE_OSX_SYSROOT:STRING=/
> while retaining the current hack when CMAKE_OSX_DEPLOYMENT_TARGET is
> not set to an empty string.
>
> On Sun, Oct 30, 2016 at 3:23 PM, Jack Howarth
> <howarth.mailing.lists at gmail.com> wrote:
>> Gregor,
>> While I still think your hack to obtain the versioned SDK is
>> wrong because it relies on passing invalid arguments to 'xcodebuild
>> -sdk', the following change restores the expected behavior for
>> -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING="" -DCMAKE_OSX_SYSROOT:STRING=/
>> while allowing your hack to function when
>> -DCMAKE_OSX_DEPLOYMENT_TARGET is not an empty string...
>>
>> --- cmake-3.7.0-rc2/Modules/Platform/Darwin-Initialize.cmake.orig
>> 2016-10-30 09:45:46.000000000 -0400
>> +++ cmake-3.7.0-rc2/Modules/Platform/Darwin-Initialize.cmake
>> 2016-10-30 15:16:57.000000000 -0400
>> @@ -116,7 +116,7 @@
>> set(_CMAKE_OSX_SYSROOT_ORIG "${CMAKE_OSX_SYSROOT}")
>> set(_CMAKE_OSX_SYSROOT_PATH "")
>> if(CMAKE_OSX_SYSROOT)
>> - if("x${CMAKE_OSX_SYSROOT}" MATCHES "/")
>> + if("x${CMAKE_OSX_SYSROOT}" MATCHES "/" AND
>> CMAKE_OSX_DEPLOYMENT_TARGET MATCHES "")
>> # This is a path to the SDK. Make sure it exists.
>> if(NOT IS_DIRECTORY "${CMAKE_OSX_SYSROOT}")
>> message(WARNING "Ignoring CMAKE_OSX_SYSROOT value:\n
>> ${CMAKE_OSX_SYSROOT}\n"
>> @@ -125,10 +125,8 @@
>> set(_CMAKE_OSX_SYSROOT_ORIG "")
>> endif()
>> set(_CMAKE_OSX_SYSROOT_PATH "${CMAKE_OSX_SYSROOT}")
>> - endif()
>> -
>> - if(CMAKE_OSX_SYSROOT)
>> - # Transform the (maybe unversioned) sysroot into a versioned path.
>> + else()
>> + # Transform the sdk name into a path.
>> execute_process(
>> COMMAND xcodebuild -sdk ${CMAKE_OSX_SYSROOT} -version Path
>> OUTPUT_VARIABLE _stdout
>>
>> Jack
>>
>> On Sun, Oct 30, 2016 at 2:53 PM, Jack Howarth
>> <howarth.mailing.lists at gmail.com> wrote:
>>> Gregor,
>>> The change in
>>> https://cmake.org/gitweb?p=cmake.git;a=patch;h=540815eec2b83a8b43689580c54e8950d9f5868b
>>> is logically flawed because it allows...
>>>
>>> COMMAND xcodebuild -sdk ${CMAKE_OSX_SYSROOT} -version Path
>>>
>>> to be passed ${CMAKE_OSX_SYSROOT} containing "/" which isn't a valid
>>> argument for 'xcodebuild -sdk'...
>>>
>>> $ xcodebuild -sdk /
>>> Build settings from command line:
>>> SDKROOT = macosx10.12
>>>
>>> This erroneously returns macosx10.12 despite the Xcode 7.3.1 Command
>>> Line Tools being installed in / containing the 10.11 SDK files.
>>> Jack
>>>
>>>
>>> On Sun, Oct 30, 2016 at 2:04 PM, Jack Howarth
>>> <howarth.mailing.lists at gmail.com> wrote:
>>>> Gregor,
>>>> This is also a severe regression because if forces the cmake
>>>> users to build against the 10.12 SDK on 10.11 which is not well tested
>>>> for backward compatibility on 10.11. Your change makes it impossible
>>>> to build against the SDK in / installed by the Xcode Command Line
>>>> Tools package.
>>>> Jack
>>>>
>>>> On Sun, Oct 30, 2016 at 1:33 PM, Jack Howarth
>>>> <howarth.mailing.lists at gmail.com> wrote:
>>>>> Gregor,
>>>>> Your commit of...
>>>>>
>>>>> https://cmake.org/gitweb?p=cmake.git;a=log;h=540815eec2b83a8b43689580c54e8950d9f5868b
>>>>>
>>>>> has caused a major regression in cmake 3.7.0 as it no longer properly
>>>>> honors the combination...
>>>>>
>>>>> -DCMAKE_OSX_DEPLOYMENT_TARGET:STRING="" -DCMAKE_OSX_SYSROOT:STRING=/
>>>>>
>>>>> This is obvious by simple inspection of the code in
>>>>> Modules/Platform/Darwin-Initialize.cmake as
>>>>> the code no longer honors -DCMAKE_OSX_SYSROOT:STRING=/. At the very
>>>>> least, this code
>>>>> needs to be modified to have cmake emit "-isysroot /" in that case.
>>>>> IMHO, this issue should be considered a blocker for the cmake
>>>>> 3,7.0 release on darwin.
>>>>> Jack
>>>>>
>>>>>
>>>>> On Sun, Oct 30, 2016 at 9:36 AM, Jack Howarth
>>>>> <howarth.mailing.lists at gmail.com> wrote:
>>>>>> The change...
>>>>>>
>>>>>> --- cmake-3.6.2/Modules/Platform/Darwin-Initialize.cmake 2016-09-07
>>>>>> 10:11:58.000000000 -0400
>>>>>> +++ cmake-3.7.0-rc2/Modules/Platform/Darwin-Initialize.cmake
>>>>>> 2016-10-19 09:47:45.000000000 -0400
>>>>>> @@ -125,8 +125,10 @@
>>>>>> set(_CMAKE_OSX_SYSROOT_ORIG "")
>>>>>> endif()
>>>>>> set(_CMAKE_OSX_SYSROOT_PATH "${CMAKE_OSX_SYSROOT}")
>>>>>> - else()
>>>>>> - # Transform the sdk name into a path.
>>>>>> + endif()
>>>>>> +
>>>>>> + if(CMAKE_OSX_SYSROOT)
>>>>>> + # Transform the (maybe unversioned) sysroot into a versioned path.
>>>>>> execute_process(
>>>>>> COMMAND xcodebuild -sdk ${CMAKE_OSX_SYSROOT} -version Path
>>>>>> OUTPUT_VARIABLE _stdout
>>>>>>
>>>>>> is an obvious mistake in cmake 3.7.0-rc2. The removal of the 'else()'
>>>>>> statement here and the substitution of the ' if(CMAKE_OSX_SYSROOT)'
>>>>>> defeats the prior handling of 'if("x${CMAKE_OSX_SYSROOT}" MATCHES
>>>>>> "/")'. This causes '-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=""
>>>>>> -DCMAKE_OSX_SYSROOT:STRING=/' to not be honored and -isysroot to be
>>>>>> emitted as a compiler flag universally.
>>>>>>
>>>>>> https://gitlab.kitware.com/cmake/cmake/issues/16394
More information about the cmake-developers
mailing list