diff --git a/mpi.attrs b/mpi.attrs index eaa1df0..a172b0f 100644 --- a/mpi.attrs +++ b/mpi.attrs @@ -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)?/.*$ diff --git a/mpi.prov b/mpi.prov index 155f297..c705799 100755 --- a/mpi.prov +++ b/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 diff --git a/mpi.req b/mpi.req index 08bdfea..bbd2f87 100755 --- a/mpi.req +++ b/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 diff --git a/mpilibsymlink.attr b/mpilibsymlink.attr index ce26773..e1b28ca 100644 --- a/mpilibsymlink.attr +++ b/mpilibsymlink.attr @@ -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)?/.*$ diff --git a/rpm-mpi-hooks.spec b/rpm-mpi-hooks.spec index 50fef92..4713894 100644 --- a/rpm-mpi-hooks.spec +++ b/rpm-mpi-hooks.spec @@ -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 3-1 +- Also handle binaries in $MPI_FORTRAN_MOD_DIR and $MPI_PYTHON_SITEARCH + * Sun Jul 26 2015 Sandro Mani 2-1 - Add %%__mpi_magic, %%__mpi_flags to mpi.attrs - Add mpilibsymlink.attr