Skip to content

Commit 980963d

Browse files
committed
Create separate update_shell_profile.command from postflight.patch-profile
1 parent c2428ca commit 980963d

3 files changed

Lines changed: 120 additions & 4 deletions

File tree

Mac/BuildScript/build-installer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1747,7 +1747,7 @@ def main():
17471747
fn = os.path.join(folder, "ReadMe.rtf")
17481748
patchFile("resources/ReadMe.rtf", fn)
17491749
fn = os.path.join(folder, "Update Shell Profile.command")
1750-
patchScript("scripts/postflight.patch-profile", fn)
1750+
patchScript("resources/update_shell_profile.command", fn)
17511751
fn = os.path.join(folder, "Install Certificates.command")
17521752
patchScript("resources/install_certificates.command", fn)
17531753
os.chmod(folder, STAT_0o755)
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
#!/bin/sh
2+
3+
echo "This script will update your shell profile when the 'bin' directory"
4+
echo "of python is not early enough of the PATH of your shell."
5+
echo "These changes will be effective only in shell windows that you open"
6+
echo "after running this script."
7+
8+
PYVER=@PYVER@
9+
PYTHON_ROOT="/Library/Frameworks/Python.framework/Versions/@PYVER@"
10+
11+
if [ `id -ur` = 0 ]; then
12+
# Run from the installer, do some trickery to fetch the information
13+
# we need.
14+
theShell="`finger $USER | grep Shell: | head -1 | awk '{ print $NF }'`"
15+
16+
else
17+
theShell="${SHELL}"
18+
fi
19+
20+
# Make sure the directory ${PYTHON_ROOT}/bin is on the users PATH.
21+
BSH="`basename "${theShell}"`"
22+
case "${BSH}" in
23+
bash|ksh|sh|*csh|zsh|fish)
24+
if [ `id -ur` = 0 ]; then
25+
P=`su - ${USER} -c 'echo A-X-4-X@@$PATH@@X-4-X-A' | grep 'A-X-4-X@@.*@@X-4-X-A' | sed -e 's/^A-X-4-X@@//g' -e 's/@@X-4-X-A$//g'`
26+
else
27+
P="`(exec -l ${theShell} -c 'echo $PATH')`"
28+
fi
29+
;;
30+
*)
31+
echo "Sorry, I don't know how to patch $BSH shells"
32+
exit 0
33+
;;
34+
esac
35+
36+
# Now ensure that our bin directory is on $P and before /usr/bin at that
37+
for elem in `echo $P | tr ':' ' '`
38+
do
39+
if [ "${elem}" = "${PYTHON_ROOT}/bin" ]; then
40+
echo "All right, you're a python lover already"
41+
exit 0
42+
elif [ "${elem}" = "/usr/bin" ]; then
43+
break
44+
fi
45+
done
46+
47+
echo "${PYTHON_ROOT}/bin is not on your PATH or at least not early enough"
48+
case "${BSH}" in
49+
*csh)
50+
if [ -f "${HOME}/.tcshrc" ]; then
51+
RC="${HOME}/.tcshrc"
52+
else
53+
RC="${HOME}/.cshrc"
54+
fi
55+
# Create backup copy before patching
56+
if [ -f "${RC}" ]; then
57+
cp -fp "${RC}" "${RC}.pysave"
58+
fi
59+
echo "" >> "${RC}"
60+
echo "# Setting PATH for Python ${PYVER}" >> "${RC}"
61+
echo "# The original version is saved in .cshrc.pysave" >> "${RC}"
62+
echo "set path=(${PYTHON_ROOT}/bin "'$path'")" >> "${RC}"
63+
if [ `id -ur` = 0 ]; then
64+
chown -h "${USER}" "${RC}"
65+
fi
66+
exit 0
67+
;;
68+
bash)
69+
if [ -e "${HOME}/.bash_profile" ]; then
70+
PR="${HOME}/.bash_profile"
71+
elif [ -e "${HOME}/.bash_login" ]; then
72+
PR="${HOME}/.bash_login"
73+
elif [ -e "${HOME}/.profile" ]; then
74+
PR="${HOME}/.profile"
75+
else
76+
PR="${HOME}/.bash_profile"
77+
fi
78+
;;
79+
fish)
80+
CONFIG_DIR="${HOME}/.config/fish/conf.d/"
81+
RC="${CONFIG_DIR}/python-${PYVER}.fish"
82+
mkdir -p "$CONFIG_DIR"
83+
if [ -f "${RC}" ]; then
84+
cp -fp "${RC}" "${RC}.pysave"
85+
fi
86+
echo "# Setting PATH for Python ${PYVER}" > "${RC}"
87+
if [ -f "${RC}.pysave" ]; then
88+
echo "# The original version is saved in ${RC}.pysave" >> "${RC}"
89+
fi
90+
echo "fish_add_path -g \"${PYTHON_ROOT}/bin\"" >> "${RC}"
91+
if [ `id -ur` = 0 ]; then
92+
chown -h "${USER}" "${RC}"
93+
fi
94+
exit 0
95+
;;
96+
zsh)
97+
PR="${HOME}/.zprofile"
98+
;;
99+
*sh)
100+
PR="${HOME}/.profile"
101+
;;
102+
esac
103+
104+
# Create backup copy before patching
105+
if [ -f "${PR}" ]; then
106+
cp -fp "${PR}" "${PR}.pysave"
107+
fi
108+
echo "" >> "${PR}"
109+
echo "# Setting PATH for Python ${PYVER}" >> "${PR}"
110+
echo "# The original version is saved in `basename ${PR}`.pysave" >> "${PR}"
111+
echo 'PATH="'"${PYTHON_ROOT}/bin"':${PATH}"' >> "${PR}"
112+
echo 'export PATH' >> "${PR}"
113+
if [ `id -ur` = 0 ]; then
114+
chown -h "${USER}" "${PR}"
115+
fi
116+
exit 0

Mac/BuildScript/scripts/postflight.patch-profile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ case "${BSH}" in
6161
echo "# The original version is saved in .cshrc.pysave" >> "${RC}"
6262
echo "set path=(${PYTHON_ROOT}/bin "'$path'")" >> "${RC}"
6363
if [ `id -ur` = 0 ]; then
64-
chown "${USER}" "${RC}"
64+
chown -h "${USER}" "${RC}"
6565
fi
6666
exit 0
6767
;;
@@ -89,7 +89,7 @@ fish)
8989
fi
9090
echo "fish_add_path -g \"${PYTHON_ROOT}/bin\"" >> "${RC}"
9191
if [ `id -ur` = 0 ]; then
92-
chown "${USER}" "${RC}"
92+
chown -h "${USER}" "${RC}"
9393
fi
9494
exit 0
9595
;;
@@ -111,6 +111,6 @@ echo "# The original version is saved in `basename ${PR}`.pysave" >> "${PR}"
111111
echo 'PATH="'"${PYTHON_ROOT}/bin"':${PATH}"' >> "${PR}"
112112
echo 'export PATH' >> "${PR}"
113113
if [ `id -ur` = 0 ]; then
114-
chown "${USER}" "${PR}"
114+
chown -h "${USER}" "${PR}"
115115
fi
116116
exit 0

0 commit comments

Comments
 (0)