<pre style='margin:0'>
Clemens Lang (neverpanic) pushed a commit to branch master
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/057ce2b2bfe8d08cafe3f98296546f6a060790ab">https://github.com/macports/macports-base/commit/057ce2b2bfe8d08cafe3f98296546f6a060790ab</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 057ce2b2bfe8d08cafe3f98296546f6a060790ab
</span>Author: Satryaji Aulia <satraul@macports.org>
AuthorDate: Thu Jun 13 22:24:38 2019 +0700

<span style='display:block; white-space:pre;color:#404040;'>    port1.0: Implement use_xcode option
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    * implement new option use_xcode to indicate Xcode dependency
</span><span style='display:block; white-space:pre;color:#404040;'>    * default DEVELOPER_DIR to Command Line Tools unless port needs Xcode
</span><span style='display:block; white-space:pre;color:#404040;'>    * hide Xcode files on trace mode unless port needs Xcode
</span><span style='display:block; white-space:pre;color:#404040;'>    * fail fetch phase of Xcode-dependent port if Xcode is not installed
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    References https://trac.macports.org/ticket/35045
</span><span style='display:block; white-space:pre;color:#404040;'>    References https://trac.macports.org/ticket/58016
</span>---
 src/port1.0/portbuild.tcl     |  1 +
 src/port1.0/portconfigure.tcl |  2 +-
 src/port1.0/portdestroot.tcl  |  1 +
 src/port1.0/portfetch.tcl     |  9 +++++++++
 src/port1.0/portmain.tcl      | 10 +++++++++-
 src/port1.0/porttrace.tcl     | 23 +++++++++++++++++------
 src/port1.0/portutil.tcl      | 11 +++++++++++
 7 files changed, 49 insertions(+), 8 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portbuild.tcl b/src/port1.0/portbuild.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 38e1f6c..2db76e3 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portbuild.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portbuild.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -48,6 +48,7 @@ options build.asroot \
</span>         use_parallel_build
 commands build
 # defaults
<span style='display:block; white-space:pre;background:#e0ffe0;'>+default build.env {[get_default_env]}
</span> default build.asroot no
 default build.dir {${worksrcpath}}
 default build.cmd {[portbuild::build_getmaketype]}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portconfigure.tcl b/src/port1.0/portconfigure.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 9628b97..0ab21eb 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portconfigure.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portconfigure.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -138,7 +138,7 @@ default compiler.fortran_fallback    {[portconfigure::get_fortran_fallback]}
</span> # define options
 commands configure autoreconf automake autoconf xmkmf
 # defaults
<span style='display:block; white-space:pre;background:#ffe0e0;'>-default configure.env       ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+default configure.env       {[get_default_env]}
</span> default configure.pre_args  {--prefix=${prefix}}
 default configure.cmd       ./configure
 default configure.nice      {${buildnicevalue}}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portdestroot.tcl b/src/port1.0/portdestroot.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 35c5f80..f311af1 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portdestroot.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portdestroot.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -52,6 +52,7 @@ commands destroot
</span> 
 # Set defaults
 default destroot.asroot no
<span style='display:block; white-space:pre;background:#e0ffe0;'>+default destroot.env {[get_default_env]}
</span> default destroot.dir {${build.dir}}
 default destroot.cmd {${build.cmd}}
 default destroot.pre_args {[portdestroot::destroot_getargs]}
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portfetch.tcl b/src/port1.0/portfetch.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 91fc517..ac1a0ff 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portfetch.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portfetch.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -607,11 +607,20 @@ proc portfetch::fetch_addfilestomap {filemapname} {
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Utility function to error out if Xcode is needed
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portfetch::checkxcode {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global use_xcode developer_dir
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$use_xcode eq "yes" && $xcodeversion eq "none"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return -code error "This port requires Xcode, which was not found on your system."
</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> # Initialize fetch target and call checkfiles.
 proc portfetch::fetch_init {args} {
     variable fetch_urls
 
     portfetch::checkfiles fetch_urls
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    portfetch::checkxcode
</span> }
 
 proc portfetch::fetch_start {args} {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portmain.tcl b/src/port1.0/portmain.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 2a506d1..a8f3654 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portmain.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portmain.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -56,7 +56,7 @@ options prefix name version revision epoch categories maintainers \
</span>         supported_archs depends_skip_archcheck installs_libs \
         license_noconflict copy_log_files \
         compiler.cpath compiler.library_path \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        add_users
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        add_users use_xcode
</span> 
 proc portmain::check_option_integer {option action args} {
     if {$action eq "set" && ![string is wideinteger -strict $args]} {
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -154,6 +154,14 @@ set egid [getegid]
</span> default worksymlink {[file normalize [file join $portpath work]]}
 default distpath {[file normalize [file join $portdbpath distfiles ${dist_subdir}]]}
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+default use_xcode {[portmain::get_default_use_xcode]}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc portmain::get_default_use_xcode {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {[option build.type] eq "xcode"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return yes
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return no
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> proc portmain::main {args} {
     return 0
 }
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/porttrace.tcl b/src/port1.0/porttrace.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index bd60e3c..1c6cd12 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/porttrace.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/porttrace.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -132,7 +132,7 @@ namespace eval porttrace {
</span>     proc trace_start {workpath} {
         global \
             developer_dir distpath env macportsuser os.platform configure.sdkroot \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            portpath prefix
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            portpath prefix use_xcode
</span> 
         variable fifo
         variable fifo_mktemp_template
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -213,10 +213,11 @@ namespace eval porttrace {
</span>         }
 
         # Allow access to some Xcode specifics
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        allow trace_sandbox "/var/db/xcode_select_link"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        allow trace_sandbox "/var/db/mds"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        allow trace_sandbox [file normalize ~${macportsuser}/Library/Preferences/com.apple.dt.Xcode.plist]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        allow trace_sandbox "$env(HOME)/Library/Preferences/com.apple.dt.Xcode.plist"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set xcode_paths {}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend xcode_paths "/var/db/xcode_select_link"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend xcode_paths "/var/db/mds"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend xcode_paths [file normalize ~${macportsuser}/Library/Preferences/com.apple.dt.Xcode.plist]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend xcode_paths "$env(HOME)/Library/Preferences/com.apple.dt.Xcode.plist"
</span> 
         # Allow access to developer_dir; however, if it ends with /Contents/Developer, strip
         # that. If it doesn't leave that in place to avoid allowing access to "/"!
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -224,7 +225,17 @@ namespace eval porttrace {
</span>         if {[llength $ddsplit] > 2 && [lindex $ddsplit end-1] eq "Contents" && [lindex $ddsplit end] eq "Developer"} {
             set ddsplit [lrange $ddsplit 0 end-2]
         }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        allow trace_sandbox [file join {*}$ddsplit]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        lappend xcode_paths [file join {*}$ddsplit]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {$use_xcode eq "no"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            foreach xcode_path $xcode_paths {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                deny trace_sandbox $xcode_path
</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;'>+            foreach xcode_path $xcode_paths {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                allow trace_sandbox $xcode_path
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span> 
         # Allow launchd.db access to avoid failing on port-load(1)/port-unload(1)/port-reload(1)
         allow trace_sandbox "/var/db/launchd.db"
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/port1.0/portutil.tcl b/src/port1.0/portutil.tcl
</span><span style='display:block; white-space:pre;color:#808080;'>index 6911c8a..ae6fb1e 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/port1.0/portutil.tcl
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/port1.0/portutil.tcl
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -508,6 +508,17 @@ proc default_check {optionName index op} {
</span>     }
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# get_default_env
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Unless port is Xcode dependent, returns env which sets developer_dir to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# Command Line Tools
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+proc get_default_env {} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    global use_xcode
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if {$use_xcode eq "yes"} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return ""
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return "DEVELOPER_DIR=/Library/Developer/CommandLineTools"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> ##
 # Filter options which take strings removing indent to ease Portfile writing
 proc handle_option_string {option action args} {
</pre><pre style='margin:0'>

</pre>