<!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>[38037] trunk/base/portmgr/dmg/postflight</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="http://trac.macosforge.org/projects/macports/changeset/38037">38037</a></dd>
<dt>Author</dt> <dd>raimue@macports.org</dd>
<dt>Date</dt> <dd>2008-07-03 19:58:10 -0700 (Thu, 03 Jul 2008)</dd>
</dl>

<h3>Log Message</h3>
<pre>portmgr/dmg/postflight:
Copy the postflight script from the release_1_6 branch so the changes will not be lost or forgotten</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkbaseportmgrdmgpostflight">trunk/base/portmgr/dmg/postflight</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkbaseportmgrdmgpostflight"></a>
<div class="modfile"><h4>Modified: trunk/base/portmgr/dmg/postflight (38036 => 38037)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/base/portmgr/dmg/postflight        2008-07-04 01:32:32 UTC (rev 38036)
+++ trunk/base/portmgr/dmg/postflight        2008-07-04 02:58:10 UTC (rev 38037)
</span><span class="lines">@@ -1,9 +1,7 @@
</span><span class="cx"> #!/bin/bash
</span><ins>+# -*- coding: utf-8; mode: shell-script-mode; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:filetype=sh:et:sw=4:ts=4:sts=4
</ins><span class="cx"> #
</span><del>-# Copyright (c) 2007 Juan Manuel Palacios &lt;jmpp@macports.org&gt;
-# Copyright (c) 2005 Ole Guldberg Jensen &lt;olegb@opendarwin.org&gt;
-# Copyright (c) 2005 Dr. Ernie Prabhakar &lt;drernir@opendarwin.org&gt;
-# Copyright (c) 2005 Matt Anton &lt;matt@opendarwin.org&gt;
</del><ins>+# Copyright (c) 2002-2007 Juan Manuel Palacios &lt;jmpp@macports.org&gt;, The MacPorts Project.
</ins><span class="cx"> # All rights reserved.
</span><span class="cx"> #
</span><span class="cx"> # Redistribution and use in source and binary forms, with or without
</span><span class="lines">@@ -14,11 +12,14 @@
</span><span class="cx"> # 2. Redistributions in binary form must reproduce the above copyright
</span><span class="cx"> #    notice, this list of conditions and the following disclaimer in the
</span><span class="cx"> #    documentation and/or other materials provided with the distribution.
</span><ins>+# 3. Neither the name of Apple, Inc., The MacPorts Project nor the
+#    names of its contributors may be used to endorse or promote products
+#    derived from this software without specific prior written permission.
</ins><span class="cx"> #
</span><del>-# THIS SOFTWARE IS PROVIDED BY Eric Melville AND CONTRIBUTORS ``AS IS'' AND
</del><ins>+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot; AND
</ins><span class="cx"> # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
</span><span class="cx"> # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
</span><del>-# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
</del><ins>+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
</ins><span class="cx"> # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
</span><span class="cx"> # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
</span><span class="cx"> # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
</span><span class="lines">@@ -31,62 +32,122 @@
</span><span class="cx"> # $Id$
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-BINPATH=/opt/local/bin
-SBINPATH=/opt/local/sbin
</del><ins>+#set -x
</ins><span class="cx"> 
</span><ins>+# Script identification ('cause more often than not the svn Id is not expanded):
+VERSION=1.7.0
</ins><span class="cx"> 
</span><del>-echo -e &quot;\nChecking the PATH variable for $USER...\n&quot;
</del><ins>+# Abstraction variables:
+PREFIX=/opt/local
+BINPATH=${PREFIX}/bin
+SBINPATH=${PREFIX}/sbin
+MANPAGES=${PREFIX}/share/man
+TIMESTAMP=$(date +&quot;%Y-%m-%d_at_%H:%M:%S&quot;)
+BACKUP_SUFFIX=macports-saved_${TIMESTAMP}
+OUR_STRING=&quot;MacPorts Installer addition on ${TIMESTAMP}&quot;
</ins><span class="cx"> 
</span><del>-# No need to do any path adjustments if we're on Leopard, as we already install our path configs into /etc/paths.d/ and /etc/manpaths.d/
-if [ $(sw_vers -productVersion | awk -F . '{print $2}') -eq 5 ]; then
-    echo &quot;No need to adjust the PATH and MANPATH environment variables on Leopard!&quot;
-    exit 0
-fi
</del><span class="cx"> 
</span><del>-if $SHELL -c &quot;/usr/bin/printenv PATH&quot; | grep -c $BINPATH &gt; /dev/null; then
-    echo &quot;You already have the right PATH!&quot;
-else
-    USHELL=`basename $SHELL`
-    echo &quot;Setting the PATH of $USHELL for $USER in ${HOME:=/Users/$USER}...&quot;
-    case $USHELL in
-        *csh)
-            # we backup the original
-            /bin/cp -fp $HOME/.cshrc $HOME/.cshrc.mpsaved
-            echo &quot;#&quot; &gt;&gt; $HOME/.cshrc
-            echo &quot;# Your previous .cshrc (if any) is saved as .cshrc.mpsaved&quot; &gt;&gt; $HOME/.cshrc
-            echo &quot;# Setting the path for MacPorts.&quot; &gt;&gt; $HOME/.cshrc
-            echo &quot;set path=($BINPATH $SBINPATH&quot; '$path'&quot;)&quot; &gt;&gt; $HOME/.cshrc
-            chown $USER $HOME/.cshrc
-            echo &quot;Finished modifying $HOME/.cshrc&quot;
</del><ins>+# Command to update the MacPorts installation through &quot;selfupdate&quot;:
+function update_macports {
+    echo &quot;Synchronizing the MacPorts installation with the project's rsync server...&quot;
+    if ! ${BINPATH}/port -v selfupdate; then 
+        echo &quot;An attempt to synchronize your recent MacPorts installation with the project's rsync server failed!&quot;
+        echo &quot;Please run 'sudo port -d selfupdate' manually to find out the cause of the error.&quot;
+    else
+        echo &quot;Successful!&quot;
+    fi
+}
+
+# Through this command we write an environment variable to an appropriate shell configuration file,
+# backing up the original only if it exists and if it doesn't contain the ${OUR_STRING} identification string,
+# which hints that we've already tweaked it and therefore already baked it up.
+function write_setting () {
+    if [ -f ${HOME}/.${CONF_FILE} ] &amp;&amp; ! grep &quot;${OUR_STRING}&quot; ${HOME}/.${CONF_FILE} &gt; /dev/null; then
+        echo &quot;Backing up your ${HOME}/.${CONF_FILE} shell confguration file as ${HOME}/.${CONF_FILE}.${BACKUP_SUFFIX} before adapting it for MacPorts.&quot;
+        /bin/cp -fp ${HOME}/.${CONF_FILE} &quot;${HOME}/.${CONF_FILE}.${BACKUP_SUFFIX}&quot; || {
+            echo &quot;An attempt to backup your original configuration file failed! Please set your MacPorts compatible environment manually.&quot;
+            update_macports
+            exit 1
+        }
+        echo -e &quot;\n##\n# Your previous ${HOME}/.${CONF_FILE} file was backed up as ${HOME}/.${CONF_FILE}.${BACKUP_SUFFIX}\n##&quot; &gt;&gt; ${HOME}/.${CONF_FILE}
+    fi
+    echo -e &quot;\n# ${OUR_STRING}: adding an appropriate ${1} variable for use with MacPorts.&quot; &gt;&gt; ${HOME}/.${CONF_FILE}
+    echo &quot;${ENV_COMMAND} ${1}${ASSIGN}${2}&quot; &gt;&gt; ${HOME}/.${CONF_FILE}
+    echo -e &quot;# Finished adapting your ${1} environment variable for use with MacPorts.\n&quot; &gt;&gt; ${HOME}/.${CONF_FILE}
+    chown ${USER} ${HOME}/.${CONF_FILE} || echo &quot;Warning: unable to adapt permissions on your ${HOME}/.${CONF_FILE} shell configuration file!&quot;
+    echo &quot;An appropriate ${1} variable has been added to your shell environment by the MacPorts installer.&quot;
+}
+
+
+echo &quot;The MacPorts Project, postflight script version ${VERSION}: checking the shell environment for user \&quot;${USER}\&quot;.&quot;
+
+
+# Determine the user's shell, in order to choose an appropriate configuration file we'll be tweaking.
+# Exit nicely if the shell is any other than bash or tcsh, as that's considered non-standard.
+USHELL=$(dscl . -read /users/${USER} shell | awk -F'/' '{print $NF}') || {
+    echo &quot;An attempt to determine your shell name failed! Please set your MacPorts compatible environment manually.&quot;
+    update_macports
+    exit 1
+}
+case &quot;${USHELL}&quot; in
+    tcsh)
+        echo &quot;Detected the tcsh shell.&quot;
+        LOGIN_FLAG=&quot;&quot;
+        ENV_COMMAND=&quot;setenv&quot;
+        ASSIGN=&quot; &quot;
+        CONF_FILE=tcshrc
</ins><span class="cx">         ;;
</span><del>-        *sh)
-            # we backup the original
-            /bin/cp -fp $HOME/.profile $HOME/.profile.mpsaved
-            echo &quot;#&quot; &gt;&gt; $HOME/.profile
-            echo &quot;# Your previous .profile  (if any) is saved as .profile.mpsaved&quot; &gt;&gt; $HOME/.profile
-            echo &quot;# Setting the path for MacPorts.&quot; &gt;&gt; $HOME/.profile
-            echo &quot;export PATH=$BINPATH:$SBINPATH:\$PATH&quot; &gt;&gt; $HOME/.profile
-            chown $USER $HOME/.profile
-            echo &quot;Finished modifying $HOME/.profile&quot;
</del><ins>+    bash)
+        echo &quot;Detected the bash shell.&quot;
+        LOGIN_FLAG=&quot;-l&quot;
+        ENV_COMMAND=&quot;export&quot;
+        ASSIGN=&quot;=&quot;
+        CONF_FILE=profile
</ins><span class="cx">         ;;
</span><del>-        *)
-            echo &quot;Unknown shell! Please set your own PATH manually.&quot;
</del><ins>+    *)
+        echo &quot;Unknown shell ($USHELL)! Please set your MacPorts compatible environment manually.&quot;
+        update_macports
+        exit 0
</ins><span class="cx">         ;;
</span><del>-    esac
</del><ins>+esac
+
+
+# Adding our setting to the PATH variable if not already there:
+if ${SHELL} ${LOGIN_FLAG} -c &quot;/usr/bin/printenv PATH&quot; | grep ${PREFIX} &gt; /dev/null; then
+    echo &quot;Your shell already has the right PATH environment variable for use with MacPorts!&quot;
+else
+    write_setting PATH &quot;${BINPATH}:${SBINPATH}:\$PATH&quot;
</ins><span class="cx"> fi
</span><span class="cx"> 
</span><ins>+# We gather the path into a variable of our own for faster operation:
+ORIGINAL_MANPATH=&quot;$(${SHELL} ${LOGIN_FLAG} -c &quot;/usr/bin/printenv MANPATH&quot;)&quot;
+# Adding out setting to the MANPATH variable only if it exists:
+if ! ${SHELL} ${LOGIN_FLAG} -c &quot;/usr/bin/env | grep MANPATH&quot; &gt; /dev/null || \
+# and following that, if it's not empty:
+  [ -z &quot;${ORIGINAL_MANPATH}&quot; ] || \
+# or if it doesn't already contain our path:
+  echo &quot;${ORIGINAL_MANPATH}&quot; | grep ${MANPAGES} &gt; /dev/null || \
+# or if there's no empty component somewhere in the middle of it:
+  echo &quot;${ORIGINAL_MANPATH}&quot; | grep :: &gt; /dev/null || \
+# or at the start of it:
+  [ -z &quot;$(echo &quot;${ORIGINAL_MANPATH}&quot; | awk -F : '{print $1}')&quot; ] || \
+# or at the end of it:
+  [ -z &quot;$(echo &quot;${ORIGINAL_MANPATH}&quot; | awk -F : '{print $NF}')&quot; ]; then
+    echo &quot;Your shell already has the right MANPATH environment variable for use with MacPorts!&quot;
+else
+    write_setting MANPATH &quot;${MANPAGES}:\$MANPATH&quot;
+fi
</ins><span class="cx"> 
</span><del>-# Run selfupdate:
-export PATH=$BINPATH:$PATH
-echo -e &quot;\nSelfupdating The MacPorts system...\n&quot;
-port -d selfupdate
-if [ $? != 0 ]; then
-    echo &quot;An attempt to synchronize your recent MacPorts installation with the rsync server failed, please run 'port -d selfupdate' manually to find out the cause of the error.&quot;
-    exit 1
</del><ins>+# Adding a DISPLAY variable only if we're running on Tiger or less and if it doesn't already exist:
+if (($(sw_vers -productVersion | awk -F . '{print $2}') &gt;= 5)) || ${SHELL} ${LOGIN_FLAG} -c &quot;/usr/bin/env | grep DISPLAY&quot; &gt; /dev/null; then
+    echo &quot;Your shell already has the right DISPLAY environment variable for use with MacPorts!&quot;
+else
+    write_setting DISPLAY &quot;:0&quot;
</ins><span class="cx"> fi
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-# Postflight script is done with its job!
-echo -e &quot;\nYou have succesfully installed the MacPorts system.\n&quot;
-echo &quot;Launch a terminal and try it out!&quot;
-echo -e &quot;Read the port manual page for help.\n&quot;
</del><ins>+# Postflight script is done with its job, update MacPorts and exit gracefully!
+update_macports
+echo &quot;You have succesfully installed the MacPorts system, launch a terminal and try it out!&quot;
+echo &quot;Read the port(1) manual page and http://guide.macports.org for help, http://www.macports.org/contact.php if you need to get in touch with The MacPorts Project.&quot;
+exit 0
</ins></span></pre>
</div>
</div>

</body>
</html>