From 64c526c46df9bfed8e22de1d57d59a8efc076975 Mon Sep 17 00:00:00 2001 From: Jens Timmerman Date: Tue, 15 May 2012 11:16:16 +0200 Subject: [PATCH 1/5] fixed dolphin, get_software_root renamed, boost url fixed, removed swap file --- easybuild/easyblocks/d/dolphin.py | 14 +++++++------- .../b/Boost/.Boost-1.49.0-ictce-4.0.6.eb.swp | Bin 12288 -> 0 bytes .../b/Boost/Boost-1.49.0-ictce-4.0.6.eb | 2 +- easybuild/tools/modules.py | 6 +++--- easybuild/tools/toolkit.py | 8 ++++---- 5 files changed, 15 insertions(+), 15 deletions(-) delete mode 100644 easybuild/easyconfigs/b/Boost/.Boost-1.49.0-ictce-4.0.6.eb.swp diff --git a/easybuild/easyblocks/d/dolphin.py b/easybuild/easyblocks/d/dolphin.py index 1264ded14e..b8f24e92b5 100644 --- a/easybuild/easyblocks/d/dolphin.py +++ b/easybuild/easyblocks/d/dolphin.py @@ -67,9 +67,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_LIBRARIES=%s/lib/libpython%s.so" % (depsdict['Python'], python_short_ver)) # SuiteSparse config params @@ -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') @@ -115,7 +115,7 @@ def make_module_extra(self): 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/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 c8fdbd3a3d7a884049557a5bd55144b558507f2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2-D(p-6vwAth=O0}jfxjzB}_t_*~E`l13_u2P*5!57nBetyC==Go1JlI(pXFN zPH*)_@XiO&8=pXY6ZH{%0ncpGRs|Kj)1HBUc6QFp&j0*&ZkC)*?cU-|J}WOUY{wX@ z?|*;mHS4h99Aj(HGtNVZ{I%X0Z!6)MfM)ys=7AfmhrrJa7JF8-dK)H?1 zK&MH4w_EgLlXdlqi#pMqK|`b8YF%EuB5PG0`xvShWlhdV=={k7#fiY)Brx#Z>gB`i z!ufhF05~^!mY+C&cW<(wtcd^-AOb{y2oM1xKm>@u9wp%I1bd3P?;GcTa(tcm={mlp z3lSg!M1Tko0U|&IhyW2F0z`la5CJ0a4-!xbV{Z;IcIGge$N&GgzyH4;W$ZKR6Y2x% zA)Irn%)W;)?T|-?(okpEPy~F3dMZH2jM?FJ5LOno*y%N+aN~7+huA>%E zmr!5O&r8$`6g4711c(3;AOb{y2oM1xKm`6{0vwxDnf4p=J&4zql<&D^(bXw9(UQtq z$da;1btgh~LOpQ1Z?$wrR9IN+jY-$EH`e2_frGvcqkr|pzh3xDD_XR8^G-ehrn`K{ ze1ox_{wR7*rOxo87*&t!qi^p63zfi>Oz5NJ(vk?7os z#nc_LD51>W{}5l_x6o2vFE*Q zMA2xhYw{J48TiQNW)))ZqEb0ieWOVfmKv3yh0$(d`;u#yob)P}E04u!FPWMlfbT-w#ETpJZDws$D z;bcJ;>yUFl(*-HwWMrAg|`Iu3-oXw*sRvYzRK jRV&ckhCdt*W$_Xv@{a^#V-HO+Dwr26cx;MdYr(z&r~h*r 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/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..818afce7c7 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)) @@ -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 From 18a680a1860d81b2deb7e3bdfa6365ac4468f11a Mon Sep 17 00:00:00 2001 From: Jens Timmerman Date: Wed, 16 May 2012 15:37:04 +0200 Subject: [PATCH 2/5] fixes in pythonpackage, cmakepythonpackage and toolkit + added .eb files and needed easyblocks for: Boost, CMake, DOLFIN, FFC, FIAT, Instant, PCRE, SWIG, ScientificPython, UFC, UFL and Viper metis, ParMETIS, SCOTCH These are all building except DOLFIN itself --- easybuild/easyblocks/c/cmakepythonpackage.py | 14 +- easybuild/easyblocks/d/dolfin.py | 135 ++++++++++++++++++ easybuild/easyblocks/m/metis.py | 69 +++++++++ easybuild/easyblocks/p/parmetis.py | 128 +++++++++++++++++ easybuild/easyblocks/p/pythonpackage.py | 6 +- easybuild/easyblocks/s/scotch.py | 95 ++++++++++++ easybuild/easyblocks/s/suitesparse.py | 88 ++++++++++++ .../Armadillo-2.4.4-goalf-1.1.0-no-OFED.eb | 25 ++++ .../Boost/Boost-1.49.0-goalf-1.1.0-no-OFED.eb | 24 ++++ .../b/Boost/intellinuxjam_fPIC.patch | 21 +++ .../CMake/CMake-2.8.4-goalf-1.1.0-no-OFED.eb | 15 ++ .../DOLFIN-1.0.0-goalf-1.1.0-no-OFED.eb | 43 ++++++ .../d/DOLFIN/DOLFIN-1.0.0-ictce-4.0.6.eb | 14 +- .../d/DOLFIN/wl_pkg_linkflags.patch | 5 +- ...-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb | 33 +++++ ...-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb | 28 ++++ ...-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb | 29 ++++ .../OpenMPI-1.4.5-GCC-4.6.3-no-OFED.eb | 2 +- .../p/PCRE/PCRE-8.12-goalf-1.1.0-no-OFED.eb | 16 +++ .../ParMETIS-4.0.2-goalf-1.1.0-no-OFED.eb | 23 +++ ...TCH-5.1.12b_esmumps-goalf-1.1.0-no-OFED.eb | 17 +++ ...-2.0.6-goalf-1.1.0-no-OFED-Python-2.7.3.eb | 48 +++++++ ...on-2.8-goalf-1.1.0-no-OFED-Python-2.7.3.eb | 26 ++++ ...kl_UseEnvCompiler_EnableParmetis-3.7.patch | 44 ++++++ ...l_UseEnvCompiler_EnableParmetis-3.7.patch~ | 0 ...-3.7.0-goalf-1.1.0-no-OFED-withparmetis.eb | 24 ++++ .../u/UFC/UFC-2.0.5-goalf-1.1.0-no-OFED.eb | 38 +++++ ...-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb | 23 +++ ...-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb | 28 ++++ easybuild/tools/toolkit.py | 11 +- 30 files changed, 1050 insertions(+), 22 deletions(-) create mode 100644 easybuild/easyblocks/d/dolfin.py create mode 100644 easybuild/easyblocks/m/metis.py create mode 100644 easybuild/easyblocks/p/parmetis.py create mode 100644 easybuild/easyblocks/s/scotch.py create mode 100644 easybuild/easyblocks/s/suitesparse.py create mode 100644 easybuild/easyconfigs/a/Armadillo/Armadillo-2.4.4-goalf-1.1.0-no-OFED.eb create mode 100644 easybuild/easyconfigs/b/Boost/Boost-1.49.0-goalf-1.1.0-no-OFED.eb create mode 100644 easybuild/easyconfigs/b/Boost/intellinuxjam_fPIC.patch create mode 100644 easybuild/easyconfigs/c/CMake/CMake-2.8.4-goalf-1.1.0-no-OFED.eb create mode 100644 easybuild/easyconfigs/d/DOLFIN/DOLFIN-1.0.0-goalf-1.1.0-no-OFED.eb create mode 100644 easybuild/easyconfigs/f/FFC/FFC-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb create mode 100644 easybuild/easyconfigs/f/FIAT/FIAT-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb create mode 100644 easybuild/easyconfigs/i/Instant/Instant-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb create mode 100644 easybuild/easyconfigs/p/PCRE/PCRE-8.12-goalf-1.1.0-no-OFED.eb create mode 100644 easybuild/easyconfigs/p/ParMETIS/ParMETIS-4.0.2-goalf-1.1.0-no-OFED.eb create mode 100644 easybuild/easyconfigs/s/SCOTCH/SCOTCH-5.1.12b_esmumps-goalf-1.1.0-no-OFED.eb create mode 100644 easybuild/easyconfigs/s/SWIG/SWIG-2.0.6-goalf-1.1.0-no-OFED-Python-2.7.3.eb create mode 100644 easybuild/easyconfigs/s/ScientificPython/ScientificPython-2.8-goalf-1.1.0-no-OFED-Python-2.7.3.eb create mode 100644 easybuild/easyconfigs/s/SuiteSparse/BlasLapackFromMkl_UseEnvCompiler_EnableParmetis-3.7.patch create mode 100644 easybuild/easyconfigs/s/SuiteSparse/BlasLapackFromMkl_UseEnvCompiler_EnableParmetis-3.7.patch~ create mode 100644 easybuild/easyconfigs/s/SuiteSparse/SuiteSparse-3.7.0-goalf-1.1.0-no-OFED-withparmetis.eb create mode 100644 easybuild/easyconfigs/u/UFC/UFC-2.0.5-goalf-1.1.0-no-OFED.eb create mode 100644 easybuild/easyconfigs/u/UFL/UFL-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb create mode 100644 easybuild/easyconfigs/v/Viper/Viper-1.0.0-goalf-1.1.0-no-OFED-Python-2.7.3.eb diff --git a/easybuild/easyblocks/c/cmakepythonpackage.py b/easybuild/easyblocks/c/cmakepythonpackage.py index 9ac2abf29a..a6213ad15e 100644 --- a/easybuild/easyblocks/c/cmakepythonpackage.py +++ b/easybuild/easyblocks/c/cmakepythonpackage.py @@ -38,17 +38,17 @@ def configure(self): """Main onfiguration is with cmake""" PythonPackage.configure(self) - - CMake.configure(self) - def make(self): + return CMake.configure(self) + + def make(self): """Build with make""" - CMake.make(self) + return CMake.make(self) - def make_install(self): + def make_install(self): """Install with make install""" - CMake.make_install(self) + 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 + return PythonPackage.make_module_extra(self) diff --git a/easybuild/easyblocks/d/dolfin.py b/easybuild/easyblocks/d/dolfin.py new file mode 100644 index 0000000000..0e03b94564 --- /dev/null +++ b/easybuild/easyblocks/d/dolfin.py @@ -0,0 +1,135 @@ +## +# 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 +from easybuild.easyblocks.c.cmakepythonpackage import CMakePythonPackage +from easybuild.tools.modules import get_software_root +from easybuild.tools.toolkit import get_openmp_flag + +class Dolfin(CMakePythonPackage): + """Extension of the CMakePythonPackage for Dolfin. + + Dolfin needs some environment variables to be set at run time. + """ + + def configure(self): + """Configure Dolfin build.""" + + # make sure that required dependencies are loaded + deps = ['Armadillo', 'Boost', 'ParMETIS', 'Python', 'SCOTCH', 'SuiteSparse', 'UFC'] + depsdict = {} + for dep in deps: + deproot = get_software_root(dep) + if not deproot: + self.log.error("Dependency %s not available." % dep) + else: + depsdict.update({dep:deproot}) + + # set correct compilers to be used at runtime + self.updatecfg('configopts', ' -DMPI_C_COMPILER="$MPICC"') + self.updatecfg('configopts', ' -DMPI_CXX_COMPILER="$MPICXX"') + + # Boost config parameters + #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']) + + # UFC and Armadillo config params + self.updatecfg('configopts', " -DUFC_DIR=%s" % depsdict['UFC']) + self.updatecfg('configopts', "-DARMADILLO_DIR:PATH=%s " % depsdict['Armadillo']) + + # specify MPI library + # FIXME + 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')) + self.updatecfg('configopts', ' -DMPI_INCLUDE_PATH="%s"' % os.getenv('MPI_INC')) + else: + self.log.error('MPI_LIB_SHARED or MPI_INC not set, could not determine MPI-related paths.') + + # 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'], + python_short_ver)) + self.updatecfg('configopts', " -DPYTHON_LIBRARY=%s/lib/libpython%s.so" % (depsdict['Python'], + python_short_ver)) + + # SuiteSparse config params + suitesparse = depsdict['SuiteSparse'] + umfpack_params = ' -DUMFPACK_DIR="%s/UMFPACK"' % suitesparse + umfpack_params += ' -DAMD_DIR="%s/UMFPACK"' % suitesparse + umfpack_params += ' -DCHOLMOD_DIR="%s/CHOLMOD"' % suitesparse + umfpack_params += ' -DUFCONFIG_DIR="%s/UFconfig"' % suitesparse + umfpack_params += ' -DCAMD_LIBRARY:PATH="%s/CAMD/lib/libcamd.a"' % suitesparse + umfpack_params += ' -DCCOLAMD_LIBRARY:PATH="%s/CCOLAMD/lib/libccolamd.a"' % suitesparse + umfpack_params += ' -DCOLAMD_LIBRARY:PATH="%s/COLAMD/lib/libcolamd.a"' % suitesparse + 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']) + + # BLACS and LAPACK + self.updatecfg('configopts', ' -DBLAS_LIBRARIES:PATH="$LIBBLAS"') + self.updatecfg('configopts', ' -DLAPACK_LIBRARIES:PATH="$LIBLAPACK"') + + #set correct openmp options + 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') + txt += "prepend-path\tPKG_CONFIG_PATH\t%s/lib/pkgconfig\n" % self.installdir + + envvars = ['I_MPI_CXX', 'I_MPI_CC'] + for envvar in envvars: + envar_val = os.getenv(envvar) + 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): + """Custom sanity check for Dolfin.""" + + if not self.getcfg('sanityCheckPaths'): + + self.setcfg('sanityCheckPaths', {'files': ['bin/dolfin-%s' % x for x in ['version', 'convert', + 'order', 'plot']] + + ['include/dolfin.h'], + 'dirs':['%s/dolfin' % self.pylibdir] + }) + + self.log.info("Customized sanity check paths: %s" % self.getcfg('sanityCheckPaths')) + + CMakePythonPackage.sanitycheck(self) diff --git a/easybuild/easyblocks/m/metis.py b/easybuild/easyblocks/m/metis.py new file mode 100644 index 0000000000..6cebc6a80c --- /dev/null +++ b/easybuild/easyblocks/m/metis.py @@ -0,0 +1,69 @@ +## +# 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 +import os +import shutil +class METIS(Application): + + def configure(self): + pass + + def make_install(self): + #TODO: make a general mkdir function + try: + self.libdir = os.path.join(self.installdir, 'lib') + os.mkdir(self.libdir) + self.log.debug("Succesfully created directory %s" % self.libdir) + except Exception, err: + self.log.error("Failed to create directory %s: %s" % (self.libdir, err)) + + try: + self.includedir = os.path.join(self.installdir, 'include') + os.mkdir(self.includedir) + self.log.debug("Succesfully created directory %s" % self.includedir) + except Exception, err: + self.log.error("Failed to create directory %s: %s" % (self.includedir, err)) + + try: + src = os.path.join(self.getcfg('startfrom'), 'libmetis.a') + dst = os.path.join(self.libdir, 'libmetis.a') + shutil.copy2(src, dst) + except Exception, 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(self.includedir, f) + shutil.copy2(src, dst) + os.chmod(dst, 0755) + except Exception, 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: + self.Libdir = os.path.join(self.installdir, 'Lib') + os.symlink(self.libdir, self.Libdir) + for f in ['defs.h', 'macros.h', 'metis.h', 'proto.h', 'rename.h', 'struct.h']: + os.symlink(os.path.join(self.includedir, file), os.path.join(self.libdir, f)) + except Exception, 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..32014b9a8d --- /dev/null +++ b/easybuild/easyblocks/p/parmetis.py @@ -0,0 +1,128 @@ +## +# 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.easyblocks.m.metis import METIS +from easybuild.tools.filetools import run_cmd +import os +import shutil + +class ParMETIS(METIS): + """ + Easyblock for the ParMETIS package + Parmetis + """ + + def configure(self): + if self.version() < "4": + return METIS.configure(self) + #else + #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): + """ + make ParMETIS and Metis + """ + 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() >= "4": + cmd = "cd build && %s && cd %s " % (cmd, self.getcfg('startfrom')) + # #make metis seperatly + # cmdmetis = "cd metis/build && %s make %s %s && cd %s" % (self.getCfg('premakeopts'), paracmd, self.getCfg('makeopts'),self.getCfg('startfrom')) + # runrun(cmdmetis, logall=True, simple=True) + run_cmd(cmd, log_all=True, simple=True) + + def make_install(self): + + includedir = os.path.join(self.installdir, 'include') + libdir = os.path.join(self.installdir, 'lib') + + if self.version() >= "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) + # we build metis seperatlly now + #cmd = "cd metis/build && make install %s && cd %s " % (self.getCfg('installopts'),self.getCfg('startfrom')) + #runrun(cmd, logall=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 Exception, 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 Exception, err: + self.log.error("Copying files to installation dir failed: %s" % err) + + else: + + try: + os.mkdir(libdir) + self.log.debug("Succesfully created directory %s" % libdir) + except Exception, err: + self.log.error("Failed to create directory %s: %s" % (libdir, err)) + + try: + os.mkdir(includedir) + self.log.debug("Succesfully created directory %s" % includedir) + except Exception, err: + self.log.error("Failed to create directory %s: %s" % (includedir, err)) + + 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 Exception, 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 Exception, 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: + Libdir = os.path.join(self.installdir, 'Lib') + os.symlink(libdir, Libdir) + 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 Exception, 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..df48428f4a --- /dev/null +++ b/easybuild/easyblocks/s/scotch.py @@ -0,0 +1,95 @@ +## +# 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 re +import shutil + +class SCOTCH(Application): + """ + Easyblock for building SCOTCH + - http://www.labri.fr/perso/pelegrin/scotch/ + """ + def configure(self): + 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 Exception: + self.log.exception("Copying Makefile.inc to src dir failed.") + try: + os.chdir(srcdir) + self.log.debug("Changing to src dir.") + except Exception, err: + self.log.error("Failed to change to src dir: %s" % err) + + def make(self): + 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 Exception, 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-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/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/toolkit.py b/easybuild/tools/toolkit.py index 818afce7c7..957cc17c32 100644 --- a/easybuild/tools/toolkit.py +++ b/easybuild/tools/toolkit.py @@ -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'}) @@ -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): From a86da335eb718935f7a491aa8524aa3351d1a805 Mon Sep 17 00:00:00 2001 From: Jens Timmerman Date: Mon, 21 May 2012 10:03:24 +0200 Subject: [PATCH 3/5] delete obsolete dolphin.py --- easybuild/easyblocks/d/dolphin.py | 134 ------------------------------ 1 file changed, 134 deletions(-) delete mode 100644 easybuild/easyblocks/d/dolphin.py diff --git a/easybuild/easyblocks/d/dolphin.py b/easybuild/easyblocks/d/dolphin.py deleted file mode 100644 index b8f24e92b5..0000000000 --- a/easybuild/easyblocks/d/dolphin.py +++ /dev/null @@ -1,134 +0,0 @@ -## -# 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 -from easybuild.easyblocks.c.cmakepythonpackage import CMakePythonPackage -from easybuild.tools.modules import get_software_root -from easybuild.tools.toolkit import get_openmp_flag - -class Dolfin(CMakePythonPackage): - """Extension of the CMakePythonPackage for Dolfin. - - Dolfin needs some environment variables to be set at run time. - """ - - def configure(self): - """Configure Dolfin build.""" - - # make sure that required dependencies are loaded - deps = ['Armadillo', 'Boost', 'ParMETIS', 'Python', 'SCOTCH', 'SuiteSparse', 'UFC'] - depsdict = {} - for dep in deps: - deproot = get_software_root(dep) - if not deproot: - self.log.error("Dependency %s not available." % dep) - else: - depsdict.update({dep:deproot}) - - # set correct compilers to be used at runtime - self.updatecfg('configopts', ' -DMPI_C_COMPILER="$MPICC"') - self.updatecfg('configopts', ' -DMPI_CXX_COMPILER="$MPICXX"') - - # Boost config parameters - 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']) - - # UFC and Armadillo config params - self.updatecfg('configopts', " -DUFC_DIR=%s" % depsdict['UFC']) - self.updatecfg('configopts', "-DARMADILLO_DIR:PATH=%s " % depsdict['Armadillo']) - - # specify MPI library - # FIXME - self.updatecfg('configopts', ' -DMPI_COMPILER="%s"' % self.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')) - self.updatecfg('configopts', ' -DMPI_INCLUDE_PATH="%s"' % os.getenv('MPI_INC')) - else: - self.log.error('MPI_LIB_SHARED or MPI_INC not set, could not determine MPI-related paths.') - - # 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'], - python_short_ver)) - self.updatecfg('configopts', " -DPYTHON_LIBRARIES=%s/lib/libpython%s.so" % (depsdict['Python'], - python_short_ver)) - - # SuiteSparse config params - suitesparse = depsdict['SuiteSparse'] - umfpack_params = ' -DUMFPACK_DIR="%s/UMFPACK"' % suitesparse - umfpack_params += ' -DAMD_DIR="%s/UMFPACK"' % suitesparse - umfpack_params += ' -DCHOLMOD_DIR="%s/CHOLMOD"' % suitesparse - umfpack_params += ' -DUFCONFIG_DIR="%s/UFconfig"' % suitesparse - umfpack_params += ' -DCAMD_LIBRARY:PATH="%s/CAMD/lib/libcamd.a"' % suitesparse - umfpack_params += ' -DCCOLAMD_LIBRARY:PATH="%s/CCOLAMD/lib/libccolamd.a"' % suitesparse - umfpack_params += ' -DCOLAMD_LIBRARY:PATH="%s/COLAMD/lib/libcolamd.a"' % suitesparse - self.updatecfg('configopts', umfpack_params) - - # ParMETIS and 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"') - self.updatecfg('configopts', ' -DLAPACK_LIBRARIES:PATH="$LIBLAPACK"') - - #set correct openmp options - 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') - txt += "prepend-path\tPKG_CONFIG_PATH\t%s/lib/pkgconfig\n" % self.installdir - - envvars = ['I_MPI_CXX', 'I_MPI_CC'] - for envvar in envvars: - envar_val = os.getenv(envvar) - if not envar_val: - 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): - """Custom sanity check for Dolfin.""" - - if not self.getcfg('sanityCheckPaths'): - - self.setcfg('sanityCheckPaths', {'files': ['bin/dolfin-%s' % x for x in ['version', 'convert', - 'order', 'plot']] - + ['include/dolfin.h'], - 'dirs':['%s/dolfin' % self.pylibdir] - }) - - self.log.info("Customized sanity check paths: %s" % self.getcfg('sanityCheckPaths')) - - CMakePythonPackage.sanitycheck(self) From 7562538f98d2a2a0b281b3acda98d2de2543c16c Mon Sep 17 00:00:00 2001 From: Jens Timmerman Date: Mon, 21 May 2012 10:56:01 +0200 Subject: [PATCH 4/5] added a mkdir function to filetools (closes #283) --- easybuild/tools/filetools.py | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) 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)) From b58d39619353050e87be98b4ae247a1b9d4d820e Mon Sep 17 00:00:00 2001 From: Jens Timmerman Date: Mon, 21 May 2012 13:38:15 +0200 Subject: [PATCH 5/5] code cleanup in easyblocks --- easybuild/easyblocks/c/cmakepythonpackage.py | 17 ++--- easybuild/easyblocks/d/dolfin.py | 1 - easybuild/easyblocks/m/metis.py | 47 ++++++------- easybuild/easyblocks/p/parmetis.py | 72 +++++++++++--------- easybuild/easyblocks/s/scotch.py | 25 ++++--- 5 files changed, 89 insertions(+), 73 deletions(-) diff --git a/easybuild/easyblocks/c/cmakepythonpackage.py b/easybuild/easyblocks/c/cmakepythonpackage.py index a6213ad15e..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) + PythonPackage.configure(self, *args, **kwargs) - return CMake.configure(self) + CMake.configure(self, *args, **kwargs) - def make(self): - """Build with make""" - return CMake.make(self) + def make(self, *args, **kwargs): + """Build with cmake""" + return CMake.make(self, *args, **kwargs) def make_install(self): - """Install with make install""" + """Install with cmake install""" return CMake.make_install(self) def make_module_extra(self): """Extra Python package module parameters""" + #we return a string here. return PythonPackage.make_module_extra(self) diff --git a/easybuild/easyblocks/d/dolfin.py b/easybuild/easyblocks/d/dolfin.py index 0e03b94564..5408baef5b 100644 --- a/easybuild/easyblocks/d/dolfin.py +++ b/easybuild/easyblocks/d/dolfin.py @@ -56,7 +56,6 @@ def configure(self): self.updatecfg('configopts', "-DARMADILLO_DIR:PATH=%s " % depsdict['Armadillo']) # specify MPI library - # FIXME self.updatecfg('configopts', ' -DMPI_COMPILER="%s"' % os.getenv('MPICC')) if not os.getenv('MPI_LIB_SHARED') or not os.getenv('MPI_INC'): diff --git a/easybuild/easyblocks/m/metis.py b/easybuild/easyblocks/m/metis.py index 6cebc6a80c..20c5e0f366 100644 --- a/easybuild/easyblocks/m/metis.py +++ b/easybuild/easyblocks/m/metis.py @@ -18,52 +18,53 @@ # You should have received a copy of the GNU General Public License # along with EasyBuild. If not, see . ## -from easybuild.framework.application import Application + import os import shutil + +from easybuild.framework.application import Application +from easybuild.tools.filetools import mkdir + class METIS(Application): - def configure(self): + + def configure(self, *args, **kwargs): + """No configuration is done for METIS""" pass def make_install(self): - #TODO: make a general mkdir function - try: - self.libdir = os.path.join(self.installdir, 'lib') - os.mkdir(self.libdir) - self.log.debug("Succesfully created directory %s" % self.libdir) - except Exception, err: - self.log.error("Failed to create directory %s: %s" % (self.libdir, err)) + """ 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) - try: - self.includedir = os.path.join(self.installdir, 'include') - os.mkdir(self.includedir) - self.log.debug("Succesfully created directory %s" % self.includedir) - except Exception, err: - self.log.error("Failed to create directory %s: %s" % (self.includedir, err)) + includedir = os.path.join(self.installdir, 'include') + mkdir(includedir) try: src = os.path.join(self.getcfg('startfrom'), 'libmetis.a') - dst = os.path.join(self.libdir, 'libmetis.a') + dst = os.path.join(libdir, 'libmetis.a') shutil.copy2(src, dst) - except Exception, err: + 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(self.includedir, f) + dst = os.path.join(includedir, f) shutil.copy2(src, dst) os.chmod(dst, 0755) - except Exception, err: + 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: - self.Libdir = os.path.join(self.installdir, 'Lib') - os.symlink(self.libdir, self.Libdir) + 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(self.includedir, file), os.path.join(self.libdir, f)) - except Exception, err: + 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 index 32014b9a8d..cbfff8ad07 100644 --- a/easybuild/easyblocks/p/parmetis.py +++ b/easybuild/easyblocks/p/parmetis.py @@ -18,11 +18,17 @@ # You should have received a copy of the GNU General Public License # along with EasyBuild. If not, see . ## -from easybuild.easyblocks.m.metis import METIS -from easybuild.tools.filetools import run_cmd +""" +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 @@ -30,9 +36,15 @@ class ParMETIS(METIS): """ def configure(self): - if self.version() < "4": + """ + 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) - #else #tested with 4.0.2, now actually requires cmake to be run first #for bot parmetis and metis for buildir in [ 'build' ] : @@ -42,68 +54,62 @@ def configure(self): - def make(self): + 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() >= "4": + if self.version() >= LooseVersion("4"): + #this is done in the build dir. cmd = "cd build && %s && cd %s " % (cmd, self.getcfg('startfrom')) - # #make metis seperatly - # cmdmetis = "cd metis/build && %s make %s %s && cd %s" % (self.getCfg('premakeopts'), paracmd, self.getCfg('makeopts'),self.getCfg('startfrom')) - # runrun(cmdmetis, logall=True, simple=True) - run_cmd(cmd, log_all=True, simple=True) + 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() >= "4": + 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) - # we build metis seperatlly now - #cmd = "cd metis/build && make install %s && cd %s " % (self.getCfg('installopts'),self.getCfg('startfrom')) - #runrun(cmd, logall=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 Exception, err: + 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 Exception, err: + except OSError, err: self.log.error("Copying files to installation dir failed: %s" % err) else: - try: - os.mkdir(libdir) - self.log.debug("Succesfully created directory %s" % libdir) - except Exception, err: - self.log.error("Failed to create directory %s: %s" % (libdir, err)) - - try: - os.mkdir(includedir) - self.log.debug("Succesfully created directory %s" % includedir) - except Exception, err: - self.log.error("Failed to create directory %s: %s" % (includedir, err)) + 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 Exception, err: + except OSError, err: self.log.error("Copying files to installation dir failed: %s" % err) try: @@ -113,16 +119,16 @@ def make_install(self): # 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 Exception, err: + 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: - Libdir = os.path.join(self.installdir, 'Lib') - os.symlink(libdir, Libdir) + 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 Exception, err: + except OSError, err: self.log.error("Something went wrong during symlink creation: %s" % err) diff --git a/easybuild/easyblocks/s/scotch.py b/easybuild/easyblocks/s/scotch.py index df48428f4a..6418b1f56f 100644 --- a/easybuild/easyblocks/s/scotch.py +++ b/easybuild/easyblocks/s/scotch.py @@ -18,22 +18,28 @@ # 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 +""" +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 - - http://www.labri.fr/perso/pelegrin/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'] : + 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) @@ -44,15 +50,18 @@ def configure(self): dst = os.path.join(srcdir, 'Makefile.inc') shutil.copy2(src, dst) self.log.debug("Successfully copied Makefile.inc to src dir.") - except Exception: - self.log.exception("Copying Makefile.inc to src dir failed.") + except OSError: + self.log.error("Copying Makefile.inc to src dir failed.") try: os.chdir(srcdir) self.log.debug("Changing to src dir.") - except Exception, err: + 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'] @@ -74,7 +83,7 @@ def make_install(self): src = os.path.join(self.getcfg('startfrom'), d) dst = os.path.join(self.installdir, d) shutil.copytree(src, dst) - except Exception, err: + except OSError, err: self.log.error("Copying %s to installation dir %s failed: %s" % (src, dst, err)) scotchlibdir = os.path.join(self.installdir, 'lib')