[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