On Nov 3, 2013, at 10:56, Ryan Schmidt <ryandes...@macports.org> wrote:
> > On Nov 2, 2013, at 15:43, Ryan Schmidt <ryandes...@macports.org> wrote: > >> On Nov 2, 2013, at 12:13, jerem...@macports.org wrote: >> >>> Revision >>> 112836 >>> Author >>> jerem...@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. > >
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ macports-dev mailing list macports-dev@lists.macosforge.org https://lists.macosforge.org/mailman/listinfo/macports-dev