<pre style='margin:0'>
Perry E. Metzger (pmetzger) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/e8f9c3dbe31f1b604b076a8753b3ea26d265e276">https://github.com/macports/macports-ports/commit/e8f9c3dbe31f1b604b076a8753b3ea26d265e276</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new e8f9c3d  cmake-1.1 PG : CMake generator support
</span>e8f9c3d is described below

<span style='display:block; white-space:pre;color:#808000;'>commit e8f9c3dbe31f1b604b076a8753b3ea26d265e276
</span>Author: R.J.V. Bertin <rjvbertin@gmail.com>
AuthorDate: Tue Mar 20 19:03:35 2018 +0100

<span style='display:block; white-space:pre;color:#404040;'>    cmake-1.1 PG : CMake generator support
</span>---
 _resources/port1.0/group/cmake-1.1.tcl | 445 ++++++++++++++++++++++++---------
 1 file changed, 323 insertions(+), 122 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/_resources/port1.0/group/cmake-1.1.tcl b/_resources/port1.0/group/cmake-1.1.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 37f0a77..a3a357b 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/_resources/port1.0/group/cmake-1.1.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/_resources/port1.0/group/cmake-1.1.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2,7 +2,7 @@
</span> #
 # Copyright (c) 2009 Orville Bennett <illogical1 at gmail.com>
 # Copyright (c) 2010-2015 The MacPorts Project
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Copyright (c) 2015, 2016 R.J.V. Bertin
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Copyright (c) 2015-2018 R.J.V. Bertin
</span> # All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -34,80 +34,240 @@
</span> # Usage:
 # PortGroup     cmake 1.1
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-namespace eval cmake {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+namespace eval cmake {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # our directory:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    variable currentportgroupdir [file dirname [dict get [info frame 0] file]]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+options                             cmake.build_dir \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    cmake.source_dir \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    cmake.generator \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    cmake.generator_blacklist \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    cmake.build_type \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    cmake.install_prefix \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    cmake.install_rpath \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    cmake.module_path \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    cmake_share_module_dir \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    cmake.out_of_source \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                    cmake.set_osx_architectures
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+## Explanation of and default values for the options defined above ##
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-options cmake.build_dir cmake.install_prefix cmake.install_rpath
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-options cmake.out_of_source cmake.set_osx_architectures
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# out-of-source builds are the default
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default cmake.out_of_source         {yes}
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# make out-of-source builds the default (finally)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-default cmake.out_of_source {yes}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# cmake.build_dir defines where the build will take place
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default cmake.build_dir             {${workpath}/build}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# cmake.source_dir defines where CMake will look for the toplevel CMakeLists.txt file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default cmake.source_dir            {${worksrcpath}}
</span> 
 # set CMAKE_OSX_ARCHITECTURES when necessary.
 # This can be deactivated when (non-Apple) compilers are used
 # that don't support the corresponding -arch options.
 default cmake.set_osx_architectures {yes}
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-default cmake.build_dir         {${workpath}/build}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-default cmake.install_prefix    {${prefix}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-default cmake.install_rpath     {${cmake.install_prefix}/lib}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# cmake.build_type defines the type of build; it defaults to "MacPorts"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# which means only the compiler options set through configure.c*flags and configure.optflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# are used, plus those set in the port's CMake files. Alternative pre-defined types are
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Release, Debug, RelWithDebInfo and MinSizeRel; "None" should work like "MacPorts".
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default cmake.build_type            {MacPorts}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# cmake-based ports may want to modify the install prefix
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default cmake.install_prefix        {${prefix}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# minimal/initial value for the install rpath:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default cmake.install_rpath         {${prefix}/lib}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# standard place to install extra CMake modules
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default cmake_share_module_dir      {${prefix}/share/cmake/Modules}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# extra locations to search for modules can be specified with
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# cmake.module_path; they come after ${cmake_share_module_dir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default cmake.module_path           {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# CMake provides several different generators corresponding to different utilities
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# (and IDEs) used for building the sources. We support "Unix Makefiles" (the default)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# and Ninja, a leaner-and-meaner alternative.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# In the Portfile, use
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# cmake.generator Ninja
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# or
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# cmake.generator "Unix Makefiles"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# or even
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# cmake.generator "Eclipse CDT4 - Ninja"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# if maintaining the port means editing it using an IDE of choice.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# If ports package code that cannot be built with certain generators this
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# fact can be signalled:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# cmake.generator_blacklist <generator-pattern>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# (patterns are case-insensitive, e.g. "*ninja*")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default cmake.generator             {"CodeBlocks - Unix Makefiles"}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default cmake.generator_blacklist   {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# CMake generates Unix Makefiles that contain a special "fast" install target
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# which skips the whole "let's see if there's anything left to (re)build before
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# we install" you normally get with `make install`. That check should be
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# redundant in normal destroot steps, because we just completed the build step.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default destroot.target             {install/fast}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+## ############################################################### ##
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# make sure cmake is available:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# can use cmake or cmake-devel; default to cmake if not installed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+depends_build-append                path:bin/cmake:cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> proc cmake::rpath_flags {} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    global prefix
</span>     if {[llength [option cmake.install_rpath]]} {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        # make sure a single ${cmake.install_prefix} is included in the rpath
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # careful, we are likely to be called more than once.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[lsearch -exact [option cmake.install_rpath] [option cmake.install_prefix]/lib] == -1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            cmake.install_rpath-append [option cmake.install_prefix]/lib
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span>         return [list \
             -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=ON \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            -DCMAKE_INSTALL_RPATH='[join [option cmake.install_rpath] \;]'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            -DCMAKE_INSTALL_RPATH="[join [option cmake.install_rpath] \;]"
</span>         ]
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    return -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=OFF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # always build with full RPATH; this is the default on Mac.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Let ports deactivate it explicitly if they need to.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return -DCMAKE_BUILD_WITH_INSTALL_RPATH:BOOL=ON
</span> }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# standard place to install extra CMake modules
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-set cmake_share_module_dir ${prefix}/share/cmake/Modules
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc cmake::system_prefix_path {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global prefix
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[option cmake.install_prefix] ne ${prefix}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return [list \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 -DCMAKE_SYSTEM_PREFIX_PATH="${prefix}\;[option cmake.install_prefix]\;/usr"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return [list \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 -DCMAKE_SYSTEM_PREFIX_PATH="${prefix}\;/usr"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# can use cmake or cmake-devel; default to cmake if not installed
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-depends_build-append path:bin/cmake:cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc cmake::module_path {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[llength [option cmake.module_path]]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set modpath "[join [concat [option cmake_share_module_dir] [option cmake.module_path]] \;]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set modpath [option cmake_share_module_dir]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return [list \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        -DCMAKE_MODULE_PATH="${modpath}" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        -DCMAKE_PREFIX_PATH="${modpath}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    ]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-proc _cmake_get_build_dir {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc cmake::build_dir {} {
</span>     if {[option cmake.out_of_source]} {
         return [option cmake.build_dir]
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    return [option worksrcpath]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return [option cmake.source_dir]
</span> }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-default configure.dir {[_cmake_get_build_dir]}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-pre-configure {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    file mkdir ${configure.dir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+option_proc cmake.generator cmake::handle_generator
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc cmake::handle_generator {option action args} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global cmake.generator destroot destroot.target build.cmd build.post_args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global depends_build destroot.post_args build.jobs subport
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${action} eq "set"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        switch -glob [lindex ${args} 0] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            "*Unix Makefiles*" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_debug "Selecting the 'Unix Makefiles' generator ($args)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                depends_build-delete \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                port:ninja
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                build.cmd       make
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                build.post_args VERBOSE=ON
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                destroot.target install/fast
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                destroot.destdir \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                DESTDIR=${destroot}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                # unset the DESTDIR env. variable if it has been set before
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                destroot.env-delete \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                DESTDIR=${destroot}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            "*Ninja" {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                ui_debug "Selecting the Ninja generator ($args)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                depends_build-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                port:ninja
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                build.cmd       ninja
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                # force Ninja to use the exact number of requested build jobs
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                build.post_args -j${build.jobs} -v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                destroot.target install
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                # ninja needs the DESTDIR argument in the environment
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                destroot.destdir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                destroot.env-append DESTDIR=${destroot}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            default {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {[llength $args] != 1} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    set msg "cmake.generator requires a single value (not \"${args}\")"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    set msg "The \"${args}\" generator is not currently known/supported (cmake.generator is case-sensitive!)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                if {[file tail ${cmake::currentportgroupdir}] eq "group"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    # we're not being run from the registry so we can raise errors
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    return -code error ${msg}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ui_error "${msg} (ignoring)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span> }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-#FIXME: ccache works with cmake on linux
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-configure.ccache    no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default configure.dir {[cmake::build_dir]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default build.dir {${configure.dir}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default build.post_args {VERBOSE=ON}
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-configure.cmd       ${prefix}/bin/cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# cache the configure.ccache variable (it will be overridden in the pre-configure step)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set cmake::ccache_cache ${configure.ccache}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# tell CMake to use ccache via the CMAKE_<LANG>_COMPILER_LAUNCHER variable
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# and unset the global configure.ccache option which is not compatible
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# with CMake.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# See https://stackoverflow.com/questions/1815688/how-to-use-ccache-with-cmake
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc cmake::ccaching {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global prefix
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    namespace upvar ::cmake ccache_cache cccache
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${cccache} && [file exists ${prefix}/bin/ccache]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return [list \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            -DCMAKE_C_COMPILER_LAUNCHER=${prefix}/bin/ccache \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            -DCMAKE_CXX_COMPILER_LAUNCHER=${prefix}/bin/ccache]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# Policy 0025=NEW : identify Apple Clang compiler as "AppleClang";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# MacPorts Clang is then handled separately from AppleClang. This
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# setting ensures consistency in compiler feature determination and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# use, which is especially useful for older Mac OS X installs --
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# e.g., ones that use MacPorts Clang 4.0 via the cxx11 1.1 PortGroup.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.cmd       ${prefix}/bin/cmake
</span> 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# appropriate default settings for configure.pre_args
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# variables are grouped thematically, with the more important ones
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# at the beginning or end for somewhat easier at-a-glance verification.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Policy 25=new: identify Apple Clang as AppleClang to ensure
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#                consistency in compiler feature determination
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Policy 60=new: don't rewrite ${prefix}/lib/libfoo.dylib as -lfoo
</span> default configure.pre_args {[list \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    -DCMAKE_BUILD_TYPE=MacPorts \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                   {-DCMAKE_C_COMPILER="$CC"} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DCMAKE_BUILD_TYPE=${cmake.build_type} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DCMAKE_INSTALL_PREFIX="${cmake.install_prefix}" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DCMAKE_INSTALL_NAME_DIR="${cmake.install_prefix}/lib" \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    {*}[cmake::system_prefix_path] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    {*}[cmake::ccaching] \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    {-DCMAKE_C_COMPILER="$CC"} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    {-DCMAKE_CXX_COMPILER="$CXX"} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DCMAKE_POLICY_DEFAULT_CMP0025=NEW \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DCMAKE_POLICY_DEFAULT_CMP0060=NEW \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DCMAKE_VERBOSE_MAKEFILE=ON \
</span>                     -DCMAKE_COLOR_MAKEFILE=ON \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                   {-DCMAKE_CXX_COMPILER="$CXX"} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
</span>                     -DCMAKE_FIND_FRAMEWORK=LAST \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    -DCMAKE_INSTALL_NAME_DIR=${cmake.install_prefix}/lib \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    -DCMAKE_INSTALL_PREFIX='${cmake.install_prefix}' \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    -DCMAKE_MODULE_PATH=${cmake_share_module_dir} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    {*}[cmake::module_path] \
</span>                     {*}[cmake::rpath_flags] \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    -DCMAKE_SYSTEM_PREFIX_PATH="${cmake.install_prefix}\;${prefix}\;/usr" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    -DCMAKE_VERBOSE_MAKEFILE=ON \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    -DCMAKE_POLICY_DEFAULT_CMP0025=NEW \
</span>                     -Wno-dev
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                    ]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# make sure configure.args is set but don't reset it
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+configure.args-append
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-default configure.post_args {${worksrcpath}}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default configure.post_args {[option cmake.source_dir]}
</span> 
 # CMake honors set environment variables CFLAGS, CXXFLAGS, and LDFLAGS when it
 # is first run in a build directory to initialize CMAKE_C_FLAGS,
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -130,6 +290,17 @@ default configure.post_args {${worksrcpath}}
</span> # TODO: Handle the Java-specific configure.classpath variable.
 
 pre-configure {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    # create the build directory as the first step
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    file mkdir ${configure.dir}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # check and bail early if we'd be using an incompatible cmake generator
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    foreach genpattern ${cmake.generator_blacklist} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[string match -nocase ${genpattern} ${cmake.generator}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_error "port:${subport} doesn't support CMake's ${cmake.generator} generator"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            return -code error "unsupported CMake generator requested (port:${subport})"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     # The environment variable CPPFLAGS is not considered by CMake.
     # (CMake upstream ticket #12928 "CMake silently ignores CPPFLAGS"
     # <https://www.cmake.org/Bug/view.php?id=12928>).
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -137,62 +308,63 @@ pre-configure {
</span>     # But adding -I${prefix}/include to CFLAGS/CXXFLAGS is a bad idea.
     # If any other flags are needed, we need to add them.
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    # In addition, CMake provides build-type-specific flags for Release (-O3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # -DNDEBUG), Debug (-g), MinSizeRel (-Os -DNDEBUG), and RelWithDebInfo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # (-O2 -g -DNDEBUG). If the configure.optflags have been set (-Os by
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # default), we have to remove the optimization flags from the concerned
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Release build type so that configure.optflags gets honored (Debug used
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # by the +debug variant does not set optimization flags by default).
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # NB: more recent CMake versions (>=3?) no longer take the env. variables into
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # account, and thus require explicit use of ${configure.c*flags} below:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#     if {${configure.optflags} ne ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#         configure.args-append   -DCMAKE_C_FLAGS="-DNDEBUG ${configure.cflags}" \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#                                 -DCMAKE_CXX_FLAGS="-DNDEBUG ${configure.cxxflags}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-#     }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # Using a custom BUILD_TYPE we can simply append to the env. variables,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # but why do we set -DNDEBUG?
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    configure.cflags-append     -DNDEBUG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    configure.cxxflags-append   -DNDEBUG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    # process ${configure.cppflags} to extract include directives and other options
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # In addition, CMake provides build-type-specific flags for
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # Release (-O3 -DNDEBUG), Debug (-g), MinSizeRel (-Os -DNDEBUG), and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # RelWithDebInfo (-O2 -g -DNDEBUG). If the configure.optflags have been
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # set (-Os by default), we have to remove the optimisation flags from
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # the concerned Release build type so that configure.optflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # gets honored (Debug used by the +debug variant does not set
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # optimisation flags by default).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # We use a custom BUILD_TYPE (MacPorts) so we can simply append all desired
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # arguments to the CFLAGS and CXXFLAGS env. variables, which will be used
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # to set CMAKE_C_FLAGS and CMAKE_CXX_FLAGS, and those will control the build.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {![variant_isset debug]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.cflags-append     -DNDEBUG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.cxxflags-append   -DNDEBUG
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # process ${configure.cppflags} because CMake ignores $CPPFLAGS
</span>     if {${configure.cppflags} ne ""} {
         set cppflags [split ${configure.cppflags}]
         # reset configure.cppflags; we don't want options in double in CPPFLAGS and CFLAGS/CXXFLAGS
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set configure.cppflags ""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        set next_is_path 0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.cppflags
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # copy the cppflags arguments one by one into cflags and family
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # CMake does have an INCLUDE_DIRECTORIES variable but setting it from the commandline
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        # doesn't have the intended effect (any longer).
</span>         foreach flag ${cppflags} {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            if {${next_is_path}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                # previous option was a lone -I
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                configure.cppflags-append       -I${flag}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                set next_is_path 0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if {[string match "-I" ${flag}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    # lone -I, store the next argument as a path
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    # (or ignore if this is the last argument)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    set next_is_path 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                } elseif {[string match "-I*" ${flag}]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    # a -Ipath option
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    configure.cppflags-append   ${flag}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                } else {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    # everything else must go into CFLAGS and CXXFLAGS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    configure.cflags-append     ${flag}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    configure.cxxflags-append   ${flag}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    # append to the ObjC flags too, even if CMake ignores them:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    configure.objcflags-append  ${flag}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    configure.objcxxflags-append   ${flag}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {${configure.cppflags} ne ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            configure.args-append -DINCLUDE_DIRECTORIES:PATH="${configure.cppflags}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            configure.cflags-append     ${flag}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            configure.cxxflags-append   ${flag}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # append to the ObjC flags too, even if CMake ignores them:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            configure.objcflags-append  ${flag}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            configure.objcxxflags-append   ${flag}
</span>         }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_debug "CPPFLAGS=\"${cppflags}\" inserted into CFLAGS=\"${configure.cflags}\" CXXFLAGS=\"${configure.cxxflags}\""
</span>     }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    # CMake doesn't like --enable-debug, so remove it unconditionally.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    configure.args-delete --enable-debug
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.pre_args-prepend "-G \"[join ${cmake.generator}]\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # undo a counterproductive action from the debug PG:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.args-delete -DCMAKE_BUILD_TYPE=debugFull
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # The configure.ccache variable has been cached so we can restore it in the post-configure
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # (pre-configure and post-configure are always run in a single `port` invocation.)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.ccache        no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # surprising but intended behaviour that's impossible to work around more gracefully:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # overriding configure.ccache fails if the user set it directly from the commandline
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[tbool configure.ccache]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_error "Please don't use configure.ccache=yes on the commandline for port:${subport}, use configureccache=yes"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return -code error "invalid invocation (port:${subport})"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${cmake::ccache_cache}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_info "        (using ccache)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span> }
 
 post-configure {
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    # restore configure.ccache:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[info exists cmake::ccache_cache]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        configure.ccache    ${cmake::ccache_cache}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        ui_debug "configure.ccache restored to ${cmake::ccache_cache}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span>     # either compile_commands.json was created because of -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
     # in which case touch'ing it won't change anything. Or else it wasn't created, in which case
     # we'll create a file that corresponds, i.e. containing an empty json array.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -202,34 +374,52 @@ post-configure {
</span>             close ${fd}
         }
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {![catch {set fd [open "${workpath}/.macports.${subport}.configure.cmd" "w"]} err]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        foreach var [array names ::env] {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts ${fd} "${var}=$::env(${var})"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts ${fd} "[join [lrange [split ${configure.env} " "] 0 end] "\n"]"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        # the following variables are no longer set in the environment at this point:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts ${fd} "CPP=\"${configure.cpp}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts ${fd} "CC=\"${configure.cc}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts ${fd} "CXX=\"${configure.cxx}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {${configure.objcxx} ne ${configure.cxx}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts ${fd} "OBJCXX=\"${configure.objcxx}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts ${fd} "CFLAGS=\"${configure.cflags}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts ${fd} "CXXFLAGS=\"${configure.cxxflags}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {${configure.objcflags} ne ${configure.cflags}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts ${fd} "OBJCFLAGS=\"${configure.objcflags}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc cmake.save_configure_cmd {{save_log_too ""}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {${save_log_too} ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        pre-configure {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            configure.pre_args-prepend "-cf '${configure.cmd} "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            configure.post_args-append "|& tee ${workpath}/.macports.${subport}.configure.log'"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            configure.cmd "/bin/csh"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ui_debug "configure command set to `${configure.cmd} ${configure.pre_args} ${configure.args} ${configure.post_args}`"
</span>         }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {${configure.objcxxflags} ne ${configure.cxxflags}} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts ${fd} "OBJCXXFLAGS=\"${configure.objcxxflags}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    post-configure {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {![catch {set fd [open "${workpath}/.macports.${subport}.configure.cmd" "w"]} err]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach var [array names ::env] {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                puts ${fd} "${var}=$::env(${var})"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts ${fd} "[join [lrange [split ${configure.env} " "] 0 end] "\n"]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # the following variables are no longer set in the environment at this point:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts ${fd} "CPP=\"${configure.cpp}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # these are particularly relevant because referenced in the configure.pre_args:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts ${fd} "CC=\"${configure.cc}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts ${fd} "CXX=\"${configure.cxx}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {${configure.objcxx} ne ${configure.cxx}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                puts ${fd} "OBJCXX=\"${configure.objcxx}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts ${fd} "CFLAGS=\"${configure.cflags}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts ${fd} "CXXFLAGS=\"${configure.cxxflags}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {${configure.objcflags} ne ${configure.cflags}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                puts ${fd} "OBJCFLAGS=\"${configure.objcflags}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {${configure.objcxxflags} ne ${configure.cxxflags}} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                puts ${fd} "OBJCXXFLAGS=\"${configure.objcxxflags}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts ${fd} "LDFLAGS=\"${configure.ldflags}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if {${configure.optflags} ne ""} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                puts ${fd} "configure.optflags=\"${configure.optflags}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts ${fd} "\ncd ${worksrcpath}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            puts ${fd} "${configure.cmd} [join ${configure.pre_args}] [join ${configure.args}] [join ${configure.post_args}]"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            close ${fd}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            unset fd
</span>         }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts ${fd} "LDFLAGS=\"${configure.ldflags}\""
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if {${configure.optflags} ne ""} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            puts ${fd} "configure.optflags=\"${configure.optflags}\""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {[file exists ${build.dir}/CMakeCache.txt]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # keep a backup of the CMake cache file
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            file copy -force ${build.dir}/CMakeCache.txt ${build.dir}/CMakeCache-MacPorts.txt
</span>         }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts ${fd} "\ncd ${worksrcpath}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        puts ${fd} "${configure.cmd} ${configure.pre_args} ${configure.args} ${configure.post_args}"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        close ${fd}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        unset fd
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -291,14 +481,25 @@ platform darwin {
</span> configure.universal_args-delete --disable-dependency-tracking
 
 variant debug description "Enable debug binaries" {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    configure.pre_args-replace  -DCMAKE_BUILD_TYPE=MacPorts \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                -DCMAKE_BUILD_TYPE=Debug
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # this PortGroup uses a custom CMAKE_BUILD_TYPE giving complete control over
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # the compiler flags. We use that here: replace the default -O2 with -O0, add
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # debugging options and do otherwise an exactly identical build.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.cflags-replace         -O2 -O0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.cxxflags-replace       -O2 -O0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.objcflags-replace      -O2 -O0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.objcxxflags-replace    -O2 -O0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.ldflags-replace        -O2 -O0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # get most if not all possible debug info
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[string match *clang* ${configure.cxx}] || [string match *clang* ${configure.cc}]} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set cmake::debugopts "-g -fno-limit-debug-info -DDEBUG"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set cmake::debugopts "-g -DDEBUG"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.cflags-append         ${cmake::debugopts}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.cxxflags-append       ${cmake::debugopts}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.objcflags-append      ${cmake::debugopts}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.objcxxflags-append    ${cmake::debugopts}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.ldflags-append        ${cmake::debugopts}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # try to ensure that info won't get stripped
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.args-append           -DCMAKE_STRIP:FILEPATH=/bin/echo
</span> }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-default build.dir {${configure.dir}}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-default build.post_args {VERBOSE=ON}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# Generated Unix Makefiles contain a "fast" install target that begins
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# installing immediately instead of checking build dependencies again.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-default destroot.target {install/fast}
</span></pre><pre style='margin:0'>

</pre>