1 if [ -t 0 -o "${0:0:1}" = "-" -o "$1" = "force" ]; then
2 # Set up PROFILE_HOME if called outside HOME.
3 if [ -z "$PROFILE_HOME" ]; then
4 # BASH_SOURCE isn't available prior to bash 3.
5 profile_home=${BASH_SOURCE%/*}
6 [ -n "$profile_home" -a ! "${profile_home:0:1}" = "/" ] && profile_home=$(readlink -f "$profile_home" 2>/dev/null)
7 [ "$profile_home" = "$BASH_SOURCE" ] && profile_home=$PWD
8 [ "$profile_home" = "$HOME" ] || PROFILE_HOME=$profile_home
12 # Remember if nocaseglob was on.
15 # Turn it off so we source stuff in the right order.
17 # Remember if nullglob was on.
20 # Turn it on so we can look in subdirectories.
25 # Turn it off to set case-sensitive matching
28 # Force these to come before everything else.
33 # Remember PATH so we can mangle it to find tsort and sed.
35 PATH=/usr/bin:/bin:/usr/ccs/bin
37 # Sort all scripts by dependencies.
38 PROFILE_D=${PROFILE_HOME:-~}/.profile.d
41 for i in $PROFILE_D/{*/,}*.bashrc; do
42 dep=$(sed -n 's/^##*[ ]*profile-required:[ ]*//p' "$i")
44 if [ -n "$dep" ]; then
57 # Avoid odd number of tokens for tsort.
58 n=$(echo "$deps" | wc -w)
59 if [ $((n%2)) = 1 ]; then
64 sorted=$(echo "$deps" | tsort)
65 if [ -n "$sorted" ]; then
75 # Source them all in the right order.
78 for j in $PROFILE_D/{,*/}$i; do
79 [ -e "$j" ] || continue
81 [ "${sourced/ $k /}" = "$sourced" ] || continue
83 sourced="$sourced $k "
88 # Maybe turn nocaseglob back on.
89 [ $nocg = 0 ] && shopt -s nocaseglob
90 # Maybe turn nullglob back off.
91 [ $nullglob = 0 ] || shopt -u nullglob
96 unset i j k d n dep deps path required unsorted sourced
97 unset lc_all nullglob nocg
99 # Don't inherit failure from the last script.