# # spec file for package spack # # Copyright (c) 2020 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via https://bugs.opensuse.org/ # %define spack_dir %_prefix/lib/spack/ %define spack_group spack Name: spack Version: 0.15.4 Release: 0 Summary: Package manager for HPC systems License: Apache-2.0 AND MIT AND Python-2.0 AND BSD-3-Clause URL: https://spack.io Source0: https://github.com/spack/spack/archive/v%{version}.tar.gz#/spack-%{version}.tar.gz Patch0: Make-spack-paths-compliant-to-distro-installation.patch Patch1: fix-tumbleweed-naming.patch BuildRequires: polkit BuildRequires: fdupes BuildRequires: python-base BuildRequires: lua-lmod Requires: %{name}-recipes = %{version} Requires: curl Requires: lua-lmod Requires: pattern() = devel_basis Requires: polkit Requires: gcc-fortran Requires: gpg2 Requires: xz Requires: bzip2 Requires: spack-recipes Recommends: spack-recipes = %version BuildArch: noarch %if 0%{?sle_version} <= 120500 && !0%{?is_opensuse} %define __python3 python3 %endif %description Spack is a configurable Python-based HPC package manager, automating the installation and fine-tuning of simulations and libraries. It operates on a wide variety of HPC platforms and enables users to build many code configurations. Software installed by Spack runs correctly regardless of environment, and file management is streamlined. Spack can install many variants of the same build using different compilers, options, and MPI implementations. This package provides a module file that must be loaded to use spack. %package recipes Summary: Spack built-in package recipes Requires: %{name} >= %version %description recipes Spack is a configurable Python-based HPC package manager, automating the installation and fine-tuning of simulations and libraries. It operates on a wide variety of HPC platforms and enables users to build many code configurations. Software installed by Spack runs correctly regardless of environment, and file management is streamlined. Spack can install many variants of the same build using different compilers, options, and MPI implementations. This package contains the built-in package recipes. %prep %setup -q %autopatch -p1 %build # Nothing to build %install # Fix some rpmlint warnings ## Remove files not required to run spack rm -rf lib/spack/spack/test rm -rf share/spack/qa rm -rf var/spack/repos/builtin.mock var/spack/gpg.mock var/spack/mock_configs rm -rf lib/spack/external/ruamel/yaml/.ruamel find . -type f -name .gitignore -delete find . -type f -name .nojekyll -delete rm -f lib/spack/docs/_spack_root ln -sf ../.. lib/spack/docs/_spack_root ## No need for the standalone scripts rm -f lib/spack/external/macholib/macho_*.py ## Fix shebangs sed -i 's@#!/bin/env sh@#!/bin/bash@' var/spack/repos/builtin/packages/beast-tracer/tracer sed -i 's@#!/usr/bin/env bash@#!/bin/bash@' share/spack/docker/package-index/split.sh sed -i 's@#! /usr/bin/env bash@ #!/bin/bash@' share/spack/docker/entrypoint.bash mkdir -p %{buildroot}%{spack_dir} mkdir -p %{buildroot}%{spack_dir}/opt mkdir -p %{buildroot}%{spack_dir}/bin mkdir -p %{buildroot}%{_datarootdir}/spack mkdir -p %{buildroot}%{_datarootdir}/spack/modules mkdir -p %{buildroot}%{_localstatedir}/lib/spack mkdir -p %{buildroot}%{_localstatedir}/lib/spack/junit-report mkdir -p %{buildroot}%{_localstatedir}/cache/spack mkdir -p %{buildroot}%{_sysconfdir}/skel/.spack/ mkdir -p %{buildroot}/%{_bindir} ln -sf %{buildroot}/%{_localstatedir}/cache/spack %{buildroot}%{_localstatedir}/lib/spack/cache # Copy files to corresponding paths cp -r etc lib %{buildroot}%{spack_dir} cp -r share/spack/* %{buildroot}%{_datarootdir}/spack cp -r var/spack/* %{buildroot}%{_localstatedir}/lib/spack cp -r bin/sbang %{buildroot}/%{_bindir} cp -r bin/spack* %{buildroot}%{spack_dir}/bin cp etc/spack/defaults/config.yaml %{buildroot}%{_sysconfdir}/skel/.spack/ sed -i 's@\(\sinstall_tree:\).*@\1 ~/spack/packages@' %{buildroot}%{_sysconfdir}/skel/.spack/config.yaml sed -i 's@\(\ssource_cache:\).*@\1 /var/tmp/$user/spack-cache@' %{buildroot}%{_sysconfdir}/skel/.spack/config.yaml sed -i 's@\(\stcl:\).*@\1 ~/spack/modules@' %{buildroot}%{_sysconfdir}/skel/.spack/config.yaml sed -i 's@\(\slmod:\).*@\1 ~/spack/lmod@' %{buildroot}%{_sysconfdir}/skel/.spack/config.yaml # create spack scripts echo -e '#!/bin/bash\n\nexec %{spack_dir}bin/$(basename $0) "${1+$@}"' > \ %{buildroot}%{_bindir}/spack chmod 0755 %{buildroot}%{_bindir}/spack ln -s spack %{buildroot}%{_bindir}/spack-python ln -s %{_bindir}/sbang %{buildroot}%{spack_dir}/bin/sbang # compile python files for python3 %py_compile . # make shell scripts executeable find %{buildroot}%{_localstatedir}/lib/spack/ -type f -name \*.sh -exec chmod 755 {} \; # Create /etc/spack/compilers.yaml mkdir -p %{buildroot}%{spack_dir}/etc/spack/ cat > %{buildroot}%{spack_dir}/etc/spack/compilers.yaml < %{buildroot}/%{_sysconfdir}/profile.d/spack.sh < /dev/null ; then test -e ~/.spack || mkdir -p ~/.spack [ -e ~/.spack/config.yaml ] || \ cp -r %{_sysconfdir}/skel/.spack/config.yaml ~/.spack/ fi fi EOF # Same for csh cat > %{buildroot}/%{_sysconfdir}/profile.d/spack.csh <& /dev/null if ( \$? == 1 ) then test -e ~/.spack || mkdir -p ~/.spack test -e ~/.spack/config.yaml || \ cp -r %{_sysconfdir}/skel/.spack/config.yaml ~/.spack/ endif endif EOF # Create modules.yaml file, so that hierarchy module files are created cat > %{buildroot}%{spack_dir}/etc/spack/modules.yaml </dev/null || groupadd -r %spack_group %post # Replace /etc/spack/compilers.yaml export GCC_VERSION=`gcc -dumpversion` export GCC_FULL_VERSION=`gcc -dumpfullversion` sed -i "s@GCC_FULL_VERSION@$GCC_FULL_VERSION@" %{spack_dir}/etc/spack/compilers.yaml sed -i "s@GCC_FULL_VERSION@$GCC_FULL_VERSION@" %{spack_dir}/etc/spack/modules.yaml sed -i "s@GCC_VERSION@$GCC_VERSION@" %{spack_dir}/etc/spack/compilers.yaml if [ -e /etc/os-release ] ; then source /etc/os-release if [ "${ID}" == "opensuse-tumbleweed" ] ; then export SPACK_NAME="${ID/-/}" else export SPACK_NAME="${ID/-/_}${VERSION_ID/.*/}" fi sed -i "s@SUSE_VERSION@$SPACK_NAME@" %{spack_dir}/etc/spack/compilers.yaml sed -i "s@SUSE_VERSION@$SPACK_NAME@g" /etc/profile.d/spack.sh fi sed -i "s@HOSTTYPE@$HOSTTYPE@" %{spack_dir}/etc/spack/compilers.yaml %files %license COPYRIGHT LICENSE-APACHE LICENSE-MIT %doc CHANGELOG.md NOTICE README.md %{_bindir}/* %attr(0775, root, spack) %{_localstatedir}/lib/spack/junit-report %attr(0775, root, spack) %{spack_dir}/opt %attr(0775, root, spack) %{_localstatedir}/cache/spack %attr(0775, root, spack) %{_datarootdir}/spack/modules %{_prefix}/lib/spack %{_localstatedir}/cache/spack %{_localstatedir}/lib/spack %{_datarootdir}/spack %config %{_sysconfdir}/profile.d/spack.sh %config %{_sysconfdir}/profile.d/spack.csh %dir %{_sysconfdir}/skel/.spack %config %{_sysconfdir}/skel/.spack/config.yaml # repos directory is installed in -recipes %exclude %{_localstatedir}/lib/spack/repos %files recipes %license COPYRIGHT LICENSE-APACHE LICENSE-MIT %doc CHANGELOG.md NOTICE README.md %{_localstatedir}/lib/spack/repos %changelog