diff --git a/.gitignore b/.gitignore index e9c6658..89b7978 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ /psblas3-3.6.1.tar.gz /psblas3-3.6.1-2.tar.gz /psblas3-3.6.1-3.tar.gz +/psblas3-3.6.1-4.tar.gz diff --git a/psblas3-rename_libs_for_arch64.patch b/psblas3-rename_libs_for_arch64.patch new file mode 100644 index 0000000..9b39f67 --- /dev/null +++ b/psblas3-rename_libs_for_arch64.patch @@ -0,0 +1,17 @@ +--- a/configure.orig 2020-06-23 13:02:34.000000000 +0200 ++++ b/configure 2020-07-19 13:00:08.447871180 +0200 +@@ -12101,10 +12101,10 @@ + ############################################################################### + + LIBDIR=lib +-BASELIBNAME=libpsb_base.a +-PRECLIBNAME=libpsb_prec.a +-METHDLIBNAME=libpsb_krylov.a +-UTILLIBNAME=libpsb_util.a ++BASELIBNAME=libpsb64_base.a ++PRECLIBNAME=libpsb64_prec.a ++METHDLIBNAME=libpsb64_krylov.a ++UTILLIBNAME=libpsb64_util.a + + ############################################################################### + # Variable substitutions : the Make.inc.in will have these @VARIABLES@ diff --git a/psblas3.spec b/psblas3.spec index eac26ac..ab4a4f0 100644 --- a/psblas3.spec +++ b/psblas3.spec @@ -2,6 +2,12 @@ %global with_openmpi 1 %global with_serial 1 +%if %{?__isa_bits:%{__isa_bits}}%{!?__isa_bits:32} == 64 +%global arch64 0 +%else +%global arch64 0 +%endif + # Use devtoolset 8 %if 0%{?rhel} && 0%{?rhel} == 7 %global dts devtoolset-8- @@ -19,12 +25,12 @@ %global major_version 3 %global major_minor %{major_version}.6 -%global postrelease_version -3 +%global postrelease_version -4 Name: psblas3 Summary: Parallel Sparse Basic Linear Algebra Subroutines Version: %{major_minor}.1 -Release: 8%{?dist} +Release: 9%{?dist} License: BSD URL: https://github.com/sfilippone/psblas3 Source0: https://github.com/sfilippone/psblas3/archive/v%{version}%{?postrelease_version}/psblas3-%{version}%{?postrelease_version}.tar.gz @@ -32,6 +38,9 @@ Source0: https://github.com/sfilippone/psblas3/archive/v%{version}%{?postrelease # Call default Fedora ldflags when linker creates links Patch0: %{name}-fix_ldflags.patch +# Rename libraries for psblas3_64 +Patch1: %{name}-rename_libs_for_arch64.patch + BuildRequires: suitesparse-devel BuildRequires: openblas-devel, openblas-srpm-macros BuildRequires: metis-devel @@ -87,6 +96,37 @@ BuildArch: noarch HTML, PDF and license files of %{name}. ######################################################## +%if 0%{?arch64} +%package -n %{name}_64 +Summary: %{name} for long-integer (8-byte) data +BuildRequires: suitesparse64-devel +BuildRequires: openblas-devel, openblas-srpm-macros +BuildRequires: metis64-devel + +Requires: %{name}-common = %{version}-%{release} +%description -n psblas3_64 +The PSBLAS library, developed with the aim to facilitate the parallelization +of computationally intensive scientific applications, +is designed to address parallel implementation of iterative solvers for sparse +linear systems through the distributed memory paradigm. +It includes routines for multiplying sparse matrices by dense matrices, +solving block diagonal systems with triangular diagonal entries, +preprocessing sparse matrices, and contains additional routines for +dense matrix operations. +The current implementation of PSBLAS addresses a distributed memory execution +model operating with message passing. +This is a PSBLAS version for long-integer (8-byte) data. + +%package -n %{name}_64-devel +Summary: The %{name}_64 headers and development-related files +Requires: %{name}_64%{?_isa} = %{version}-%{release} +Provides: %{name}_64-static = %{version}-%{release} +%description -n %{name}_64-devel +Shared links, header files and static libraries for %{name}_64. +%endif +########################################################## + +######################################################## %if 0%{?with_openmpi} %package openmpi Summary: OpenMPI %{name} @@ -162,37 +202,75 @@ cp -a psblas3-%{version}%{?postrelease_version} mpich-build %endif ###################################################### +####################################################### +## Copy source for long-integer version +%if 0%{?arch64} +cp -a psblas3-%{version}%{?postrelease_version} build64 +pushd build64 +%patch1 -p1 +popd +%endif +##################################################### + %build %if 0%{?with_serial} cd psblas3-%{version}%{?postrelease_version} -export LIBBLAS=-lopenblas -export INCBLAS=-I%{_includedir}/openblas - %if 0%{?el7} %{?dts:source /opt/rh/devtoolset-8/enable} %endif %configure \ - --enable-serial --with-fcopt="%{?fc_optflags} -Wno-unused-variable -Wno-unused-dummy-argument -fPIC -I%{_fmoddir} $INCBLAS" --with-ccopt="%{build_cflags} -fPIC $INCBLAS" \ - --with-metis=-lmetis --with-amd=-lamd --with-blas=$LIBBLAS --with-lapack=$LIBLAPACK \ + --enable-serial --with-fcopt="%{?fc_optflags} -Wno-unused-variable -Wno-unused-dummy-argument -fPIC" \ + --with-ccopt="%{build_cflags} -fPIC" --with-include-path="%{_includedir}/openblas -I%{_fmoddir}" \ + --with-metis=-lmetis --with-amd=-lamd --with-blas=-lopenblas --with-lapack= \ --with-amdincdir=%{_includedir}/suitesparse %make_build # Make shared libraries pushd lib -gfortran -shared %{__global_ldflags} -Wl,--whole-archive libpsb_base.a -Wl,-no-whole-archive -Wl,-Bdynamic -L%{_libdir} $LIBBLAS $LIBLAPACK -lgfortran -lm -Wl,-soname,libpsb_base.so.%{version} -o libpsb_base.so.%{version} +gfortran -shared %{__global_ldflags} -Wl,--whole-archive libpsb_base.a -Wl,-no-whole-archive -Wl,-Bdynamic -L%{_libdir} -lopenblas -lgfortran -lm -Wl,-soname,libpsb_base.so.%{version} -o libpsb_base.so.%{version} -gfortran -shared %{__global_ldflags} -Wl,--whole-archive libpsb_krylov.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L%{_libdir} $LIBBLAS $LIBLAPACK -lgfortran -lm -Wl,-soname,libpsb_krylov.so.%{version} -o libpsb_krylov.so.%{version} +gfortran -shared %{__global_ldflags} -Wl,--whole-archive libpsb_krylov.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L%{_libdir} -lopenblas -lgfortran -lm -Wl,-soname,libpsb_krylov.so.%{version} -o libpsb_krylov.so.%{version} -gfortran -shared %{__global_ldflags} -Wl,--whole-archive libpsb_prec.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L%{_libdir} $LIBBLAS $LIBLAPACK -lgfortran -lm -Wl,-soname,libpsb_prec.so.%{version} -o libpsb_prec.so.%{version} +gfortran -shared %{__global_ldflags} -Wl,--whole-archive libpsb_prec.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L%{_libdir} -lopenblas -lgfortran -lm -Wl,-soname,libpsb_prec.so.%{version} -o libpsb_prec.so.%{version} -gfortran -shared %{__global_ldflags} -Wl,--whole-archive libpsb_util.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L%{_libdir} $LIBBLAS $LIBLAPACK -lmetis -lamd -lgfortran -lm -Wl,-soname,libpsb_util.so.%{version} -o libpsb_util.so.%{version} +gfortran -shared %{__global_ldflags} -Wl,--whole-archive libpsb_util.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L%{_libdir} -lopenblas -lmetis -lamd -lgfortran -lm -Wl,-soname,libpsb_util.so.%{version} -o libpsb_util.so.%{version} popd cd ../ #make -C test/util MODDIR=../../modules -j1 +## + +%if 0%{?arch64} +cd build64 + +%if 0%{?el7} +%{?dts:source /opt/rh/devtoolset-8/enable} +%endif + +%configure \ + --enable-serial --enable-long-integers --with-fcopt="%{?fc_optflags} -Wno-unused-variable -Wno-unused-dummy-argument -fPIC" \ + --with-ccopt="%{build_cflags} -fPIC" --with-include-path="%{_includedir}/openblas -I%{_fmoddir}" \ + --with-metis=-lmetis64 --with-amd=-lamd64 --with-blas=-lopenblas64 --with-lapack= \ + --with-amdincdir=%{_includedir}/suitesparse +%make_build + +# Make shared libraries +pushd lib +gfortran -shared %{__global_ldflags} -Wl,--whole-archive libpsb64_base.a -Wl,-no-whole-archive -Wl,-Bdynamic -L%{_libdir} -lopenblas64 -lgfortran -lm -Wl,-soname,libpsb64_base.so.%{version} -o libpsb64_base.so.%{version} + +gfortran -shared %{__global_ldflags} -Wl,--whole-archive libpsb64_krylov.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb64_base -L%{_libdir} -lopenblas64 -lgfortran -lm -Wl,-soname,libpsb64_krylov.so.%{version} -o libpsb64_krylov.so.%{version} + +gfortran -shared %{__global_ldflags} -Wl,--whole-archive libpsb64_prec.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb64_base -L%{_libdir} -lopenblas64 -lgfortran -lm -Wl,-soname,libpsb_prec.so.%{version} -o libpsb_prec.so.%{version} + +gfortran -shared %{__global_ldflags} -Wl,--whole-archive libpsb64_util.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb64_base -L%{_libdir} -lopenblas64 -lmetis64 -lamd64 -lgfortran -lm -Wl,-soname,libpsb64_util.so.%{version} -o libpsb64_util.so.%{version} +popd + +cd ../ + +%endif %endif ####################################################### @@ -201,25 +279,23 @@ cd ../ pushd openmpi-build %{_openmpi_load} export CC=mpicc -export LIBBLAS=-lopenblas -export INCBLAS=-I%{_includedir}/openblas %configure \ - --with-fcopt="%{?fc_optflags} -Wno-unused-variable -Wno-unused-dummy-argument -fPIC -I${MPI_FORTRAN_MOD_DIR} $INCBLAS" \ - --with-ccopt="%{build_cflags} -fPIC $INCBLAS" \ + --with-fcopt="%{?fc_optflags} -Wno-unused-variable -Wno-unused-dummy-argument -fPIC" \ + --with-ccopt="%{build_cflags} -fPIC" --with-include-path="%{_includedir}/openblas -I${MPI_FORTRAN_MOD_DIR}" \ MPIFC=mpifort MPICC=mpicc \ - --with-metis=-lmetis --with-amd=-lamd --with-blas=$LIBBLAS --with-lapack= \ + --with-metis=-lmetis --with-amd=-lamd --with-blas=-lopenblas --with-lapack= \ --with-amdincdir=%{_includedir}/suitesparse %make_build # Make shared libraries cd lib -mpifort -shared %{__global_ldflags} -Wl,--whole-archive libpsb_base.a -Wl,-no-whole-archive -Wl,-Bdynamic -L$MPI_LIB -Wl,-rpath -Wl,$MPI_LIB -Wl,--enable-new-dtags -lmpi_mpifh -L%{_libdir} $LIBBLAS $LIBLAPACK -lgfortran -lm -Wl,-soname,libpsb_base.so.%{version} -o libpsb_base.so.%{version} +mpifort -shared %{__global_ldflags} -Wl,--whole-archive libpsb_base.a -Wl,-no-whole-archive -Wl,-Bdynamic -L$MPI_LIB -Wl,-rpath -Wl,$MPI_LIB -Wl,--enable-new-dtags -lmpi_mpifh -L%{_libdir} -lopenblas -lgfortran -lm -Wl,-soname,libpsb_base.so.%{version} -o libpsb_base.so.%{version} -mpifort -shared %{__global_ldflags} -Wl,--whole-archive libpsb_krylov.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L$MPI_LIB -Wl,-rpath -Wl,$MPI_LIB -Wl,--enable-new-dtags -lmpi_mpifh -L%{_libdir} $LIBBLAS $LIBLAPACK -lmetis -lamd -lgfortran -lm -lrt -Wl,-soname,libpsb_krylov.so.%{version} -o libpsb_krylov.so.%{version} +mpifort -shared %{__global_ldflags} -Wl,--whole-archive libpsb_krylov.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L$MPI_LIB -Wl,-rpath -Wl,$MPI_LIB -Wl,--enable-new-dtags -lmpi_mpifh -L%{_libdir} -lopenblas -lmetis -lamd -lgfortran -lm -lrt -Wl,-soname,libpsb_krylov.so.%{version} -o libpsb_krylov.so.%{version} -mpifort -shared %{__global_ldflags} -Wl,--whole-archive libpsb_prec.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L$MPI_LIB -Wl,-rpath -Wl,$MPI_LIB -Wl,--enable-new-dtags -lmpi_mpifh -L%{_libdir} $LIBBLAS $LIBLAPACK -lmetis -lamd -lgfortran -lm -lrt -Wl,-soname,libpsb_prec.so.%{version} -o libpsb_prec.so.%{version} +mpifort -shared %{__global_ldflags} -Wl,--whole-archive libpsb_prec.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L$MPI_LIB -Wl,-rpath -Wl,$MPI_LIB -Wl,--enable-new-dtags -lmpi_mpifh -L%{_libdir} -lopenblas -lmetis -lamd -lgfortran -lm -lrt -Wl,-soname,libpsb_prec.so.%{version} -o libpsb_prec.so.%{version} -mpifort -shared %{__global_ldflags} -Wl,--whole-archive libpsb_util.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L$MPI_LIB -Wl,-rpath -Wl,$MPI_LIB -Wl,--enable-new-dtags -lmpi_mpifh -L%{_libdir} $LIBBLAS $LIBLAPACK -lmetis -lamd -lgfortran -lm -lrt -Wl,-soname,libpsb_util.so.%{version} -o libpsb_util.so.%{version} +mpifort -shared %{__global_ldflags} -Wl,--whole-archive libpsb_util.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L$MPI_LIB -Wl,-rpath -Wl,$MPI_LIB -Wl,--enable-new-dtags -lmpi_mpifh -L%{_libdir} -lopenblas -lmetis -lamd -lgfortran -lm -lrt -Wl,-soname,libpsb_util.so.%{version} -o libpsb_util.so.%{version} cd ../ %{_openmpi_unload} @@ -230,13 +306,11 @@ popd pushd mpich-build %{_mpich_load} export CC=mpicc -export LIBBLAS=-lopenblas -export INCBLAS=-I%{_includedir}/openblas %configure \ - --with-fcopt="%{?fc_optflags} -Wno-unused-variable -Wno-unused-dummy-argument -fPIC -I${MPI_FORTRAN_MOD_DIR} $INCBLAS" \ - --with-ccopt="%{build_cflags} -fPIC $INCBLAS" \ + --with-fcopt="%{?fc_optflags} -Wno-unused-variable -Wno-unused-dummy-argument -fPIC" \ + --with-ccopt="%{build_cflags} -fPIC" --with-include-path="%{_includedir}/openblas -I${MPI_FORTRAN_MOD_DIR}" \ MPIFC=mpif90 MPICC=mpicc \ - --with-metis=-lmetis --with-amd=-lamd --with-blas=$LIBBLAS --with-lapack= \ + --with-metis=-lmetis --with-amd=-lamd --with-blas=-lopenblas --with-lapack= \ --with-amdincdir=%{_includedir}/suitesparse %make_build @@ -249,13 +323,13 @@ export MPIFLIB=-lmpifort export MPIFLIB=-lmpich %endif -mpif90 -shared %{__global_ldflags} -Wl,--whole-archive libpsb_base.a -Wl,-no-whole-archive -Wl,-Bdynamic -L$MPI_LIB -Wl,-rpath -Wl,$MPI_LIB -Wl,-z,noexecstack $MPIFLIB -L%{_libdir} $LIBBLAS $LIBLAPACK -lgfortran -lm -Wl,-soname,libpsb_base.so.%{version} -o libpsb_base.so.%{version} +mpif90 -shared %{__global_ldflags} -Wl,--whole-archive libpsb_base.a -Wl,-no-whole-archive -Wl,-Bdynamic -L$MPI_LIB -Wl,-rpath -Wl,$MPI_LIB -Wl,-z,noexecstack $MPIFLIB -L%{_libdir} -lopenblas -lgfortran -lm -Wl,-soname,libpsb_base.so.%{version} -o libpsb_base.so.%{version} -mpif90 -shared %{__global_ldflags} -Wl,--whole-archive libpsb_krylov.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L$MPI_LIB -Wl,-rpath -Wl,$MPI_LIB -Wl,-z,noexecstack $MPIFLIB -L%{_libdir} $LIBBLAS $LIBLAPACK -lmetis -lamd -lgfortran -lm -lrt -Wl,-soname,libpsb_krylov.so.%{version} -o libpsb_krylov.so.%{version} +mpif90 -shared %{__global_ldflags} -Wl,--whole-archive libpsb_krylov.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L$MPI_LIB -Wl,-rpath -Wl,$MPI_LIB -Wl,-z,noexecstack $MPIFLIB -L%{_libdir} -lopenblas -lmetis -lamd -lgfortran -lm -lrt -Wl,-soname,libpsb_krylov.so.%{version} -o libpsb_krylov.so.%{version} -mpif90 -shared %{__global_ldflags} -Wl,--whole-archive libpsb_prec.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L$MPI_LIB -Wl,-rpath -Wl,$MPI_LIB -Wl,-z,noexecstack $MPIFLIB -L%{_libdir} $LIBBLAS $LIBLAPACK -lmetis -lamd -lgfortran -lm -lrt -Wl,-soname,libpsb_prec.so.%{version} -o libpsb_prec.so.%{version} +mpif90 -shared %{__global_ldflags} -Wl,--whole-archive libpsb_prec.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L$MPI_LIB -Wl,-rpath -Wl,$MPI_LIB -Wl,-z,noexecstack $MPIFLIB -L%{_libdir} -lopenblas -lmetis -lamd -lgfortran -lm -lrt -Wl,-soname,libpsb_prec.so.%{version} -o libpsb_prec.so.%{version} -mpif90 -shared %{__global_ldflags} -Wl,--whole-archive libpsb_util.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L$MPI_LIB -Wl,-rpath -Wl,$MPI_LIB $MPIFLIB -Wl,-z,noexecstack -L%{_libdir} $LIBBLAS $LIBLAPACK -lmetis -lamd -lgfortran -lm -lrt -Wl,-soname,libpsb_util.so.%{version} -o libpsb_util.so.%{version} +mpif90 -shared %{__global_ldflags} -Wl,--whole-archive libpsb_util.a -Wl,-no-whole-archive -Wl,-Bdynamic -L./ -lpsb_base -L$MPI_LIB -Wl,-rpath -Wl,$MPI_LIB $MPIFLIB -Wl,-z,noexecstack -L%{_libdir} -lopenblas -lmetis -lamd -lgfortran -lm -lrt -Wl,-soname,libpsb_util.so.%{version} -o libpsb_util.so.%{version} cd ../ %{_mpich_unload} @@ -298,6 +372,37 @@ install -pm 644 include/*.h $RPM_BUILD_ROOT%{_includedir}/%{name}/ popd %endif +%if 0%{?arch64} +pushd build64 +mkdir -p $RPM_BUILD_ROOT%{_includedir}/%{name}64 +mkdir -p $RPM_BUILD_ROOT%{_fmoddir}/%{name}64 + +pushd lib +install -pm 755 *.so.%{version} $RPM_BUILD_ROOT%{_libdir}/ +install -pm 644 *.a $RPM_BUILD_ROOT%{_libdir}/ + +ln -sf %{_libdir}/libpsb64_base.so.%{version} $RPM_BUILD_ROOT%{_libdir}/libpsb64_base.so.%{major_version} +ln -sf %{_libdir}/libpsb64_base.so.%{version} $RPM_BUILD_ROOT%{_libdir}/libpsb64_base.so.%{major_minor} +ln -sf %{_libdir}/libpsb64_base.so.%{version} $RPM_BUILD_ROOT%{_libdir}/libpsb64_base.so + +ln -sf %{_libdir}/libpsb64_krylov.so.%{version} $RPM_BUILD_ROOT%{_libdir}/libpsb64_krylov.so.%{major_version} +ln -sf %{_libdir}/libpsb64_krylov.so.%{version} $RPM_BUILD_ROOT%{_libdir}/libpsb64_krylov.so.%{major_minor} +ln -sf %{_libdir}/libpsb64_krylov.so.%{version} $RPM_BUILD_ROOT%{_libdir}/libpsb64_krylov.so + +ln -sf %{_libdir}/libpsb64_prec.so.%{version} $RPM_BUILD_ROOT%{_libdir}/libpsb64_prec.so.%{major_version} +ln -sf %{_libdir}/libpsb64_prec.so.%{version} $RPM_BUILD_ROOT%{_libdir}/libpsb64_prec.so.%{major_minor} +ln -sf %{_libdir}/libpsb64_prec.so.%{version} $RPM_BUILD_ROOT%{_libdir}/libpsb64_prec.so + +ln -sf %{_libdir}/libpsb64_util.so.%{version} $RPM_BUILD_ROOT%{_libdir}/libpsb64_util.so.%{major_version} +ln -sf %{_libdir}/libpsb64_util.so.%{version} $RPM_BUILD_ROOT%{_libdir}/libpsb64_util.so.%{major_minor} +ln -sf %{_libdir}/libpsb64_util.so.%{version} $RPM_BUILD_ROOT%{_libdir}/libpsb64_util.so +popd + +install -pm 644 modules/*.mod $RPM_BUILD_ROOT%{_fmoddir}/%{name}64 +install -pm 644 include/*.h $RPM_BUILD_ROOT%{_includedir}/%{name}64/ +popd +%endif + ####################################################### ## Install MPI versions %if 0%{?with_openmpi} @@ -378,6 +483,17 @@ popd %{_libdir}/*.a %{_fmoddir}/%{name}/ %{_includedir}/%{name}/ + +%if 0%{?arch64} +%files -n %{name}_64 +%{_libdir}/libpsb64*.so.* + +%files -n %{name}_64-devel +%{_libdir}/libpsb64*.so +%{_libdir}/libpsb64*.a +%{_fmoddir}/%{name}64/ +%{_includedir}/%{name}64/ +%endif %endif %files common @@ -420,6 +536,9 @@ popd ###################################################### %changelog +* Sat Jul 18 2020 Antonio Trande - 3.6.1-9 +- Release 3.6.1-4 + * Sun Jun 28 2020 Antonio Trande - 3.6.1-8 - Release 3.6.1-3 diff --git a/sources b/sources index 2e18619..624e186 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (psblas3-3.6.1-3.tar.gz) = c9488904764ede6cf90903da76b09f6649cd561ba9e19e3f44e04c739af57cf2683ecdd85a4460b99853352a8c611c3ff14378553ae6bb2e6e108b60d7caab52 +SHA512 (psblas3-3.6.1-4.tar.gz) = 1de7a7a0378ea68a8a1e24b908f4a67804ce89f037d85effb15b08948f1a7c4d14850b0c6a174fc732f54d66f43db85711b8eea699336a0ebdb578eaf10fcaf1