From 821edb31db61fdad7699917f7baccf8729e33a34d2f2fac03e61ffbf4eac7913 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Schr=C3=B6ter?= Date: Wed, 7 Jun 2023 08:40:38 +0200 Subject: [PATCH] Sync from SUSE:ALP:Source:Standard:1.0 suse-hpc revision 4a5e6c7355fe0035d04b4a02a1d4483a --- .gitattributes | 23 ++ LICENSE | 28 ++ _service | 23 ++ dlinfo.c | 27 ++ hpc_elf.attr | 5 + hpc_elf.pl | 93 ++++++ hpc_elflib.attr | 5 + macros.hpc | 792 +++++++++++++++++++++++++++++++++++++++++++++++ suse-hpc.changes | 235 ++++++++++++++ suse-hpc.spec | 64 ++++ 10 files changed, 1295 insertions(+) create mode 100644 .gitattributes create mode 100644 LICENSE create mode 100644 _service create mode 100644 dlinfo.c create mode 100644 hpc_elf.attr create mode 100644 hpc_elf.pl create mode 100644 hpc_elflib.attr create mode 100644 macros.hpc create mode 100644 suse-hpc.changes create mode 100644 suse-hpc.spec diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..eb89d5a --- /dev/null +++ b/LICENSE @@ -0,0 +1,28 @@ +Copyright © 2017 openSUSE Project + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/_service b/_service new file mode 100644 index 0000000..413a4a2 --- /dev/null +++ b/_service @@ -0,0 +1,23 @@ + + + git + https://github.com/openSUSE/hpc.git + no + .git + suse-hpc + 0.5.%cd.%h + 968c9cb1cc13f668529623cda4ec25af1495c7e0 + general/dlinfo.c + general/macros.hpc + general/hpc_elf.pl + general/hpc_elf.attr + general/hpc_elflib.attr + + + suse-hpc*.tar + gz + + + suse-hpc + + diff --git a/dlinfo.c b/dlinfo.c new file mode 100644 index 0000000..cfe3f3e --- /dev/null +++ b/dlinfo.c @@ -0,0 +1,27 @@ +#define _GNU_SOURCE +#include +#include +#include +#include + +int +main(int argc, char *argv[]) +{ + void *dlh; + struct link_map *linkmap; + + if (argc != 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + exit(EXIT_FAILURE); + } + + if ((dlh = dlopen(argv[1], RTLD_NOW)) == NULL) + exit(EXIT_FAILURE); + + if (dlinfo(dlh, RTLD_DI_LINKMAP, &linkmap) == -1) + exit(EXIT_FAILURE); + + printf("%s\n",linkmap->l_name); + + exit(EXIT_SUCCESS); +} diff --git a/hpc_elf.attr b/hpc_elf.attr new file mode 100644 index 0000000..e03d066 --- /dev/null +++ b/hpc_elf.attr @@ -0,0 +1,5 @@ +%__hpc_elf_provides %{_rpmconfigdir}/hpc_elf.pl --provides %{?__filter_GLIBC_PRIVATE:--filter-private} %{?hpc_dep_gen_attr} +%__hpc_elf_requires %{_rpmconfigdir}/hpc_elf.pl %{?_hpc_modules:--modules "%_hpc_modules"} --requires %{?__filter_GLIBC_PRIVATE:--filter-private} %{?hpc_dep_gen_attr} +%__hpc_elf_magic ^(setuid )?(setgid )?(sticky )?ELF (32|64)-bit.*executable +%__hpc_elf_path %hpc_prefix +%__hpc_elf_flags exeonly diff --git a/hpc_elf.pl b/hpc_elf.pl new file mode 100644 index 0000000..a068535 --- /dev/null +++ b/hpc_elf.pl @@ -0,0 +1,93 @@ +#! /usr/bin/perl + +use Cwd 'abs_path'; +use File::Basename; + +$dir=dirname(abs_path($0)); + + +$command=$dir . "/elfdeps"; +$dlinfo=$dir . "/dlinfo"; +$arglist = ""; + +sub usage { + my $message = <))) { + $line =~ /([^\(]+)(.*)/; + $libs{$1}{$2} = 1; +} + +foreach $lib ( keys %libs ) { + $full=`$dlinfo $lib`; + chop $full; + if (!$full) { + delete $libs{$lib}; + } elsif ( $ldlibrarypath ) { + $hpc = `LD_LIBRARY_PATH=$ldlibrarypath $dlinfo $lib`; + chop $hpc; + if ( $full ne $hpc) { + delete $libs{$lib}; + } + } +} +foreach $lib ( keys %libs ) { + foreach $key ( keys %{ $libs{$lib} } ) { + print "$lib$key\n"; + } +} + diff --git a/hpc_elflib.attr b/hpc_elflib.attr new file mode 100644 index 0000000..8a9926e --- /dev/null +++ b/hpc_elflib.attr @@ -0,0 +1,5 @@ +%__hpc_elflib_provides %{_rpmconfigdir}/hpc_elf.pl --provides --assume-exec %{?__filter_GLIBC_PRIVATE:--filter-private} %{?hpc_dep_gen_attr} +%__hpc_elflib_requires %{_rpmconfigdir}/hpc_elf.pl %{?_hpc_modules:--modules "%_hpc_modules"} --requires --assume-exec %{?__filter_GLIBC_PRIVATE:--filter-private} %{?hpc_dep_gen_attr} +%__hpc_elflib_magic ^(setuid )?(setgid )?(sticky )?ELF (32|64)-bit.*executable +%__hpc_elflib_path ^%hpc_prefix +%__hpc_elflib_flags exeonly diff --git a/macros.hpc b/macros.hpc new file mode 100644 index 0000000..678d775 --- /dev/null +++ b/macros.hpc @@ -0,0 +1,792 @@ +# If argument is non-empty print with a leading underscore +%_hpc_p %([ -n "%{?1}" ]&&echo -n _%{1}) +%hpc_package_name_tail() %{?hpc_ext}%{_hpc_p}%{hpc_package_name_end} +%hpc_package_name() %{pname}%{?hpc_ext}%{_hpc_p}%{hpc_package_name_end} + +# Paths +%hpc_base %{_prefix}/lib/hpc/ + +# For (non-mpi) libraries +%hpc_install_base %{hpc_base}%{?hpc_cf_dir}%{?hpc_mpi_dir} +%hpc_install_path_base %{hpc_install_base}%{pname}%{?hpc_ext}/ +%hpc_install_path %{hpc_install_path_base}%{version} + +# For compilers +%hpc_cf_install_base %{hpc_base}compiler/ +%hpc_cf_install_path_base %{hpc_cf_install_base}%{hpc_compiler_family}/ +%hpc_cf_install_path %{hpc_cf_install_path_base}%{hpc_cf_dep_version} + +# For mpi libraries +%hpc_mpi_install_base %{hpc_base}%{?hpc_cf_dir}mpi/ +%hpc_mpi_install_path_base %{hpc_mpi_install_base}%{hpc_mpi_family}%{?hpc_ext}/ +%hpc_mpi_install_path %{hpc_mpi_install_path_base}%{version} + +# Different paths - below HPC directory +%hpc_exec_prefix %{hpc_prefix} +%hpc_bindir %{hpc_prefix}/bin +%hpc_sbindir %{hpc_prefix}/sbin +%hpc_sysconfdir %{_sysconfdir} +%hpc_datadir %{hpc_prefix}/share +%hpc_includedir %{hpc_prefix}/include +%hpc_libdir %{hpc_prefix}/%{_lib} +%hpc_libexecdir %{hpc_prefix}/lib +%hpc_localstatedir %{_localstatedir} +%hpc_sharedstatedir %{_sharedstatedir} +# MANPATH +%hpc_mandir %{hpc_datadir}/man +%hpc_docdir %{hpc_datadir}/doc/packages +# INFOPATH +%hpc_infodir %{hpc_datadir}/info +# PKG_CONFIG_PATH +%hpc_pkgconfigdir %{hpc_libdir}/pkgconfig +%hpc_cmake_dir %{hpc_datadir}/cmake +%hpc_cmake_moddir %{hpc_cmake_dir}/Modules + +# pkgconfig +# %hpc_write_pkgconfig [-l ][-n ] +# -l : with -l option: -l . default: none +# -n : name of pkgconf file (without the trailing .pc) +# default: %pname +%_hpc_write_pkgconfig(l:n:) \ +%{!?_hpc_init_done: %{error: "%%_hpc_write_pkgconfig: Call %%hpc_init first!"}} \ +%{__mkdir_p} %{buildroot}/%{hpc_pkgconfigdir} \ +echo "writing %{buildroot}%{hpc_pkgconfigdir}/%{!-n:%{pname}}%{-n:%{-n*}}.pc" \ +%{__cat} << "EOF" > %{buildroot}%{hpc_pkgconfigdir}/%{!-n:%{pname}}%{-n:%{-n*}}.pc \ +prefix=%{hpc_prefix} \ +exec_prefix=%{hpc_exec_prefix} \ +libdir=%{hpc_libdir} \ +includedir=%{hpc_includedir} \ +sysconfdir=%{hpc_sysconfdir} \ +\ +Name: %pname \ +Description: %{SUMMARY} \ +Version: %version \ +Libs: -L${libdir} %{?-l:-l%{-l*}} \ +Cflags: -I${includedir} \ +EOF\ +%{nil} + +%hpc_write_pkgconfig(n:l:) %{expand:%%_hpc_write_pkgconfig %{**}} + +# %hpc_pkgconfig_file [-n ][-N] +# -n : pkgconfig file name (without trailing .pc) +# -N: don't list pkgconfig directory (used when this macro is used +# more than once per file). +%hpc_pkgconfig_file(n:N) \ +%{!-N:%dir %{hpc_pkgconfigdir}} \ +%{hpc_pkgconfigdir}/%{!-n:%{pname}}%{-n:%{-n*}}.pc + +%hpc_modulefile_add_pkgconfig_path prepend-path PKG_CONFIG_PATH %{hpc_pkgconfigdir} + +# +# Requires: +# + +# Compiler +%hpc_cf_requires %{expand:%{hpc_%{hpc_compiler_family}_requires}} +# Compiler devel packages +%hpc_cf_requires_devel %{expand:%{hpc_%{hpc_compiler_family}_requires_devel}} + +# MPI +%hpc_mpi_requires %{expand:%{hpc_%{hpc_mpi_family}_requires}} +# MPI devel packages +%hpc_mpi_requires_devel %{expand:%{hpc_%{hpc_mpi_family}_requires_devel}} + +# Base +%hpc_requires Requires: lua-lmod \ +%{?hpc_compiler_family:%{!?_hpc_build_compiler:%hpc_cf_requires}}\ +%{?hpc_mpi_family:%{!?_hpc_build_mpi:%hpc_mpi_requires}} + +# Devel +%hpc_requires_devel %{?hpc_compiler_family:%{!?_hpc_build_compiler:%hpc_cf_requires_devel}}\ +%{?hpc_mpi_family:%{!?_hpc_build_mpi:%hpc_mpi_requires_devel}} + +# +# General settings depending in compiler and mpi family +# + +# Init +# +# HCP init: Call everywhere where this framework is used. +# %hpc_init [-C|-M] -c [-v ] -m [-V ] +# -C: build a compiler. +# -c : set compiler family to (mandatory) +# -v : set compiler version to (optional - default: base version) +# -M: build an MPI library: -C and -M are mutually exclusive! +# -m: : set MPI family to +# -V: : set MPI version to (optional - default:) +# -e: : program name extension +%_hpc_init(Cc:Mm:v:V:e:)\ + %global hpc_base %{expand:%hpc_base} \ + %{-m:%{!-c:%{error: Cannot est MPI family without compiler}}} \ + %{-c:%{expand: %%global hpc_compiler_family %{-c*}}} \ + %{-m: %{expand: %%global hpc_mpi_family %{-m*}}} \ + %{!-m:%{-V:%{error: MPI version sepecified but no MPI family}}} \ + %{-C:%{-M:%{error: Don't build both compiler and MPI!}}} \ + %{-c:%{echo: Building for %hpc_compiler_family %{-v:version %{-v*}}}} \ + %{!?pname:%{error: No package name given! Set %%pname before calling %%hpc_init }} \ + %{-e:%{expand: %%global hpc_ext -%{-e*}}} \ + %if %{defined hpc_compiler_family} \ + %if %{defined hpc_%{expand:%{hpc_compiler_family}}_init} \ +# -v passed onto here \ + %{expand:%%{hpc_%{expand:%{hpc_compiler_family}}_init %{-v}}} \ + %endif \ + %endif \ + %if %{defined hpc_mpi_family} \ + %if %{defined hpc_%{expand:%{hpc_mpi_family}}_init} \ +# -V passed onto here \ + %{expand:%%{hpc_%{expand:%{hpc_mpi_family}}_init %{-V}}} \ + %endif \ + %endif \ +# No further expansion needed, thus no %%{expand:..} \ + %{-C:%global _hpc_build_compiler 1} \ + %{-M:%global _hpc_build_mpi 1} \ +# \ +# Compiler \ + %{?hpc_compiler_family: \ + %{expand: %%global hpc_cf_full_version %%{hpc_%{hpc_compiler_family}_full_version}} \ +# Version for module directories \ + %{expand: %%global hpc_cf_dep_version %%{hpc_%{hpc_compiler_family}_dep_version}} \ +# Version extension on binaries \ + %{expand: %%global hpc_cf_bin_version %%{hpc_%{hpc_compiler_family}_bin_version}} \ +# Version number on package \ + %{expand: %%global hpc_cf_pack_version %%{hpc_%{hpc_compiler_family}_pack_version}} \ + %{expand: %%global hpc_cf_dir %{?hpc_compiler_family:%%{hpc_%{hpc_compiler_family}_dir}/}} \ + } \ +# \ +# MPI \ + %{?hpc_mpi_family: \ + %global hpc_mpi_dep_version %{?hpc_mpi_family:%%{hpc_%{hpc_mpi_family}_dep_version}} \ + %global hpc_mpi_dir %{?hpc_mpi_family:%%{hpc_%{hpc_mpi_family}_dir}/} \ + %global hpc_mpi_pack_version %{?hpc_mpi_family:%%{hpc_%{hpc_mpi_family}_pack_version}} \ + } \ +# Preexpanded macros \ + %{expand: %%global hpc_prefix %{-M:%hpc_mpi_install_path}%{-C:%hpc_cf_install_path}%{!-M:%{!-C:%{hpc_install_path}}}} \ + %{?_hpc_build_mpi:%global _hpc_build_xx 1} \ + %{?_hpc_build_compiler:%global _hpc_build_xx 1} \ + %{!?hpc_compiler_family:%global _hpc_build_xx 1} \ + %define _hpc_package_name_compiler %{?hpc_compiler_family:-%{hpc_compiler_family}%{?hpc_cf_pack_version}} \ + %define _hpc_package_name_mpi %{?hpc_mpi_family:%{!?_hpc_build_mpi:-%{hpc_mpi_family}%{?hpc_mpi_pack_version}}} \ + %global hpc_package_name_end %{_hpc_package_name_compiler}%{_hpc_package_name_mpi}-hpc \ +# Dependency Generator \ + %global tmp %__elf_exclude_path \ + %global __elf_exclude_path (%tmp)|(^%hpc_base) \ + %undefine tmp \ + %{?__elflib_exclude_path: \ + %global tmp %{__elflib_exclude_path}} \ + %global __elflib_exclude_path %{?tmp:(%{tmp})|}(^%hpc_base) \ + %undefine tmp \ + %{expand:%([ 0%{?sle_version} -ge 150000 -o 0%{?suse_version} -gt 1500 ] && echo %%global _hpc_python3 1)} \ + %global _hpc_init_done 1 + +%hpc_init(Cc:Mm:v:V:e:) %{expand:%%_hpc_init %{**}} + +# +# Environment Modules +# +%hpc_mpi_family_path %{?hpc_mpi_family:-%{hpc_mpi_family}%([ -n "%{hpc_mpi_dep_version}" ] && \ + echo -n "-%{hpc_mpi_dep_version}")} + +%hpc_compiler_family_path %{?hpc_compiler_family:%{hpc_compiler_family}-%{hpc_cf_dep_version}} + +# Used for MPI library build to create the module install directory for MPI dependent libs. +%hpc_module_dep_install %{lua_lmod_moduledeps}/%{hpc_compiler_family_path}%{?hpc_mpi_family_path} + +# Install path base for the module file of the current package +%_hpc_module_base %{!?compiler_family:%{lua_lmod_modulesdir}}%{?compiler_family:%{?_hpc_build_compiler:%{lua_lmod_modulesdir}}%{!?_hpc_build_compiler:%{lua_lmod_moduledeps}}/} +%hpc_module_dep_path %{_hpc_module_base}%{hpc_compiler_family_path}%{!?_hpc_build_mpi:%{?hpc_mpi_family_path}} + +# install the module file here. If the default path (according to +# hpc_cf_family and hpc_mpi_family should not be used, pass trailing path +# element as argument. Do not use for compiler! +%hpc_module_dep_base %{hpc_module_dep_path}/%{hpc_module_pname}%{?hpc_ext}/ + +# This can be overridden in the spec file. +%hpc_module_pname %pname + +# Modules init: Set up modules required for building +# %hpc_modules_init +# : list of modules (exclude compiler and MPI library). +# May be empty if only compiler and MPI library are needed. +%hpc_modules_init() \ + %{!?_hpc_init_done: %{error: "%%hpc_setup_compiler: Call %%hpc_init first!"}} \ + %{?*:%global _hpc_modules_other %{**}} \ + %global _hpc_modules %{?hpc_compiler_family:%{expand:%%{?%{expand:_hpc_%{hpc_compiler_family}_module}}}} %{?hpc_mpi_family:%{expand:%%{?%{expand:_hpc_%{hpc_mpi_family}_module}}}} %{?_hpc_modules_other} + +%hpc_setup_compiler \ + %{!?_hpc_init_done: %{error: "%%hpc_setup_compiler: Call %%hpc_init first!"}} \ + module purge \ + %{?hpc_compiler_family:%{expand:%{hpc_setup_%{hpc_compiler_family}}}} + +%hpc_setup_mpi \ + %{?hpc_mpi_family:%{expand:%{hpc_setup_%{hpc_mpi_family}}}} + +%hpc_setup \ + %hpc_setup_compiler \ + %{!?_hpc_build_mpi:%hpc_setup_mpi} \ + %{?_hpc_modules_other:[ -n "%{?_hpc_modules_other}" ] && module load %_hpc_modules_other} + +# delete default in %postun +%hpc_module_delete_if_default \ + _tmp=$(readlink -f %{hpc_module_dep_base}.version) && \\\ + test "$_tmp" = "$(readlink -f %{hpc_module_dep_base}.version.%{version})" \\\ + -o "x" = "x$(readlink -e %{hpc_module_dep_base}.version)" && \\\ + rm -f %{hpc_module_dep_base}.version || exit 0 + +# +%hpc_write_modules_version_file \ +echo "Writing %{buildroot}%{hpc_module_dep_base}.version.%{version}" \ +%{__cat} << EOF > %{buildroot}%{hpc_module_dep_base}.version.%{version} \ +#%%Module1.0#####################################################################\ +##\ +## version file for %{pname}-%{version}\ +##\ +set ModulesVersion "%{version}"\ +EOF\ +%nil + +# +%hpc_make_modules_dir mkdir -p %{buildroot}%{hpc_module_dep_base} + +# Write modules files +# %hpc_make_modules_extra can be defined by domain specific macros such as %hpc_python_master_package +# or in the specfile in order to provide a hook for creating extra module files. +%hpc_write_modules_files \ +%{?_hpc_build_mpi:mkdir -p %{buildroot}%{hpc_install_base}} \ +%hpc_make_modules_dir \ +%{?hpc_make_modules_extra} \ +%{?_hpc_build_xx:mkdir -p %{buildroot}%{hpc_module_dep_install}} \ +%hpc_write_modules_version_file \ +echo "Writing %{buildroot}%{hpc_module_dep_base}%{version}"; \ +sed -e '/#%%Module1.0.*/b 1;1s/\(.*\)/#%%Module1.0\n\1/;:1' << EOF\\\ + > %{buildroot}%{hpc_module_dep_base}%{version} + +%hpc_modulepath %{?_hpc_build_xx:%{hpc_module_dep_install}}%{!?_hpc_build_xx:%{hpc_module_dep_path}} + +# For files section: +## Modules Files +# %hpc_module_extra can be defined by domain specific macros such as %hpc_python_master_package or in +# the specfile in order to provide a hook for registering extra files made by %hpc_make_modules_extra +%hpc_modules_files \ +%{?_hpc_build_xx:%{hpc_module_dep_install}} \ +%dir %{hpc_module_dep_base} \ +%{hpc_module_dep_base}/.version.%{version} \ +%{hpc_module_dep_base}/%{version} \ +%{?hpc_module_extra} + +# Compilers - use in library package when building compilers +%hpc_cf_dirs \ +%dir %hpc_cf_install_base \ +%dir %hpc_cf_install_path_base \ +%dir %hpc_cf_install_path + +# mpi libraries - use in library package when building mpi libraries +%hpc_mpi_dirs \ +%dir %{hpc_install_base} \ +%dir %hpc_mpi_install_base \ +%dir %hpc_mpi_install_path_base \ +%dir %hpc_mpi_install_path + +# base dir path only +%hpc_base_dirs \ +%{!?hpc_compiler_family:%dir %{hpc_install_base}} \ +%dir %{hpc_install_path_base} \ +%dir %{hpc_install_path} + +# serial and parallel libraries - use in library package +%hpc_dirs \ +%{hpc_base_dirs} \ +%dir %{hpc_libdir} + +# +# Autotools +# + +%hpc_configure \ + %{!?_hpc_init_done: %{error: "%%hpc_configure: Call %%hpc_init first!"}} \ + CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; \ + CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ; \ + FFLAGS="${FFLAGS:-%optflags}" ; export FFLAGS ; \ + %{_configure} --host=%{_host} --build=%{_build} \\\ + %{?_program_prefix:--program-prefix=%{_program_prefix}} \\\ + --disable-dependency-tracking \\\ + --prefix=%{hpc_prefix} \\\ + --exec-prefix=%{hpc_exec_prefix} \\\ + --bindir=%{hpc_bindir} \\\ + --sbindir=%{hpc_sbindir} \\\ + --sysconfdir=%{hpc_sysconfdir} \\\ + --datadir=%{hpc_datadir} \\\ + --includedir=%{hpc_includedir} \\\ + --libdir=%{hpc_libdir} \\\ + --libexecdir=%{hpc_libexecdir} \\\ + --localstatedir=%{hpc_localstatedir} \\\ + --sharedstatedir=%{hpc_sharedstatedir} \\\ + --mandir=%{hpc_mandir} \\\ + --infodir=%{hpc_infodir} + +# +# Debugging +# + +# %hpc_debug [-x] +# -x: exit with a non-zero exit code. This will stop the build and keep the +# generated script file around. +# +%hpc_debug(x) \ + echo "Package name %{name} for %{pname} %{?hpc_ext: ext: %{hpc_ext}}" \ + %{?_hpc_build_compiler: echo "Building Compiler"} \ + %{?_hpc_build_mpi: echo "Building MPI lib"} \ + echo %nil \ + %if %{defined hpc_compiler_family} \ + echo Building for compiler family: %{hpc_compiler_family} \ + echo cf_full_version: %{hpc_cf_full_version} \ + echo cf_dep_version: %{hpc_cf_dep_version} \ + echo cf_bin_version: %{hpc_cf_bin_version} \ + echo cf_pack_version: %{hpc_cf_pack_version} \ + echo cf_dir: %{hpc_cf_dir} \ + echo cf_install_path: %{hpc_cf_install_path} \ + echo cf_install_path_base: %{hpc_cf_install_path_base} \ + echo %nil \ + %endif \ + %if %{defined hpc_mpi_family} \ + echo "Building with MPI family support for %{hpc_mpi_family}" \ + echo hpc_mpi_dep_version: %hpc_mpi_dep_version \ + %{?hpc_mpi_pack_version: echo hpc_mpi_pack_version: %hpc_mpi_pack_version} \ + echo hpc_mpi_family_path: %hpc_mpi_family_path \ + echo hpc_mpi_dir: %{hpc_mpi_dir} \ + echo %nil \ + %endif \ + echo hpc_prefix: %{hpc_prefix} \ + echo hpc_module_dep_path: %{hpc_module_dep_path} \ + echo %nil \ + %{-x:exit 1} + +# +# Create 'master' package: packages which have the built package as +# dependency. This way, the latest version of a library can be installed +# without knowing its version number. +# The dependent library package will be kept around when an update to +# this package pulls in a new version of the dependent library, because +# these libraries also carry the version number of their names and +# don't conflict with an earlier version. +# %hpc_master_package [-n ][-g ][-s# <.so-version>][-l][-L][-N ][-O ][-P +# -n : specify the full package name. This may not be used in conjunction with +# the package name extension . +# -g : Specify the group to use. +# -s <.so-version>: If this is a dependency for a library package, specify the +# .so version. This will cause the package name to be prepended with +# `lib`. This should not be used together with -l. +# -l: mark a library package, prepend the package name with a `lib` (like -s +# but without an explicite so version. Do not use -l and -s together. +# -L: Create a link from the .version. file to the .version file +# to mark the default version. To undo, add %hpc_module_delete_if_default +# to the package the master is created for. +# -a: Use native arch even if no library package. +# -N : Specify if a sub-package has different basename (pname) +# -q: For internal use only! +# -M: use specified name in place of %%name +# -O : Add Provides/Obsoletes for package with +# version %version, multiple names may be separated by ":" +# -P : Add Provides/Obsoletes with %version-%release for package +# names derived from the master package name, replacing with +# the contents of %_provides. Used for python packages in order +# to provide the extra python3 flavor by the package for the current +# primary interpreter. The argument can be used in general as well: +# If your package is called 'foo-bar' with version and release 0.1-2, you +# `%define foo_provides fooA abc123`, and call +# `%hpc_master_package -P foo`, then the package will have +# 'Provides: fooA-bar = 0.1-2', 'Provides: abc123-bar = 0.1-2', and the +# respective 'Obsoletes:' tags. +# -E: create an 'empty' master package with no requires. This allows to +# keep the macro package around for compatibility even if the underlying +# package has been removed. +# +%hpc_master_package(n:g:s:lLaqN:M:O:P:E) \ + %define _mylib %{-s:lib}%{!-s:%{-l:lib}} \ + %define _p_ext %(test -n "%{*}" && echo -%{*}) \ + %{-M: \ %define name %{-M*}} \ + %{!-N:\ + %define _pname %{pname} \ + %define _name %{name} \ + } \ + %{-N:\ + %define _pname %{-N*} \ + %define _name %(echo %{name} | sed -e "s/%{pname}/%{_pname}/") \ + } \ + %{-n:%define _lname %{-n*}} \ + %{!-n:\ + %define _lname_cf %{?compiler_family:-%{hpc_compiler_family}%{?hpc_cf_pack_version}} \ + %define _lname_mpi %{!?_hpc_build_mpi:%{?hpc_mpi_family:-%{hpc_mpi_family}%{?hpc_mpi_pack_version}}} \ + %define _lname_build_mpi_name %{?_hpc_build_mpi:%{hpc_mpi_family}%{?hpc_ext}%{?hpc_mpi_pack_version}} \ + %define _lname_name %{!?_hpc_build_mpi:%{_pname}%{?hpc_ext}%{-s*}} \ + %define _lname_header %{_mylib}%{_lname_build_mpi_name}%{_lname_name} \ + %define _lname %{_lname_header}%{_lname_cf}%{_lname_mpi}-hpc%{_p_ext} \ + }\ +%{-q:%(echo -n %{_lname}; true %{_mylib} %{_p_ext})} \ +%{!-q:\ + %{-g:%define _group %{-g*}} \ + %{!-g: \ + %define _group %(lname=%_lname; \ + case $lname in \ + (*-devel|*-devel-static) \ + echo -n "Development/Libraries/%{?hpc_mpi_family:Parallel}%{!?hpc_mpi_family:C and C++}" ;; \ + (*) \ + if [ -n "%_mylib" ] \ + then \ + echo -n System/Libraries \ + else \ + echo -n Productivity/Scientific/Other \ + fi ;; esac)\ + } \ + %{!-s:%define n_name %_name} \ + %{-s:%define n_name %(a=%{_name};echo -n ${a/%{_pname}/%{_pname}%{-s*}})} \ + %{!-s:%define s_name %{_mylib}%{n_name}%{_p_ext}} \ + %{-s:%define s_name %(echo -n %{_mylib}%{_name}%{_p_ext} | sed -e "s/\\\\(.*%{_pname}\\\\)\\\\(.*\\\\)/\\\\1%{-s*}\\\\2/")} \ +%package -n %_lname \ +Summary: Dependency package for %{s_name} \ +Group: %_group \ +Obsoletes: %_lname < %version \ +%{-O:%(\ + v=%{-O*}; \ + for i in ${v//:/ }; \ + do echo "Obsoletes: $i < %version"; \ + echo "Provides: $i = %version"; \ + done)\ +} \ +%{-P:%(\ + prefix=%{-P*}; \ + lname=%{_lname}; \ + for extra in %{expand:%%{?%{-P*}_provides}}; do \ + provided_extra=${lname/$prefix/$extra}; \ + echo "Provides: ${provided_extra} = %{version}-%{release}"; \ + echo "Obsoletes: ${provided_extra} < %{version}-%{release}"; \ + done)\ +} \ +%{!-E:Requires: %{s_name} = %version} \ +%{!-l:%{!-s:%{!-a:BuildArch: noarch}}} \ +%description -n %_lname \ +%{pname}: %{SUMMARY} \ +The package %{_lname} provides the dependency to get binary package %{s_name}. \ +When this package gets updated it installs the latest version of %name. \ +%{-L:%posttrans -n %_lname \ + [ -e %{hpc_module_dep_base}.version.%{version} ] && \\\ + ln -sf .version.%{version} %{hpc_module_dep_base}.version} \ +%files -n %{_lname} \ +%defattr(-,root,root)\ + %define _msg '%{pname}: %{SUMMARY}.\\\\nProvide the dependency to get binary package %{s_name}.\\\\nWhen this package gets updated it installs the latest version of %{pname}.' \ + %define _readme README.%{_mylib}%{_name}%{_p_ext} \ + %define _tmpexec %(tmp=$(mktemp /tmp/scr-XXXXXX); \ + readme=%{_readme} \ + echo "#!/bin/bash" > $tmp; \ + echo "echo -e %_msg \> $readme && rm -f $tmp || true" >> $tmp; \ + chmod u+x $tmp; echo -n $tmp) \ +%doc $(%_tmpexec)./%{_readme} \ +} \ +%{nil} + +## +# Functions +## +%hpc_upcase() %(echo %{**} | tr [a-z] [A-Z]) +%hpc_PNAME() %(echo %{**} | tr [a-z-] [A-Z_]) + +## +# Macros specific for python packages +## +%_hpc_python_sysconfig_path() %(%1 -c "import sysconfig as s; \\\ + print(s.get_paths(%{?3:vars={'platbase':\\"%3\\", 'base' : \\"%3\\"}}).get('%2'));") + +# get the python version specific directory for arch specific files in the HPC +# directory structure (singlepsec). +# python_sitearch equivalent - for arch specific python modules +%hpc_python_sitearch %{_hpc_python_sysconfig_path %{expand:%__%{python_flavor}} platlib %{?hpc_prefix}} +# python_sitelib equivalent - for arch independent python modules +%hpc_python_sitelib %{_hpc_python_sysconfig_path %{expand:%__%{python_flavor}} purelib %{?hpc_prefix}} + +# same for non-singlespec (using internal %%_hpc_python3) +%hpc_python_sitearch_no_singlespec %{_hpc_python_sysconfig_path %{?_hpc_python3:/usr/bin/python3}%{!?_hpc_python3:%{expand:%__%{python_flavor}}} platlib %{?hpc_prefix}} +%hpc_python_sitelib_no_singlespec %{_hpc_python_sysconfig_path %{?_hpc_python3:/usr/bin/python3}%{!?_hpc_python3:%{expand:%__%{python_flavor}}} purelib %{?hpc_prefix}} + +%_hpc_python_ver() %(%1 -c "import sysconfig as s; print(s.get_config_var('py_version_short'));") + +# get the (abbreviated) python version used for package and directory names (singlespec). +%hpc_python_version %{_hpc_python_ver %{expand:%__%{python_flavor}}} + +# %{hpc_python_master_package [-n ] [-g ] [-l][-L][-a]} +# (singlespec) +# -n: specify a package name +# -g: specify a group name +# -l: mark the package as library package +# -L: (for environment modules) create a link from the +# `.version.` file to the `.version`-file to +# mark the default version. +# -a: mark package as architecture dependent +%hpc_python_master_package(n:g:lLa) \ +%{?_python_macro_init} \ +%{lua: \ + if _hpc_python_master_package_inited ~= true then \ + _hpc_python_package_list = {} \ + _hpc_python_master_package_inited = true \ + end \ + local arg_list = "" \ + local function add_args (a, opt) \ + if a ~= "" then \ + if arg_list ~= "" then arg_list = arg_list .. " " end \ + if opt ~= nil then arg_list = arg_list .. opt .. " " end \ + arg_list = arg_list .. a \ + end \ + end \ + local n_arg = rpm.expand("%{-n*}") \ + local g_arg = rpm.expand("%{-g*}") \ + local l_arg = rpm.expand("%{?-l:-l}") \ + local L_arg = rpm.expand("%{?-L:-L}") \ + local a_arg = rpm.expand("%{?-a:-a}") \ + local other_arg = rpm.expand("%{*}") \ + local pname = rpm.expand("%pname") \ + local name = rpm.expand("%name") \ + local python_flavor = rpm.expand("%python_flavor") \ + -- io.stderr:write("n_arg "..n_arg.."\\n") \ + if n_arg ~= "" then \ + n_arg=n_arg:gsub("^(%w+)python%-(.*)","%1"..python_flavor.."-%2") \ + -- io.stderr:write("n_arg modfied "..n_arg .."\\n") \ + end \ + local n_pname = pname:gsub("^python", python_flavor,1) \ + local n_name = name:gsub("^python", python_flavor,1) \ + rpm.define("pname "..n_pname) \ + rpm.define("name "..n_name) \ + add_args (g_arg, "-g") \ + add_args (n_arg, "-n") \ + add_args (l_arg) \ + add_args (L_arg) \ + add_args (a_arg) \ + add_args (other_arg) \ + add_args (python_flavor, "-P") \ + -- io.stderr:write("pname "..rpm.expand("%pname").."\\n") \ + -- io.stderr:write(rpm.expand("%{hpc_master_package " .. arg_list .."}").."\\n") \ + -- io.stderr:write(rpm.expand("%{hpc_master_package " .. arg_list .." -q}"):gsub("%s","").."\\n") \ + local package = rpm.expand("%{hpc_master_package " .. arg_list .." -q}"):gsub("%s","") \ + if package ~= "" then \ + -- check if we have seen this package before. Since we will not have an empty files section \ + -- skip it entirely! \ + if _hpc_python_package_list[package] == true then \ + rpm.define("pname " .. pname) \ + rpm.define("name " .. name) \ + return \ + else \ + _hpc_python_package_list[package] = true \ + end \ + end \ + -- io.stderr:write(">>> "..package.."\\n") \ + io.stderr:write("pname "..rpm.expand("%pname").."\\n") \ + io.stderr:write("%{hpc_master_package " .. arg_list .. "}\\n\\n") \ + print(rpm.expand("%{hpc_master_package " .. arg_list .. "}") .."\\n") \ + rpm.define("pname " .. pname) \ + rpm.define("name " .. name) \ + -- io.stderr:write("pname "..rpm.expand("%pname").."\\n\\n") \ + if rpm.expand("%{?hpc_make_modules_extra}") == "" then \ + rpm.define("hpc_make_modules_extra %hpc_make_modules_extra_python") \ + end \ + if rpm.expand("%{?hpc_module_extra}") == "" then \ + rpm.define("hpc_module_extra %hpc_module_extra_python") \ + end \ +} + +# For python packages, %hpc_write_modules_files is called inside %python_expand. +# https://github.com/openSUSE/python-rpm-macros#flavor-expansion +# Provide modules for extra flavors if the expanded flavor has _provides defined, +# such as the primary python flavor providing "python3". +%hpc_make_modules_extra_python \ +if [ -n "%%{?$python_provides}" ]; then \ + targetdir=%{hpc_module_dep_base} \ + targetdir=${targetdir%%%%/} \ + for extra in %%{?$python_provides}; do \ + ln -sf $targetdir %{buildroot}${targetdir/${python_flavor:-$(cat _current_flavor)}/$extra} \ + done \ +fi + +%hpc_module_extra_python \ +%{lua: \ +local pyflavor = rpm.expand("%python_flavor") \ +for extra in rpm.expand("%{?" .. pyflavor .. "_provides}"):gmatch("%S+") do \ + print(rpm.expand("%hpc_module_dep_base"):gsub(pyflavor, extra):sub(1,-2) .. "\\n") \ +end \ +} + +# %hpc_shebang_sanitize_scripts +# +# find all scripts in and below and sanitize any #!/usr/bin/env .. +%hpc_shebang_sanitize_scripts() \ + for file in $(find %{1} -type f); do \ + line=$(head -1 $file) \ + if [[ $line =~ \\#\\!.*bin/env ]]; then \ + newline="" \ + case $line in \ + *python3) newline='#! /usr/bin/python3' ;; \ + %{!?_hpc_python3: \ + *python2) newline='#! /usr/bin/python2' ;; \ + *python1*) { %{hpc_verify_python3 $file}; } && \ + newline='#! /usr/bin/python3' || : ;; \ + *python) newline='#! /usr/bin/python' ;; } \ + %{?_hpc_python3: \ + *python2|*python1*|*python) \ + { %{hpc_verify_python3 $file}; } && \ + newline='#! /usr/bin/python3' || : ;; }\ + *perl) newline='#! /usr/bin/perl' ;; \ + *bash) newline='#! /bin/bash' ;; \ + *tcsh) newline='#! /usr/bin/bash' ;; \ + *csh) newline='#! /usr/bin/csh' ;; \ + *ksh) newline='#! /usr/bin/ksh' ;; \ + *) echo "hpc_cleanup_scripts: \"$line\" found - leaving untouched" >&2 ;;\ + esac; \ + [ -n "$newline" ] && sed -i "1s,^.*,${newline}\\n," $file \ + fi \ + done + +# %hpc_shebang_remove +# +# remove any leading shebang (#!..) lines from +%hpc_shebang_remove() \ + while true; do \ + line=$(head -1 %{1}) \ + if [[ $line =~ \\#\\!.* ]]; then \ + sed -i "1d" %{1}; \ + else \ + break \ + fi \ + done + +# %hpc_shebang_prepend_list [ -n ] +# +# prenpend a matching shebang, unless explicitely specified +# using the -n option, it is determined by the file +# 'extend'. Known types are: sh, csh, pl, py, awl, lua +# the execute bit are also set. +%hpc_shebang_prepend_list(n:) \ + unset _hpc_engine \ + %{-n:_hpc_shebang=%{-n*}} \ + _hpc_files="%{*}" \ + for file in $_hpc_files; do \ + [ -n "$_hpc_engine" ] || _hpc_engine=${file##*.} \ + if [ -n "$_hpc_engine" ]; then \ + unset _hpc_newline \ + case "$_hpc_engine" in \ + sh) _hpc_newline='#! /bin/bash';; \ + csh) _hpc_newline='#! /usr/bin/csh';; \ + pl) _hpc_newline='#! /usr/bin/perl' ;; \ + py) _hpc_newline='#! /usr/bin/python%{?_hpc_python3:3}' ;; \ + awk) _hpc_newline='#! /usr/bin/awk -f' ;; \ + lua) _hpc_newline='#! /usr/bin/lua' ;; \ + *) echo "Unknown file type $_hpc_engine" ;; \ + esac \ + if [ -n "$_hpc_newline" ]; then \ + line=$(head -1 $file) \ + if [[ $line =~ \\#\\!.* ]]; then \ + true \ + else \ + sed -i -e "1s;^;$_hpc_newline\\n;" $file; \ + fi \ + chmod a+x $file \ + fi \ + fi \ + done + +# %hpc_python_mv_to_sitearch [] +# +# move to python sitearch subdir if set, remove shebang +# lines and remove any excecute permissions. +# This should be done on any python files that do not contain +# any executable code. +%hpc_python_mv_to_sitearch() \ + _hpc_pydir=%{hpc_python_sitearch_no_singlespec}%{?2:/%{2}} \ + _hpc_base=$(basename %{1}) \ + [ -d %{buildroot}/$_hpc_pydir ] || mkdir -p %{buildroot}/${_hpc_pydir} \ + mv %{buildroot}%{1} %{buildroot}/${_hpc_pydir} \ + [[ "$_hpc_base" =~ .*\.so ]] || chmod a-x %{buildroot}/$_hpc_pydir/$_hpc_base \ + %{hpc_shebang_remove %{buildroot}/$_hpc_pydir/$_hpc_base} + +# %hpc_verify_python3 +# +# verify that code in is valid python 3 +%hpc_verify_python3() \ + /usr/bin/python3 -c "import sys, ast\ +file=sys.argv[1]\ +try:\ + ast.parse(open(file).read()) or sys.exit(1)\ +except SyntaxError:\ + sys.exit(1) \ +sys.exit(0)" %{1} + +# +# man pages +# +# %{hpc_compress_man } compress man page in %hpc_mandir/man +%hpc_compress_man() \ + [ -n "%{*}" ] || { echo "no man page list!" >&2 ; exit 1; } \ + for j in %{*}; do \ + for i in $(ls %{buildroot}%{hpc_mandir}/man${j}/*.${j}* | grep -v ".*\.gz$"); \ + do \ + test -L $i && continue \ + gzip $i \ + done; \ + done + +# wraps macro from macros.cmake - paths replaced by HPC paths. +%hpc_cmake \ + %{!?cmake:%{error: please include macros.cmake}} \ + %{?cmake: \ + %global __cmake %{_bindir}/cmake \ + %define _bindir %{hpc_bindir} \ + %define _datadir %{hpc_datadir} \ + %define _includedir %{hpc_includedir} \ + %define _infodir %{hpc_infodir} \ + %define _libdir %{hpc_libdir} \ + %define _libexecdir %{hpc_libexecdir} \ + %define _mandir %{hpc_mandir} \ + %define _prefix %{hpc_prefix} \ + %define _sbindir %{hpc_sbindir} \ +#Do NOT define _sysconfig to %%hpc_sysconfig here! + %cmake \\\ + %undefine __cmake \\\ + %undefine _bindir \\\ + %undefine _datadir \\\ + %undefine _includedir \\\ + %undefine _infodir \\\ + %undefine _libdir \\\ + %undefine _libexecdir \\\ + %undefine _mandir \\\ + %undefine _prefix \\\ + %undefine _sbindir \\\ + } + +# wraps macro from macros.meson - paths replaced by HPC paths. +%hpc_meson \ + %{!?meson:%{error: please include macros.meson}} \ + %{?meson: \ + %global __meson %{_bindir}/meson \ + %define _bindir %{hpc_bindir} \ + %define _datadir %{hpc_datadir} \ + %define _includedir %{hpc_includedir} \ + %define _infodir %{hpc_infodir} \ + %define _libdir %{hpc_libdir} \ + %define _libexecdir %{hpc_libexecdir} \ + %define _localstatedir %{hpc_localstatedir} \ + %define _mandir %{hpc_mandir} \ + %define _prefix %{hpc_prefix} \ + %define _sbindir %{hpc_sbindir} \ + %define _sharedstatedir %{hpc_sharedstatedir} \ + %define _sysconfdir %{hpc_sysconfdir} \ + %meson \\\ + %undefine __meson \\\ + %undefine _bindir \\\ + %undefine _datadir \\\ + %undefine _includedir \\\ + %undefine _infodir \\\ + %undefine _libdir \\\ + %undefine _libexecdir \\\ + %undefine _localstatedir \\\ + %undefine _mandir \\\ + %undefine _prefix \\\ + %undefine _sbindir \\\ + %undefine _sharedstatedir \\\ + %undefine _sysconfdir \\\ + } diff --git a/suse-hpc.changes b/suse-hpc.changes new file mode 100644 index 0000000..5da1488 --- /dev/null +++ b/suse-hpc.changes @@ -0,0 +1,235 @@ +------------------------------------------------------------------- +Mon May 1 07:43:38 UTC 2023 - Egbert Eich + +- Do not redefine _localstatedir and _sharedstatedir for cmake: + hpc_localstatedir and hpc_sharedstatedir are already the + same. This may lead to a endless recursive definition loop. +- Create header magic for module file if none is specified in + spec file. + +------------------------------------------------------------------- +Wed May 25 05:56:07 UTC 2022 - Egbert Eich + +- Add %hpc_base_dirs macro + In contrast to %hpc_dirs which also includes the library directory + this only provides the HPC base directories. + +------------------------------------------------------------------- +Sun Feb 6 15:55:41 UTC 2022 - Egbert Eich + +- Add %hpc_python_sitelib and %hpc_python_sitelib_no_singlespec + to get arch independent module directories for modules. + +------------------------------------------------------------------- +Wed Jan 5 16:00:53 UTC 2022 - Ben Greiner + +- Update to version 0.5.20211210.07cc46c + * support python 3.10 version string (#8) +- Update _service to save git date and hash to version + +------------------------------------------------------------------- +Sat Oct 23 09:08:29 UTC 2021 - Egbert Eich + +- Cope with the fact that RPM 4.17 no longer has + __elflib_exclude_path defined. + Thanks to Dominique Leuenberger for + spotting this! + +------------------------------------------------------------------- +Mon Mar 15 07:58:32 UTC 2021 - Egbert Eich + +- Add hooks for extra module files and master packages to + accomodate support for multiple python3 flavors (thanks to + Ben Greiner). +- Made sure, these macros are backward compatible to Leap 15. + +------------------------------------------------------------------- +Mon Jan 18 17:20:57 UTC 2021 - Egbert Eich + +- Expand python_flavor to python executable. Thanks to Ben Greiner. + +------------------------------------------------------------------- +Thu Jul 23 17:42:34 UTC 2020 - Egbert Eich + +- Fix %%hpc_base during hpc_init to allow for changes to %%_prefix. + +------------------------------------------------------------------- +Thu May 7 21:50:13 UTC 2020 - Egbert Eich + +- Fix typo in shell script variable. + +------------------------------------------------------------------- +Mon Apr 27 06:58:20 UTC 2020 - Egbert Eich + +- Add 'Obsolete:' option to master package. This way, a removed + master package may be declared obsolte. +- Allow 'Empty' package - without a 'Requires:' to keep master + package for backward compatibility. + +------------------------------------------------------------------- +Wed Feb 6 07:08:30 UTC 2019 - eich@suse.com + +- macros.hpc: Fix default moduleversion link generation and deletion + * Generation: convert to a posttrans script to make sure the link + target exists. + * Deletion: Fix paths and line endings. + (bsc#1124509) +- macros.hpc: Improve documentation for -L option in %%hpc_master macro. +- macros.hpc: Improve master package description and README message. + +------------------------------------------------------------------- +Mon Jan 7 15:44:07 UTC 2019 - eich@suse.com + +- Remove redefinition of _sysconfdir in %%hpc_cmake: + Redefining _sysconfdir to %%hpc_sysconfdir caused a recursive loop! + +------------------------------------------------------------------- +Fri Dec 14 19:20:06 UTC 2018 - Todd R + +- Add hpc_docdir macro. +- Add cmake directories macros. +- Use upstream-recommended %{_rpmconfigdir}/macros.d directory + for rpm macros. +- Add meson macro. +- Future-proof cmake macro. + +------------------------------------------------------------------- +Mon Nov 19 01:19:05 UTC 2018 - eich@suse.com + +- Improve python handling: + * set python3 as default for Factory + * allow to specify subdir to HPC pyton path + * Do not remove executable flag on .so files + +------------------------------------------------------------------- +Sun Nov 18 10:19:22 UTC 2018 - eich@suse.com + +- Expand modules handling (bsc#1116458): + * add %%hpc_modules_init to store the list of modules + * if a modules list is available, use environment during + dependency generation to exclude objects which will be + found thru environment modules. + * bump package version. + +------------------------------------------------------------------- +Fri Oct 26 10:49:00 UTC 2018 - eich@suse.com + +- Add %%hpc_cmake which wraps %%cmake from marcos.cmake. + +------------------------------------------------------------------- +Thu Oct 25 10:51:17 UTC 2018 - eich@suse.com + +- macros: fix unexpanded macro in description of master package. + +------------------------------------------------------------------- +Sun Aug 19 12:54:39 UTC 2018 - eich@suse.com + +- macros: %hpc_master_package: properly escape '\' + +------------------------------------------------------------------- +Sun Aug 19 09:32:21 UTC 2018 - eich@suse.com + +- macros: + * Fix line endings + * Replace %%compiler_family by %%hpc_compiler_family + +------------------------------------------------------------------- +Tue Jun 19 05:08:01 UTC 2018 - eich@suse.com + +- Handle license file using %license where applicable. + +------------------------------------------------------------------- +Mon Jun 18 04:56:03 UTC 2018 - eich@suse.com + +- Improve description and README in master packages + Explain the purpose of the package and explicitly specify the dependency + in the package description and generated README. + +------------------------------------------------------------------- +Sat Jun 16 19:38:18 UTC 2018 - eich@suse.com + +- Fix master package summary and description +- Add support for different name than %name + +------------------------------------------------------------------- +Mon Mar 12 19:20:16 UTC 2018 - eich@suse.com + +- Append a newline to the shebang line prepended by the + %hpc_shebang_prepend_list macro (boo#1084951). + +------------------------------------------------------------------- +Sun Feb 25 19:03:15 UTC 2018 - eich@suse.com + +- Add functions to: + * sanitize the shebang path in scripts, + * move python code to the local site arch directory removing + any leading shebang line and execute bits + * Add the appropriate shebang line to a script and set the + execution bit. + * validate Python 3 code (bsc#1082209). + +------------------------------------------------------------------- +Fri Feb 9 15:04:35 UTC 2018 - eich@suse.com + +- Fix summary in module files (bnc#1080259). + +------------------------------------------------------------------- +Tue Jan 30 10:00:43 UTC 2018 - eich@suse.com + +- For tool don't distinguish minor versions: + %hpc_cf_dep_version represents what we distinguish + which determines the granularity in compiler selection. + +------------------------------------------------------------------- +Mon Nov 20 18:44:42 UTC 2017 - eich@suse.com + +- Add lua-lmod to the HPC base Requires +- Fix %name in %hpc_python_master_package + Not only %pname but also %name needs to have python replaced + by %python_flavor. +- Add macro to santize %pname for environment variables + This marco up-cases the name and replaces '-' by '_'. + +------------------------------------------------------------------- +Thu Oct 19 11:44:50 UTC 2017 - eich@suse.com + +- Fix master package macro to handle sub-packages with a + different basename correctly. + +------------------------------------------------------------------- +Fri Oct 6 08:09:44 UTC 2017 - nmoreychaisemartin@suse.com + +- Add _service to fetch github files + +------------------------------------------------------------------- +Thu Oct 5 12:31:55 UTC 2017 - eich@suse.com + +- Make source files downloadable from git. + +------------------------------------------------------------------- +Wed Oct 4 08:15:18 UTC 2017 - eich@suse.com + +- Add more documentation. +- Fix LICENSE and copyright statement in LICENSE. + +------------------------------------------------------------------- +Thu Sep 21 15:10:29 UTC 2017 - nmoreychaisemartin@suse.com + +- Add %{?hpc_ext} to install path to allow multiple flavor installs + +------------------------------------------------------------------- +Wed Sep 13 19:27:49 UTC 2017 - eich@suse.com + +- Add a dependency generator wrapper for binaries and libraries + to avoid adding standard dependencies for HPC libraries. + +------------------------------------------------------------------- +Tue Sep 12 18:54:22 UTC 2017 - eich@suse.com + +- Removed unneeded BuildRequires: + +------------------------------------------------------------------- +Wed May 3 23:00:31 UTC 2017 - eich@suse.com + +- Initial version (FATE#320596). + diff --git a/suse-hpc.spec b/suse-hpc.spec new file mode 100644 index 0000000..f1aeeb5 --- /dev/null +++ b/suse-hpc.spec @@ -0,0 +1,64 @@ +# +# spec file for package suse-hpc +# +# Copyright (c) 2023 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/ +# + + +Summary: SUSE HPC Environment +License: BSD-3-Clause +Group: Productivity/Clustering/Computing +Name: suse-hpc +Version: 0.5.20230501.968c9cb +Release: 0 +Source0: macros.hpc +Source1: dlinfo.c +Source2: hpc_elf.pl +Source3: hpc_elf.attr +Source4: hpc_elflib.attr +Source5: LICENSE +URL: http://www.suse.com/hpc + +%description +Provide rpm macros for building and installing SUSE HPC +packages. + +%prep +cp %{S:1} . + +%build +gcc -o dlinfo dlinfo.c -ldl + +%install +mkdir -p %{buildroot}%{_rpmconfigdir}/macros.d +install -m 644 %{S:0} %{buildroot}%{_rpmconfigdir}/macros.d +mkdir -p %{buildroot}%{_rpmconfigdir}/fileattrs +install -m 755 %{S:2} dlinfo %{buildroot}%{_rpmconfigdir} +install -m 644 %{S:3} %{S:4} %{buildroot}%{_rpmconfigdir}/fileattrs +cp %{S:5} . + +%if 0%{?sle_version} > 120200 || 0%{?suse_version} > 1320 +%define mylicense %license +%else +%define mylicense %doc +%endif + +%files +%mylicense LICENSE +%{_rpmconfigdir}/macros.d/macros.hpc +%{_rpmconfigdir}/dlinfo +%{_rpmconfigdir}/hpc_elf.pl +%{_rpmconfigdir}/fileattrs/* + +%changelog