Here is a diff to postflight and an accompanying diff to installing.xml
(what other places need to be touched if this goes through?)
Jan
diff --git a/portmgr/dmg/postflight.in b/portmgr/dmg/postflight.in
index 750553f0..a3a8bd80 100755
--- a/portmgr/dmg/postflight.in
+++ b/portmgr/dmg/postflight.in
@@ -87,28 +87,6 @@ function update_macports {
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 backed it up.
-function write_setting () {
- if [[ -f "${HOME}/.${CONF_FILE}" ]] && ! grep "${OUR_BASESTRING}"
"${HOME}/.${CONF_FILE}" > /dev/null; then
- echo "Backing up your ${HOME}/.${CONF_FILE} shell confguration file as
${HOME}/.${CONF_FILE}.${BACKUP_SUFFIX} before adapting it for MacPorts."
- /bin/cp -fp "${HOME}/.${CONF_FILE}"
"${HOME}/.${CONF_FILE}.${BACKUP_SUFFIX}" || {
- echo "An attempt to backup your original configuration file
failed! Please set your MacPorts compatible environment manually."
- update_macports
- exit 1
- }
- echo -e "\n##\n# Your previous ${HOME}/.${CONF_FILE} file was backed
up as ${HOME}/.${CONF_FILE}.${BACKUP_SUFFIX}\n##" >> "${HOME}/.${CONF_FILE}"
- fi
- {
- 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!"
- echo "An appropriate ${1} variable has been added to your shell
environment by the MacPorts installer."
-}
-
function cleanup_man () {
# Remove old non-compressed man pages
echo -e "\nRemoving old man pages..."
@@ -195,8 +173,6 @@ function create_run_user {
fi
}
-echo "The MacPorts Project, postflight script version ${VERSION}: checking the
shell environment for user \"${USER}\"."
-
# create macports user
create_run_user
# Set up config files
@@ -207,78 +183,11 @@ cleanup_man
delete_old_tcl_package_link
delete_old_tcl_packages
-# 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) || {
- echo "An attempt to determine your shell name failed! Please set your
MacPorts compatible environment manually."
- update_macports
- exit 1
-}
-# leave full path to shell
-USHELL=${USHELL#*shell: }
-
-case "${USHELL}" in
- */tcsh)
- echo "Detected the tcsh shell."
- LOGIN_FLAG=""
- ENV_COMMAND="setenv"
- ASSIGN=" "
- if [[ -f "${HOME}/.tcshrc" ]]; then
- CONF_FILE=tcshrc
- elif [[ -f "${HOME}/.cshrc" ]]; then
- CONF_FILE=cshrc
- else
- CONF_FILE=tcshrc
- fi
- ;;
- */bash)
- echo "Detected the bash shell."
- LOGIN_FLAG="-l"
- ENV_COMMAND="export"
- ASSIGN="="
- if [[ -f "${HOME}/.bash_profile" ]]; then
- CONF_FILE=bash_profile
- elif [[ -f "${HOME}/.bash_login" ]]; then
- CONF_FILE=bash_login
- else
- CONF_FILE=profile
- fi
- ;;
- *)
- echo "Unknown shell ($USHELL)! Please set your MacPorts compatible
environment manually."
- update_macports
- exit 0
- ;;
-esac
-
-# Adding our setting to the PATH variable if not already there:
-# Run as the $USER: /usr/bin/su $USER -l
-# Run a command in the shell: -c "/usr/bin/printenv PATH"
-# Only process the last line output (profile may print info): tail -n 1
-# Output each path on its own line: tr ":" "\n"
-# Look for exactly the BINPATH: grep "^${BINPATH}$"
-if /usr/bin/su "${USER}" -l -c "/usr/bin/printenv PATH" | tail -n 1 | tr ":"
"\n" | grep "^${BINPATH}$" > /dev/null; then
- echo "Your shell already has the right PATH environment variable for use
with MacPorts!"
-else
- write_setting PATH "\"${BINPATH}:${SBINPATH}:\$PATH\""
-fi
-
-# Adding our setting to the MANPATH variable only if it exists:
-if /usr/bin/su "${USER}" -l -c "/usr/bin/printenv MANPATH" > /dev/null; then
- # check for MANPAGES already in MANPATH
- if /usr/bin/su "${USER}" -l -c "/usr/bin/printenv MANPATH" | tail -n 1 |
tr ":" "\n" | grep "^${MANPAGES}$" >/dev/null; then
- echo "Your shell already has the right MANPATH environment variable
for use with MacPorts!"
- else
- write_setting MANPATH "\"${MANPAGES}:\$MANPATH\""
- fi
-fi
-
-# 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}') >= 5)) || /usr/bin/su
"${USER}" -l -c "/usr/bin/printenv DISPLAY" > /dev/null > /dev/null; then
- echo "Your shell already has the right DISPLAY environment variable for
use with MacPorts!"
-else
- write_setting DISPLAY ":0"
-fi
+echo "Remember to set your environment:"
+echo "Prepend ${BINPATH} and ${SBINPATH} to PATH."
+echo "Prepend ${MANPAGES} to MANPATH if you use MANPATH."
+echo "Remember to set DISPLAY if you are on 10.4 or older."
+echo "See https://guide.macports.org/#installing.shell for details."
# Postflight script is done with its job, update MacPorts and exit gracefully!
update_macports
diff --git a/guide/xml/installing.xml b/guide/xml/installing.xml
index 31f8719..18adb66 100644
--- a/guide/xml/installing.xml
+++ b/guide/xml/installing.xml
@@ -412,34 +412,25 @@
<section id="installing.shell">
<title>MacPorts and the Shell</title>
- <para>MacPorts requires that some environment variables be set in the
shell. When MacPorts is installed using
- the OS X package installer, a <quote>postflight</quote> script is
run after installation that automatically
- adds or modifies a shell configuration file in your home
directory, ensuring that it defines variables
- according to the rules described in the following section. Those
<link
- linkend="installing.macports.source">installing MacPorts from
source code</link> must modify their
- environment manually using the rules as a guide.</para>
-
- <para>Depending on your shell and which configuration files already
exist, the installer may use
- <filename>.profile</filename>, <filename>.bash_login</filename>,
<filename>.bash_profile</filename>,
- <filename>.tcshrc</filename>, or
<filename>.cshrc</filename>.</para>
+ <para>MacPorts requires that some environment variables be set in the
shell.
+ Depending on your shell, this means you need to edit some of the
following config files:
+ <filename>.profile</filename>, <filename>.bash_login</filename> or
<filename>.bash_profile</filename> for bash,
+ <filename>.tcshrc</filename> or <filename>.cshrc</filename> for
tcsh.</para>
<section id="installing.shell.postflight">
- <title>The Postflight Script</title>
+ <title>Configure Your Environment</title>
- <para>The postflight script automatically sets the
<varname>PATH</varname> variable, and optionally the
- <varname>MANPATH</varname> and <varname>DISPLAY</varname>
variables according to the rules described
- below. If a current shell configuration file exists at
installation time it is renamed to
- <quote>mpsaved_$timestamp</quote>. Those <link
linkend="installing.macports.source">installing MacPorts
- from source code</link> must modify their environment
manually using the rules as a guide.</para>
+ <para>The <varname>PATH</varname> environment variable,
+ and optionally <varname>MANPATH</varname> and
<varname>DISPLAY</varname> variables need to be edited
+ according to the rules described below.</para>
<itemizedlist>
<listitem>
<para>Required: <varname>PATH</varname> variable</para>
- <para>This variable is set by the postflight script to
append the MacPorts executable paths to the
- default path as shown. The MacPorts paths are appended
at the front of <varname>PATH</varname>
- so the MacPorts libraries will take precedence over
vendor-supplied libraries for ported
- software at runtime.</para>
+ <para>This variable should have the MacPorts executable
paths prepended to the default path as shown.
+ The MacPorts paths are at the front of
<varname>PATH</varname> so that the MacPorts binaries
+ will take precedence over vendor-supplied
libraries.</para>
<programlisting>export
PATH=/opt/local/bin:/opt/local/sbin:$PATH</programlisting>
@@ -456,30 +447,18 @@
<listitem>
<para>Optional: <varname>MANPATH</varname> variable</para>
- <para>Condition: If prior to MacPorts installation a
<varname>MANPATH</varname> variable exists in
- a current <filename>.profile</filename> that contains
neither the value
- <filename>${prefix}/share/man,</filename> nor any
empty values, the postflight script sets the
- <varname>MANPATH</varname> variable as shown below.
Otherwise, the <varname>MANPATH</varname>
- variable is omitted.</para>
+ <para>If your shell configuration sets a
<varname>MANPATH</varname> variable,
+ it should be edited to contain
<filename>${prefix}/share/man</filename>.</para>
<programlisting>export
MANPATH=/opt/local/share/man:$MANPATH</programlisting>
-
- <para>Here are some examples of paths that contain empty
values:</para>
-
- <simplelist>
- <member>/usr/share/man:</member>
- <member>:/usr/share/man</member>
- <member>/usr/share/man::/usr/X11R6/man</member>
- </simplelist>
</listitem>
<listitem>
<para>Optional: <varname>DISPLAY</varname> variable</para>
- <para>Condition: If installing on a Mac OS X version
earlier than 10.5 (Leopard), and if a shell
- configuration file exists at time of MacPorts
installation without a <varname>DISPLAY</varname>
- variable, the postflight script sets a
<varname>DISPLAY</varname> variable as shown below. The
- <varname>DISPLAY</varname> variable is always omitted
on Mac OS X 10.5 or higher.</para>
+ <para>If installing on a Mac OS X version earlier than 10.5
(Leopard),
+ a <varname>DISPLAY</varname> variable should be set
as shown below.
+ On Mac OS X 10.5 or higher, the
<varname>DISPLAY</varname> variable is always omitted.</para>
<programlisting>export DISPLAY=:0.0</programlisting>
</listitem>
@@ -487,7 +466,7 @@
</section>
<section id="installing.shell.verifyprofile">
- <title>Verify the Configuration File</title>
+ <title>Verify the Configuration</title>
<para>To verify that the file containing the MacPorts variables is
in effect, type <command>env</command> in
the terminal to verify the current environment settings after
the file has been created. Example output