[112836] trunk/dports/_resources/port1.0/group/cmake-1.0.tcl
Jeremy Huddleston Sequoia
jeremyhu at macports.org
Sun Nov 3 11:45:09 PST 2013
On Nov 3, 2013, at 10:56, Ryan Schmidt <ryandesign at macports.org> wrote:
>
> On Nov 2, 2013, at 15:43, Ryan Schmidt <ryandesign at macports.org> wrote:
>
>> On Nov 2, 2013, at 12:13, jeremyhu at macports.org wrote:
>>
>>> Revision
>>> 112836
>>> Author
>>> jeremyhu at macports.org
>>> Date
>>> 2013-11-02 10:13:52 -0700 (Sat, 02 Nov 2013)
>>> Log Message
>>>
>>> Improve the CMake PortGroup so that it handles the configure.*flags. (#40648)
>>>
>>> The configure.cppflags, configure.optflags, configure.cflags, configure.cxxflags, configure.ldflags
>>> are handled by setting the equivalent CMAKE_*_FLAGS.
>>>
>>> The configure.cppflags are added to the C/C++ compiler flags as CMake does not honor separately
>>> CPPFLAGS (it uses usually add_definitions() for that). The compiler flags for all build types
>>> (CMAKE_C_FLAGS, CMAKE_CXX_FLAGS) are used, as they are usually empty. Cf. also to CMake upstream
>>> ticket #12928 "CMake silently ignores CPPFLAGS" <
>>> http://www.cmake.org/Bug/view.php?id=12928
>>>> .
>>>
>>> The configure.cflags contain configure.optflags by default. Therefore, they are set via the Release
>>> flags CMAKE_C_FLAGS_RELEASE, which would otherwise overrule the optimization flags, as they are set
>>> by default to "-O3 -NDEBUG". Therefore, be sure to add "-NDEBUG" to the configure.cflags if you
>>> want to turn off assertions in release builds!
>>>
>>> The configure.cxxflags contain configure.optflags by default. Therefore, they are set via the
>>> Release flags CMAKE_CXX_FLAGS_RELEASE, which would otherwise overrule the optimization flags, as
>>> they are set by default to "-O3 -NDEBUG". Therefore, be sure to add "-NDEBUG" to the
>>> configure.cflags if you want to turn off assertions in release builds!
>>>
>>> A port author has to be aware that a CMake script can always override these flags when it runs, as
>>> they are frequently set internally in function of other CMake build variables!
>>>
>>> Attention: If the port author wants to be sure that no compiler flags are passed via configure.args
>>> to CMake, he has to set manually configure.optflags to "", as it is by default "-O2" and added to
>>> all language-specific flags. If he wants to prevent optimization, he should set configure.optflags
>>> to "-O0".
>>>
>>> TODO: Handle the compiler flags specific to Objective-C, Fortran, and Java in the CMake PortGroup.
>>>
>>> Modified Paths
>>>
>>> • trunk/dports/_resources/port1.0/group/cmake-1.0.tcl
>>> Diff
>>>
>>> Modified: trunk/dports/_resources/port1.0/group/cmake-1.0.tcl (112835 => 112836)
>>>
>>> --- trunk/dports/_resources/port1.0/group/cmake-1.0.tcl 2013-11-02 16:44:49 UTC (rev 112835)
>>> +++ trunk/dports/_resources/port1.0/group/cmake-1.0.tcl 2013-11-02 17:13:52 UTC (rev 112836)
>>>
>>> @@ -56,6 +56,58 @@
>>>
>>> -DCMAKE_FIND_FRAMEWORK=LAST \
>>>
>>> -Wno-dev
>>>
>>>
>>>
>>> +# Handle configure.cppflags, configure.optflags, configure.cflags,
>>> +# configure.cxxflags, configure.ldflags by setting the equivalent CMAKE_*_FLAGS.
>>> +#
>>> +# Be aware that a CMake script can always override these flags when it runs, as
>>> +# they are frequently set internally in function of other CMake build variables!
>>> +#
>>> +# Attention: If you want to be sure that no compiler flags are passed via
>>> +# configure.args, you have to set manually configure.optflags to "", as it is by
>>> +# default "-O2" and added to all language-specific flags. If you want to turn off
>>> +# optimization, explicitly set configue.optflags to "-O0".
>>> +if (${configure.cppflags} != "") {
>>> + # Add the preprocessor flags to the C/C++ compiler flags as CMake does not
>>> + # honor separately CPPFLAGS (it uses usually add_definitions() for that).
>>> + # We use the compiler flags for all build types, as they are usually empty.
>>> + # Cf. also to CMake upstream ticket #12928 "CMake silently ignores CPPFLAGS"
>>> + # <
>>> http://www.cmake.org/Bug/view.php?id=12928
>>>> .
>>> + configure.args-append -DCMAKE_C_FLAGS="${configure.cppflags}"
>>> + configure.args-append -DCMAKE_CXX_FLAGS="${configure.cppflags}"
>>> +}
>>> +if {${configure.cflags} != ""} {
>>> + # The configure.cflags contain configure.optflags by default. Therefore, we
>>> + # set the Release flags, which would otherwise overrule the optimization
>>> + # flags, as they are set by default to "-O3 -NDEBUG". Therefore, be sure
>>> + # to add "-NDEBUG" to the configure.cflags if you want to turn off
>>> + # assertions in release builds!
>>> + configure.args-append -DCMAKE_C_FLAGS_RELEASE="${configure.cflags}"
>>> +}
>>> +if {${configure.cxxflags} != ""} {
>>> + # The configure.cxxflags contain configure.optflags by default. Therefore,
>>> + # we set the Release flags, which would otherwise overrule the optimization
>>> + # flags, as they are set by default to "-O3 -NDEBUG". Therefore, be sure
>>> + # to add "-NDEBUG" to the configure.cflags if you want to turn off
>>> + # assertions in release builds!
>>> + configure.args-append -DCMAKE_CXX_FLAGS_RELEASE="${configure.cxxflags}"
>>> +}
>>> +if {${configure.ldflags} != ""} {
>>> + # CMake supports individual linker flags for executables, modules, and dlls.
>>> + # By default, they are empty.
>>> + configure.args-append -DCMAKE_EXE_LINKER_FLAGS="${configure.ldflags}"
>>> + configure.args-append -DCMAKE_SHARED_LINKER_FLAGS="${configure.ldflags}"
>>> + configure.args-append -DCMAKE_MODULE_LINKER_FLAGS="${configure.ldflags}"
>>> +}
>>
>> This doesn’t work because portgroups are typically included at the top of the portfile, before any of these options are set. So if you have a Portfile like this…
>>
>>
>> 1. PortGroup cmake 1.0
>> 2.
>> 3. name foo
>> 4. version 1.0
>> 5.
>> 6. configure.cppflags-append -I${prefix}/foo/include
>>
>>
>> …this won’t work, because the cmake portgroup has already added the default value of configure.cppflags to configure.args on line 1, before the portfile has had a chance to customize it on line 6.
>
> Yup, this is breaking the vtk5 build which uses:
>
> configure.cxxflags-append \
> -DUSE_INTERP_ERRORLINE
>
>
>> For this reason a portgroup should wait to check options until a pre-phase block, in this case a pre-configure block.
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4145 bytes
Desc: not available
URL: <http://lists.macosforge.org/pipermail/macports-dev/attachments/20131103/991b3d2b/attachment.p7s>
More information about the macports-dev
mailing list