# Generates toolchains/env.sh (for shells and scripts) and # toolchains/config.mk (for make) from the compEnv output of every installed # component, so both see exactly the same tool paths. Sourced after # lib/common.sh. # writeConfig -- regenerate both files from the installed components. writeConfig() { local id local kind local name local value local vars=() local paths=() local envTmp local mkTmp case "$JOEY_REPO" in *" "*) die "the repository path contains a space ($JOEY_REPO); make cannot build from there" ;; esac for id in $(componentIds); do [ -n "$(stampRead "$id")" ] || continue while IFS=$'\t' read -r kind name value; do case "$kind" in var) vars+=("$name=$value") ;; path) paths+=("$name") ;; esac done < <(compRun "$id" compEnv) done mkdir -p "$JOEY_TOOLCHAINS" envTmp="$(mktemp "$JOEY_TOOLCHAINS/env.sh.XXXXXX")" mkTmp="$(mktemp "$JOEY_TOOLCHAINS/config.mk.XXXXXX")" { printf '# Generated by install.sh -- do not edit. For a shell:\n' printf '# source toolchains/env.sh\n' printf "export JOEY_TOOLCHAINS='%s'\n" "$JOEY_TOOLCHAINS" for value in "${vars[@]}"; do printf "export %s='%s'\n" "${value%%=*}" "${value#*=}" done # Prepend each directory once, even when this file is sourced again. for value in "${paths[@]}"; do printf 'case ":$PATH:" in *":%s:"*) ;; *) PATH='"'"'%s'"'"':"$PATH" ;; esac\n' "$value" "$value" done printf 'export PATH\n' } > "$envTmp" { printf '# Generated by install.sh -- do not edit. make reads it by itself.\n' printf 'export JOEY_TOOLCHAINS := %s\n' "$JOEY_TOOLCHAINS" for value in "${vars[@]}"; do printf 'export %s := %s\n' "${value%%=*}" "${value#*=}" done if [ ${#paths[@]} -gt 0 ]; then printf 'export PATH := %s:$(PATH)\n' "$(IFS=:; printf '%s' "${paths[*]}")" fi } > "$mkTmp" chmod 644 "$envTmp" "$mkTmp" mv "$envTmp" "$JOEY_TOOLCHAINS/env.sh" mv "$mkTmp" "$JOEY_TOOLCHAINS/config.mk" }