diff options
author | Seth R. Johnson <johnsonsr@ornl.gov> | 2019-09-30 14:02:32 -0400 |
---|---|---|
committer | Peter Scheibel <scheibel1@llnl.gov> | 2019-09-30 11:02:32 -0700 |
commit | 7bcb306d4a5fc74fff63ea73369211e95270b911 (patch) | |
tree | 8ead385c89660f6952076173f9d64b3eca613c20 | |
parent | 139eaa13064c2f8db824abe9c29f26296408ea86 (diff) | |
download | spack-7bcb306d4a5fc74fff63ea73369211e95270b911.tar.gz spack-7bcb306d4a5fc74fff63ea73369211e95270b911.tar.bz2 spack-7bcb306d4a5fc74fff63ea73369211e95270b911.tar.xz spack-7bcb306d4a5fc74fff63ea73369211e95270b911.zip |
Fix GCC environment variables for external installations (#12454)
Unlike the compiler binary name search logic, the `setup_environment` in
GCC's package assumes the compiler names are *exactly* `gcc`, `g++`,
etc. In many external installations (Homebrew, Macports) the
installation includes only *suffixed* versions such as `gcc-9`.
This patch uses the GCC compiler search suffixes to actually locate the
correct filenames for the installed compilers, allowing the
Spack-generated module file to have useful definitions of CC, CXX, etc.
It also allows for the possibility that the user's external installation
of GCC is compiled without Fortran support, in which case the `FC`
environment variables are not defined.
-rw-r--r-- | var/spack/repos/builtin/packages/gcc/package.py | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/var/spack/repos/builtin/packages/gcc/package.py b/var/spack/repos/builtin/packages/gcc/package.py index 15acc438c3..86e2b843e4 100644 --- a/var/spack/repos/builtin/packages/gcc/package.py +++ b/var/spack/repos/builtin/packages/gcc/package.py @@ -8,6 +8,7 @@ from spack.operating_systems.mac_os import macos_version, macos_sdk_path from llnl.util import tty import glob +import itertools import os import sys @@ -420,8 +421,27 @@ class Gcc(AutotoolsPackage): set_install_permissions(specs_file) def setup_environment(self, spack_env, run_env): - run_env.set('CC', join_path(self.spec.prefix.bin, 'gcc')) - run_env.set('CXX', join_path(self.spec.prefix.bin, 'g++')) - run_env.set('FC', join_path(self.spec.prefix.bin, 'gfortran')) - run_env.set('F77', join_path(self.spec.prefix.bin, 'gfortran')) - run_env.set('F90', join_path(self.spec.prefix.bin, 'gfortran')) + # Search prefix directory for possibly modified compiler names + from spack.compilers.gcc import Gcc as Compiler + + # Get the contents of the installed binary directory + bin_path = self.spec.prefix.bin + bin_contents = os.listdir(bin_path) + + # Find the first non-symlink compiler binary present for each language + for lang in ['cc', 'cxx', 'fc', 'f77']: + for filename, regexp in itertools.product( + bin_contents, + Compiler.search_regexps(lang) + ): + if not regexp.match(filename): + continue + + abspath = os.path.join(bin_path, filename) + if os.path.islink(abspath): + continue + + # Set the proper environment variable + run_env.set(lang.upper(), abspath) + # Stop searching filename/regex combos for this language + break |