Merge pull request #1175 from davydden/pkg/arpack-3.4.0

Pkg/arpack 3.4.0
This commit is contained in:
Todd Gamblin 2016-07-06 14:45:21 -07:00 committed by GitHub
commit 6bb31a9a4c
3 changed files with 93 additions and 17 deletions

View File

@ -0,0 +1,24 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 607d221..50426c3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -389,3 +389,19 @@ target_link_libraries(bug_1323 arpack ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES})
add_test(bug_1323 Tests/bug_1323)
add_dependencies(check dnsimp_test bug_1315_single bug_1315_double bug_1323)
+
+############################
+# install
+############################
+# 'make install' to the correct location
+install(TARGETS arpack
+ ARCHIVE DESTINATION lib
+ LIBRARY DESTINATION lib
+ RUNTIME DESTINATION bin)
+
+if (MPI)
+ install(TARGETS parpack
+ ARCHIVE DESTINATION lib
+ LIBRARY DESTINATION lib
+ RUNTIME DESTINATION bin)
+endif ()

View File

@ -27,7 +27,8 @@
class ArpackNg(Package): class ArpackNg(Package):
""" """
ARPACK-NG is a collection of Fortran77 subroutines designed to solve large scale eigenvalue problems. ARPACK-NG is a collection of Fortran77 subroutines designed to solve large
scale eigenvalue problems.
Important Features: Important Features:
@ -38,43 +39,76 @@ class ArpackNg(Package):
Generalized Problems. Generalized Problems.
* Routines for Banded Matrices - Standard or Generalized Problems. * Routines for Banded Matrices - Standard or Generalized Problems.
* Routines for The Singular Value Decomposition. * Routines for The Singular Value Decomposition.
* Example driver routines that may be used as templates to implement numerous * Example driver routines that may be used as templates to implement
Shift-Invert strategies for all problem types, data types and precision. numerous Shift-Invert strategies for all problem types, data types and
precision.
This project is a joint project between Debian, Octave and Scilab in order to This project is a joint project between Debian, Octave and Scilab in order
provide a common and maintained version of arpack. to provide a common and maintained version of arpack.
Indeed, no single release has been published by Rice university for the last Indeed, no single release has been published by Rice university for the
few years and since many software (Octave, Scilab, R, Matlab...) forked it and last few years and since many software (Octave, Scilab, R, Matlab...)
implemented their own modifications, arpack-ng aims to tackle this by providing forked it and implemented their own modifications, arpack-ng aims to tackle
a common repository and maintained versions. this by providing a common repository and maintained versions.
arpack-ng is replacing arpack almost everywhere. arpack-ng is replacing arpack almost everywhere.
""" """
homepage = 'https://github.com/opencollab/arpack-ng' homepage = 'https://github.com/opencollab/arpack-ng'
url = 'https://github.com/opencollab/arpack-ng/archive/3.3.0.tar.gz' url = 'https://github.com/opencollab/arpack-ng/archive/3.3.0.tar.gz'
version('3.4.0', 'ae9ca13f2143a7ea280cb0e2fd4bfae4')
version('3.3.0', 'ed3648a23f0a868a43ef44c97a21bad5') version('3.3.0', 'ed3648a23f0a868a43ef44c97a21bad5')
variant('shared', default=True, description='Enables the build of shared libraries') variant('shared', default=True, description='Enables the build of shared libraries')
variant('mpi', default=False, description='Activates MPI support') variant('mpi', default=False, description='Activates MPI support')
# The function pdlamch10 does not set the return variable. This is fixed upstream # The function pdlamch10 does not set the return variable.
# This is fixed upstream
# see https://github.com/opencollab/arpack-ng/issues/34 # see https://github.com/opencollab/arpack-ng/issues/34
patch('pdlamch10.patch', when='@3.3:') patch('pdlamch10.patch', when='@3.3.0')
patch('make_install.patch', when='@3.4.0')
patch('parpack_cmake.patch', when='@3.4.0')
depends_on('blas') depends_on('blas')
depends_on('lapack') depends_on('lapack')
depends_on('automake') depends_on('automake', when='@3.3.0')
depends_on('autoconf') depends_on('autoconf', when='@3.3.0')
depends_on('libtool@2.4.2:') depends_on('libtool@2.4.2:', when='@3.3.0')
depends_on('cmake@2.8.6:', when='@3.4.0:')
depends_on('mpi', when='+mpi') depends_on('mpi', when='+mpi')
@when('@3.4.0:')
def install(self, spec, prefix):
options = ['-DEXAMPLES=ON']
options.extend(std_cmake_args)
options.append('-DCMAKE_INSTALL_NAME_DIR:PATH=%s/lib' % prefix)
# TODO:
# Arpack calls directly find_package(BLAS REQUIRED) and
# find_package(LAPACK REQUIRED). Make sure correct Blas/Lapack are
# picked up.
if '+mpi' in spec:
options.append('-DMPI=ON')
# TODO: -DINTERFACE64=ON
if '+shared' in spec:
options.append('-DBUILD_SHARED_LIBS=ON')
cmake('.', *options)
make()
# TODO: make test does not work
# make('test')
make('install')
@when('@3.3.0')
def install(self, spec, prefix): def install(self, spec, prefix):
# Apparently autotools are not bootstrapped # Apparently autotools are not bootstrapped
# TODO: switch to use the CMake build in the next version
# rather than bootstrapping.
which('libtoolize')() which('libtoolize')()
bootstrap = Executable('./bootstrap') bootstrap = Executable('./bootstrap')
@ -83,7 +117,7 @@ def install(self, spec, prefix):
if '+mpi' in spec: if '+mpi' in spec:
options.extend([ options.extend([
'--enable-mpi', '--enable-mpi',
'F77=mpif77' #FIXME: avoid hardcoding MPI wrapper names 'F77=%s' % spec['mpi'].mpif77
]) ])
if '~shared' in spec: if '~shared' in spec:

View File

@ -0,0 +1,18 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 607d221..345b7fc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -113,11 +113,12 @@ set_target_properties(arpack PROPERTIES OUTPUT_NAME arpack${LIBSUFFIX})
if (MPI)
# add_library(parpack SHARED
- add_library(parpack
+ add_library(parpack
${parpacksrc_STAT_SRCS}
${parpackutil_STAT_SRCS})
target_link_libraries(parpack ${MPI_Fortran_LIBRARIES})
+ target_link_libraries(parpack arpack)
set_target_properties(parpack PROPERTIES OUTPUT_NAME parpack${LIBSUFFIX})
endif ()