diff --git a/.github/workflows/bootstrap.yml b/.github/workflows/bootstrap.yml new file mode 100644 index 0000000000..70fe9bf58a --- /dev/null +++ b/.github/workflows/bootstrap.yml @@ -0,0 +1,113 @@ +name: Bootstrapping + +on: + pull_request: + branches: + - develop + - releases/** + paths-ignore: + # Don't run if we only modified packages in the + # built-in repository or documentation + - 'var/spack/repos/builtin/**' + - '!var/spack/repos/builtin/packages/clingo-bootstrap/**' + - '!var/spack/repos/builtin/packages/python/**' + - 'lib/spack/docs/**' + schedule: + # nightly at 2:16 AM + - cron: '16 2 * * *' + +jobs: + + fedora: + runs-on: ubuntu-latest + container: "fedora:latest" + steps: + - name: Install dependencies + run: | + dnf install -y \ + bzip2 curl file gcc-c++ gcc gcc-gfortran git gnupg2 gzip \ + make patch unzip which xz python3 python3-devel tree \ + cmake bison bison-devel libstdc++-static + - uses: actions/checkout@v2 + - name: Setup repo and non-root user + run: | + git --version + git fetch --unshallow + . .github/workflows/setup_git.sh + useradd spack-test + chown -R spack-test . + - name: Bootstrap clingo + shell: runuser -u spack-test -- bash {0} + run: | + source share/spack/setup-env.sh + spack external find cmake bison + spack -d solve zlib + tree ~/.spack/bootstrap/store/ + + ubuntu: + runs-on: ubuntu-latest + container: "ubuntu:latest" + steps: + - name: Install dependencies + env: + DEBIAN_FRONTEND: noninteractive + run: | + apt-get update -y && apt-get upgrade -y + apt-get install -y \ + bzip2 curl file g++ gcc gfortran git gnupg2 gzip \ + make patch unzip xz-utils python3 python3-dev tree \ + cmake bison + - uses: actions/checkout@v2 + - name: Setup repo and non-root user + run: | + git --version + git fetch --unshallow + . .github/workflows/setup_git.sh + useradd -m spack-test + chown -R spack-test . + - name: Bootstrap clingo + shell: runuser -u spack-test -- bash {0} + run: | + source share/spack/setup-env.sh + spack external find cmake bison + spack -d solve zlib + tree ~/.spack/bootstrap/store/ + + opensuse: + runs-on: ubuntu-latest + container: "opensuse/tumbleweed:latest" + steps: + - name: Install dependencies + run: | + zypper update -y + zypper install -y \ + bzip2 curl file gcc-c++ gcc gcc-fortran tar git gpg2 gzip \ + make patch unzip which xz python3 python3-devel tree \ + cmake bison + - uses: actions/checkout@v2 + - name: Setup repo and non-root user + run: | + git --version + git fetch --unshallow + . .github/workflows/setup_git.sh + - name: Bootstrap clingo + run: | + source share/spack/setup-env.sh + spack external find cmake bison + spack -d solve zlib + tree ~/.spack/bootstrap/store/ + + macos: + runs-on: macos-latest + steps: + - name: Install dependencies + run: | + brew install cmake bison@2.7 tree + - uses: actions/checkout@v2 + - name: Bootstrap clingo + run: | + source share/spack/setup-env.sh + export PATH=/usr/local/opt/bison@2.7/bin:$PATH + spack external find --not-buildable cmake bison + spack -d solve zlib + tree ~/.spack/bootstrap/store/ diff --git a/lib/spack/spack/bootstrap.py b/lib/spack/spack/bootstrap.py index 92bbb2fa42..09088c3eb6 100644 --- a/lib/spack/spack/bootstrap.py +++ b/lib/spack/spack/bootstrap.py @@ -92,15 +92,19 @@ def make_module_available(module, spec=None, install=False): installed_specs = spack.store.db.query(spec, installed=True) for ispec in installed_specs: - # TODO: make sure run-environment is appropriate - module_path = ispec['python'].package.get_python_lib(prefix=ispec.prefix) + lib_spd = ispec['python'].package.default_site_packages_dir + lib64_spd = lib_spd.replace('lib/', 'lib64/') + module_paths = [ + os.path.join(ispec.prefix, lib_spd), + os.path.join(ispec.prefix, lib64_spd) + ] try: - sys.path.append(module_path) + sys.path.extend(module_paths) __import__(module) return except ImportError: tty.warn("Spec %s did not provide module %s" % (ispec, module)) - sys.path = sys.path[:-1] + sys.path = sys.path[:-2] def _raise_error(module_name, module_spec): error_msg = 'cannot import module "{0}"'.format(module_name) @@ -117,13 +121,18 @@ def _raise_error(module_name, module_spec): spec.concretize() spec.package.do_install() - module_path = spec['python'].package.get_python_lib(prefix=spec.prefix) + lib_spd = spec['python'].package.default_site_packages_dir + lib64_spd = lib_spd.replace('lib/', 'lib64/') + module_paths = [ + os.path.join(spec.prefix, lib_spd), + os.path.join(spec.prefix, lib64_spd) + ] try: - sys.path.append(module_path) + sys.path.extend(module_paths) __import__(module) return except ImportError: - sys.path = sys.path[:-1] + sys.path = sys.path[:-2] _raise_error(module, spec) diff --git a/var/spack/repos/builtin/packages/python/package.py b/var/spack/repos/builtin/packages/python/package.py index 61f42aaad3..760dc422c2 100644 --- a/var/spack/repos/builtin/packages/python/package.py +++ b/var/spack/repos/builtin/packages/python/package.py @@ -920,8 +920,12 @@ def site_packages_dir(self): try: return self.get_python_lib(prefix='') except (ProcessError, RuntimeError): - return os.path.join( - 'lib', 'python{0}'.format(self.version.up_to(2)), 'site-packages') + return self.default_site_packages_dir + + @property + def default_site_packages_dir(self): + python_dir = 'python{0}'.format(self.version.up_to(2)) + return os.path.join('lib', python_dir, 'site-packages') @property def easy_install_file(self):