On 21/03/17 20:43, Jan Stary wrote:
Here is a diff to postflight and an accompanying diff to installing.xml
(what other places need to be touched if this goes through?)

I do not think this will get committed. At least I hope it does not. As explained by others the current situation where if you use the installer then the config file gets updated, but if you install from source is the best compromise of user friendliness.


        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

Reply via email to