<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[129868] trunk/base</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="https://trac.macports.org/changeset/129868">129868</a></dd>
<dt>Author</dt> <dd>raimue@macports.org</dd>
<dt>Date</dt> <dd>2014-12-21 12:18:25 -0800 (Sun, 21 Dec 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>base: rename 'port doctor' to 'port diagnose'

As discussed on the mailing list:
https://lists.macosforge.org/pipermail/macports-dev/2014-August/027777.html</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkbasedocMakefilein">trunk/base/doc/Makefile.in</a></li>
<li><a href="#trunkbasesrcmacports10Makefilein">trunk/base/src/macports1.0/Makefile.in</a></li>
<li><a href="#trunkbasesrcmacports10macportstcl">trunk/base/src/macports1.0/macports.tcl</a></li>
<li><a href="#trunkbasesrcportporttcl">trunk/base/src/port/port.tcl</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkbasedocportdiagnose1">trunk/base/doc/port-diagnose.1</a></li>
<li><a href="#trunkbasedocportdiagnose1txt">trunk/base/doc/port-diagnose.1.txt</a></li>
<li><a href="#trunkbasesrcmacports10diagnosetcl">trunk/base/src/macports1.0/diagnose.tcl</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkbasedocportdoctor1">trunk/base/doc/port-doctor.1</a></li>
<li><a href="#trunkbasedocportdoctor1txt">trunk/base/doc/port-doctor.1.txt</a></li>
<li><a href="#trunkbasesrcmacports10doctortcl">trunk/base/src/macports1.0/doctor.tcl</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkbasedocMakefilein"></a>
<div class="modfile"><h4>Modified: trunk/base/doc/Makefile.in (129867 => 129868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/base/doc/Makefile.in        2014-12-21 19:31:17 UTC (rev 129867)
+++ trunk/base/doc/Makefile.in        2014-12-21 20:18:25 UTC (rev 129868)
</span><span class="lines">@@ -31,11 +31,11 @@
</span><span class="cx">                 port-dependents.1 \
</span><span class="cx">                 port-deps.1 \
</span><span class="cx">                 port-destroot.1 \
</span><ins>+                port-diagnose.1 \
</ins><span class="cx">                 port-dir.1 \
</span><span class="cx">                 port-distcheck.1 \
</span><span class="cx">                 port-distfiles.1 \
</span><span class="cx">                 port-dmg.1 \
</span><del>-                port-doctor.1 \
</del><span class="cx">                 port-echo.1 \
</span><span class="cx">                 port-edit.1 \
</span><span class="cx">                 port-exit.1 \
</span></span></pre></div>
<a id="trunkbasedocportdiagnose1fromrev129846trunkbasedocportdoctor1"></a>
<div class="copfile"><h4>Copied: trunk/base/doc/port-diagnose.1 (from rev 129846, trunk/base/doc/port-doctor.1) (0 => 129868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/base/doc/port-diagnose.1                                (rev 0)
+++ trunk/base/doc/port-diagnose.1        2014-12-21 20:18:25 UTC (rev 129868)
</span><span class="lines">@@ -0,0 +1,53 @@
</span><ins>+'\&quot; t
+.TH &quot;PORT\-DIAGNOSE&quot; &quot;1&quot; &quot;12/21/2014&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
+.\&quot; -----------------------------------------------------------------
+.\&quot; * Define some portability stuff
+.\&quot; -----------------------------------------------------------------
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\&quot; http://bugs.debian.org/507673
+.\&quot; http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
+.\&quot; -----------------------------------------------------------------
+.\&quot; * set default formatting
+.\&quot; -----------------------------------------------------------------
+.\&quot; disable hyphenation
+.nh
+.\&quot; disable justification (adjust text to left margin only)
+.ad l
+.\&quot; -----------------------------------------------------------------
+.\&quot; * MAIN CONTENT STARTS HERE *
+.\&quot; -----------------------------------------------------------------
+.SH &quot;NAME&quot;
+port-diagnose \- Detects common issues
+.SH &quot;SYNOPSIS&quot;
+.sp
+.nf
+\fBport diagnose\fR
+        [\-\-quiet]
+.fi
+.SH &quot;DESCRIPTION&quot;
+.sp
+\fBport diagnose\fR will check a list of common issues that could affect the user or MacPorts in one way or another\&amp;. If any issues are found, a warning will be shown to the user included with a possible fix for said problem\&amp;.
+.SH &quot;OPTIONS&quot;
+.PP
+\fB\-\-quiet\fR
+.RS 4
+Only display warnings or errors\&amp;.
+.RE
+.SH &quot;SEE ALSO&quot;
+.sp
+\fBport\fR(1)
+.SH &quot;AUTHORS&quot;
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+(C) 2014 The MacPorts Project
+Kyle Sammons &lt;ksammons@macports\&amp;.org&gt;
+.fi
+.if n \{\
+.RE
+.\}
</ins></span></pre></div>
<a id="trunkbasedocportdiagnose1txtfromrev129846trunkbasedocportdoctor1txt"></a>
<div class="copfile"><h4>Copied: trunk/base/doc/port-diagnose.1.txt (from rev 129846, trunk/base/doc/port-doctor.1.txt) (0 => 129868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/base/doc/port-diagnose.1.txt                                (rev 0)
+++ trunk/base/doc/port-diagnose.1.txt        2014-12-21 20:18:25 UTC (rev 129868)
</span><span class="lines">@@ -0,0 +1,34 @@
</span><ins>+// vim: set et sw=4 ts=8 ft=asciidoc tw=80:
+port-diagnose(1)
+==============
+$Id$
+
+NAME
+----
+port-diagnose - Detects common issues 
+
+SYNOPSIS
+--------
+[cmdsynopsis]
+*port diagnose*
+        [--quiet]
+
+DESCRIPTION
+-----------
+*port diagnose* will check a list of common issues that could affect the user or
+MacPorts in one way or another. If any issues are found, a warning will be
+shown to the user included with a possible fix for said problem.
+
+OPTIONS
+-------
+*--quiet*::
+Only display warnings or errors.
+
+SEE ALSO
+--------
+man:port[1]
+
+AUTHORS
+-------
+ (C) 2014 The MacPorts Project
+ Kyle Sammons &lt;ksammons@macports.org&gt;
</ins></span></pre></div>
<a id="trunkbasedocportdoctor1"></a>
<div class="delfile"><h4>Deleted: trunk/base/doc/port-doctor.1 (129867 => 129868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/base/doc/port-doctor.1        2014-12-21 19:31:17 UTC (rev 129867)
+++ trunk/base/doc/port-doctor.1        2014-12-21 20:18:25 UTC (rev 129868)
</span><span class="lines">@@ -1,53 +0,0 @@
</span><del>-'\&quot; t
-.TH &quot;PORT\-DOCTOR&quot; &quot;1&quot; &quot;09/02/2014&quot; &quot;MacPorts 2\&amp;.3\&amp;.99&quot; &quot;MacPorts Manual&quot;
-.\&quot; -----------------------------------------------------------------
-.\&quot; * Define some portability stuff
-.\&quot; -----------------------------------------------------------------
-.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.\&quot; http://bugs.debian.org/507673
-.\&quot; http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
-.\&quot; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-.ie \n(.g .ds Aq \(aq
-.el       .ds Aq '
-.\&quot; -----------------------------------------------------------------
-.\&quot; * set default formatting
-.\&quot; -----------------------------------------------------------------
-.\&quot; disable hyphenation
-.nh
-.\&quot; disable justification (adjust text to left margin only)
-.ad l
-.\&quot; -----------------------------------------------------------------
-.\&quot; * MAIN CONTENT STARTS HERE *
-.\&quot; -----------------------------------------------------------------
-.SH &quot;NAME&quot;
-port-doctor \- Detects common issues
-.SH &quot;SYNOPSIS&quot;
-.sp
-.nf
-\fBport doctor\fR
-        [\-\-quiet]
-.fi
-.SH &quot;DESCRIPTION&quot;
-.sp
-\fBport doctor\fR will check a list of common issues that could affect the user or MacPorts in one way or another\&amp;. If any issues are found, a warning will be shown to the user included with a possible fix for said problem\&amp;.
-.SH &quot;OPTIONS&quot;
-.PP
-\fB\-\-quiet\fR
-.RS 4
-Only display warnings or errors\&amp;.
-.RE
-.SH &quot;SEE ALSO&quot;
-.sp
-\fBport\fR(1)
-.SH &quot;AUTHORS&quot;
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
-(C) 2014 The MacPorts Project
-Kyle Sammons &lt;ksammons@macports\&amp;.org&gt;
-.fi
-.if n \{\
-.RE
-.\}
</del></span></pre></div>
<a id="trunkbasedocportdoctor1txt"></a>
<div class="delfile"><h4>Deleted: trunk/base/doc/port-doctor.1.txt (129867 => 129868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/base/doc/port-doctor.1.txt        2014-12-21 19:31:17 UTC (rev 129867)
+++ trunk/base/doc/port-doctor.1.txt        2014-12-21 20:18:25 UTC (rev 129868)
</span><span class="lines">@@ -1,34 +0,0 @@
</span><del>-// vim: set et sw=4 ts=8 ft=asciidoc tw=80:
-port-doctor(1)
-==============
-$Id$
-
-NAME
-----
-port-doctor - Detects common issues 
-
-SYNOPSIS
---------
-[cmdsynopsis]
-*port doctor*
-        [--quiet]
-
-DESCRIPTION
------------
-*port doctor* will check a list of common issues that could affect the user or
-MacPorts in one way or another. If any issues are found, a warning will be
-shown to the user included with a possible fix for said problem.
-
-OPTIONS
--------
-*--quiet*::
-Only display warnings or errors.
-
-SEE ALSO
---------
-man:port[1]
-
-AUTHORS
--------
- (C) 2014 The MacPorts Project
- Kyle Sammons &lt;ksammons@macports.org&gt;
</del></span></pre></div>
<a id="trunkbasesrcmacports10Makefilein"></a>
<div class="modfile"><h4>Modified: trunk/base/src/macports1.0/Makefile.in (129867 => 129868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/base/src/macports1.0/Makefile.in        2014-12-21 19:31:17 UTC (rev 129867)
+++ trunk/base/src/macports1.0/Makefile.in        2014-12-21 20:18:25 UTC (rev 129868)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx"> include ../../Mk/macports.autoconf.mk
</span><span class="cx"> 
</span><span class="cx"> SRCS=                macports.tcl macports_dlist.tcl macports_util.tcl \
</span><del>-                macports_autoconf.tcl doctor.tcl reclaim.tcl
</del><ins>+                macports_autoconf.tcl diagnose.tcl reclaim.tcl
</ins><span class="cx"> OBJS=                macports.o get_systemconfiguration_proxies.o sysctl.o
</span><span class="cx"> SHLIB_NAME=        MacPorts${SHLIB_SUFFIX}
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkbasesrcmacports10diagnosetclfromrev129743trunkbasesrcmacports10doctortcl"></a>
<div class="copfile"><h4>Copied: trunk/base/src/macports1.0/diagnose.tcl (from rev 129743, trunk/base/src/macports1.0/doctor.tcl) (0 => 129868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/base/src/macports1.0/diagnose.tcl                                (rev 0)
+++ trunk/base/src/macports1.0/diagnose.tcl        2014-12-21 20:18:25 UTC (rev 129868)
</span><span class="lines">@@ -0,0 +1,758 @@
</span><ins>+# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4
+# diagnose.tcl
+# $Id: diagnose.tcl 119177 2014-04-18 22:35:29Z cal@macports.org $
+#
+# Copyright (c) 2002 - 2003 Apple Inc.
+# Copyright (c) 2004 - 2005 Paul Guyot, &lt;pguyot@kallisys.net&gt;.
+# Copyright (c) 2004 - 2006 Ole Guldberg Jensen &lt;olegb@opendarwin.org&gt;.
+# Copyright (c) 2004 - 2005 Robert Shaw &lt;rshaw@opendarwin.org&gt;
+# Copyright (c) 2004 - 2014 The MacPorts Project
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. Neither the name of Apple Inc. nor the names of its contributors
+#    may be used to endorse or promote products derived from this software
+#    without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot;
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# Todo:
+
+# Done:
+# Add -q for quiet mode, where we don't print anything
+# Check for command line tools
+# Check for any DYLD_* environmental variables
+# Check for '.la' in dylib and '.prl'
+# Check if installed files are readable 
+# Check for sqlite
+# Check for openssl
+# Crowd-source more ideas from the mailing-list
+# Check if $PATH is first
+# Check for issues with compilation. Compile small, simple file, check for &quot;couldn't create cache file&quot;
+# check_for_stray_developer_directory
+# Check for *.h, *.hpp, *.hxx in /usr/local/include
+# Check for *.dylib in /usr/local/lib
+# Check for other package managers. Fink = /sw, homebrew = /usr/local/Cellar
+# Check for all files installed by ports exists
+# Check for archives from all ports exists
+# Check for things in /usr/local
+# Check for x11.app if the OS is 10.6 and suggest installing xorg-server or the site on macosforge
+# Add error catching for line's without an equals sign. 
+# Support comments for the parser
+# Check for amount of drive space
+# Move port_diagnose.ini to the port tree, below _resources 
+# Check for curl
+# Check for rsync
+# Check if macports is in /opt/local
+
+
+package provide diagnose 1.0 
+
+package require macports
+package require reclaim 1.0
+
+namespace eval diagnose {
+
+    # Command line argument that determines whether or not to output things fancily. 
+    variable quiet 0
+    
+    proc main {opts} {
+        
+        # The main function. Handles all the calls to the correct functions, and sets the config_options array, 
+        # as well as the parser_options array.
+        #
+        # Args:
+        #           opts - The options passed in. Currently the only option available is 'quiet'. 
+        # Returns:
+        #           None
+
+        # Setting the 'quiet' variable based on what was passed in.
+        if {$opts ne &quot;&quot;} {
+            set diagnose::quiet 1
+        } else {
+            set diagnose::quiet 0
+        }
+
+        array set config_options    [list]
+        set parser_options          {&quot;macports_location&quot; &quot;profile_path&quot; &quot;shell_location&quot; &quot;xcode_version_10.10&quot; &quot;xcode_version_10.9&quot; &quot;xcode_version_10.8&quot; \
+                                    &quot;xcode_version_10.7&quot; &quot;xcode_version_10.6&quot; &quot;xcode_version_10.7&quot; &quot;xcode_version_10.6&quot; &quot;xcode_version_10.5&quot; \
+                                    &quot;xcode_version_10.4&quot; &quot;xcode_build&quot;}
+
+        set user_config_path        ${macports::portdbpath}/port_diagnose.ini
+        set xcode_config_path       [macports::getdefaultportresourcepath &quot;macports1.0/xcode_versions.ini&quot;] 
+
+        # Make sure at least a default copy of the xcode and user config exist
+        make_xcode_config $xcode_config_path
+        make_user_config  $user_config_path
+
+        # Read the config files
+        get_config config_options $parser_options $user_config_path 
+        get_config config_options $parser_options $xcode_config_path 
+
+        # Start the checks
+        check_path $config_options(macports_location) $config_options(profile_path) $config_options(shell_location)
+        check_xcode config_options
+        check_for_app curl
+        check_for_app rsync
+        check_for_app openssl
+        check_for_app sqlite3
+        check_macports_location
+        check_free_space
+        check_for_x11
+        check_for_files_in_usr_local 
+        check_tarballs 
+        check_port_files 
+        check_for_package_managers
+        check_for_stray_developer_directory
+        check_compilation_error_cache
+        check_for_dyld
+        check_for_clt
+    }
+
+    proc check_for_clt {} {
+
+        # Checks to see if the Xcode Command Line Tools are installed by checking if the file
+        # /Library/Developer/CommandLineTools exists if the system is running 10.9, or if they're
+        # running an older version, if the command xcode-select -p outputs something.
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        output &quot;command line tools&quot;
+
+        set version ${macports::macosx_version}
+
+        if {$version eq &quot;10.9&quot;} {
+
+            if {![file exists &quot;/Library/Developer/CommandLineTools/&quot;]} {
+
+                ui_warn &quot;Xcode Command Line Tools are not installed! To install them, please enter the command:
+                                    xcode-select --install&quot;
+                success_fail 0
+                return
+            }
+            success_fail 1
+            return
+
+        } else {
+
+            set xcode_select [exec xcode-select -p]
+
+            if {$xcode_select eq &quot;&quot;} {
+
+                ui_warn &quot;Xcode Command Line Tools are not installed! To install them, please enter the command:
+                                    xcode-selct --install&quot;
+                success_fail 0
+                return
+            }
+            success_fail 1
+        }
+    }
+
+    proc check_for_dyld {} {
+
+        # Checks to see if the current MacPorts session is running with a DYLD_* environmental 
+        # variable set.
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        output &quot;DYLD_* environmental variables&quot;
+
+        set printenv        [exec printenv]
+        set split           [split $printenv]
+
+        if {[regexp {DYLD_.} $split]} {
+            ui_warn &quot;found a DYLD_* environmental variable. These are known to cause issues with MacPorts. Please\
+                     unset the variable for the duration MacPorts is running.&quot;
+
+            success_fail 0
+            return
+        }
+
+        success_fail 1
+   }
+
+    proc output {string} {
+        
+        # Outputs the given string formatted correctly.
+        #
+        # Args:
+        #           string - The string to be output 
+        # Returns:
+        #           None
+
+        if {${diagnose::quiet} == 0} {
+            ui_msg -nonewline &quot;Checking for $string... &quot;
+        }
+    }
+
+    proc success_fail {result} {
+
+        # Either outputs a [SUCCESS] or [FAILED], depending on the result.
+        #
+        # Args:
+        #           result - An integer value. 1 = [SUCCESS], anything else = [FAILED]
+        # Returns:
+        #           None
+
+        if {${diagnose::quiet} eq 0} {
+
+            if {$result == 1} {
+
+                ui_msg &quot;\[SUCCESS\]&quot;
+                return
+            }
+
+            ui_msg &quot;\[FAILED\]&quot;
+        }
+    }
+
+    proc check_compilation_error_cache {} {
+
+        # Checks to see if the compiler can compile properly, or it throws the error, &quot;couldn't create cache file&quot;.
+        #
+        # Args: 
+        #           None
+        # Returns:
+        #           None
+
+        # TODO: Should we drop privileges?
+
+        output &quot;compilation errors&quot;
+
+        set filename    &quot;test.c&quot;
+        set fd          [open $filename w]
+        
+        puts $fd &quot;int main() { return 0; }&quot;
+        close $fd
+
+        # 'clang' will fail when using
+        # https://trac.macports.org/wiki/UsingTheRightCompiler#testing
+        # TODO: use default C compiler
+        # TODO: skip if no C compiler installed
+        catch {exec /usr/bin/clang $filename -o main_test} output
+
+        file delete $filename
+        file delete &quot;main_test&quot;
+
+        if {[string length $output] &gt; 0} {
+            # Some type of error
+            if {[string match &quot;*couldn't create cache file*&quot; $output]} {
+                ui_warn &quot;found errors when attempting to compile file. To fix this issue, delete your tmp folder using:
+                       rm -rf \$TMPDIR&quot;
+            } else {
+                ui_warn $output
+            }
+            success_fail 0
+            return
+        }
+
+        success_fail 1 
+       
+    }
+
+    proc check_for_stray_developer_directory {} {
+
+        # Checks to see if the script to remove leftover files from Xcode has been run or not. Implementation heavily influenced
+        # by Homebrew implementation. 
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        output &quot;stray developer directory&quot;
+        
+        set uninstaller &quot;/Developer/Library/uninstall-developer-folder&quot;
+        
+        if {${macports::xcodeversion} &gt;= 4.3 &amp;&amp; [file exists $uninstaller]} { 
+            ui_warn &quot;you have leftover files from an older version of Xcode. You should delete them by using, $uninstaller&quot;
+
+            success_fail 0 
+            return
+        } 
+
+        success_fail 1 
+    }
+
+    proc check_for_package_managers {} {
+
+        # Checks to see if either Fink or Homebrew are installed on the system. If they are, it warns them and suggest they uninstall
+        # or move them to a different location.
+        # 
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        output &quot;HomeBrew&quot;
+        
+        if {[file exists &quot;/usr/local/Cellar&quot;]} {
+            ui_warn &quot;it seems you have Homebrew installed on this system -- Because Homebrew uses /usr/local, this can potentially cause issues \
+                     with MacPorts. We'd recommend you either uninstall it, or move it from /usr/local for now.&quot;
+
+            success_fail 0
+
+        } else {
+
+            success_fail 1
+        }
+
+        output &quot;Fink&quot;
+        if {[file exists &quot;/sw&quot;]} {
+            ui_warn &quot;it seems you have Fink installed on your system -- This could potentially cause issues with MacPorts. We'd recommend you'd \
+                     either uninstall it, or move it from /sw for now.&quot;
+
+            success_fail 0

+        } else {
+
+            success_fail 1
+        }
+    }
+
+    proc check_port_files {} {
+        
+        # Checks to see if each file installed by all active and installed ports actually exists on the filesystem. If not, it warns
+        # the user and suggests the user deactivate and reactivate the port.
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+
+        set apps [reclaim::get_info]
+
+        array set activeApps {}
+        set totalFiles 0
+
+        foreach app $apps {
+
+            set name    [lindex $app 0]
+            set active  [lindex $app 4]
+            set files   [registry::port_registered $name]
+
+            if {$active} {
+                set activeApps($name) $files
+                incr totalFiles [llength $files]
+            }
+        }
+
+        set fancyOutput [expr {   ![macports::ui_isset ports_debug] \
+                               &amp;&amp; ![macports::ui_isset ports_verbose] \
+                               &amp;&amp; [info exists macports::ui_options(progress_generic)] \
+                               &amp;&amp; ${diagnose::quiet} == 0}]
+
+        if {$fancyOutput} {
+            set progress $macports::ui_options(progress_generic)
+        }
+
+        if {$totalFiles &gt; 0} {
+            if {$fancyOutput} {
+                output &quot;files installed by ports on disk&quot;
+                if {${diagnose::quiet} == 0} {
+                    # we need a newline here or the progress bar will overwrite the line
+                    ui_msg &quot;&quot;
+                }
+                $progress start
+            }
+
+            set currentFile 1
+            foreach name [lsort [array names activeApps]] {
+                foreach file $activeApps($name) {
+                    if {$fancyOutput} {
+                        $progress update $currentFile $totalFiles
+                    } else {
+                        output &quot;file '$file' on disk&quot;
+                    }
+
+                    if {![file exists $file]} {
+                        if {$fancyOutput} {
+                            $progress intermission
+                        } else {
+                            success_fail 0
+                        }
+
+                        if {[catch {file lstat $file _}]} {
+                            ui_warn &quot;couldn't find file '$file' for port '$name'. Please deactivate and reactivate the port to fix this issue.&quot;
+                        }
+                    } elseif {![file readable $file]} {
+                        if {$fancyOutput} {
+                            $progress intermission
+                        } else {
+                            success_fail 0
+                        }
+
+                        ui_warn &quot;'$file' installed by port '$name' is currently not readable. Please try again. If this problem persists, please contact the mailing list.&quot;
+                    } elseif {!$fancyOutput} {
+                        success_fail 1
+                    }
+
+                    incr currentFile
+                }
+            }
+
+            if {$fancyOutput} {
+                $progress finish
+            }
+        }
+    }
+
+    proc check_tarballs {} {
+
+        # Checks if the archives for each installed port in /opt/local/var/macports/software/$name is actually in there. If not, it warns
+        # the user and suggest a reinstallation of the port. 
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        set apps [reclaim::get_info]
+
+        foreach app $apps {
+
+
+            set name        [lindex $app 0]
+            set version     [lindex $app 1]
+            set revision    [lindex $app 2]
+            set variants    [lindex $app 3]
+            set epoch       [lindex $app 5]
+
+            output &quot;'${name} @${version}_${revision}${variants}'s tarball on disk&quot;
+
+            set ref         [registry::open_entry $name $version $revision $variants $epoch]
+            set image_dir   [registry::property_retrieve $ref location]
+
+            if {![file exists $image_dir]} {
+                ui_warn &quot;couldn't find the archive for '$name'. Please uninstall and reinstall this application.&quot;
+                success_fail 0
+            } else {
+                success_fail 1
+            }
+        }
+    }
+
+    proc check_for_files_in_usr_local {} {
+
+        # Checks for dylibs in /usr/local/lib and header files in /usr/local/include, and warns the user about said files if they 
+        # are found.
+        # 
+        # Args:
+        #           None 
+        # Returns:
+        #           None
+
+        output &quot;dylibs in /usr/local/lib&quot;
+
+        if {[glob -nocomplain -directory &quot;/usr/local/lib&quot; *.dylib *.la *.prl] ne &quot;&quot;} {
+            ui_warn &quot;found dylib's in your /usr/local/lib directory. These are known to cause problems. We'd recommend \
+                     you remove them.&quot;
+
+            success_fail 0
+
+        } else {
+
+            success_fail 1
+        }
+
+        output &quot;header files in /usr/local/include&quot;
+
+        if {[glob -nocomplain -directory &quot;/usr/local/include&quot; *.h *.hpp *.hxx] ne &quot;&quot;} {
+            ui_warn &quot;found header files in your /usr/local/include directory. These are known to cause problems. We'd recommend \
+                     you remove them.&quot;
+
+            success_fail 0
+
+        } else {
+
+            success_fail 1
+        }
+    }
+
+    proc check_for_x11 {} {
+
+        # Checks to see if the user is using the X11.app, and if they're on 10.6. If they are, it alerts them about it.
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        output &quot;X11.app on OS X 10.6 systems&quot;
+
+        set mac_version ${macports::macosx_version}
+
+        if {$mac_version eq &quot;10.6&quot;} {
+
+            if {[file exists /Applications/X11.app]} {
+                ui_error &quot;it seems you have Mac OS X 10.6 installed, and are using X11 from \&quot;X11.app\&quot;. This has been known to cause issues. \
+                         To fix this, please install xorg-server, by using the command 'sudo port install xorg-server', or installing it from \
+                         their website, http://xquartz.macosforge.org/trac/wiki/Releases.&quot;
+
+                success_fail 0
+                return
+            }
+        }
+
+        success_fail 1
+    }
+
+    proc check_free_space {} {
+
+        # Checks to see if the user has less than 5 gigs of space left, and warns if they don't.
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        output &quot;free disk space&quot;
+
+        set output          [exec df -g]
+        set tokens          [split $output \n]
+        set disk_info       [lindex $tokens 1]
+        set available       [lindex $disk_info 3]
+
+        if {$available &lt; 5} {
+            ui_warn &quot;you have less than 5 GiB of free disk space! This can cause serious errors. We recommend trying to clear out unnecessary \
+                     programs and files by running 'sudo port reclaim', or manually uninstalling/deleting programs and folders on your drive.&quot;
+
+            success_fail 0
+            return
+        }
+
+        success_fail 1
+    }
+
+    proc check_macports_location {} {
+
+        # Checks to see if port is where it should be. If it isn't, freak the frick out.
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        output &quot;MacPort's location&quot;
+
+        if {[file exists ${macports::prefix}/bin/port] == 0} {
+            ui_error &quot;the port command was not found in ${macports::prefix}/bin. This can potentially cause errors. It's recommended you move it back to ${macports::prefix}/bin.&quot;
+            success_fail 0
+            return
+        }
+
+        success_fail 1
+   }
+
+    proc check_for_app {app} {
+
+        # Check's if the binary supplied exists in /usr/bin. If it doesn't, it warns the user. 
+        #
+        # Args:
+        #           app - The name of the app to check for.
+        # Returns
+        #           None
+
+        output &quot;for '$app'&quot;
+
+        if {[file exists /usr/bin/$app] == 0} {
+            ui_error &quot;$app is needed by MacPorts to function normally, but wasn't found on this system. We'd recommend \
+                      installing it for continued use of MacPorts.&quot; 
+            success_fail 0
+            return
+        }
+
+        success_fail 1
+    }
+
+    proc check_xcode {config_options} {
+        
+        # Checks to see if the currently installed version of Xcode works with the curent OS version.
+        # 
+        # Args:
+        #           config_options - The associative array containing all options in the config files
+        # Returns:
+        #           None
+
+        output &quot;correct Xcode version&quot;
+
+        upvar $config_options config 
+
+        set mac_version     ${macports::macosx_version}
+        set xcode_current   ${macports::xcodeversion} 
+        set xcode_versions  $config(xcode_version_$mac_version)
+
+        if {$xcode_current in $xcode_versions} {
+            success_fail 1
+            return
+        
+        } else {
+            ui_error &quot;currently installed version of Xcode, $xcode_current, is not supported by MacPorts. \
+                      For your currently installed system, only the following versions of Xcode are supported: \
+                      $xcode_versions&quot;
+            success_fail 0
+        }
+    }
+
+    proc make_xcode_config {path} {
+        
+        # Checks to see if xcode_versions.ini exists. If it does, it returns. If it doesn't, then it creats a defult config file.
+        # 
+        # Args: 
+        #           None
+        # Returns:
+        #           None
+
+        if {[file exists $path] == 0} {
+            ui_error &quot;No configuration file found at $path. Please run, 
+                        \&quot;port selfupdate\&quot;&quot;
+            exit
+            
+        }
+    }
+     
+    proc make_user_config {path} {
+
+        # Builds a config file for the user using all default parameters if needed.
+        #
+        # Args:
+        #           None
+        # Returns:
+        #           None
+
+        if {[file exists $path] == 0} {
+
+            ui_warn &quot;No configuration file found at $path. Creating generic config file.&quot;
+           
+            set fd      [open $path w]
+            puts $fd &quot;macports_location=${macports::prefix}&quot;
+            puts $fd &quot;profile_path=${macports::user_home}/.bash_profile&quot;
+            puts $fd &quot;shell_location=/bin/bash&quot;
+           
+            close $fd
+        }
+   }
+
+    proc get_config {config_options parser_options path} {
+
+        # Reads in and parses the configuration file passed in to $path. After parsing, all variables found are assigned 
+        # in the 'config_options' associative array. 
+        #
+        # Args:
+        #           config_options - The associative array responsible for holding all the configuration options.
+        #           parser_options - The list responsible for holding each option to set/look for in the configuration file.
+        #           path           - The path to the correct config_file
+        # Returns:
+        #           None. 
+
+        upvar $config_options config 
+
+        set fd   [open $path r]
+        set text [read $fd]
+        set data [split $text &quot;\n&quot;]
+
+        close $fd
+
+        foreach line $data { 
+
+            # Ignore comments
+            if {[string index $line 0] eq &quot;#&quot; } {
+                continue
+            }
+
+            #The tokens
+            set tokens [split $line &quot;=&quot;]
+
+            # Only care about things that are in $parser_options
+            if {[lindex $tokens 0] in $parser_options} {
+                set config([lindex $tokens 0]) [lindex $tokens 1]
+            
+            # Ignore whitespace
+            } elseif {[lindex $tokens 0] eq &quot;&quot;} {
+                continue
+
+            } else {
+                ui_error &quot;unrecognized config option in file $path: [lindex $tokens 0]&quot;
+            }
+        }
+    }
+
+    proc check_path {port_loc profile_path shell_loc} {
+
+        # Checks to see if port_location/bin and port_location/sbin are in the environmental $PATH variable.
+        # If they aren't, it appends it to the correct shell's profile file.
+        #
+        # Args:
+        #           port_loc        - The location of port (as set in the config file)
+        #           profile_path    - The location of the profile file (as set in the config file)
+        #           shell_loc       - The location of the shell binary (as set in the config file)
+        # Returns:
+        #           None.
+
+        set path ${macports::user_path}
+        set split [split $path :]
+
+        if {&quot;$port_loc/bin&quot; in $split &amp;&amp; &quot;$port_loc/sbin&quot; in $split } {
+
+            if {[lindex $split 0] ne &quot;$port_loc/bin&quot;} {
+                ui_warn &quot;$port_loc/bin is not first in your PATH environmental variable.  This may or may not \
+                         cause problems in the future.&quot;
+            }
+            return
+
+        } else {
+            ui_warn &quot;your environmental \$PATH variable does not currently include, $port_loc/bin, which is where port is located. \
+                     Would you like to add $port_loc/bin to your \$PATH variable now? \[Y/N\]&quot;
+            set input [gets stdin]
+
+            if {$input eq &quot;y&quot; || $input eq &quot;Y&quot;} {
+                # XXX: this should use the same paths and comments as the
+                # postflight script of the pkg installer. Maybe they could even
+                # share code?
+                ui_msg &quot;Attempting to add $port_loc/bin to $profile_path&quot;
+
+                if {[file exists $profile_path] == 1} {
+                    set fd [open $profile_path a]
+
+                } else {
+                    ui_error &quot;$profile_path does not exist.&quot;
+                }
+
+                puts $fd &quot;export PATH=$port_loc/bin:$port_loc/sbin:\$PATH&quot;
+                close $fd
+
+                ui_msg &quot;Added PATH properly. Please execute, 'source $profile_path' in a new terminal window.&quot;
+
+            } elseif {$input eq &quot;n&quot; || $input eq &quot;N&quot;} {    
+                ui_msg &quot;Not fixing your \$PATH variable.&quot;
+
+            } else {
+                ui_msg &quot;Not a valid choice: $input&quot;
+            }
+       }
+   }
+}
</ins></span></pre></div>
<a id="trunkbasesrcmacports10doctortcl"></a>
<div class="delfile"><h4>Deleted: trunk/base/src/macports1.0/doctor.tcl (129867 => 129868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/base/src/macports1.0/doctor.tcl        2014-12-21 19:31:17 UTC (rev 129867)
+++ trunk/base/src/macports1.0/doctor.tcl        2014-12-21 20:18:25 UTC (rev 129868)
</span><span class="lines">@@ -1,758 +0,0 @@
</span><del>-# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=tcl:et:sw=4:ts=4:sts=4
-# doctor.tcl
-# $Id: doctor.tcl 119177 2014-04-18 22:35:29Z cal@macports.org $
-#
-# Copyright (c) 2002 - 2003 Apple Inc.
-# Copyright (c) 2004 - 2005 Paul Guyot, &lt;pguyot@kallisys.net&gt;.
-# Copyright (c) 2004 - 2006 Ole Guldberg Jensen &lt;olegb@opendarwin.org&gt;.
-# Copyright (c) 2004 - 2005 Robert Shaw &lt;rshaw@opendarwin.org&gt;
-# Copyright (c) 2004 - 2014 The MacPorts Project
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-#    notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-#    notice, this list of conditions and the following disclaimer in the
-#    documentation and/or other materials provided with the distribution.
-# 3. Neither the name of Apple Inc. nor the names of its contributors
-#    may be used to endorse or promote products derived from this software
-#    without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot;
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-
-# Todo:
-
-# Done:
-# Add -q for quiet mode, where we don't print anything
-# Check for command line tools
-# Check for any DYLD_* environmental variables
-# Check for '.la' in dylib and '.prl'
-# Check if installed files are readable 
-# Check for sqlite
-# Check for openssl
-# Crowd-source more ideas from the mailing-list
-# Check if $PATH is first
-# Check for issues with compilation. Compile small, simple file, check for &quot;couldn't create cache file&quot;
-# check_for_stray_developer_directory
-# Check for *.h, *.hpp, *.hxx in /usr/local/include
-# Check for *.dylib in /usr/local/lib
-# Check for other package managers. Fink = /sw, homebrew = /usr/local/Cellar
-# Check for all files installed by ports exists
-# Check for archives from all ports exists
-# Check for things in /usr/local
-# Check for x11.app if the OS is 10.6 and suggest installing xorg-server or the site on macosforge
-# Add error catching for line's without an equals sign. 
-# Support comments for the parser
-# Check for amount of drive space
-# Move port_doctor.ini to the port tree, below _resources 
-# Check for curl
-# Check for rsync
-# Check if macports is in /opt/local
-
-
-package provide doctor 1.0 
-
-package require macports
-package require reclaim 1.0
-
-namespace eval doctor {
-
-    # Command line argument that determines whether or not to output things fancily. 
-    variable quiet 0
-    
-    proc main {opts} {
-        
-        # The main function. Handles all the calls to the correct functions, and sets the config_options array, 
-        # as well as the parser_options array.
-        #
-        # Args:
-        #           opts - The options passed in. Currently the only option available is 'quiet'. 
-        # Returns:
-        #           None
-
-        # Setting the 'quiet' variable based on what was passed in.
-        if {$opts ne &quot;&quot;} {
-            set doctor::quiet 1
-        } else {
-            set doctor::quiet 0
-        }
-
-        array set config_options    [list]
-        set parser_options          {&quot;macports_location&quot; &quot;profile_path&quot; &quot;shell_location&quot; &quot;xcode_version_10.10&quot; &quot;xcode_version_10.9&quot; &quot;xcode_version_10.8&quot; \
-                                    &quot;xcode_version_10.7&quot; &quot;xcode_version_10.6&quot; &quot;xcode_version_10.7&quot; &quot;xcode_version_10.6&quot; &quot;xcode_version_10.5&quot; \
-                                    &quot;xcode_version_10.4&quot; &quot;xcode_build&quot;}
-
-        set user_config_path        ${macports::portdbpath}/port_doctor.ini
-        set xcode_config_path       [macports::getdefaultportresourcepath &quot;macports1.0/xcode_versions.ini&quot;] 
-
-        # Make sure at least a default copy of the xcode and user config exist
-        make_xcode_config $xcode_config_path
-        make_user_config  $user_config_path
-
-        # Read the config files
-        get_config config_options $parser_options $user_config_path 
-        get_config config_options $parser_options $xcode_config_path 
-
-        # Start the checks
-        check_path $config_options(macports_location) $config_options(profile_path) $config_options(shell_location)
-        check_xcode config_options
-        check_for_app curl
-        check_for_app rsync
-        check_for_app openssl
-        check_for_app sqlite3
-        check_macports_location
-        check_free_space
-        check_for_x11
-        check_for_files_in_usr_local 
-        check_tarballs 
-        check_port_files 
-        check_for_package_managers
-        check_for_stray_developer_directory
-        check_compilation_error_cache
-        check_for_dyld
-        check_for_clt
-    }
-
-    proc check_for_clt {} {
-
-        # Checks to see if the Xcode Command Line Tools are installed by checking if the file
-        # /Library/Developer/CommandLineTools exists if the system is running 10.9, or if they're
-        # running an older version, if the command xcode-select -p outputs something.
-        #
-        # Args:
-        #           None
-        # Returns:
-        #           None
-
-        output &quot;command line tools&quot;
-
-        set version ${macports::macosx_version}
-
-        if {$version eq &quot;10.9&quot;} {
-
-            if {![file exists &quot;/Library/Developer/CommandLineTools/&quot;]} {
-
-                ui_warn &quot;Xcode Command Line Tools are not installed! To install them, please enter the command:
-                                    xcode-select --install&quot;
-                success_fail 0
-                return
-            }
-            success_fail 1
-            return
-
-        } else {
-
-            set xcode_select [exec xcode-select -p]
-
-            if {$xcode_select eq &quot;&quot;} {
-
-                ui_warn &quot;Xcode Command Line Tools are not installed! To install them, please enter the command:
-                                    xcode-selct --install&quot;
-                success_fail 0
-                return
-            }
-            success_fail 1
-        }
-    }
-
-    proc check_for_dyld {} {
-
-        # Checks to see if the current MacPorts session is running with a DYLD_* environmental 
-        # variable set.
-        #
-        # Args:
-        #           None
-        # Returns:
-        #           None
-
-        output &quot;DYLD_* environmental variables&quot;
-
-        set printenv        [exec printenv]
-        set split           [split $printenv]
-
-        if {[regexp {DYLD_.} $split]} {
-            ui_warn &quot;found a DYLD_* environmental variable. These are known to cause issues with MacPorts. Please\
-                     unset the variable for the duration MacPorts is running.&quot;
-
-            success_fail 0
-            return
-        }
-
-        success_fail 1
-   }
-
-    proc output {string} {
-        
-        # Outputs the given string formatted correctly.
-        #
-        # Args:
-        #           string - The string to be output 
-        # Returns:
-        #           None
-
-        if {${doctor::quiet} == 0} {
-            ui_msg -nonewline &quot;Checking for $string... &quot;
-        }
-    }
-
-    proc success_fail {result} {
-
-        # Either outputs a [SUCCESS] or [FAILED], depending on the result.
-        #
-        # Args:
-        #           result - An integer value. 1 = [SUCCESS], anything else = [FAILED]
-        # Returns:
-        #           None
-
-        if {${doctor::quiet} eq 0} {
-
-            if {$result == 1} {
-
-                ui_msg &quot;\[SUCCESS\]&quot;
-                return
-            }
-
-            ui_msg &quot;\[FAILED\]&quot;
-        }
-    }
-
-    proc check_compilation_error_cache {} {
-
-        # Checks to see if the compiler can compile properly, or it throws the error, &quot;couldn't create cache file&quot;.
-        #
-        # Args: 
-        #           None
-        # Returns:
-        #           None
-
-        # TODO: Should we drop privileges?
-
-        output &quot;compilation errors&quot;
-
-        set filename    &quot;test.c&quot;
-        set fd          [open $filename w]
-        
-        puts $fd &quot;int main() { return 0; }&quot;
-        close $fd
-
-        # 'clang' will fail when using
-        # https://trac.macports.org/wiki/UsingTheRightCompiler#testing
-        # TODO: use default C compiler
-        # TODO: skip if no C compiler installed
-        catch {exec /usr/bin/clang $filename -o main_test} output
-
-        file delete $filename
-        file delete &quot;main_test&quot;
-
-        if {[string length $output] &gt; 0} {
-            # Some type of error
-            if {[string match &quot;*couldn't create cache file*&quot; $output]} {
-                ui_warn &quot;found errors when attempting to compile file. To fix this issue, delete your tmp folder using:
-                       rm -rf \$TMPDIR&quot;
-            } else {
-                ui_warn $output
-            }
-            success_fail 0
-            return
-        }
-
-        success_fail 1 
-       
-    }
-
-    proc check_for_stray_developer_directory {} {
-
-        # Checks to see if the script to remove leftover files from Xcode has been run or not. Implementation heavily influenced
-        # by Homebrew implementation. 
-        #
-        # Args:
-        #           None
-        # Returns:
-        #           None
-
-        output &quot;stray developer directory&quot;
-        
-        set uninstaller &quot;/Developer/Library/uninstall-developer-folder&quot;
-        
-        if {${macports::xcodeversion} &gt;= 4.3 &amp;&amp; [file exists $uninstaller]} { 
-            ui_warn &quot;you have leftover files from an older version of Xcode. You should delete them by using, $uninstaller&quot;
-
-            success_fail 0 
-            return
-        } 
-
-        success_fail 1 
-    }
-
-    proc check_for_package_managers {} {
-
-        # Checks to see if either Fink or Homebrew are installed on the system. If they are, it warns them and suggest they uninstall
-        # or move them to a different location.
-        # 
-        # Args:
-        #           None
-        # Returns:
-        #           None
-
-        output &quot;HomeBrew&quot;
-        
-        if {[file exists &quot;/usr/local/Cellar&quot;]} {
-            ui_warn &quot;it seems you have Homebrew installed on this system -- Because Homebrew uses /usr/local, this can potentially cause issues \
-                     with MacPorts. We'd recommend you either uninstall it, or move it from /usr/local for now.&quot;
-
-            success_fail 0
-
-        } else {
-
-            success_fail 1
-        }
-
-        output &quot;Fink&quot;
-        if {[file exists &quot;/sw&quot;]} {
-            ui_warn &quot;it seems you have Fink installed on your system -- This could potentially cause issues with MacPorts. We'd recommend you'd \
-                     either uninstall it, or move it from /sw for now.&quot;
-
-            success_fail 0

-        } else {
-
-            success_fail 1
-        }
-    }
-
-    proc check_port_files {} {
-        
-        # Checks to see if each file installed by all active and installed ports actually exists on the filesystem. If not, it warns
-        # the user and suggests the user deactivate and reactivate the port.
-        #
-        # Args:
-        #           None
-        # Returns:
-        #           None
-
-
-        set apps [reclaim::get_info]
-
-        array set activeApps {}
-        set totalFiles 0
-
-        foreach app $apps {
-
-            set name    [lindex $app 0]
-            set active  [lindex $app 4]
-            set files   [registry::port_registered $name]
-
-            if {$active} {
-                set activeApps($name) $files
-                incr totalFiles [llength $files]
-            }
-        }
-
-        set fancyOutput [expr {   ![macports::ui_isset ports_debug] \
-                               &amp;&amp; ![macports::ui_isset ports_verbose] \
-                               &amp;&amp; [info exists macports::ui_options(progress_generic)] \
-                               &amp;&amp; ${doctor::quiet} == 0}]
-
-        if {$fancyOutput} {
-            set progress $macports::ui_options(progress_generic)
-        }
-
-        if {$totalFiles &gt; 0} {
-            if {$fancyOutput} {
-                output &quot;files installed by ports on disk&quot;
-                if {${doctor::quiet} == 0} {
-                    # we need a newline here or the progress bar will overwrite the line
-                    ui_msg &quot;&quot;
-                }
-                $progress start
-            }
-
-            set currentFile 1
-            foreach name [lsort [array names activeApps]] {
-                foreach file $activeApps($name) {
-                    if {$fancyOutput} {
-                        $progress update $currentFile $totalFiles
-                    } else {
-                        output &quot;file '$file' on disk&quot;
-                    }
-
-                    if {![file exists $file]} {
-                        if {$fancyOutput} {
-                            $progress intermission
-                        } else {
-                            success_fail 0
-                        }
-
-                        if {[catch {file lstat $file _}]} {
-                            ui_warn &quot;couldn't find file '$file' for port '$name'. Please deactivate and reactivate the port to fix this issue.&quot;
-                        }
-                    } elseif {![file readable $file]} {
-                        if {$fancyOutput} {
-                            $progress intermission
-                        } else {
-                            success_fail 0
-                        }
-
-                        ui_warn &quot;'$file' installed by port '$name' is currently not readable. Please try again. If this problem persists, please contact the mailing list.&quot;
-                    } elseif {!$fancyOutput} {
-                        success_fail 1
-                    }
-
-                    incr currentFile
-                }
-            }
-
-            if {$fancyOutput} {
-                $progress finish
-            }
-        }
-    }
-
-    proc check_tarballs {} {
-
-        # Checks if the archives for each installed port in /opt/local/var/macports/software/$name is actually in there. If not, it warns
-        # the user and suggest a reinstallation of the port. 
-        #
-        # Args:
-        #           None
-        # Returns:
-        #           None
-
-        set apps [reclaim::get_info]
-
-        foreach app $apps {
-
-
-            set name        [lindex $app 0]
-            set version     [lindex $app 1]
-            set revision    [lindex $app 2]
-            set variants    [lindex $app 3]
-            set epoch       [lindex $app 5]
-
-            output &quot;'${name} @${version}_${revision}${variants}'s tarball on disk&quot;
-
-            set ref         [registry::open_entry $name $version $revision $variants $epoch]
-            set image_dir   [registry::property_retrieve $ref location]
-
-            if {![file exists $image_dir]} {
-                ui_warn &quot;couldn't find the archive for '$name'. Please uninstall and reinstall this application.&quot;
-                success_fail 0
-            } else {
-                success_fail 1
-            }
-        }
-    }
-
-    proc check_for_files_in_usr_local {} {
-
-        # Checks for dylibs in /usr/local/lib and header files in /usr/local/include, and warns the user about said files if they 
-        # are found.
-        # 
-        # Args:
-        #           None 
-        # Returns:
-        #           None
-
-        output &quot;dylibs in /usr/local/lib&quot;
-
-        if {[glob -nocomplain -directory &quot;/usr/local/lib&quot; *.dylib *.la *.prl] ne &quot;&quot;} {
-            ui_warn &quot;found dylib's in your /usr/local/lib directory. These are known to cause problems. We'd recommend \
-                     you remove them.&quot;
-
-            success_fail 0
-
-        } else {
-
-            success_fail 1
-        }
-
-        output &quot;header files in /usr/local/include&quot;
-
-        if {[glob -nocomplain -directory &quot;/usr/local/include&quot; *.h *.hpp *.hxx] ne &quot;&quot;} {
-            ui_warn &quot;found header files in your /usr/local/include directory. These are known to cause problems. We'd recommend \
-                     you remove them.&quot;
-
-            success_fail 0
-
-        } else {
-
-            success_fail 1
-        }
-    }
-
-    proc check_for_x11 {} {
-
-        # Checks to see if the user is using the X11.app, and if they're on 10.6. If they are, it alerts them about it.
-        #
-        # Args:
-        #           None
-        # Returns:
-        #           None
-
-        output &quot;X11.app on OS X 10.6 systems&quot;
-
-        set mac_version ${macports::macosx_version}
-
-        if {$mac_version eq &quot;10.6&quot;} {
-
-            if {[file exists /Applications/X11.app]} {
-                ui_error &quot;it seems you have Mac OS X 10.6 installed, and are using X11 from \&quot;X11.app\&quot;. This has been known to cause issues. \
-                         To fix this, please install xorg-server, by using the command 'sudo port install xorg-server', or installing it from \
-                         their website, http://xquartz.macosforge.org/trac/wiki/Releases.&quot;
-
-                success_fail 0
-                return
-            }
-        }
-
-        success_fail 1
-    }
-
-    proc check_free_space {} {
-
-        # Checks to see if the user has less than 5 gigs of space left, and warns if they don't.
-        #
-        # Args:
-        #           None
-        # Returns:
-        #           None
-
-        output &quot;free disk space&quot;
-
-        set output          [exec df -g]
-        set tokens          [split $output \n]
-        set disk_info       [lindex $tokens 1]
-        set available       [lindex $disk_info 3]
-
-        if {$available &lt; 5} {
-            ui_warn &quot;you have less than 5 GiB of free disk space! This can cause serious errors. We recommend trying to clear out unnecessary \
-                     programs and files by running 'sudo port reclaim', or manually uninstalling/deleting programs and folders on your drive.&quot;
-
-            success_fail 0
-            return
-        }
-
-        success_fail 1
-    }
-
-    proc check_macports_location {} {
-
-        # Checks to see if port is where it should be. If it isn't, freak the frick out.
-        #
-        # Args:
-        #           None
-        # Returns:
-        #           None
-
-        output &quot;MacPort's location&quot;
-
-        if {[file exists ${macports::prefix}/bin/port] == 0} {
-            ui_error &quot;the port command was not found in ${macports::prefix}/bin. This can potentially cause errors. It's recommended you move it back to ${macports::prefix}/bin.&quot;
-            success_fail 0
-            return
-        }
-
-        success_fail 1
-   }
-
-    proc check_for_app {app} {
-
-        # Check's if the binary supplied exists in /usr/bin. If it doesn't, it warns the user. 
-        #
-        # Args:
-        #           app - The name of the app to check for.
-        # Returns
-        #           None
-
-        output &quot;for '$app'&quot;
-
-        if {[file exists /usr/bin/$app] == 0} {
-            ui_error &quot;$app is needed by MacPorts to function normally, but wasn't found on this system. We'd recommend \
-                      installing it for continued use of MacPorts.&quot; 
-            success_fail 0
-            return
-        }
-
-        success_fail 1
-    }
-
-    proc check_xcode {config_options} {
-        
-        # Checks to see if the currently installed version of Xcode works with the curent OS version.
-        # 
-        # Args:
-        #           config_options - The associative array containing all options in the config files
-        # Returns:
-        #           None
-
-        output &quot;correct Xcode version&quot;
-
-        upvar $config_options config 
-
-        set mac_version     ${macports::macosx_version}
-        set xcode_current   ${macports::xcodeversion} 
-        set xcode_versions  $config(xcode_version_$mac_version)
-
-        if {$xcode_current in $xcode_versions} {
-            success_fail 1
-            return
-        
-        } else {
-            ui_error &quot;currently installed version of Xcode, $xcode_current, is not supported by MacPorts. \
-                      For your currently installed system, only the following versions of Xcode are supported: \
-                      $xcode_versions&quot;
-            success_fail 0
-        }
-    }
-
-    proc make_xcode_config {path} {
-        
-        # Checks to see if xcode_versions.ini exists. If it does, it returns. If it doesn't, then it creats a defult config file.
-        # 
-        # Args: 
-        #           None
-        # Returns:
-        #           None
-
-        if {[file exists $path] == 0} {
-            ui_error &quot;No configuration file found at $path. Please run, 
-                        \&quot;port selfupdate\&quot;&quot;
-            exit
-            
-        }
-    }
-     
-    proc make_user_config {path} {
-
-        # Builds a config file for the user using all default parameters if needed.
-        #
-        # Args:
-        #           None
-        # Returns:
-        #           None
-
-        if {[file exists $path] == 0} {
-
-            ui_warn &quot;No configuration file found at $path. Creating generic config file.&quot;
-           
-            set fd      [open $path w]
-            puts $fd &quot;macports_location=${macports::prefix}&quot;
-            puts $fd &quot;profile_path=${macports::user_home}/.bash_profile&quot;
-            puts $fd &quot;shell_location=/bin/bash&quot;
-           
-            close $fd
-        }
-   }
-
-    proc get_config {config_options parser_options path} {
-
-        # Reads in and parses the configuration file passed in to $path. After parsing, all variables found are assigned 
-        # in the 'config_options' associative array. 
-        #
-        # Args:
-        #           config_options - The associative array responsible for holding all the configuration options.
-        #           parser_options - The list responsible for holding each option to set/look for in the configuration file.
-        #           path           - The path to the correct config_file
-        # Returns:
-        #           None. 
-
-        upvar $config_options config 
-
-        set fd   [open $path r]
-        set text [read $fd]
-        set data [split $text &quot;\n&quot;]
-
-        close $fd
-
-        foreach line $data { 
-
-            # Ignore comments
-            if {[string index $line 0] eq &quot;#&quot; } {
-                continue
-            }
-
-            #The tokens
-            set tokens [split $line &quot;=&quot;]
-
-            # Only care about things that are in $parser_options
-            if {[lindex $tokens 0] in $parser_options} {
-                set config([lindex $tokens 0]) [lindex $tokens 1]
-            
-            # Ignore whitespace
-            } elseif {[lindex $tokens 0] eq &quot;&quot;} {
-                continue
-
-            } else {
-                ui_error &quot;unrecognized config option in file $path: [lindex $tokens 0]&quot;
-            }
-        }
-    }
-
-    proc check_path {port_loc profile_path shell_loc} {
-
-        # Checks to see if port_location/bin and port_location/sbin are in the environmental $PATH variable.
-        # If they aren't, it appends it to the correct shell's profile file.
-        #
-        # Args:
-        #           port_loc        - The location of port (as set in the config file)
-        #           profile_path    - The location of the profile file (as set in the config file)
-        #           shell_loc       - The location of the shell binary (as set in the config file)
-        # Returns:
-        #           None.
-
-        set path ${macports::user_path}
-        set split [split $path :]
-
-        if {&quot;$port_loc/bin&quot; in $split &amp;&amp; &quot;$port_loc/sbin&quot; in $split } {
-
-            if {[lindex $split 0] ne &quot;$port_loc/bin&quot;} {
-                ui_warn &quot;$port_loc/bin is not first in your PATH environmental variable.  This may or may not \
-                         cause problems in the future.&quot;
-            }
-            return
-
-        } else {
-            ui_warn &quot;your environmental \$PATH variable does not currently include, $port_loc/bin, which is where port is located. \
-                     Would you like to add $port_loc/bin to your \$PATH variable now? \[Y/N\]&quot;
-            set input [gets stdin]
-
-            if {$input eq &quot;y&quot; || $input eq &quot;Y&quot;} {
-                # XXX: this should use the same paths and comments as the
-                # postflight script of the pkg installer. Maybe they could even
-                # share code?
-                ui_msg &quot;Attempting to add $port_loc/bin to $profile_path&quot;
-
-                if {[file exists $profile_path] == 1} {
-                    set fd [open $profile_path a]
-
-                } else {
-                    ui_error &quot;$profile_path does not exist.&quot;
-                }
-
-                puts $fd &quot;export PATH=$port_loc/bin:$port_loc/sbin:\$PATH&quot;
-                close $fd
-
-                ui_msg &quot;Added PATH properly. Please execute, 'source $profile_path' in a new terminal window.&quot;
-
-            } elseif {$input eq &quot;n&quot; || $input eq &quot;N&quot;} {    
-                ui_msg &quot;Not fixing your \$PATH variable.&quot;
-
-            } else {
-                ui_msg &quot;Not a valid choice: $input&quot;
-            }
-       }
-   }
-}
</del></span></pre></div>
<a id="trunkbasesrcmacports10macportstcl"></a>
<div class="modfile"><h4>Modified: trunk/base/src/macports1.0/macports.tcl (129867 => 129868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/base/src/macports1.0/macports.tcl        2014-12-21 19:31:17 UTC (rev 129867)
+++ trunk/base/src/macports1.0/macports.tcl        2014-12-21 20:18:25 UTC (rev 129868)
</span><span class="lines">@@ -36,7 +36,7 @@
</span><span class="cx"> package provide macports 1.0
</span><span class="cx"> package require macports_dlist 1.0
</span><span class="cx"> package require macports_util 1.0
</span><del>-package require doctor 1.0
</del><ins>+package require diagnose 1.0
</ins><span class="cx"> package require reclaim 1.0
</span><span class="cx"> package require Tclx
</span><span class="cx"> 
</span><span class="lines">@@ -4425,16 +4425,16 @@
</span><span class="cx">     return yes
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-proc macports::doctor_main {opts} {
</del><ins>+proc macports::diagnose_main {opts} {
</ins><span class="cx">     
</span><del>-    # Calls the main function for the 'port doctor' command.
</del><ins>+    # Calls the main function for the 'port diagnose' command.
</ins><span class="cx">     #
</span><span class="cx">     # Args: 
</span><span class="cx">     #           None
</span><span class="cx">     # Returns:
</span><span class="cx">     #           0 on successful execution.
</span><span class="cx"> 
</span><del>-    doctor::main $opts
</del><ins>+    diagnose::main $opts
</ins><span class="cx">     return 0
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkbasesrcportporttcl"></a>
<div class="modfile"><h4>Modified: trunk/base/src/port/port.tcl (129867 => 129868)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/base/src/port/port.tcl        2014-12-21 19:31:17 UTC (rev 129867)
+++ trunk/base/src/port/port.tcl        2014-12-21 20:18:25 UTC (rev 129868)
</span><span class="lines">@@ -2725,11 +2725,11 @@
</span><span class="cx">     return $status
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-proc action_doctor { action portlist opts } {
</del><ins>+proc action_diagnose { action portlist opts } {
</ins><span class="cx">     if {[prefix_unwritable]} {
</span><span class="cx">         return 1
</span><span class="cx">     }
</span><del>-    macports::doctor_main $opts
</del><ins>+    macports::diagnose_main $opts
</ins><span class="cx">     return 0
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -4226,7 +4226,7 @@
</span><span class="cx">     upgrade     [list action_upgrade        [ACTION_ARGS_PORTS]] \
</span><span class="cx">     rev-upgrade [list action_revupgrade     [ACTION_ARGS_NONE]] \
</span><span class="cx">     reclaim     [list action_reclaim        [ACTION_ARGS_NONE]] \
</span><del>-    doctor      [list action_doctor         [ACTION_ARGS_NONE]] \
</del><ins>+    diagnose    [list action_diagnose       [ACTION_ARGS_NONE]] \
</ins><span class="cx">     \
</span><span class="cx">     version     [list action_version        [ACTION_ARGS_NONE]] \
</span><span class="cx">     platform    [list action_platform       [ACTION_ARGS_NONE]] \
</span><span class="lines">@@ -4386,7 +4386,7 @@
</span><span class="cx">     log         {{phase 1} {level 1}}
</span><span class="cx">     upgrade     {force enforce-variants no-replace no-rev-upgrade}
</span><span class="cx">     rev-upgrade {id-loadcmd-check}
</span><del>-    doctor      {quiet}
</del><ins>+    diagnose    {quiet}
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> ##
</span></span></pre>
</div>
</div>

</body>
</html>