diff --git a/easybuild/easyblocks/c/cmakepythonpackage.py b/easybuild/easyblocks/c/cmakepythonpackage.py
index 9ac2abf29a..d3a5682cf4 100644
--- a/easybuild/easyblocks/c/cmakepythonpackage.py
+++ b/easybuild/easyblocks/c/cmakepythonpackage.py
@@ -21,7 +21,7 @@
from easybuild.easyblocks.p.pythonpackage import PythonPackage
class CMakePythonPackage(CMake, PythonPackage):
- """Build a Python module with cmake.
+ """Build a Python package and module with cmake.
Some packages use cmake to first build and install c Python modules
and then put the Python package in lib/pythonX.Y/site-packages
@@ -34,21 +34,22 @@ class CMakePythonPackage(CMake, PythonPackage):
def __init__(self, *args, **kwargs):
PythonPackage.__init__(self, *args, **kwargs)
- def configure(self):
+ def configure(self, *args, **kwargs):
"""Main onfiguration is with cmake"""
- PythonPackage.configure(self)
-
- CMake.configure(self)
+ PythonPackage.configure(self, *args, **kwargs)
- def make(self):
- """Build with make"""
- CMake.make(self)
+ CMake.configure(self, *args, **kwargs)
- def make_install(self):
- """Install with make install"""
- CMake.make_install(self)
+ def make(self, *args, **kwargs):
+ """Build with cmake"""
+ return CMake.make(self, *args, **kwargs)
+
+ def make_install(self):
+ """Install with cmake install"""
+ return CMake.make_install(self)
def make_module_extra(self):
"""Extra Python package module parameters"""
- PythonPackage.make_module_extra(self)
\ No newline at end of file
+ #we return a string here.
+ return PythonPackage.make_module_extra(self)
diff --git a/easybuild/easyblocks/d/dolphin.py b/easybuild/easyblocks/d/dolfin.py
similarity index 91%
rename from easybuild/easyblocks/d/dolphin.py
rename to easybuild/easyblocks/d/dolfin.py
index 1264ded14e..5408baef5b 100644
--- a/easybuild/easyblocks/d/dolphin.py
+++ b/easybuild/easyblocks/d/dolfin.py
@@ -47,7 +47,7 @@ def configure(self):
self.updatecfg('configopts', ' -DMPI_CXX_COMPILER="$MPICXX"')
# Boost config parameters
- self.updatecfg('configopts', " -DBoost_DIR=%s" % depsdict['Boost'])
+ #self.updatecfg('configopts', " -DBoost_DIR=%s" % depsdict['Boost'])
self.updatecfg('configopts', " -DBOOST_INCLUDEDIR=%s/include" % depsdict['Boost'])
self.updatecfg('configopts', " -DBoost_DEBUG=ON -DBOOST_ROOT=%s" % depsdict['Boost'])
@@ -56,8 +56,7 @@ def configure(self):
self.updatecfg('configopts', "-DARMADILLO_DIR:PATH=%s " % depsdict['Armadillo'])
# specify MPI library
- # FIXME
- self.updatecfg('configopts', ' -DMPI_COMPILER="%s"' % self.getenv('MPICC'))
+ self.updatecfg('configopts', ' -DMPI_COMPILER="%s"' % os.getenv('MPICC'))
if not os.getenv('MPI_LIB_SHARED') or not os.getenv('MPI_INC'):
self.updatecfg('configopts', ' -DMPI_LIBRARY="%s"' % os.getenv('MPI_LIB_SHARED'))
@@ -67,9 +66,9 @@ def configure(self):
# specify Python paths
python_short_ver = ".".join(os.getenv('SOFTVERSIONPYTHON').split(".")[0:2])
- self.updatecfg('configopts', " -DPYTHON_INCLUDE_PATH=%s/include/python%s" % (depsdict['Python'],
+ self.updatecfg('configopts', " -DPYTHON_INCLUDE_PATH=%s/include/python%s" % (depsdict['Python'],
python_short_ver))
- self.updatecfg('configopts', " -DPYTHON_LIBRARIES=%s/lib/libpython%s.so" % (depsdict['Python'],
+ self.updatecfg('configopts', " -DPYTHON_LIBRARY=%s/lib/libpython%s.so" % (depsdict['Python'],
python_short_ver))
# SuiteSparse config params
@@ -84,8 +83,9 @@ def configure(self):
self.updatecfg('configopts', umfpack_params)
# ParMETIS and SCOTCH
+
+ self.updatecfg('configopts', ' -DSCOTCH_DIR="%s" -DSCOTCH_DEBUG:BOOL=ON' % depsdict['SCOTCH'])
self.updatecfg('configopts', ' -DPARMETIS_DIR="%s"' % depsdict['ParMETIS'])
- self.updatecfg('configopts', ' -DSCOTCH_DIR="%s"' % depsdict['SCOTCH'])
# BLACS and LAPACK
self.updatecfg('configopts', ' -DBLAS_LIBRARIES:PATH="$LIBBLAS"')
@@ -95,14 +95,14 @@ def configure(self):
openmp = get_openmp_flag(self.log)
self.updatecfg('configopts', ' -DOpenMP_CXX_FLAGS="%s"' % openmp)
self.updatecfg('configopts', ' -DOpenMP_C_FLAGS="%s"' % openmp)
-
+
CMakePythonPackage.configure(self)
def make_module_extra(self):
"""Set extra environment variables for Dolfin."""
txt = CMakePythonPackage.make_module_extra(self)
-
+
# Dolfin needs to find Boost and the UFC pkgconfig file
txt += "setenv\tBOOST_DIR\t%s\n" % get_software_root('Boost')
txt += "prepend-path\tPKG_CONFIG_PATH\t%s/lib/pkgconfig\n" % get_software_root('UFC')
@@ -111,11 +111,11 @@ def make_module_extra(self):
envvars = ['I_MPI_CXX', 'I_MPI_CC']
for envvar in envvars:
envar_val = os.getenv(envvar)
- if not envar_val:
+ if not envar_val and self.tk.name in ['ictce', 'iqacml']:
self.log.error("%s not defined in environment, needed by DOLFIN" % envvar)
else:
txt += "setenv\t%s\t%s\n" % (envvar, envar_val)
-
+
return txt
def sanitycheck(self):
@@ -123,8 +123,8 @@ def sanitycheck(self):
if not self.getcfg('sanityCheckPaths'):
- self.setcfg('sanityCheckPaths', {'files': ['bin/dolfin-%s' % x for x in ['version','convert',
- 'order','plot']]
+ self.setcfg('sanityCheckPaths', {'files': ['bin/dolfin-%s' % x for x in ['version', 'convert',
+ 'order', 'plot']]
+ ['include/dolfin.h'],
'dirs':['%s/dolfin' % self.pylibdir]
})
diff --git a/easybuild/easyblocks/m/metis.py b/easybuild/easyblocks/m/metis.py
new file mode 100644
index 0000000000..20c5e0f366
--- /dev/null
+++ b/easybuild/easyblocks/m/metis.py
@@ -0,0 +1,70 @@
+##
+# Copyright 2009-2012 Stijn Deweirdt, Dries Verdegem, Kenneth Hoste, Pieter De Baets, Jens Timmerman
+#
+# This file is part of EasyBuild,
+# originally created by the HPC team of the University of Ghent (http://ugent.be/hpc).
+#
+# http://github.com/hpcugent/easybuild
+#
+# EasyBuild is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation v2.
+#
+# EasyBuild is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with EasyBuild. If not, see .
+##
+
+import os
+import shutil
+
+from easybuild.framework.application import Application
+from easybuild.tools.filetools import mkdir
+
+class METIS(Application):
+
+
+ def configure(self, *args, **kwargs):
+ """No configuration is done for METIS"""
+ pass
+
+ def make_install(self):
+ """ Manually copy the required files to the right place.
+
+ And create symlins where expected by other applications
+ (in Lib instead of lib)"""
+ libdir = os.path.join(self.installdir, 'lib')
+ mkdir(libdir)
+
+ includedir = os.path.join(self.installdir, 'include')
+ mkdir(includedir)
+
+ try:
+ src = os.path.join(self.getcfg('startfrom'), 'libmetis.a')
+ dst = os.path.join(libdir, 'libmetis.a')
+ shutil.copy2(src, dst)
+ except OSError, err:
+ self.log.error("Copying file libmetis.a to lib dir failed: %s" % err)
+
+ try:
+ for f in ['defs.h', 'macros.h', 'metis.h', 'proto.h', 'rename.h', 'struct.h']:
+ src = os.path.join(self.getcfg('startfrom'), 'Lib', f)
+ dst = os.path.join(includedir, f)
+ shutil.copy2(src, dst)
+ os.chmod(dst, 0755)
+ except OSError, err:
+ self.log.error("Copying file metis.h to include dir failed: %s" % err)
+
+ # Other applications depending on ParMETIS (SuiteSparse for one) look for both ParMETIS libraries
+ # and headerfiles in the Lib directory (capital L). The following symlinks are hence created.
+ try:
+ Libdir = os.path.join(self.installdir, 'Lib')
+ os.symlink(libdir, Libdir)
+ for f in ['defs.h', 'macros.h', 'metis.h', 'proto.h', 'rename.h', 'struct.h']:
+ os.symlink(os.path.join(includedir, file), os.path.join(libdir, f))
+ except OSError, err:
+ self.log.error("Something went wrong during symlink creation: %s" % err)
diff --git a/easybuild/easyblocks/p/parmetis.py b/easybuild/easyblocks/p/parmetis.py
new file mode 100644
index 0000000000..cbfff8ad07
--- /dev/null
+++ b/easybuild/easyblocks/p/parmetis.py
@@ -0,0 +1,134 @@
+##
+# Copyright 2009-2012 Stijn Deweirdt, Dries Verdegem, Kenneth Hoste, Pieter De Baets, Jens Timmerman
+#
+# This file is part of EasyBuild,
+# originally created by the HPC team of the University of Ghent (http://ugent.be/hpc).
+#
+# http://github.com/hpcugent/easybuild
+#
+# EasyBuild is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation v2.
+#
+# EasyBuild is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with EasyBuild. If not, see .
+##
+"""
+ParMETIS easyblock
+"""
+
+import os
+import shutil
+
+from distutils.version import LooseVersion
+from easybuild.easyblocks.m.metis import METIS
+from easybuild.tools.filetools import run_cmd, mkdir
+
+class ParMETIS(METIS):
+ """
+ Easyblock for the ParMETIS package
+ Parmetis
+ """
+
+ def configure(self):
+ """
+ For versions of ParMETIS < 4 configure METIS separately
+ New versions of ParMETIS include METIS
+
+ Run 'cmake' in the build dir to get rid of a 'user friendly'
+ help message that is displayed without this step.
+ """
+ if self.version() < LooseVersion("4"):
+ return METIS.configure(self)
+ #tested with 4.0.2, now actually requires cmake to be run first
+ #for bot parmetis and metis
+ for buildir in [ 'build' ] :
+ cmd = 'cd %s && cmake .. %s -DCMAKE_INSTALL_PREFIX="%s" && cd %s' % \
+ (buildir, self.getcfg('configopts'), self.installdir, self.getcfg('startfrom'))
+ run_cmd(cmd, log_all=True, simple=True)
+
+
+
+ def make(self, verbose=False):
+ """
+ make ParMETIS and Metis
+
+ Calling make
+ for version > 4 cmake is run in the build dir.
+ """
+ paracmd = ''
+ if self.getcfg('parallel'):
+ paracmd = "-j %s" % self.getcfg('parallel')
+
+ cmd = "%s make %s %s" % (self.getcfg('premakeopts'), paracmd, self.getcfg('makeopts'))
+ if self.version() >= LooseVersion("4"):
+ #this is done in the build dir.
+ cmd = "cd build && %s && cd %s " % (cmd, self.getcfg('startfrom'))
+ run_cmd(cmd, log_all=True, simple=True, log_output=verbose)
+
+ def make_install(self):
+ """
+ Manually copy files over to the right places
+ (libmetis.a, libparmetis.a, metis.h, parmetis.h)
+ Also create symlinks where expected by other packages (Lib directory)
+ """
+ includedir = os.path.join(self.installdir, 'include')
+ libdir = os.path.join(self.installdir, 'lib')
+
+ if self.version() >= LooseVersion("4"):
+ #includedir etc changed in v4, use a normal makeinstall
+ cmd = "cd build && make install %s && cd %s" % (self.getcfg('installopts'),
+ self.getcfg('startfrom'))
+ run_cmd(cmd, log_all=True, simple=True)
+
+ try:
+ src = os.path.join(self.getcfg('startfrom'), 'build/libmetis/libmetis.a')
+ dst = os.path.join(libdir, 'libmetis.a')
+ shutil.copy2(src, dst)
+ except OSError, err:
+ self.log.error("Copying files to installation dir failed: %s" % err)
+ try:
+ src = os.path.join(self.getcfg('startfrom'), 'build/metis/include/metis.h')
+ dst = os.path.join(includedir, 'metis.h')
+ shutil.copy2(src, dst)
+ except OSError, err:
+ self.log.error("Copying files to installation dir failed: %s" % err)
+
+ else:
+
+ mkdir(libdir)
+ mkdir(includedir)
+
+ try:
+ for fil in ['libmetis.a', 'libparmetis.a']:
+ src = os.path.join(self.getcfg('startfrom'), fil)
+ dst = os.path.join(libdir, fil)
+ shutil.copy2(src, dst)
+ except OSError, err:
+ self.log.error("Copying files to installation dir failed: %s" % err)
+
+ try:
+ src = os.path.join(self.getcfg('startfrom'), 'parmetis.h')
+ dst = os.path.join(includedir, 'parmetis.h')
+ shutil.copy2(src, dst)
+ # Some applications (SuiteSparse) can only use METIS (not ParMETIS), but header files are the same
+ dst = os.path.join(includedir, 'metis.h')
+ shutil.copy2(src, dst)
+ except OSError, err:
+ self.log.error("Copying files to installation dir failed: %s" % err)
+
+ # Other applications depending on ParMETIS (SuiteSparse for one) look for both ParMETIS libraries
+ # and headerfiles in the Lib directory (capital L). The following symlink are hence created.
+ try:
+ llibdir = os.path.join(self.installdir, 'Lib')
+ os.symlink(libdir, llibdir)
+ os.symlink(os.path.join(includedir, 'metis.h'), os.path.join(libdir, 'metis.h'))
+ os.symlink(os.path.join(includedir, 'parmetis.h'),
+ os.path.join(libdir, 'parmetis.h'))
+ except OSError, err:
+ self.log.error("Something went wrong during symlink creation: %s" % err)
diff --git a/easybuild/easyblocks/p/pythonpackage.py b/easybuild/easyblocks/p/pythonpackage.py
index d556797f2c..42170ac52b 100644
--- a/easybuild/easyblocks/p/pythonpackage.py
+++ b/easybuild/easyblocks/p/pythonpackage.py
@@ -47,14 +47,14 @@ def make(self):
cmd = "python setup.py build"
- run_cmd(cmd, logall=True, simple=True)
+ run_cmd(cmd, log_all=True, simple=True)
def make_install(self):
"""Install Python package to a custom path using setup.py"""
cmd = "python setup.py install --prefix=%s %s" % (self.installdir, self.getcfg('installopts'))
- run_cmd(cmd, logall=True, simple=True)
+ run_cmd(cmd, log_all=True, simple=True)
def make_module_extra(self):
"""Add install path to PYTHONPATH"""
@@ -75,4 +75,4 @@ def make_module_extra(self):
txt += "prepend-path\tPYTHONPATH\t%s\n" % installdir
- return txt
\ No newline at end of file
+ return txt
diff --git a/easybuild/easyblocks/s/scotch.py b/easybuild/easyblocks/s/scotch.py
new file mode 100644
index 0000000000..6418b1f56f
--- /dev/null
+++ b/easybuild/easyblocks/s/scotch.py
@@ -0,0 +1,104 @@
+##
+# Copyright 2009-2012 Stijn Deweirdt, Dries Verdegem, Kenneth Hoste, Pieter De Baets, Jens Timmerman
+#
+# This file is part of EasyBuild,
+# originally created by the HPC team of the University of Ghent (http://ugent.be/hpc).
+#
+# http://github.com/hpcugent/easybuild
+#
+# EasyBuild is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation v2.
+#
+# EasyBuild is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with EasyBuild. If not, see .
+##
+"""
+This module contains the SCOTCH easyblock.
+"""
+import os
+import re
+import shutil
+from easybuild.framework.application import Application
+from easybuild.tools.filetools import run_cmd
+
+class SCOTCH(Application):
+ """
+ Easyblock for building SCOTCH
+ """
+ def configure(self):
+ """
+ Locate the correct makefile, and copy this to a general Makefile.inc
+ (as shipped and expected by SCOTCH)
+ """
+ if self.tk.name in ['ictce', 'iqacml']:
+ makefilename = 'Makefile.inc.x86-64_pc_linux2.icc'
+
+ elif self.tk.name in ['goalf']:
+ makefilename = 'Makefile.inc.x86-64_pc_linux2'
+ else:
+ self.log.error("Don't know how to handle toolkit %s." % self.tk.name)
+
+ try:
+ srcdir = os.path.join(self.getcfg('startfrom'), 'src')
+ src = os.path.join(srcdir, 'Make.inc', makefilename)
+ dst = os.path.join(srcdir, 'Makefile.inc')
+ shutil.copy2(src, dst)
+ self.log.debug("Successfully copied Makefile.inc to src dir.")
+ except OSError:
+ self.log.error("Copying Makefile.inc to src dir failed.")
+ try:
+ os.chdir(srcdir)
+ self.log.debug("Changing to src dir.")
+ except OSError, err:
+ self.log.error("Failed to change to src dir: %s" % err)
+
+ def make(self):
+ """
+ Run make, but with some special options for SCOTCH depending on the compiler
+ """
+ ccs = os.environ['CC']
+ ccp = os.environ['MPICC']
+ ccd = os.environ['MPICC']
+ cflags = ""
+ if self.tk.name == "iqacml":
+ cflags = "-fPIC -O3 -DCOMMON_FILE_COMPRESS_GZ -DCOMMON_PTHREAD -DCOMMON_RANDOM_FIXED_SEED -DSCOTCH_RENAME -restrict -DIDXSIZE64"
+ elif self.tk.name == 'ictce':
+ cflags = "-fPIC -O3 -DCOMMON_FILE_COMPRESS_GZ -DCOMMON_PTHREAD -DCOMMON_RANDOM_FIXED_SEED -DSCOTCH_RENAME -DSCOTCH_PTHREAD -restrict -DIDXSIZE64"
+ else:
+ cflags = "-fPIC -O3 -DCOMMON_FILE_COMPRESS_GZ -DCOMMON_PTHREAD -DCOMMON_RANDOM_FIXED_SEED -DSCOTCH_RENAME -DSCOTCH_PTHREAD -Drestrict=__restrict"
+ cmd = 'make CCS="%s" CCP="%s" CCD="%s" CFLAGS="%s" scotch' % (ccs, ccp, ccd, cflags)
+ run_cmd(cmd, log_all=True, simple=True)
+ cmd = 'make CCS="%s" CCP="%s" CCD="%s" CFLAGS="%s" ptscotch' % (ccs, ccp, ccd, cflags)
+ run_cmd(cmd, log_all=True, simple=True)
+
+ def make_install(self):
+ try:
+ for d in ["include", "lib", "bin", "man"]:
+ src = os.path.join(self.getcfg('startfrom'), d)
+ dst = os.path.join(self.installdir, d)
+ shutil.copytree(src, dst)
+ except OSError, err:
+ self.log.error("Copying %s to installation dir %s failed: %s" % (src, dst, err))
+
+ scotchlibdir = os.path.join(self.installdir, 'lib')
+ scotchgrouplib = os.path.join(scotchlibdir, 'libscotch_group.a')
+ liblistorig = os.listdir(scotchlibdir)
+ liblist = []
+ regmetis = re.compile(r".*metis.*")
+ for lib in liblistorig:
+ if not regmetis.match(lib): liblist.append(lib)
+ line = ' '.join(liblist)
+ line = "GROUP (%s)" % line
+ try:
+ f = open(scotchgrouplib, 'w')
+ f.write(line)
+ f.close()
+ self.log.info("Successfully written group lib file: %s" % scotchgrouplib)
+ except Exception, err:
+ self.log.error("Can't write to file %s: %s" % (scotchgrouplib, err))
diff --git a/easybuild/easyblocks/s/suitesparse.py b/easybuild/easyblocks/s/suitesparse.py
new file mode 100644
index 0000000000..4e4a346813
--- /dev/null
+++ b/easybuild/easyblocks/s/suitesparse.py
@@ -0,0 +1,88 @@
+##
+# Copyright 2009-2012 Stijn Deweirdt, Dries Verdegem, Kenneth Hoste, Pieter De Baets, Jens Timmerman
+#
+# This file is part of EasyBuild,
+# originally created by the HPC team of the University of Ghent (http://ugent.be/hpc).
+#
+# http://github.com/hpcugent/easybuild
+#
+# EasyBuild is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation v2.
+#
+# EasyBuild is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with EasyBuild. If not, see .
+##
+from easybuild.framework.application import Application
+from easybuild.tools.filetools import run_cmd
+import os
+import shutil
+
+class SuiteSparse(Application):
+
+ def configure(self):
+ pass
+
+ def make(self):
+ cmd = 'make'
+
+ run_cmd(cmd, log_all=True, simple=True)
+
+ def make_install(self):
+ """
+ Just copy the contents of the builddir to the installdir
+ - keep permissions with copy2 !!
+ """
+ for x in os.listdir(self.getcfg('startfrom')):
+ src = os.path.join(self.getcfg('startfrom'), x)
+ dst = os.path.join(self.installdir, x)
+ try:
+ if os.path.isdir(src):
+ shutil.copytree(src, dst)
+ #symlink
+ # - dst/Lib to dst/lib
+ # - dst/Include to dst/include
+ for c in ['Lib', 'Include']:
+ nsrc = os.path.join(dst, c)
+ ndst = os.path.join(dst, c.lower())
+ if os.path.exists(nsrc):
+ os.symlink(nsrc, ndst)
+ else:
+ shutil.copy2(src, dst)
+ except:
+ self.log.exception("Copying src %s to dst %s failed" % (src, dst))
+
+ # Some extra symlinks are necessary for UMFPACK to work.
+ for f in ['AMD/include/amd.h', 'AMD/include/amd_internal.h', 'UFconfig/UFconfig.h']:
+ src = os.path.join(self.installdir, f)
+ dst = os.path.join(self.installdir, 'UMFPACK', 'include', f.split('/')[-1])
+ if os.path.exists(src):
+ try: os.symlink(src, dst)
+ except Exception, err:
+ self.log.error("Failed to make symbolic link from %s to %s: %s" % (src, dst, err))
+
+ for f in ['AMD/lib/libamd.a']:
+ src = os.path.join(self.installdir, f)
+ dst = os.path.join(self.installdir, 'UMFPACK', 'lib', f.split('/')[-1])
+ if os.path.exists(src):
+ try: os.symlink(src, dst)
+ except Exception, err:
+ self.log.error("Failed to make symbolic link from %s to %s: %s" % (src, dst, err))
+
+ def sanitycheck(self):
+
+ if not self.getcfg('sanityCheckPaths'):
+ self.setcfg('sanityCheckPaths', {'files':["%s/lib/lib%s.a" % (x, x.lower()) for x in ["AMD", "BTF", "CAMD", "CCOLAMD", "CHOLMOD", "COLAMD",
+ "CXSparse", "KLU", "LDL", "RBio", "SPQR", "UMFPACK"]] +
+ ["CSparse3/lib/libcsparse.a"],
+ 'dirs':[ "MATLAB_Tools"]
+ })
+
+ self.log.info("Customized sanity check paths: %s" % self.getcfg('sanityCheckPaths'))
+
+ Application.sanitycheck(self)
diff --git a/easybuild/easyconfigs/a/Armadillo/Armadillo-2.4.4-goalf-1.1.0-no-OFED.eb b/easybuild/easyconfigs/a/Armadillo/Armadillo-2.4.4-goalf-1.1.0-no-OFED.eb
new file mode 100644
index 0000000000..5326c1fb68
--- /dev/null
+++ b/easybuild/easyconfigs/a/Armadillo/Armadillo-2.4.4-goalf-1.1.0-no-OFED.eb
@@ -0,0 +1,25 @@
+name='Armadillo'
+version='2.4.4'
+
+easyblock= "CMake"
+homepage='http://arma.sourceforge.net/'
+description="Armadillo is an open-source C++ linear algebra library (matrix maths) aiming towards a good balance between speed and ease of use. Integer, floating point and complex numbers are supported, as well as a subset of trigonometric and statistics functions."
+
+sourceURLs=['http://sourceforge.net/projects/arma/files']
+toolkit={'name':'goalf','version':'1.1.0-no-OFED'}
+builddependencies = [
+ ('CMake','2.8.4'),
+ ]
+
+#manually add toolkit suffix here, plus True for letting the dependency use it's own toolkit and not the dummy one
+dependencies=[
+ ('Boost','1.49.0'),
+ ]
+
+sources=['%s-%s.tar.gz'%(name.lower(),version)]
+
+sanityCheckPaths = {'files': ['lib/libarmadillo.so','include/armadillo'], 'dirs':['include','include/armadillo_bits']}
+
+#extra options for cmake
+configopts=' -DBoost_DIR=$SOFTROOTBOOST -DBOOST_INCLUDEDIR=$SOFTROOTBOOST/include -DBoost_DEBUG=ON -DBOOST_ROOT=$SOFTROOTBOOST -DBLAS_LIBRARY:PATH="$LIBBLAS"'
+configopts += ' -DLAPACK_LIBRARY:PATH="$LIBLAPACK"'
diff --git a/easybuild/easyconfigs/b/Boost/.Boost-1.49.0-ictce-4.0.6.eb.swp b/easybuild/easyconfigs/b/Boost/.Boost-1.49.0-ictce-4.0.6.eb.swp
deleted file mode 100644
index c8fdbd3a3d..0000000000
Binary files a/easybuild/easyconfigs/b/Boost/.Boost-1.49.0-ictce-4.0.6.eb.swp and /dev/null differ
diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.49.0-goalf-1.1.0-no-OFED.eb b/easybuild/easyconfigs/b/Boost/Boost-1.49.0-goalf-1.1.0-no-OFED.eb
new file mode 100644
index 0000000000..f974f5f2a1
--- /dev/null
+++ b/easybuild/easyconfigs/b/Boost/Boost-1.49.0-goalf-1.1.0-no-OFED.eb
@@ -0,0 +1,24 @@
+name='Boost'
+version='1.49.0'
+
+homepage='http://www.boost.org/'
+description="Boost provides free peer-reviewed portable C++ source libraries."
+
+toolkit={'name':'goalf','version':'1.1.0-no-OFED'}
+toolkitopts={'pic':True}
+
+dependencies=[('Python','2.7.3')]
+
+sources=['%s_%s.tar.gz'%(name.lower(), '_'.join(version.split('.')))]
+sourceURLs=[('http://sourceforge.net/projects/%(name)s/files/%(name)s/%(version)s' % {'name':name.lower(), 'version':version}, 'download')]
+
+patches=['intellinuxjam_fPIC.patch']
+
+sanityCheckPaths = {'files': ['lib/libboost_python.so','lib/libboost_system.so'], 'dirs':['include/boost']}
+
+#also build boost_mpi
+boost_mpi=True
+
+if boost_mpi:
+ toolkitopts['usempi'] =True
+ sanityCheckPaths['files'].append('lib/libboost_mpi.so')
diff --git a/easybuild/easyconfigs/b/Boost/Boost-1.49.0-ictce-4.0.6.eb b/easybuild/easyconfigs/b/Boost/Boost-1.49.0-ictce-4.0.6.eb
index 5cbbeb31c7..f72a8aa810 100644
--- a/easybuild/easyconfigs/b/Boost/Boost-1.49.0-ictce-4.0.6.eb
+++ b/easybuild/easyconfigs/b/Boost/Boost-1.49.0-ictce-4.0.6.eb
@@ -10,7 +10,7 @@ toolkitopts={'pic':True}
dependencies=[('Python','2.7.3')]
sources=['%s_%s.tar.gz'%(name.lower(), '_'.join(version.split('.')))]
-sourceURLs=['http://sourceforge.net/projects/%(name)s/files/%(name)s/%(version)s' % {'name':name, 'version':version}, 'download']
+sourceURLs=[('http://sourceforge.net/projects/%(name)s/files/%(name)s/%(version)s' % {'name':name.lower(), 'version':version}, 'download')]
patches=['intellinuxjam_fPIC.patch']
diff --git a/easybuild/easyconfigs/b/Boost/intellinuxjam_fPIC.patch b/easybuild/easyconfigs/b/Boost/intellinuxjam_fPIC.patch
new file mode 100644
index 0000000000..27c86f46d6
--- /dev/null
+++ b/easybuild/easyconfigs/b/Boost/intellinuxjam_fPIC.patch
@@ -0,0 +1,21 @@
+--- tools/build/v2/tools/intel-linux.jam.orig 2010-06-24 15:16:30.987009211 +0200
++++ tools/build/v2/tools/intel-linux.jam 2010-06-24 15:17:29.954033026 +0200
+@@ -114,6 +114,8 @@
+ {
+ gcc.setup-threading $(targets) : $(sources) : $(properties) ;
+ gcc.setup-fpic $(targets) : $(sources) : $(properties) ;
++ OPTIONS on $(targets) += -fPIC ;
++ OPTIONS on $(targets) += -v ;
+ gcc.setup-address-model $(targets) : $(sources) : $(properties) ;
+ DEPENDS $(<) : [ on $(<) return $(PCH_FILE) ] ;
+ }
+@@ -127,6 +129,8 @@
+ {
+ gcc.setup-threading $(targets) : $(sources) : $(properties) ;
+ gcc.setup-fpic $(targets) : $(sources) : $(properties) ;
++ OPTIONS on $(targets) += -fPIC ;
++ OPTIONS on $(targets) += -v ;
+ gcc.setup-address-model $(targets) : $(sources) : $(properties) ;
+ DEPENDS $(<) : [ on $(<) return $(PCH_FILE) ] ;
+ }
+
diff --git a/easybuild/easyconfigs/c/CMake/CMake-2.8.4-goalf-1.1.0-no-OFED.eb b/easybuild/easyconfigs/c/CMake/CMake-2.8.4-goalf-1.1.0-no-OFED.eb
new file mode 100644
index 0000000000..e721af6204
--- /dev/null
+++ b/easybuild/easyconfigs/c/CMake/CMake-2.8.4-goalf-1.1.0-no-OFED.eb
@@ -0,0 +1,15 @@
+name='CMake'
+version='2.8.4'
+
+homepage='http://www.cmake.org'
+description="""CMake, the cross-platform, open-source build system. CMake is a family of tools designed to build, test and package software. """
+
+toolkit={'name':'goalf','version':'1.1.0-no-OFED'}
+sources=['%s-%s.tar.gz'%(name.lower(),version)]
+majorversion = ".".join(version.split('.')[:-1])
+sourceURLs = ['http://www.cmake.org/files/v%s' % majorversion]
+sanityCheckPaths={
+ 'files':["bin/%s" % x for x in ['cmake','cpack','ctest']],
+ 'dirs':[]
+ }
+
diff --git a/easybuild/easyconfigs/d/DOLFIN/DOLFIN-1.0.0-goalf-1.1.0-no-OFED.eb b/easybuild/easyconfigs/d/DOLFIN/DOLFIN-1.0.0-goalf-1.1.0-no-OFED.eb
new file mode 100644
index 0000000000..568cdf274c
--- /dev/null
+++ b/easybuild/easyconfigs/d/DOLFIN/DOLFIN-1.0.0-goalf-1.1.0-no-OFED.eb
@@ -0,0 +1,43 @@
+name='DOLFIN'
+version='1.0.0'
+
+easyblock="Dolfin"
+
+homepage='https://launchpad.net/dolfin'
+description="DOLFIN is the C++/Python interface of FEniCS, providing a consistent PSE (Problem Solving Environment) for ordinary and partial differential equations."
+
+toolkit={'name':'goalf','version':'1.1.0-no-OFED'}
+toolkitopts={'usempi':True, 'packed-groups':False}
+
+majver = version.split('.')
+if majver[0] == '0':
+ majver = majver[0]
+else:
+ majver = '.'.join(majver[0:2])
+
+sources=['%s-%s.tar.gz'%(name.lower(),version)]
+sourceURLs=['https://launchpad.net/%s/%s.x/%s/+download' % (name.lower(), majver, version)]
+
+patches=['wl_pkg_linkflags.patch']
+
+builddependencies = [('CMake', '2.8.4')]
+
+python_version = '2.7.3'
+versionsuffix = '-%s-%s-Python-%s' % (toolkit['name'], toolkit['version'], python_version)
+
+# some dependencies use dummy toolkit
+dependencies=[
+ ('Python', python_version),
+ ('Boost', '1.49.0'),
+ ('UFC', '2.0.5'),
+ ('FFC', '1.0.0', versionsuffix, True),
+ ('FIAT', '1.0.0', versionsuffix, True),
+ ('Instant', '1.0.0', versionsuffix, True),
+ ('Viper', '1.0.0', versionsuffix, True),
+ ('UFL', '1.0.0', versionsuffix, True),
+ ('SCOTCH', '5.1.12b_esmumps'),
+ ('Armadillo', '2.4.4'),
+ ('ParMETIS', '4.0.2'),
+ ('SWIG', '2.0.6', versionsuffix, True),
+ ('SuiteSparse', '3.7.0', '-withparmetis', False),
+ ]
diff --git a/easybuild/easyconfigs/d/DOLFIN/DOLFIN-1.0.0-ictce-4.0.6.eb b/easybuild/easyconfigs/d/DOLFIN/DOLFIN-1.0.0-ictce-4.0.6.eb
index 9af976714c..f5196045fa 100644
--- a/easybuild/easyconfigs/d/DOLFIN/DOLFIN-1.0.0-ictce-4.0.6.eb
+++ b/easybuild/easyconfigs/d/DOLFIN/DOLFIN-1.0.0-ictce-4.0.6.eb
@@ -21,20 +21,22 @@ patches=['wl_pkg_linkflags.patch']
builddependencies = [('CMake', '2.8.4', '', True)]
python_version = '2.7.3'
+versionsuffix = '-Python-%s' % python_version
+
# some dependencies use dummy toolkit
dependencies=[
('Python', python_version),
('Boost', '1.49.0'),
('UFC', '2.0.5'),
- ('FFC', '1.0.0', '', True),
- ('FIAT', '1.0.0', '', True),
- ('Instant', '1.0.0', '', True),
- ('Viper', '1.0.0', '', True),
- ('UFL', '1.0.0', '', True),
+ ('FFC', '1.0.0', versionsuffix),
+ ('FIAT', '1.0.0', versionsuffix),
+ ('Instant', '1.0.0', versionsuffix),
+ ('Viper', '1.0.0', versionsuffix),
+ ('UFL', '1.0.0', versionsuffix),
('SCOTCH', '5.1.12b_esmumps'),
('Armadillo', '2.4.4'),
('ParMETIS', '4.0.2'),
- ('SWIG', '2.0.4', "-Python-%s" % python_version),
+ ('SWIG', '2.0.6', versionsuffix),
('SuiteSparse', '3.7.0', '-withparmetis', False),
]
diff --git a/easybuild/easyconfigs/d/DOLFIN/wl_pkg_linkflags.patch b/easybuild/easyconfigs/d/DOLFIN/wl_pkg_linkflags.patch
index cee8d5f4c8..f16cde32b9 100644
--- a/easybuild/easyconfigs/d/DOLFIN/wl_pkg_linkflags.patch
+++ b/easybuild/easyconfigs/d/DOLFIN/wl_pkg_linkflags.patch
@@ -1,6 +1,6 @@
--- dolfin/CMakeLists.txt.orig 2012-03-27 16:40:12.595869000 +0200
-+++ dolfin/CMakeLists.txt 2012-03-27 16:43:49.937744000 +0200
-@@ -266,21 +266,28 @@
++++ dolfin/CMakeLists.txt 2012-03-27 17:22:38.628180000 +0200
+@@ -266,9 +266,14 @@
"${_lib}"
)
@@ -17,4 +17,3 @@
+ endif()
endif()
endforeach()
-
diff --git a/easybuild/easyconfigs/f/FFC/FFC-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb b/easybuild/easyconfigs/f/FFC/FFC-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb
new file mode 100644
index 0000000000..0bab98821e
--- /dev/null
+++ b/easybuild/easyconfigs/f/FFC/FFC-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb
@@ -0,0 +1,33 @@
+name='FFC'
+version='1.0.0'
+
+easyblock="PythonPackage"
+
+homepage='https://launchpad.net/ffc'
+description="FEniCS Form Compiler (FFC) works as a compiler for multilinear forms by generating code (C++) for the evaluation of a multilinear form given in mathematical notation."
+
+
+pythonversion = '2.7.3'
+pythonshortversion = ".".join(pythonversion.split(".")[:-1])
+
+#dummy toolkit, but we want to load dependencies, so empty version
+toolkit={'name':'dummy','version':''}
+toolkitsuffix = "-goalf-1.1.0-no-OFED"
+pythonsuffix = "-Python-%s" % pythonversion
+versionsuffix = "%s%s" % (toolkitsuffix, pythonsuffix)
+
+#manually add toolkit suffix here, plus True for letting the dependency use it's own toolkit and not the dummy one
+dependencies=[
+ ('Python', pythonversion, toolkitsuffix, True),
+ ('UFL', '1.0.0', versionsuffix, True),
+ ('FIAT', '1.0.0', versionsuffix, True),
+ ('UFC', '2.0.5', toolkitsuffix, True),
+ ('Viper', '1.0.0', versionsuffix, True),
+ ]
+
+sources=['%s-%s.tar.gz'%(name.lower(),version)]
+majorversion = "%s.x" % ".".join(version.split('.')[:-1])
+sourceURLs=['https://launchpad.net/FFC/%s/%s/+download/' % (majorversion, version)]
+
+
+sanityCheckPaths = {'files': ['bin/ffc'], 'dirs':['lib/python%s/site-packages/ffc' % pythonshortversion]}
diff --git a/easybuild/easyconfigs/f/FIAT/FIAT-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb b/easybuild/easyconfigs/f/FIAT/FIAT-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb
new file mode 100644
index 0000000000..ea8a5b747b
--- /dev/null
+++ b/easybuild/easyconfigs/f/FIAT/FIAT-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb
@@ -0,0 +1,28 @@
+name='FIAT'
+version='1.0.0'
+
+easyblock="PythonPackage"
+homepage='https://launchpad.net/fiat'
+description="The FInite element Automatic Tabulator FIAT supports generation of arbitrary order instances of the Lagrange elements on lines, triangles, and tetrahedra. It is also capable of generating arbitrary order instances of Jacobi-type quadrature rules on the same element shapes."
+
+#dummy toolkit, but we want to load dependencies, so empty version
+toolkit={'name':'dummy','version':''}
+
+pythonversion = '2.7.3'
+pythonshortversion = ".".join(pythonversion.split(".")[:-1])
+
+toolkit={'name':'dummy','version':''}
+toolkitsuffix = "-goalf-1.1.0-no-OFED"
+versionsuffix = "%s-Python-%s" % (toolkitsuffix, pythonversion)
+
+#manually add toolkit suffix here, plus True for letting the dependency use it's own toolkit and not the dummy one
+dependencies=[
+ ('Python', pythonversion, toolkitsuffix, True),
+ ('ScientificPython','2.8', versionsuffix, True),
+ ]
+
+sources=['%s-%s.tar.gz'%(name.lower(),version)]
+majorversion = "%s.x" % ".".join(version.split('.')[:-1])
+sourceURLs=['https://launchpad.net/FIAT/%s/%s/+download/' % (majorversion, version)]
+
+sanityCheckPaths = {'files': [], 'dirs':['lib/python%s/site-packages/FIAT' % pythonshortversion]}
diff --git a/easybuild/easyconfigs/i/Instant/Instant-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb b/easybuild/easyconfigs/i/Instant/Instant-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb
new file mode 100644
index 0000000000..265a331fb7
--- /dev/null
+++ b/easybuild/easyconfigs/i/Instant/Instant-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb
@@ -0,0 +1,29 @@
+name='Instant'
+version='1.0.0'
+
+easyblock="PythonPackage"
+
+homepage='https://launchpad.net/instant'
+description="Instant is a Python module that allows for instant inlining of C and C++ code in Python. It is a small Python module built on top of SWIG and Distutils. It is part of the FEniCS Project (http://fenicsproject.org)."
+
+#dummy toolkit, but we want to load dependencies, so empty version
+toolkit={'name':'dummy','version':''}
+
+pythonversion = '2.7.3'
+pythonshortversion = ".".join(pythonversion.split(".")[:-1])
+toolkitversion = '-goalf-1.1.0-no-OFED'
+versionsuffix = '%s-Python-%s' % (toolkitversion, pythonversion)
+
+#manually add toolkit suffix here, plus True for letting the dependency use it's own toolkit and not the dummy one
+dependencies=[
+ ('Python',pythonversion,toolkitversion,True),
+ ('SWIG','2.0.6',versionsuffix,True),
+
+ ]
+
+sources=['%s-%s.tar.gz'%(name.lower(),version)]
+majorversion = "%s.x" % ".".join(version.split('.')[:-1])
+
+sourceURLs=['https://launchpad.net/instant/%s/%s/+download/' % (majorversion, version)]
+
+sanityCheckPaths = {'files': ['bin/'], 'dirs':['lib/python%s/site-packages/instant' % pythonshortversion]}
diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.4.5-GCC-4.6.3-no-OFED.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.4.5-GCC-4.6.3-no-OFED.eb
index 44d5019b8c..16a56707f9 100644
--- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.4.5-GCC-4.6.3-no-OFED.eb
+++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-1.4.5-GCC-4.6.3-no-OFED.eb
@@ -10,7 +10,7 @@ toolkit={'name':'GCC','version':'4.6.3'}
sources=['%s-%s.tar.gz'%(name.lower(),version)]
sourceURLs=['http://www.open-mpi.org/software/ompi/v%s/downloads' % '.'.join(version.split('.')[0:2])]
-configopts='--with-threads=posix --enable-shared '
+configopts='--with-threads=posix --enable-shared --enable-mpi-threads'
moduleclass='lib'
diff --git a/easybuild/easyconfigs/p/PCRE/PCRE-8.12-goalf-1.1.0-no-OFED.eb b/easybuild/easyconfigs/p/PCRE/PCRE-8.12-goalf-1.1.0-no-OFED.eb
new file mode 100644
index 0000000000..91b0f36617
--- /dev/null
+++ b/easybuild/easyconfigs/p/PCRE/PCRE-8.12-goalf-1.1.0-no-OFED.eb
@@ -0,0 +1,16 @@
+name='PCRE'
+version='8.12'
+
+homepage='http://www.pcre.org/'
+description="The PCRE library is a set of functions that implement regular expression pattern matching using the same syntax and semantics as Perl 5."
+
+toolkit={'name':'goalf','version':'1.1.0-no-OFED'}
+
+toolkitopts={'optarch':True}
+
+configopts="--with-pic --disable-cpp"
+
+sources=['%s-%s.tar.gz'%(name.lower(),version)]
+sourceURLs=['http://prdownloads.sourceforge.net/pcre']
+
+moduleclass='lib'
diff --git a/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.2-goalf-1.1.0-no-OFED.eb b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.2-goalf-1.1.0-no-OFED.eb
new file mode 100644
index 0000000000..a04dc557aa
--- /dev/null
+++ b/easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.2-goalf-1.1.0-no-OFED.eb
@@ -0,0 +1,23 @@
+easyblock="ParMETIS"
+
+name='ParMETIS'
+version='4.0.2'
+
+homepage='http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview'
+description="ParMETIS is an MPI-based parallel library that implements a variety of algorithms for partitioning unstructured graphs, meshes, and for computing fill-reducing orderings of sparse matrices. ParMETIS extends the functionality provided by METIS and includes routines that are especially suited for parallel AMR computations and large scale numerical simulations. The algorithms implemented in ParMETIS are based on the parallel multilevel k-way graph-partitioning, adaptive repartitioning, and parallel multi-constrained partitioning schemes."
+builddependencies = [
+ ('CMake','2.8.4'),
+ ]
+
+toolkit={'name':'goalf','version':'1.1.0-no-OFED'}
+toolkitopts={'optarch':True, 'usempi': True}
+
+sources=['%s-%s.tar.gz' % (name.lower(),version)]
+sourceURLs = ['http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis']
+
+makeopts='CC="$MPICC -fPIC" LIBDIR=""'
+configopts = '-DCMAKE_C_COMPILER="$MPICC" -DCMAKE_C_FLAGS="-fPIC" -DOPENMP="-openmp"'
+configopts += ' -DMETIS_PATH=../metis'
+configopts += ' -DGKLIB_PATH=../metis/GKlib'
+
+moduleclass='lib'
diff --git a/easybuild/easyconfigs/s/SCOTCH/SCOTCH-5.1.12b_esmumps-goalf-1.1.0-no-OFED.eb b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-5.1.12b_esmumps-goalf-1.1.0-no-OFED.eb
new file mode 100644
index 0000000000..91a2bf7571
--- /dev/null
+++ b/easybuild/easyconfigs/s/SCOTCH/SCOTCH-5.1.12b_esmumps-goalf-1.1.0-no-OFED.eb
@@ -0,0 +1,17 @@
+# Built with 1.0-r4456a1ab03d75b8852074a58b6fd249b86e3a700 on 2012-03-26_10-26-04
+easyblock="SCOTCH"
+
+name='SCOTCH'
+version='5.1.12b_esmumps'
+
+homepage='http://www.labri.fr/perso/pelegrin/scotch/'
+description="Software package and libraries for sequential and parallel graph partitioning, static mapping, and sparse matrix block ordering, and sequential mesh and hypergraph partitioning"
+
+toolkit={'name':'goalf','version':'1.1.0-no-OFED'}
+
+sources=['%s_%s.tar.gz'%(name.lower(),version)]
+sourceURLs = ['https://gforge.inria.fr/frs/download.php/28978/']
+
+toolkitopts={'pic':True}
+
+moduleclass='lib'
diff --git a/easybuild/easyconfigs/s/SWIG/SWIG-2.0.6-goalf-1.1.0-no-OFED-Python-2.7.3.eb b/easybuild/easyconfigs/s/SWIG/SWIG-2.0.6-goalf-1.1.0-no-OFED-Python-2.7.3.eb
new file mode 100644
index 0000000000..be68b5d8bd
--- /dev/null
+++ b/easybuild/easyconfigs/s/SWIG/SWIG-2.0.6-goalf-1.1.0-no-OFED-Python-2.7.3.eb
@@ -0,0 +1,48 @@
+name='SWIG'
+version='2.0.6'
+
+homepage='http://www.swig.org/'
+description="SWIG is a software development tool that connects programs written in C and C++ with a variety of high-level programming languages."
+
+toolkit={'name':'goalf','version':'1.1.0-no-OFED'}
+toolkitopts={'pic':True,'opt':True,'optarch':True}
+
+sources=['%s-%s.tar.gz'%(name.lower(),version)]
+sourceURLs = ['http://prdownloads.sourceforge.net/swig']
+pythonversion='2.7.3'
+versionsuffix='-Python-%s'%pythonversion
+dependencies=[
+ ('Python', pythonversion),
+ ('PCRE','8.12'),
+ ]
+
+configopts=" "
+
+## disable all
+configopts+="--without-r "
+configopts+="--without-clisp "
+configopts+="--without-allegrocl "
+configopts+="--without-lua "
+configopts+="--without-csharp "
+configopts+="--without-chicken "
+configopts+="--without-pike "
+configopts+="--without-ocaml "
+configopts+="--without-php "
+configopts+="--without-ruby "
+configopts+="--without-mzscheme "
+configopts+="--without-guile "
+configopts+="--without-gcj "
+configopts+="--without-java "
+configopts+="--without-octave "
+configopts+="--without-perl5 "
+configopts+="--without-python3 "
+configopts+="--without-tcl "
+
+configopts+="--with-python=$SOFTROOTPYTHON/bin/python "
+
+moduleclass='base'
+
+sanityCheckPaths={
+ 'files':["bin/ccache-swig","bin/swig"],
+ 'dirs':[]
+ }
diff --git a/easybuild/easyconfigs/s/ScientificPython/ScientificPython-2.8-goalf-1.1.0-no-OFED-Python-2.7.3.eb b/easybuild/easyconfigs/s/ScientificPython/ScientificPython-2.8-goalf-1.1.0-no-OFED-Python-2.7.3.eb
new file mode 100644
index 0000000000..c00a592253
--- /dev/null
+++ b/easybuild/easyconfigs/s/ScientificPython/ScientificPython-2.8-goalf-1.1.0-no-OFED-Python-2.7.3.eb
@@ -0,0 +1,26 @@
+name='ScientificPython'
+version='2.8'
+
+easyblock="PythonPackage"
+
+homepage='https://sourcesup.cru.fr/projects/scientific-py/'
+description="ScientificPython is a collection of Python modules for scientific computing. It contains support for geometry, mathematical functions, statistics, physical units, IO, visualization, and parallelization."
+
+#dummy toolkit, but we want to load dependencies, so empty version
+toolkit={'name':'dummy','version':''}
+
+pythonversion = '2.7.3'
+pythonshortversion = ".".join(pythonversion.split(".")[:-1])
+
+toolkitsuffix = "-goalf-1.1.0-no-OFED"
+versionsuffix = "%s-Python-%s" % (toolkitsuffix, pythonversion)
+
+#manually add toolkit suffix here, plus True for letting the dependency use it's own toolkit and not the dummy one
+dependencies=[
+ ('Python',pythonversion,toolkitsuffix,True),
+ ]
+
+sources=['%s-%s.tar.gz'%(name,version)]
+sourceURLs = ['https://sourcesup.renater.fr/frs/download.php/2309']
+
+sanityCheckPaths = {'files': [], 'dirs':['lib/python%s/site-packages/Scientific' % pythonshortversion]}
diff --git a/easybuild/easyconfigs/s/SuiteSparse/BlasLapackFromMkl_UseEnvCompiler_EnableParmetis-3.7.patch b/easybuild/easyconfigs/s/SuiteSparse/BlasLapackFromMkl_UseEnvCompiler_EnableParmetis-3.7.patch
new file mode 100644
index 0000000000..6ff2945e12
--- /dev/null
+++ b/easybuild/easyconfigs/s/SuiteSparse/BlasLapackFromMkl_UseEnvCompiler_EnableParmetis-3.7.patch
@@ -0,0 +1,44 @@
+--- ./UFconfig/UFconfig.mk 2011-12-08 20:19:48.000000000 +0100
++++ ../SuiteSparse_patched/UFconfig/UFconfig.mk 2012-03-26 13:46:32.081278439 +0200
+@@ -53,7 +53,7 @@
+ # default make environment.
+
+ # C and C++ compiler flags. The first three are standard for *.c and *.cpp
+-CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -O3 -fexceptions -fPIC
++CF = $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -fPIC #-O3 -fexceptions
+
+ # ranlib, and ar, for generating libraries. If you don't need ranlib,
+ # just change it to RANLAB = echo
+@@ -148,8 +148,9 @@
+ # The path is relative to where it is used, in CHOLMOD/Lib, CHOLMOD/MATLAB, etc.
+ # You may wish to use an absolute path. METIS is optional. Compile
+ # CHOLMOD with -DNPARTITION if you do not wish to use METIS.
+-METIS_PATH = ../../metis-4.0
+-METIS = ../../metis-4.0/libmetis.a
++METIS_PATH = $(SOFTROOTPARMETIS)
++METIS = $(SOFTROOTPARMETIS)/lib/libparmetis.a $(SOFTROOTPARMETIS)/lib/libmetis.a
++
+
+ #------------------------------------------------------------------------------
+ # UMFPACK configuration:
+@@ -251,9 +252,15 @@
+ # Linux
+ #------------------------------------------------------------------------------
+
+-# Using default compilers:
+-# CC = gcc
+-# CFLAGS = -O3 -fexceptions
++# Using mpi compilers:
++CC = $(SOFTVARMPICC)
++CFLAGS = $(SOFTVARCFLAGS)
++CXX = $(SOFTVARMPICXX)
++F77 = $(SOFTVARMPIF77)
++F77FLAGS = $(SOFTVARFFLAGS)
++INTEL_LIB = $(MKLROOT)/lib/em64t
++BLAS = -L$(INTEL_LIB) -Bstatic -lmkl_em64t -Bdynamic -liomp5 -lguide -lpthread
++LAPACK = -L$(INTEL_LIB) -Bstatic -lmkl_lapack -lmkl_em64t -Bdynamic -liomp5 -lguide -lpthread
+
+ # alternatives:
+ # CFLAGS = -g -fexceptions \
+
+
diff --git a/easybuild/easyconfigs/s/SuiteSparse/BlasLapackFromMkl_UseEnvCompiler_EnableParmetis-3.7.patch~ b/easybuild/easyconfigs/s/SuiteSparse/BlasLapackFromMkl_UseEnvCompiler_EnableParmetis-3.7.patch~
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-3.7.0-goalf-1.1.0-no-OFED-withparmetis.eb b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-3.7.0-goalf-1.1.0-no-OFED-withparmetis.eb
new file mode 100644
index 0000000000..8fa40dff46
--- /dev/null
+++ b/easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-3.7.0-goalf-1.1.0-no-OFED-withparmetis.eb
@@ -0,0 +1,24 @@
+easyblock='SuiteSparse'
+
+name='SuiteSparse'
+version='3.7.0'
+
+homepage='http://www.cise.ufl.edu/research/sparse/SuiteSparse/'
+description="SuiteSparse is a collection of libraries manipulate sparse matrices."
+
+toolkit={'name':'goalf','version':'1.1.0-no-OFED'}
+
+toolkitopts={'opt':True,'unroll':True,'pic':True,'intel-static':True}
+
+sources=['%s-%s.tar.gz'%(name,version)]
+sourceURLs = ['http://www.cise.ufl.edu/research/sparse/SuiteSparse']
+
+dependencies=[('ParMETIS','4.0.2')]
+
+patches=['BlasLapackFromMkl_UseEnvCompiler_EnableParmetis-3.7.patch']
+
+# SuiteSparse depends on the linear version of ParMETIS
+versionsuffix='-withparmetis'
+
+moduleclass='lib'
+
diff --git a/easybuild/easyconfigs/u/UFC/UFC-2.0.5-goalf-1.1.0-no-OFED.eb b/easybuild/easyconfigs/u/UFC/UFC-2.0.5-goalf-1.1.0-no-OFED.eb
new file mode 100644
index 0000000000..013f7b299f
--- /dev/null
+++ b/easybuild/easyconfigs/u/UFC/UFC-2.0.5-goalf-1.1.0-no-OFED.eb
@@ -0,0 +1,38 @@
+name='UFC'
+version='2.0.5'
+
+easyblock="CMakePythonPackage"
+
+majorversion = "%s.x" % ".".join(version.split('.')[:-1])
+
+homepage='https://launchpad.net/ufc'
+sourceURLs=['https://launchpad.net/ufc/%s/%s/+download/' % (majorversion, version) ]
+
+description="UFC (Unified Form-assembly Code) is a unified framework for finite element assembly. More precisely, it defines a fixed interface for communicating low level routines (functions) for evaluating and assembling finite element variational forms."
+
+#dummy toolkit, but we want to load dependencies, so empty version
+toolkit={'name':'goalf','version':'1.1.0-no-OFED'}
+builddependencies = [
+ ('CMake','2.8.4'),
+ ]
+pythonversion = '2.7.3'
+pythonshortversion = ".".join(pythonversion.split(".")[:-1])
+pythonsuffix = "-Python-%s" % pythonversion
+
+#manually add toolkit suffix here, plus True for letting the dependency use it's own toolkit and not the dummy one
+dependencies=[
+ ('Python',pythonversion),
+ ('Boost','1.49.0'),
+ ('SWIG','2.0.6', pythonsuffix),
+ ('Instant','1.0.0', pythonsuffix),
+ ]
+
+sources=['%s-%s.tar.gz'%(name.lower(),version)]
+
+sanityCheckPaths = {'files': ['include/ufc.h'], 'dirs':['lib/python%s/site-packages/ufc_utils/' % pythonshortversion]}
+
+#extra options for cmake
+configopts=" -DBoost_DIR=$SOFTROOTBOOST -DBOOST_INCLUDEDIR=$SOFTROOTBOOST/include -DBoost_DEBUG=ON -DBOOST_ROOT=$SOFTROOTBOOST"
+configopts+=" -DUFC_ENABLE_PYTHON:BOOL=ON -DSWIG_FOUND:BOOL=ON -DPYTHON_LIBRARY=$SOFTROOTPYTHON/lib/libpython%s.so"%pythonshortversion
+configopts+=" -DPYTHON_INCLUDE_PATH=$SOFTROOTPYTHON/include/python%s"%pythonshortversion
+
diff --git a/easybuild/easyconfigs/u/UFL/UFL-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb b/easybuild/easyconfigs/u/UFL/UFL-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb
new file mode 100644
index 0000000000..8dc7bf6547
--- /dev/null
+++ b/easybuild/easyconfigs/u/UFL/UFL-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb
@@ -0,0 +1,23 @@
+name='UFL'
+version='1.0.0'
+
+easyblock="PythonPackage"
+homepage='https://launchpad.net/ufl'
+description="The Unified Form Language (UFL) is a domain specific language for declaration of finite element discretizations of variational forms. More precisely, it defines a flexible interface for choosing finite element spaces and defining expressions for weak forms in a notation close to mathematical notation."
+
+#dummy toolkit, but we want to load dependencies, so empty version
+toolkit={'name':'dummy','version':''}
+pythonversion = '2.7.3'
+toolkitsuffix = "-goalf-1.1.0-no-OFED"
+versionsuffix = "%s-Python-%s" % (toolkitsuffix, pythonversion)
+
+
+
+#manually add toolkit suffix here, plus True for letting the dependency use it's own toolkit and not the dummy one
+dependencies=[
+ ('Python',pythonversion,toolkitsuffix,True),
+ ]
+
+sources=['%s-%s.tar.gz'%(name.lower(),version)]
+majorversion = "%s.x" % ".".join(version.split('.')[:-1])
+sourceURLs=['https://launchpad.net/UFL/%s/%s/+download/' % (majorversion, version)]
diff --git a/easybuild/easyconfigs/v/Viper/Viper-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb b/easybuild/easyconfigs/v/Viper/Viper-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb
new file mode 100644
index 0000000000..704dfbba9f
--- /dev/null
+++ b/easybuild/easyconfigs/v/Viper/Viper-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb
@@ -0,0 +1,28 @@
+name='Viper'
+version='1.0.0'
+
+easyblock="PythonPackage"
+homepage='https://launchpad.net/fenics-viper'
+description="Viper is a minimalistic scientific plotter and run-time visualization module. Viper has support for visualizing meshes and solutions in DOLFIN."
+
+#dummy toolkit, but we want to load dependencies, so empty version
+toolkit={'name':'dummy','version':''}
+
+pythonversion = '2.7.3'
+pythonshortversion = ".".join(pythonversion.split(".")[:-1])
+
+toolkitsuffix = "-goalf-1.1.0-no-OFED"
+versionsuffix = "%s-Python-%s" % (toolkitsuffix, pythonversion)
+
+#manually add toolkit suffix here, plus True for letting the dependency use it's own toolkit and not the dummy one
+dependencies=[
+ ('Python',pythonversion,toolkitsuffix,True),
+ ]
+
+sources=['%s-%s.tar.gz'%(name.lower(),version)]
+
+majorversion = "%s.x" % ".".join(version.split('.')[:-1])
+sourceURLs=['https://launchpad.net/fenics-viper/%s/%s/+download/' % (majorversion, version)]
+
+
+sanityCheckPaths = {'files': ['bin/'], 'dirs':['lib/python%s/site-packages/viper' % pythonshortversion]}
diff --git a/easybuild/tools/filetools.py b/easybuild/tools/filetools.py
index 464ab6745d..c2b5ac1139 100644
--- a/easybuild/tools/filetools.py
+++ b/easybuild/tools/filetools.py
@@ -29,6 +29,7 @@
import subprocess
import tempfile
import time
+import errno
from easybuild.tools.asyncprocess import Popen, PIPE, STDOUT, send_all, recv_some
from easybuild.tools.build_log import getLog
@@ -323,10 +324,7 @@ def run_cmd(cmd, log_ok=True, log_all=False, simple=False, inp=None, regexp=True
parselogForError(stdouterr, regexp, msg="Command used: %s" % cmd)
if simple:
- if ec:
- return False
- else:
- return True
+ return not bool(ec)
else:
return (stdouterr, ec)
@@ -619,3 +617,32 @@ def recursiveChmod(path, permissionBits, add=True, onlyFiles=False):
os.chmod(absEl, perms & ~permissionBits)
except OSError, err:
log.debug("Failed to chmod %s (but ignoring it): %s" % (path, err))
+
+def mkdir(directory, parrents=False):
+ """
+ Create a directory
+ Directory is the path to make
+ log is the logger to which to log debugging or error info.
+
+ When parents is True then no error if existing
+ and make parent directories as needed
+ (this is the mkdir -p behaviour)
+ """
+ if parrents:
+ try:
+ os.makedirs(directory)
+ log.debug("Succesfully created directory %s and needed parents" % directory)
+ except OSError, err:
+ if err.errno == errno.EEXIST:
+ log.debug("Directory %s already exitst" % directory)
+ else:
+ log.error("Failed to create directory %s: %s" % (directory, err))
+ else:#not parrents
+ try:
+ os.mkdir(directory)
+ log.debug("Succesfully created directory %s" % directory)
+ except OSError, err:
+ if err.errno == errno.EEXIST:
+ log.warning("Directory %s already exitst" % directory)
+ else:
+ log.error("Failed to create directory %s: %s" % (directory, err))
diff --git a/easybuild/tools/modules.py b/easybuild/tools/modules.py
index b07f0bc063..d089143760 100644
--- a/easybuild/tools/modules.py
+++ b/easybuild/tools/modules.py
@@ -162,7 +162,7 @@ def modulefile_path(self, name, version):
modinfo = self.show(name, version)
# second line of module show output contains full path of module file
- return modinfo.split('\n')[1].replace(':','')
+ return modinfo.split('\n')[1].replace(':', '')
def runModule(self, *args, **kwargs):
"""
@@ -185,7 +185,7 @@ def runModule(self, *args, **kwargs):
os.environ['MODULEPATH'] = originalModulePath
if kwargs.get('return_output', False):
- return (stdout+stderr)
+ return (stdout + stderr)
else:
# Change the environment
@@ -287,7 +287,7 @@ def searchModule(path, query):
except ValueError:
pass
-def getSoftwareRoot(name):
+def get_software_root(name):
"""
Return the software root set for a particular package.
"""
diff --git a/easybuild/tools/toolkit.py b/easybuild/tools/toolkit.py
index 816a9e0eb2..957cc17c32 100644
--- a/easybuild/tools/toolkit.py
+++ b/easybuild/tools/toolkit.py
@@ -23,7 +23,7 @@
import os
from easybuild.tools.build_log import getLog
-from easybuild.tools.modules import Modules, getSoftwareRoot
+from easybuild.tools.modules import Modules, get_software_root
from easybuild.tools import systemtools
log = getLog('Toolkit')
@@ -179,7 +179,7 @@ def _addDependencyVariables(self, dep=None):
deps = [dep]
for dep in deps:
- softwareRoot = getSoftwareRoot(dep['name'])
+ softwareRoot = get_software_root(dep['name'])
if not softwareRoot:
log.error("%s was not found in environment (dep: %s)" % (dep['name'], dep))
@@ -322,8 +322,8 @@ def prepareATLAS(self):
Prepare for ATLAS BLAS/LAPACK library
"""
- self.vars['LIBBLAS'] = " -lcblas -lf77blas -latlas -lgfortran"
- self.vars['LIBBLAS_MT'] = " -lptcblas -lptf77blas -latlas -lgfortran -lpthread"
+ self.vars['LIBBLAS'] = "-lcblas -lf77blas -latlas -lgfortran"
+ self.vars['LIBBLAS_MT'] = "-lptcblas -lptf77blas -latlas -lgfortran -lpthread"
self._addDependencyVariables({'name':'ATLAS'})
@@ -525,9 +525,9 @@ def prepareIMKL(self):
'libsfxsl':libsfxsl
}
- fftwsuff=""
+ fftwsuff = ""
if self.opts['pic']:
- fftwsuff="_pic"
+ fftwsuff = "_pic"
# only include interface lib if it's there
fftlib = "-Wl:-Bstatic -lfftw3xc_intel%s -Wl:-Bdynamic" % fftwsuff
@@ -682,12 +682,19 @@ def prepareMVAPICH2(self):
"""
Prepare for MVAPICH2 MPI library
"""
+ #TODO:
+ #self.vars['MPI_LIB_STATIC'] = ??
+ #self.vars['MPI_LIB_SHARED'] = ??
self.prepareSimpleMPI()
def prepareOpenMPI(self):
"""
Prepare for OpenMPI MPI library
"""
+
+ #TODO:
+ #self.vars['MPI_LIB_STATIC'] = ??
+ self.vars['MPI_LIB_SHARED'] = "%s/lib/libmpi.so" % os.getenv('SOFTROOTOPENMPI')
self.prepareSimpleMPI()
def prepareScaLAPACK(self):