diff options
author | Peter Scheibel <scheibel1@llnl.gov> | 2019-02-13 17:38:14 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-13 17:38:14 -0600 |
commit | 8ca384875efffbcee1881db9fdef4399e74add50 (patch) | |
tree | b4e22cb2bd0900afe44d1e4b9e0ad831244fcec0 /lib/spack/env/cc | |
parent | 1bf86292e1af9ba07cf360b67743283137956eec (diff) | |
download | spack-8ca384875efffbcee1881db9fdef4399e74add50.tar.gz spack-8ca384875efffbcee1881db9fdef4399e74add50.tar.bz2 spack-8ca384875efffbcee1881db9fdef4399e74add50.tar.xz spack-8ca384875efffbcee1881db9fdef4399e74add50.zip |
Dynamic library/include paths (#8136)
Fixes #7855
Closes #8070
Closes #2645
When searching for library directories (e.g. to add "-L" arguments to
the compiler wrapper) Spack was only trying the "lib/" and "lib64/"
directories for each dependency install prefix; this missed cases
where packages would install libraries to subdirectories and also was
not customizable. This PR makes use of the ".headers" and ".libs"
properties for more-advanced location of header/library directories.
Since packages can override the default behavior of ".headers" and
".libs", it also allows package writers to customize.
The following environment variables which used to be set by Spack
for a package build have been removed:
* Remove SPACK_PREFIX and SPACK_DEPENDENCIES environment variables as
they are no-longer used
* Remove SPACK_INSTALL environment variable: it was not used before
this PR
Diffstat (limited to 'lib/spack/env/cc')
-rwxr-xr-x | lib/spack/env/cc | 69 |
1 files changed, 22 insertions, 47 deletions
diff --git a/lib/spack/env/cc b/lib/spack/env/cc index 70f429055d..da1fee8756 100755 --- a/lib/spack/env/cc +++ b/lib/spack/env/cc @@ -24,7 +24,6 @@ # the script runs. They are set by routines in spack.build_environment # as part of spack.package.Package.do_install(). parameters=( - SPACK_PREFIX SPACK_ENV_PATH SPACK_DEBUG_LOG_DIR SPACK_DEBUG_LOG_ID @@ -46,8 +45,6 @@ parameters=( # SPACK_DEBUG # Test command is used to unit test the compiler script. # SPACK_TEST_COMMAND -# Dependencies can be empty for pkgs with no deps: -# SPACK_DEPENDENCIES # die() # Prints a message and exits with error 1. @@ -385,52 +382,30 @@ case "$mode" in flags=("${flags[@]}" "${SPACK_LDFLAGS[@]}") ;; esac +# Prepend include directories +IFS=':' read -ra include_dirs <<< "$SPACK_INCLUDE_DIRS" +if [[ $mode == cpp || $mode == cc || $mode == as || $mode == ccld ]]; then + for include_dir in "${include_dirs[@]}"; do + includes=("${includes[@]}" "$include_dir") + done +fi -# Include the package's prefix/lib[64] dirs in rpath. We don't know until -# *after* installation which one's correct, so we include both lib and -# lib64, assuming that only one will be present. -case "$mode" in - ld|ccld) - $add_rpaths && rpaths+=("$SPACK_PREFIX/lib") - $add_rpaths && rpaths+=("$SPACK_PREFIX/lib64") - ;; -esac - -# Read spack dependencies from the environment. This is a list of prefixes. -IFS=':' read -ra deps <<< "$SPACK_DEPENDENCIES" -for dep in "${deps[@]}"; do - # Append include directories in any compilation mode - case "$mode" in - cpp|cc|as|ccld) - if [[ -d $dep/include ]]; then - includes=("${includes[@]}" "$dep/include") - fi - ;; - esac - - # Append lib/lib64 and RPATH directories, but only if we're linking - case "$mode" in - ld|ccld) - if [[ -d $dep/lib ]]; then - if [[ $SPACK_RPATH_DEPS == *$dep* ]]; then - $add_rpaths && rpaths=("${rpaths[@]}" "$dep/lib") - fi - if [[ $SPACK_LINK_DEPS == *$dep* ]]; then - libdirs=("${libdirs[@]}" "$dep/lib") - fi - fi +IFS=':' read -ra rpath_dirs <<< "$SPACK_RPATH_DIRS" +if [[ $mode == ccld || $mode == ld ]]; then + for rpath_dir in "${rpath_dirs[@]}"; do + # Append RPATH directories. Note that in the case of the + # top-level package these directories may not exist yet. For dependencies + # it is assumed that paths have already been confirmed. + $add_rpaths && rpaths=("${rpaths[@]}" "$rpath_dir") + done +fi - if [[ -d $dep/lib64 ]]; then - if [[ $SPACK_RPATH_DEPS == *$dep* ]]; then - $add_rpaths && rpaths+=("$dep/lib64") - fi - if [[ $SPACK_LINK_DEPS == *$dep* ]]; then - libdirs+=("$dep/lib64") - fi - fi - ;; - esac -done +IFS=':' read -ra link_dirs <<< "$SPACK_LINK_DIRS" +if [[ $mode == ccld || $mode == ld ]]; then + for link_dir in "${link_dirs[@]}"; do + libdirs=("${libdirs[@]}" "$link_dir") + done +fi # add RPATHs if we're in in any linking mode case "$mode" in |