<!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>[154073] trunk/base/portmgr/dmg/postflight.in</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/154073">154073</a></dd>
<dt>Author</dt> <dd>cal@macports.org</dd>
<dt>Date</dt> <dd>2016-10-19 15:20:29 -0700 (Wed, 19 Oct 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Installer postflight: Fix all shellcheck warnings

This may have been the cause for double entries in .bash_profile that some
users have seen. Thanks for Ian Hayhurst for the suggestion.</pre>

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

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkbaseportmgrdmgpostflightin"></a>
<div class="modfile"><h4>Modified: trunk/base/portmgr/dmg/postflight.in (154072 => 154073)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/base/portmgr/dmg/postflight.in     2016-10-19 21:20:32 UTC (rev 154072)
+++ trunk/base/portmgr/dmg/postflight.in        2016-10-19 22:20:29 UTC (rev 154073)
</span><span class="lines">@@ -39,15 +39,15 @@
</span><span class="cx"> VERSION=2.3.1
</span><span class="cx"> 
</span><span class="cx"> # Abstraction variables:
</span><del>-PREFIX=@prefix@
</del><ins>+PREFIX="@prefix@"
</ins><span class="cx"> BINPATH=${PREFIX}/bin
</span><span class="cx"> SBINPATH=${PREFIX}/sbin
</span><span class="cx"> CONFIGPATH=${PREFIX}/etc/macports
</span><span class="cx"> MANPAGES=${PREFIX}/share/man
</span><span class="cx"> DSCL=/usr/bin/dscl
</span><span class="cx"> RUNUSR=macports
</span><del>-TCLSH=@TCLSH@
-TCL_PACKAGE_PATH=@TCL_PACKAGE_PATH@
</del><ins>+TCLSH="@TCLSH@"
+TCL_PACKAGE_PATH="@TCL_PACKAGE_PATH@"
</ins><span class="cx"> TIMESTAMP=$(date +"%Y-%m-%d_at_%H:%M:%S")
</span><span class="cx"> BACKUP_SUFFIX=macports-saved_${TIMESTAMP}
</span><span class="cx"> OUR_STRING="MacPorts Installer addition on ${TIMESTAMP}"
</span><span class="lines">@@ -60,25 +60,25 @@
</span><span class="cx">     for f in archive_sites.conf macports.conf pubkeys.conf sources.conf variants.conf ; do
</span><span class="cx">         if [[ ! -f ${CONFIGPATH}/${f} ]]; then
</span><span class="cx">             echo "Copying ${f}.default to ${f}"
</span><del>-            /bin/cp ${CONFIGPATH}/${f}.default ${CONFIGPATH}/${f}
-            /bin/chmod 644 ${CONFIGPATH}/${f}
</del><ins>+            /bin/cp "${CONFIGPATH}/${f}.default" "${CONFIGPATH}/${f}"
+            /bin/chmod 644 "${CONFIGPATH}/${f}"
</ins><span class="cx">         fi
</span><span class="cx">     done
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> # Command to update the MacPorts installation through "selfupdate":
</span><span class="cx"> function update_macports {
</span><del>-    SCRIPT_DIR=$(dirname $0)
</del><ins>+    SCRIPT_DIR=$(dirname "$0")
</ins><span class="cx">     # Add [default] tag to the central MacPorts repository, if it isn't already
</span><span class="cx">     echo "Adding [default] tag to sources.conf if needed..."
</span><del>-    ${TCLSH} ${SCRIPT_DIR}/upgrade_sources_conf_default.tcl ${PREFIX}
</del><ins>+    "${TCLSH}" "${SCRIPT_DIR}/upgrade_sources_conf_default.tcl" "${PREFIX}"
</ins><span class="cx">     # Convert image directories (and direct mode installs) to image archives
</span><span class="cx">     echo "Updating port image format..."
</span><del>-    ${TCLSH} ${SCRIPT_DIR}/images_to_archives.tcl
-    ${TCLSH} ${SCRIPT_DIR}/dedup_portfiles.tcl
</del><ins>+    "${TCLSH}" "${SCRIPT_DIR}/images_to_archives.tcl"
+    "${TCLSH}" "${SCRIPT_DIR}/dedup_portfiles.tcl"
</ins><span class="cx"> 
</span><span class="cx">     echo "Synchronizing the MacPorts installation with the project's rsync server..."
</span><del>-    if ! ${BINPATH}/port -v selfupdate; then 
</del><ins>+    if ! "${BINPATH}/port" -v selfupdate; then 
</ins><span class="cx">         echo "An attempt to synchronize your recent MacPorts installation with the project's rsync server failed!"
</span><span class="cx">         echo "Please run 'sudo port -d selfupdate' manually to find out the cause of the error."
</span><span class="cx">     else
</span><span class="lines">@@ -99,10 +99,12 @@
</span><span class="cx">         }
</span><span class="cx">         echo -e "\n##\n# Your previous ${HOME}/.${CONF_FILE} file was backed up as ${HOME}/.${CONF_FILE}.${BACKUP_SUFFIX}\n##" >> "${HOME}/.${CONF_FILE}"
</span><span class="cx">     fi
</span><del>-    echo -e "\n# ${OUR_STRING}: adding an appropriate ${1} variable for use with MacPorts." >> "${HOME}/.${CONF_FILE}"
-    echo "${ENV_COMMAND} ${1}${ASSIGN}${2}" >> "${HOME}/.${CONF_FILE}"
-    echo -e "# Finished adapting your ${1} environment variable for use with MacPorts.\n" >> "${HOME}/.${CONF_FILE}"
-    chown ${USER} "${HOME}/.${CONF_FILE}" || echo "Warning: unable to adapt permissions on your ${HOME}/.${CONF_FILE} shell configuration file!"
</del><ins>+    {
+        echo -e "\n# ${OUR_STRING}: adding an appropriate ${1} variable for use with MacPorts."
+        echo "${ENV_COMMAND} ${1}${ASSIGN}${2}"
+        echo -e "# Finished adapting your ${1} environment variable for use with MacPorts.\n"
+    } >> "${HOME}/.${CONF_FILE}"
+    chown "${USER}" "${HOME}/.${CONF_FILE}" || echo "Warning: unable to adapt permissions on your ${HOME}/.${CONF_FILE} shell configuration file!"
</ins><span class="cx">     echo "An appropriate ${1} variable has been added to your shell environment by the MacPorts installer."
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -112,9 +114,9 @@
</span><span class="cx">     MAN1="port.1"
</span><span class="cx">     MAN5="macports.conf.5"
</span><span class="cx">     MAN7="portfile.7 portstyle.7 porthier.7 portgroup.7"
</span><del>-    for m in ${MAN1}; do rm -vf ${MANPAGES}/man1/$m ; done
-    for m in ${MAN5}; do rm -vf ${MANPAGES}/man5/$m ; done
-    for m in ${MAN7}; do rm -vf ${MANPAGES}/man7/$m ; done
</del><ins>+    for m in ${MAN1}; do rm -vf "${MANPAGES}/man1/$m" ; done
+    for m in ${MAN5}; do rm -vf "${MANPAGES}/man5/$m" ; done
+    for m in ${MAN7}; do rm -vf "${MANPAGES}/man7/$m" ; done
</ins><span class="cx">     echo -e "Done.\n"
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -141,44 +143,44 @@
</span><span class="cx"> # create the user to use for privilege dropping
</span><span class="cx"> function create_run_user {
</span><span class="cx">     DSEDITGROUP=/usr/sbin/dseditgroup
</span><del>-    if ! ${DSCL} -q . -read /Groups/${RUNUSR} > /dev/null 2>&1 ; then
</del><ins>+    if ! ${DSCL} -q . -read "/Groups/${RUNUSR}" > /dev/null 2>&1 ; then
</ins><span class="cx">         echo "Creating group \"${RUNUSR}\""
</span><del>-        ${DSEDITGROUP} -q -o create ${RUNUSR}
</del><ins>+        ${DSEDITGROUP} -q -o create "${RUNUSR}"
</ins><span class="cx">     fi
</span><del>-    if ! ${DSCL} -q . -list /Users/${RUNUSR} > /dev/null 2>&1 ; then
</del><ins>+    if ! ${DSCL} -q . -list "/Users/${RUNUSR}" > /dev/null 2>&1 ; then
</ins><span class="cx">         echo "Creating user \"${RUNUSR}\""
</span><span class="cx">         NEXTUID=501
</span><del>-        while [[ -n "`${DSCL} -q /Search -search /Users UniqueID $NEXTUID`" ]]; do
</del><ins>+        while [[ -n "$(${DSCL} -q /Search -search /Users UniqueID $NEXTUID)" ]]; do
</ins><span class="cx">             let "NEXTUID=NEXTUID+1"
</span><span class="cx">         done
</span><del>-        ${DSCL} -q . -create /Users/${RUNUSR} UniqueID $NEXTUID
</del><ins>+        ${DSCL} -q . -create "/Users/${RUNUSR}" UniqueID $NEXTUID
</ins><span class="cx"> 
</span><span class="cx">         # These are implicitly added on Mac OSX Lion.  AuthenticationAuthority
</span><span class="cx">         # causes the user to be visible in the Users & Groups Preference Pane,
</span><span class="cx">         # and the others are just noise, so delete them.
</span><span class="cx">         # https://trac.macports.org/ticket/30168
</span><del>-        ${DSCL} -q . -delete /Users/${RUNUSR} AuthenticationAuthority
-        ${DSCL} -q . -delete /Users/${RUNUSR} PasswordPolicyOptions
-        ${DSCL} -q . -delete /Users/${RUNUSR} dsAttrTypeNative:KerberosKeys
-        ${DSCL} -q . -delete /Users/${RUNUSR} dsAttrTypeNative:ShadowHashData
</del><ins>+        ${DSCL} -q . -delete "/Users/${RUNUSR}" AuthenticationAuthority
+        ${DSCL} -q . -delete "/Users/${RUNUSR}" PasswordPolicyOptions
+        ${DSCL} -q . -delete "/Users/${RUNUSR}" dsAttrTypeNative:KerberosKeys
+        ${DSCL} -q . -delete "/Users/${RUNUSR}" dsAttrTypeNative:ShadowHashData
</ins><span class="cx"> 
</span><del>-        ${DSCL} -q . -create /Users/${RUNUSR} RealName MacPorts
-        ${DSCL} -q . -create /Users/${RUNUSR} Password \*
-        ${DSCL} -q . -create /Users/${RUNUSR} PrimaryGroupID $(${DSCL} -q . -read /Groups/${RUNUSR} PrimaryGroupID | /usr/bin/awk '{print $2}')
-        ${DSCL} -q . -create /Users/${RUNUSR} NFSHomeDirectory ${PREFIX}/var/macports/home
-        ${DSCL} -q . -create /Users/${RUNUSR} UserShell /usr/bin/false
</del><ins>+        ${DSCL} -q . -create "/Users/${RUNUSR}" RealName MacPorts
+        ${DSCL} -q . -create "/Users/${RUNUSR}" Password "*"
+        ${DSCL} -q . -create "/Users/${RUNUSR}" PrimaryGroupID "$(${DSCL} -q . -read "/Groups/${RUNUSR}" PrimaryGroupID | /usr/bin/awk '{print $2}')"
+        ${DSCL} -q . -create "/Users/${RUNUSR}" NFSHomeDirectory "${PREFIX}/var/macports/home"
+        ${DSCL} -q . -create "/Users/${RUNUSR}" UserShell /usr/bin/false
</ins><span class="cx">     fi
</span><span class="cx">     if [[ $(sw_vers -productVersion | /usr/bin/awk -F . '{print $2}') -eq 4 ]]; then
</span><del>-        GID=$(${DSCL} -q . -read /Groups/${RUNUSR} PrimaryGroupID | /usr/bin/awk '{print $2}')
-        if [[ "$(${DSCL} -q . -read /Users/${RUNUSR} PrimaryGroupID 2>/dev/null | /usr/bin/awk '{print $2}')" != "$GID" ]]; then
</del><ins>+        GID=$(${DSCL} -q . -read "/Groups/${RUNUSR}" PrimaryGroupID | /usr/bin/awk '{print $2}')
+        if [[ "$(${DSCL} -q . -read "/Users/${RUNUSR}" PrimaryGroupID 2>/dev/null | /usr/bin/awk '{print $2}')" != "$GID" ]]; then
</ins><span class="cx">             echo "Fixing PrimaryGroupID for user \"${RUNUSR}\""
</span><del>-            ${DSCL} -q . -create /Users/${RUNUSR} PrimaryGroupID $GID
-            ${DSCL} -q . -create /Users/${RUNUSR} RealName MacPorts
</del><ins>+            ${DSCL} -q . -create "/Users/${RUNUSR}" PrimaryGroupID "$GID"
+            ${DSCL} -q . -create "/Users/${RUNUSR}" RealName MacPorts
</ins><span class="cx">         fi
</span><span class="cx">     fi
</span><del>-    if [[ "$(${DSCL} -q . -read /Users/${RUNUSR} NFSHomeDirectory)" = "NFSHomeDirectory: /var/empty" ]]; then
</del><ins>+    if [[ "$(${DSCL} -q . -read "/Users/${RUNUSR}" NFSHomeDirectory)" = "NFSHomeDirectory: /var/empty" ]]; then
</ins><span class="cx">         echo "Updating home directory location for user \"${RUNUSR}\""
</span><del>-        ${DSCL} -q . -create /Users/${RUNUSR} NFSHomeDirectory ${PREFIX}/var/macports/home
</del><ins>+        ${DSCL} -q . -create "/Users/${RUNUSR}" NFSHomeDirectory "${PREFIX}/var/macports/home"
</ins><span class="cx">     fi
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -196,7 +198,7 @@
</span><span class="cx"> 
</span><span class="cx"> # Determine the user's shell, in order to choose an appropriate configuration file we'll be tweaking.
</span><span class="cx"> # Exit nicely if the shell is any other than bash or tcsh, as that's considered non-standard.
</span><del>-USHELL=$(${DSCL} . -read /Users/${USER} shell | awk -F'/' '{print $NF}') || {
</del><ins>+USHELL=$(${DSCL} . -read "/Users/${USER}" shell | awk -F'/' '{print $NF}') || {
</ins><span class="cx">     echo "An attempt to determine your shell name failed! Please set your MacPorts compatible environment manually."
</span><span class="cx">     update_macports
</span><span class="cx">     exit 1
</span><span class="lines">@@ -237,20 +239,20 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> # Adding our setting to the PATH variable if not already there:
</span><del>-if ${SHELL} ${LOGIN_FLAG} -c "/usr/bin/printenv PATH" | grep ${PREFIX} > /dev/null; then
</del><ins>+if "${SHELL}" ${LOGIN_FLAG} -c "/usr/bin/printenv PATH" | grep "${PREFIX}" > /dev/null; then
</ins><span class="cx">     echo "Your shell already has the right PATH environment variable for use with MacPorts!"
</span><span class="cx"> else
</span><span class="cx">     write_setting PATH "\"${BINPATH}:${SBINPATH}:\$PATH\""
</span><span class="cx"> fi
</span><span class="cx"> 
</span><span class="cx"> # We gather the path into a variable of our own for faster operation:
</span><del>-ORIGINAL_MANPATH="$(${SHELL} ${LOGIN_FLAG} -c "/usr/bin/printenv MANPATH")"
</del><ins>+ORIGINAL_MANPATH="$("${SHELL}" ${LOGIN_FLAG} -c "/usr/bin/printenv MANPATH")"
</ins><span class="cx"> # Adding our setting to the MANPATH variable only if it exists:
</span><del>-if ! ${SHELL} ${LOGIN_FLAG} -c "/usr/bin/env | grep MANPATH" > /dev/null || \
</del><ins>+if ! "${SHELL}" ${LOGIN_FLAG} -c "/usr/bin/env | grep MANPATH" > /dev/null || \
</ins><span class="cx"> # and following that, if it's not empty:
</span><span class="cx">   [[ -z "${ORIGINAL_MANPATH}" ]] || \
</span><span class="cx"> # or if it doesn't already contain our path:
</span><del>-  echo "${ORIGINAL_MANPATH}" | grep ${MANPAGES} > /dev/null || \
</del><ins>+  echo "${ORIGINAL_MANPATH}" | grep "${MANPAGES}" > /dev/null || \
</ins><span class="cx"> # or if there's no empty component somewhere in the middle of it:
</span><span class="cx">   echo "${ORIGINAL_MANPATH}" | grep :: > /dev/null || \
</span><span class="cx"> # or at the start of it:
</span><span class="lines">@@ -263,7 +265,7 @@
</span><span class="cx"> fi
</span><span class="cx"> 
</span><span class="cx"> # Adding a DISPLAY variable only if we're running on Tiger or less and if it doesn't already exist:
</span><del>-if (($(sw_vers -productVersion | awk -F . '{print $2}') >= 5)) || ${SHELL} ${LOGIN_FLAG} -c "/usr/bin/env | grep DISPLAY" > /dev/null; then
</del><ins>+if (($(sw_vers -productVersion | awk -F . '{print $2}') >= 5)) || "${SHELL}" ${LOGIN_FLAG} -c "/usr/bin/env | grep DISPLAY" > /dev/null; then
</ins><span class="cx">     echo "Your shell already has the right DISPLAY environment variable for use with MacPorts!"
</span><span class="cx"> else
</span><span class="cx">     write_setting DISPLAY ":0"
</span></span></pre>
</div>
</div>

</body>
</html>