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.
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 # Set a path from directories.
54 local newpath="$1"; shift
55 local dirs="$1"; shift
57 # Set IFS to newline only so that we can read $(embedded shell commands).
64 local dir=$(eval echo "$dir")
65 [ -d "$dir" ] || continue
73 # Are we setting, prepending or appending?
74 local existing="$(eval echo \$$newpath)"
76 local where="${dirs##*.}"
79 pre) path="$path:$existing";;
80 post) path="$existing:$path";;
85 path=$(sanitisepath "$path")
86 [ -z "$path" ] && return
89 eval "export $newpath='$path'"
92 # Construct directory list, omitting nonexistent and undefined ones.
94 for dir in "${SYSTEM:-@}/${ARCHITECTURE:-@}" "${SYSTEM:-@}" ""; do
95 [ "${dir/@/}" = "$dir" ] || continue
96 [ -d "$DIR/$dir" ] || continue
97 dirs="$dirs,$DIR/$dir"
101 [ "${dirs/,/}" = "$dirs" ] || dirs="{$dirs}"
103 for path in $PATHS; do
107 if [ "${source#@}" = "$source" ]; then
108 for dir in $(eval echo $dirs/$source{,.pre,.post}); do
109 [ -e "$dir" ] || continue
110 makepath "$var" "$dir"
113 copypath "$var" "${source#@}"
118 unset DIR PATHS dir dirs path var source sanitisepath copypath makepath newpath setpaths