summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcitibeth <rpf2116@columbia.edu>2016-03-25 17:14:35 -0400
committercitibeth <rpf2116@columbia.edu>2016-03-25 17:14:35 -0400
commit358b387283a258c6b6d2357264ee24344afb0059 (patch)
tree1c44120177e06833289aa7224a664d2bf2d3cf04
parent8019748396f65feadcdea2854921b6fcc9411e02 (diff)
parent42ec82237921b87316548ca3ce113e59acd2c21d (diff)
downloadspack-358b387283a258c6b6d2357264ee24344afb0059.tar.gz
spack-358b387283a258c6b6d2357264ee24344afb0059.tar.bz2
spack-358b387283a258c6b6d2357264ee24344afb0059.tar.xz
spack-358b387283a258c6b6d2357264ee24344afb0059.zip
Merge remote-tracking branch 'upstream/develop' into efischer/160311-StagedPackage
-rw-r--r--lib/spack/spack/cmd/info.py4
-rw-r--r--var/spack/repos/builtin/packages/metis/install_gklib_defs_rename.patch22
-rw-r--r--var/spack/repos/builtin/packages/metis/package.py13
-rw-r--r--var/spack/repos/builtin/packages/netcdf/package.py7
-rw-r--r--var/spack/repos/builtin/packages/netlib-blas/package.py46
-rw-r--r--var/spack/repos/builtin/packages/netlib-lapack/package.py68
-rw-r--r--var/spack/repos/builtin/packages/parmetis/enable_external_metis.patch64
-rw-r--r--var/spack/repos/builtin/packages/parmetis/link-to-lm.patch14
-rw-r--r--var/spack/repos/builtin/packages/parmetis/package.py4
9 files changed, 134 insertions, 108 deletions
diff --git a/lib/spack/spack/cmd/info.py b/lib/spack/spack/cmd/info.py
index e7abe7f4a5..c93db55c63 100644
--- a/lib/spack/spack/cmd/info.py
+++ b/lib/spack/spack/cmd/info.py
@@ -52,7 +52,7 @@ def print_text_info(pkg):
print "Safe versions: "
if not pkg.versions:
- print("None")
+ print(" None")
else:
pad = padder(pkg.versions, 4)
for v in reversed(sorted(pkg.versions)):
@@ -62,7 +62,7 @@ def print_text_info(pkg):
print
print "Variants:"
if not pkg.variants:
- print "None"
+ print " None"
else:
pad = padder(pkg.variants, 4)
diff --git a/var/spack/repos/builtin/packages/metis/install_gklib_defs_rename.patch b/var/spack/repos/builtin/packages/metis/install_gklib_defs_rename.patch
new file mode 100644
index 0000000000..b182b167b9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/metis/install_gklib_defs_rename.patch
@@ -0,0 +1,22 @@
+# HG changeset patch
+# User Sean Farley <sean@mcs.anl.gov>
+# Date 1332269671 18000
+# Tue Mar 20 13:54:31 2012 -0500
+# Node ID b95c0c2e1d8bf8e3273f7d45e856f0c0127d998e
+# Parent 88049269953c67c3fdcc4309bf901508a875f0dc
+cmake: add gklib headers to install into include
+
+diff -r 88049269953c -r b95c0c2e1d8b libmetis/CMakeLists.txt
+Index: libmetis/CMakeLists.txt
+===================================================================
+--- a/libmetis/CMakeLists.txt Tue Mar 20 13:54:29 2012 -0500
++++ b/libmetis/CMakeLists.txt Tue Mar 20 13:54:31 2012 -0500
+@@ -12,6 +12,8 @@ endif()
+ if(METIS_INSTALL)
+ install(TARGETS metis
+ LIBRARY DESTINATION lib
+ RUNTIME DESTINATION lib
+ ARCHIVE DESTINATION lib)
++ install(FILES gklib_defs.h DESTINATION include)
++ install(FILES gklib_rename.h DESTINATION include)
+ endif()
diff --git a/var/spack/repos/builtin/packages/metis/package.py b/var/spack/repos/builtin/packages/metis/package.py
index bbfc4de7d1..68b9f6fd30 100644
--- a/var/spack/repos/builtin/packages/metis/package.py
+++ b/var/spack/repos/builtin/packages/metis/package.py
@@ -24,7 +24,7 @@
##############################################################################
from spack import *
-
+import glob
class Metis(Package):
"""
@@ -49,6 +49,8 @@ class Metis(Package):
depends_on('gdb', when='+gdb')
+ patch('install_gklib_defs_rename.patch')
+
def install(self, spec, prefix):
options = []
@@ -80,4 +82,11 @@ class Metis(Package):
with working_dir(build_directory, create=True):
cmake(source_directory, *options)
make()
- make("install") \ No newline at end of file
+ make("install")
+
+ # install GKlib headers, which will be needed for ParMETIS
+ GKlib_dist = join_path(prefix.include,'GKlib')
+ mkdirp(GKlib_dist)
+ fs = glob.glob(join_path(source_directory,'GKlib',"*.h"))
+ for f in fs:
+ install(f, GKlib_dist)
diff --git a/var/spack/repos/builtin/packages/netcdf/package.py b/var/spack/repos/builtin/packages/netcdf/package.py
index 227362399a..b60a2c4e9a 100644
--- a/var/spack/repos/builtin/packages/netcdf/package.py
+++ b/var/spack/repos/builtin/packages/netcdf/package.py
@@ -43,6 +43,13 @@ class Netcdf(Package):
"--enable-dap"
]
+ # Make sure Netcdf links against Spack's curl
+ # Otherwise it may pick up system's curl, which could lead to link errors:
+ # /usr/lib/x86_64-linux-gnu/libcurl.so: undefined reference to `SSL_CTX_use_certificate_chain_file@OPENSSL_1.0.0'
+ LIBS.append("-lcurl")
+ CPPFLAGS.append("-I%s" % spec['curl'].prefix.include)
+ LDFLAGS.append ("-L%s" % spec['curl'].prefix.lib)
+
if '+mpi' in spec:
config_args.append('--enable-parallel4')
diff --git a/var/spack/repos/builtin/packages/netlib-blas/package.py b/var/spack/repos/builtin/packages/netlib-blas/package.py
deleted file mode 100644
index 85e97323d3..0000000000
--- a/var/spack/repos/builtin/packages/netlib-blas/package.py
+++ /dev/null
@@ -1,46 +0,0 @@
-from spack import *
-import os
-
-
-class NetlibBlas(Package):
- """Netlib reference BLAS"""
- homepage = "http://www.netlib.org/lapack/"
- url = "http://www.netlib.org/lapack/lapack-3.5.0.tgz"
-
- version('3.5.0', 'b1d3e3e425b2e44a06760ff173104bdf')
-
- variant('fpic', default=False, description="Build with -fpic compiler option")
-
- # virtual dependency
- provides('blas')
-
- # Doesn't always build correctly in parallel
- parallel = False
-
- def patch(self):
- os.symlink('make.inc.example', 'make.inc')
-
- mf = FileFilter('make.inc')
- mf.filter('^FORTRAN.*', 'FORTRAN = f90')
- mf.filter('^LOADER.*', 'LOADER = f90')
- mf.filter('^CC =.*', 'CC = cc')
-
- if '+fpic' in self.spec:
- mf.filter('^OPTS.*=.*', 'OPTS = -O2 -frecursive -fpic')
- mf.filter('^CFLAGS =.*', 'CFLAGS = -O3 -fpic')
-
-
- def install(self, spec, prefix):
- make('blaslib')
-
- # Tests that blas builds correctly
- make('blas_testing')
-
- # No install provided
- mkdirp(prefix.lib)
- install('librefblas.a', prefix.lib)
-
- # Blas virtual package should provide blas.a and libblas.a
- with working_dir(prefix.lib):
- symlink('librefblas.a', 'blas.a')
- symlink('librefblas.a', 'libblas.a')
diff --git a/var/spack/repos/builtin/packages/netlib-lapack/package.py b/var/spack/repos/builtin/packages/netlib-lapack/package.py
index 78c5a053fe..c4b7ce3b04 100644
--- a/var/spack/repos/builtin/packages/netlib-lapack/package.py
+++ b/var/spack/repos/builtin/packages/netlib-lapack/package.py
@@ -1,16 +1,15 @@
from spack import *
+
class NetlibLapack(Package):
"""
- LAPACK version 3.X is a comprehensive FORTRAN library that does
- linear algebra operations including matrix inversions, least
- squared solutions to linear sets of equations, eigenvector
- analysis, singular value decomposition, etc. It is a very
- comprehensive and reputable package that has found extensive
- use in the scientific community.
+ LAPACK version 3.X is a comprehensive FORTRAN library that does linear algebra operations including matrix
+ inversions, least squared solutions to linear sets of equations, eigenvector analysis, singular value
+ decomposition, etc. It is a very comprehensive and reputable package that has found extensive use in the
+ scientific community.
"""
homepage = "http://www.netlib.org/lapack/"
- url = "http://www.netlib.org/lapack/lapack-3.5.0.tgz"
+ url = "http://www.netlib.org/lapack/lapack-3.5.0.tgz"
version('3.6.0', 'f2f6c67134e851fe189bb3ca1fbb5101')
version('3.5.0', 'b1d3e3e425b2e44a06760ff173104bdf')
@@ -19,41 +18,34 @@ class NetlibLapack(Package):
version('3.4.0', '02d5706ec03ba885fc246e5fa10d8c70')
version('3.3.1', 'd0d533ec9a5b74933c2a1e84eedc58b4')
- variant('shared', default=False, description="Build shared library version")
- variant('fpic', default=False, description="Build with -fpic compiler option")
+ variant('debug', default=False, description='Activates the Debug build type')
+ variant('shared', default=True, description="Build shared library version")
+ variant('external-blas', default=False, description='Build lapack with an external blas')
+
+ variant('lapacke', default=True, description='Activates the build of the LAPACKE C interface')
# virtual dependency
+ provides('blas', when='~external-blas')
provides('lapack')
- # blas is a virtual dependency.
- depends_on('blas')
depends_on('cmake')
-
- # Doesn't always build correctly in parallel
- parallel = False
-
- @when('^netlib-blas')
- def get_blas_libs(self):
- blas = self.spec['netlib-blas']
- return [join_path(blas.prefix.lib, 'blas.a')]
-
- @when('^atlas')
- def get_blas_libs(self):
- blas = self.spec['atlas']
- return [join_path(blas.prefix.lib, l)
- for l in ('libf77blas.a', 'libatlas.a')]
+ depends_on('blas', when='+external-blas')
def install(self, spec, prefix):
- blas_libs = ";".join(self.get_blas_libs())
- cmake_args = [".", '-DBLAS_LIBRARIES=' + blas_libs]
-
- if '+shared' in spec:
- cmake_args.append('-DBUILD_SHARED_LIBS=ON')
- if '+fpic' in spec:
- cmake_args.append('-DCMAKE_POSITION_INDEPENDENT_CODE=ON')
-
- cmake_args += std_cmake_args
-
- cmake(*cmake_args)
- make()
- make("install")
+ cmake_args = ['-DBUILD_SHARED_LIBS:BOOL=%s' % ('ON' if '+shared' in spec else 'OFF'),
+ '-DCMAKE_BUILD_TYPE:STRING=%s' % ('Debug' if '+debug' in spec else 'Release'),
+ '-DLAPACKE:BOOL=%s' % ('ON' if '+lapacke' in spec else 'OFF')]
+ if '+external-blas' in spec:
+ # TODO : the mechanism to specify the library should be more general,
+ # TODO : but this allows to have an hook to an external blas
+ cmake_args.extend([
+ '-DUSE_OPTIMIZED_BLAS:BOOL=ON',
+ '-DBLAS_LIBRARIES:PATH=%s' % join_path(spec['blas'].prefix.lib, 'libblas.a')
+ ])
+
+ cmake_args.extend(std_cmake_args)
+
+ with working_dir('spack-build', create=True):
+ cmake('..', *cmake_args)
+ make()
+ make("install")
diff --git a/var/spack/repos/builtin/packages/parmetis/enable_external_metis.patch b/var/spack/repos/builtin/packages/parmetis/enable_external_metis.patch
index 514781b8b8..e4f2729483 100644
--- a/var/spack/repos/builtin/packages/parmetis/enable_external_metis.patch
+++ b/var/spack/repos/builtin/packages/parmetis/enable_external_metis.patch
@@ -1,13 +1,71 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
-index ca945dd..1bf94e9 100644
+index ca945dd..aff8b5f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
+@@ -23,7 +23,7 @@ else()
+ set(ParMETIS_LIBRARY_TYPE STATIC)
+ endif()
+
+-include(${GKLIB_PATH}/GKlibSystem.cmake)
++include_directories(${GKLIB_PATH})
+
+ # List of paths that the compiler will search for header files.
+ # i.e., the -I equivalent
@@ -33,7 +33,7 @@ include_directories(${GKLIB_PATH})
include_directories(${METIS_PATH}/include)
-
+
# List of directories that cmake will look for CMakeLists.txt
-add_subdirectory(${METIS_PATH}/libmetis ${CMAKE_BINARY_DIR}/libmetis)
-+#add_subdirectory(${METIS_PATH}/libmetis ${CMAKE_BINARY_DIR}/libmetis)
++find_library(METIS_LIBRARY metis PATHS ${METIS_PATH}/lib)
add_subdirectory(include)
add_subdirectory(libparmetis)
add_subdirectory(programs)
+diff --git a/libparmetis/CMakeLists.txt b/libparmetis/CMakeLists.txt
+index 9cfc8a7..e0c4de7 100644
+--- a/libparmetis/CMakeLists.txt
++++ b/libparmetis/CMakeLists.txt
+@@ -5,7 +5,10 @@ file(GLOB parmetis_sources *.c)
+ # Create libparmetis
+ add_library(parmetis ${ParMETIS_LIBRARY_TYPE} ${parmetis_sources})
+ # Link with metis and MPI libraries.
+-target_link_libraries(parmetis metis ${MPI_LIBRARIES})
++target_link_libraries(parmetis ${METIS_LIBRARY} ${MPI_LIBRARIES})
++if(UNIX)
++ target_link_libraries(parmetis m)
++endif()
+ set_target_properties(parmetis PROPERTIES LINK_FLAGS "${MPI_LINK_FLAGS}")
+
+ install(TARGETS parmetis
+diff --git a/libparmetis/parmetislib.h b/libparmetis/parmetislib.h
+index c1daeeb..07511f6 100644
+--- a/libparmetis/parmetislib.h
++++ b/libparmetis/parmetislib.h
+@@ -20,13 +20,12 @@
+
+ #include <parmetis.h>
+
+-#include "../metis/libmetis/gklib_defs.h"
++#include <gklib_defs.h>
+
+-#include <mpi.h>
++#include <mpi.h>
+
+ #include <rename.h>
+ #include <defs.h>
+ #include <struct.h>
+ #include <macros.h>
+ #include <proto.h>
+-
+diff --git a/programs/parmetisbin.h b/programs/parmetisbin.h
+index e26cd2d..d156480 100644
+--- a/programs/parmetisbin.h
++++ b/programs/parmetisbin.h
+@@ -19,7 +19,7 @@
+ #include <GKlib.h>
+ #include <parmetis.h>
+
+-#include "../metis/libmetis/gklib_defs.h"
++#include <gklib_defs.h>
+ #include "../libparmetis/rename.h"
+ #include "../libparmetis/defs.h"
+ #include "../libparmetis/struct.h"
diff --git a/var/spack/repos/builtin/packages/parmetis/link-to-lm.patch b/var/spack/repos/builtin/packages/parmetis/link-to-lm.patch
deleted file mode 100644
index faa809231e..0000000000
--- a/var/spack/repos/builtin/packages/parmetis/link-to-lm.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff --git a/libparmetis/CMakeLists.txt b/libparmetis/CMakeLists.txt
-index 9cfc8a7..dfc0125 100644
---- a/libparmetis/CMakeLists.txt
-+++ b/libparmetis/CMakeLists.txt
-@@ -5,7 +5,7 @@ file(GLOB parmetis_sources *.c)
- # Create libparmetis
- add_library(parmetis ${ParMETIS_LIBRARY_TYPE} ${parmetis_sources})
- # Link with metis and MPI libraries.
--target_link_libraries(parmetis metis ${MPI_LIBRARIES})
-+target_link_libraries(parmetis metis ${MPI_LIBRARIES} "-lm")
- set_target_properties(parmetis PROPERTIES LINK_FLAGS "${MPI_LINK_FLAGS}")
-
- install(TARGETS parmetis
-
diff --git a/var/spack/repos/builtin/packages/parmetis/package.py b/var/spack/repos/builtin/packages/parmetis/package.py
index bc71fb7299..f5b8b6de91 100644
--- a/var/spack/repos/builtin/packages/parmetis/package.py
+++ b/var/spack/repos/builtin/packages/parmetis/package.py
@@ -52,8 +52,6 @@ class Parmetis(Package):
# https://bitbucket.org/petsc/pkg-parmetis/commits/82409d68aa1d6cbc70740d0f35024aae17f7d5cb/raw/
patch('pkg-parmetis-82409d68aa1d6cbc70740d0f35024aae17f7d5cb.patch')
- patch('link-to-lm.patch')
-
depends_on('gdb', when='+gdb')
def install(self, spec, prefix):
@@ -66,7 +64,7 @@ class Parmetis(Package):
# FIXME : Once a contract is defined, MPI compilers should be retrieved indirectly via spec['mpi'] in case
# FIXME : they use a non-standard name
- options.extend(['-DGKLIB_PATH:PATH={metis_source}/GKlib'.format(metis_source=metis_source), # still need headers from METIS source, and they are not installed with METIS. shame...
+ options.extend(['-DGKLIB_PATH:PATH={metis_source}/GKlib'.format(metis_source=spec['metis'].prefix.include),
'-DMETIS_PATH:PATH={metis_source}'.format(metis_source=spec['metis'].prefix),
'-DCMAKE_C_COMPILER:STRING=mpicc',
'-DCMAKE_CXX_COMPILER:STRING=mpicxx'])