1 # Path information is stored on separate lines in XXXdirs.
2 # We check each directory exists and add it to the appropriate PATH.
3 # Prepend paths with XXXdirs.pre. They are guaranteed to precede other paths.
4 # Append paths with XXXdirs.post. They are not guaranteed to follow others.
5 # Set per-OS files in $SYSTEM[/$ARCHITECTURE] subdirectories of $DIR.
8 # Location of the XXXdirs files.
9 DIR=${PROFILE_HOME:-~}/.PATH
11 # Paths to set and the file to get them from @variable to copy from.
14 C_INCLUDE_PATH:incdirs
15 CPLUS_INCLUDE_PATH:@C_INCLUDE_PATH
16 LD_LIBRARY_PATH:libdirs
19 PKG_CONFIG_PATH:pkgdirs
22 function sanitisepath() {
23 local paths="${@//:/ }"
26 for path in $paths; do
29 paths="${paths#$path} "
30 if [ "${sane/:$path:/}" = "$sane" ]; then
42 # Set one path to be the same as another.
44 local newpath="$1"; shift
45 local oldpath="$1"; shift
47 # Sanitise and export.
48 local path="$(eval echo \$$oldpath)"
49 [ -z "$path" ] || eval "export $newpath='$path'"
52 # Try to expand variables in a path definition, discarding it if expansion fails.
53 function expandpath() {
54 local path="$1"; shift
56 while [ -n "$path" ]; do
57 [ "${path/\$/}" = "$path" ] && return 0
60 local var="${path%%/*}"
61 eval "[ -n \"\$$var\" ] || return 1"
69 local path="$1"; shift
72 if ! expandpath "$dir"; then
75 dir=$(eval echo "$dir")
76 if [ -d "$dir" ]; then
84 # Set a path from directories.
86 local newpath="$1"; shift
87 local dirs="$1"; shift
89 # Set IFS to newline only so that we can read $(embedded shell commands).
96 path=$(addpath "$path" "$dir")
97 if [ -n "$PROFILE_HOME" -a ! "${dir#\$HOME}" = "$dir" ]; then
98 dir="$PROFILE_HOME${dir#\$HOME}"
99 path=$(addpath "$path" "$dir")
106 # Are we setting, prepending or appending?
107 local existing="$(eval echo \$$newpath)"
109 local where="${dirs##*.}"
112 pre) path="$path:$existing";;
113 post) path="$existing:$path";;
118 path=$(sanitisepath "$path")
119 [ -z "$path" ] && return
122 eval "export $newpath='$path'"
125 # Construct directory list, omitting nonexistent and undefined ones.
127 for dir in "${SYSTEM:-@}/${ARCHITECTURE:-@}" "${SYSTEM:-@}" ""; do
128 [ "${dir/@/}" = "$dir" ] || continue
129 [ -d "$DIR/$dir" ] || continue
130 dirs="$dirs,$DIR/$dir"
134 [ "${dirs/,/}" = "$dirs" ] || dirs="{$dirs}"
136 for path in $PATHS; do
140 if [ "${source#@}" = "$source" ]; then
141 for dir in $(eval echo $dirs/$source{,.pre,.post}); do
142 [ -e "$dir" ] || continue
143 makepath "$var" "$dir"
146 copypath "$var" "${source#@}"
151 unset DIR PATHS dir dirs path var source expandpath sanitisepath copypath makepath newpath addpath