[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:37:18 EDT 2016
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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cmake.patch
Type: application/octet-stream
Size: 1058 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/cmake-developers/attachments/20161030/a5ff31af/attachment-0001.obj>
More information about the cmake-developers
mailing list