Also handle binaries in and
This commit is contained in:
parent
6cb8095222
commit
5ad6adedec
@ -1,7 +1,6 @@
|
||||
%__mpi_provides %{_rpmconfigdir}/mpi.prov %{buildroot} %{?__filter_GLIBC_PRIVATE:--filter-private}
|
||||
%__mpi_requires %{_rpmconfigdir}/mpi.req %{buildroot} %{?__filter_GLIBC_PRIVATE:--filter-private}
|
||||
%__mpi_path ^%{_prefix}/lib(64)?/(openmpi|mpich)/.*$
|
||||
%__mpi_path ^%{_prefix}/lib(64)?/.*$
|
||||
%__mpi_magic ^(setuid )?(setgid )?(sticky )?ELF (32|64)-bit.*$
|
||||
%__mpi_flags exeonly,magic_and_path
|
||||
%__elf_exclude_path ^%{_prefix}/lib(64)?/(openmpi|mpich)/.*$
|
||||
%__libsymlink_exclude_path ^%{_prefix}/lib(64)?/(openmpi|mpich)/.*$
|
||||
%__elf_exclude_path ^%{_prefix}/lib(64)?/.*$
|
||||
|
18
mpi.prov
18
mpi.prov
@ -34,8 +34,8 @@ elfdepsargs="$@"
|
||||
|
||||
# Search for all MPI implementations:
|
||||
# - Search all modules which start with mpi
|
||||
# - For each module, store $MPI_HOME -> $MPI_COMPILER in assoc. array
|
||||
declare -A mpi_compier_for_home
|
||||
# - For each module, store $MPI_DIR -> $MPI_COMPILER in assoc. array
|
||||
declare -A mpi_compier_for_dir
|
||||
if [ -e /etc/profile.d/modules.sh ]; then
|
||||
. /etc/profile.d/modules.sh;
|
||||
|
||||
@ -49,7 +49,9 @@ if [ -e /etc/profile.d/modules.sh ]; then
|
||||
|
||||
for module in $(module -t avail 2>&1 | grep "^mpi/"); do
|
||||
module load $module
|
||||
mpi_compier_for_home[${MPI_HOME}]=${MPI_COMPILER}
|
||||
mpi_compier_for_dir[${MPI_HOME}]=${MPI_COMPILER}
|
||||
mpi_compier_for_dir[${MPI_FORTRAN_MOD_DIR}]=${MPI_COMPILER}
|
||||
mpi_compier_for_dir[${MPI_PYTHON_SITEARCH}]=${MPI_COMPILER}
|
||||
module unload $module
|
||||
done
|
||||
fi
|
||||
@ -67,11 +69,11 @@ if [ -x /usr/lib/rpm/elfdeps -a -n "$filelist" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# If the path to the scanned binary starts with an $MPI_HOME, append the
|
||||
# corresponding ($MPI_COMPILER) to the provides string
|
||||
for mpi_home in "${!mpi_compier_for_home[@]}"; do
|
||||
if [[ "$file" == "$buildroot$mpi_home"* ]]; then
|
||||
prov="${prov}(${mpi_compier_for_home[$mpi_home]})"
|
||||
# If the path to the scanned binary starts with a known mpi binary directory,
|
||||
# append the corresponding ($MPI_COMPILER) to the provides string
|
||||
for mpi_dir in "${!mpi_compier_for_dir[@]}"; do
|
||||
if [[ "$file" == "$buildroot$mpi_dir"* ]]; then
|
||||
prov="${prov}(${mpi_compier_for_dir[$mpi_dir]})"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
18
mpi.req
18
mpi.req
@ -34,9 +34,9 @@ elfdepsargs="$@"
|
||||
|
||||
# Search for all MPI implementations:
|
||||
# - Search all modules which start with mpi
|
||||
# - For each module, store $MPI_HOME -> $MPI_COMPILER and
|
||||
# - For each module, store $MPI_DIR -> $MPI_COMPILER and
|
||||
# $MPI_COMPILER -> $MPI_LIB in assoc. array
|
||||
declare -A mpi_compier_for_home
|
||||
declare -A mpi_compier_for_dir
|
||||
declare -A mpi_lib_for_compiler
|
||||
if [ -e /etc/profile.d/modules.sh ]; then
|
||||
. /etc/profile.d/modules.sh;
|
||||
@ -51,7 +51,9 @@ if [ -e /etc/profile.d/modules.sh ]; then
|
||||
|
||||
for module in $(module -t avail 2>&1 | grep "^mpi/"); do
|
||||
module load $module
|
||||
mpi_compier_for_home[${MPI_HOME}]=${MPI_COMPILER}
|
||||
mpi_compier_for_dir[${MPI_HOME}]=${MPI_COMPILER}
|
||||
mpi_compier_for_dir[${MPI_FORTRAN_MOD_DIR}]=${MPI_COMPILER}
|
||||
mpi_compier_for_dir[${MPI_PYTHON_SITEARCH}]=${MPI_COMPILER}
|
||||
mpi_lib_for_compiler[${MPI_COMPILER}]=${MPI_LIB}
|
||||
module unload $module
|
||||
done
|
||||
@ -67,16 +69,16 @@ if [ -x /usr/lib/rpm/elfdeps -a -n "$filelist" ]; then
|
||||
# Get the default requres string from elfdeps
|
||||
reqs=$(echo $file | /usr/lib/rpm/elfdeps --requires $elfdepsargs)
|
||||
|
||||
# Check whether the scanned binary is inside an $MPI_HOME dir
|
||||
# Check whether the scanned binary is inside a know mpi binary dir
|
||||
mpi_comp=
|
||||
for mpi_home in "${!mpi_compier_for_home[@]}"; do
|
||||
if [[ "$file" == "$buildroot$mpi_home"* ]]; then
|
||||
mpi_comp="${mpi_compier_for_home[$mpi_home]}"
|
||||
for mpi_dir in "${!mpi_compier_for_dir[@]}"; do
|
||||
if [[ "$file" == "$buildroot$mpi_dir"* ]]; then
|
||||
mpi_comp="${mpi_compier_for_dir[$mpi_dir]}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# If the scanned binary is inside an $MPI_HOME, for each dependency, check
|
||||
# If the scanned binary is inside an mpi dir, for each dependency, check
|
||||
# whether the library exists in $MPI_LIB, and if yes, append
|
||||
# ($MPI_COMPILER) to each requires string
|
||||
if [ ! -z $mpi_comp ]; then
|
||||
|
@ -1,5 +1,6 @@
|
||||
# Make libfoo.so symlinks require the soname-provide of the target library
|
||||
%__mpilibsymlink_requires %{_rpmconfigdir}/mpi.prov %{buildroot} --soname-only
|
||||
%__mpilibsymlink_magic ^symbolic link to .*lib.*\.so\..*$
|
||||
%__mpilibsymlink_path ^%{_prefix}/lib(64)?/(openmpi|mpich)/.*\.so$
|
||||
%__mpilibsymlink_path ^%{_prefix}/lib(64)?/.*$
|
||||
%__mpilibsymlink_flags magic_and_path
|
||||
%__libsymlink_exclude_path ^%{_prefix}/lib(64)?/.*$
|
||||
|
@ -1,5 +1,5 @@
|
||||
Name: rpm-mpi-hooks
|
||||
Version: 2
|
||||
Version: 3
|
||||
Release: 1%{?dist}
|
||||
Summary: RPM dependency generator hooks for MPI packages
|
||||
|
||||
@ -47,6 +47,9 @@ install -Dpm 0755 %{SOURCE3} %{buildroot}%{_rpmconfigdir}/mpi.req
|
||||
|
||||
|
||||
%changelog
|
||||
* Mon Aug 10 2015 Sandro Mani <manisandro@gmail.com> 3-1
|
||||
- Also handle binaries in $MPI_FORTRAN_MOD_DIR and $MPI_PYTHON_SITEARCH
|
||||
|
||||
* Sun Jul 26 2015 Sandro Mani <manisandro@gmail.com> 2-1
|
||||
- Add %%__mpi_magic, %%__mpi_flags to mpi.attrs
|
||||
- Add mpilibsymlink.attr
|
||||
|
Loading…
Reference in New Issue
Block a user