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. For this reason a portgroup should wait to check options until a pre-phase block, in this case a pre-configure block. _______________________________________________ macports-dev mailing list macports-dev@lists.macosforge.org https://lists.macosforge.org/mailman/listinfo/macports-dev