Like having different working directories for different compilers. That means, it is necessary to set up some environment variables to have PATH, LDFLAGS, CPPFLAGS or PKG_CONFIG_PATH point to the wanted libraries and binaries.
Furthermore, I like to put some “packages” in its own prefix (which most people will disagree), like
package1/lib
package1/bin
package1/include
…
So to keep this flexible, it would be nice to have it just include all directories that match. — Excluding the source ones, that is.
I wrote this down in some function, this might not be the best way to do it however ;-)
typeset -T -Ux PKG_CONFIG_PATH pkg_config_path
typeset -T -Ux LDFLAGS ldflags ' '
typeset -T -Ux CPPFLAGS cppflags ' '
setup_gcc440_world() {
typeset world=$HOME/gcc440world
typeset gcc_bin=$HOME/gcc/440/rel/bin
if [[ $PWD/ == $world/* ]] {
typeset -U newpath
newpath=($gcc_bin $path)
if [[ $newpath != $path ]] {
path=( $gcc_bin $world/*/bin(/e_'(set -G; nobin=($REPLY/../*(^/)) && [[ ! ${#nobin} -gt 0 ]])'_) $path )
rehash
echo "Adjusted environment to gcc440world: "
echo " PATH: $path"
pkg_config_path=( $world/*/lib/pkgconfig(/e_'(set -G; nobin=($REPLY/../../*(^/)) && [[ ! ${#nobin} -gt 0 ]])'_) $pkg_config_path )
echo " PKG_CONFIG_PATH: $pkg_config_path"
typeset lib_dirs
lib_dirs=( $world/*/lib(/e_'(set -G; nobin=($REPLY/../*(^/)) && [[ ! ${#nobin} -gt 0 ]])'_) )
ldflags=( ${lib_dirs/#/-L} $ldflags )
echo " LDFLAGS: $ldflags"
typeset inc_dirs
inc_dirs=( $world/*/include(/e_'(set -G; nobin=($REPLY/../*(^/)) && [[ ! ${#nobin} -gt 0 ]])'_) )
cppflags=( ${inc_dirs/#/-I} $cppflags )
echo " CPPFLAGS: $cppflags"
}
} \
elif [[ $PWD/ != $world/* ]] {
typeset -U newpath
newpath=(${path:#$gcc_bin})
if [[ $newpath != $path ]] {
path=( ${newpath:#$world/*/bin} )
rehash
echo "Adjusted environment without gcc440world"
echo " PATH: $path"
pkg_config_path=( ${pkg_config_path:#$world/*/lib/pkgconfig} )
echo " PKG_CONFIG_PATH: $pkg_config_path"
ldflags=( ${ldflags:#-L$world/*/lib} )
echo " LDFLAGS: $ldflags"
cppflags=( ${cppflags:#-I$world/*/include} )
echo " CPPFLAGS: $cppflags"
}
}
}
precmd() {
setup_gcc440_world;
}