From 45c247971fb5cd877a31db85c4e4b69b15a9fd24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Krup=C4=8D=C3=ADk?= <lukas.krupcik@vsb.cz> Date: Mon, 8 Jan 2018 13:59:58 +0100 Subject: [PATCH] deleted: easyblocks/a/allineabase.pyo deleted: "easyblocks/c/\\" deleted: easyblocks/c/clang.py deleted: easyblocks/c/clang.py.old deleted: easyblocks/g/gcc.py deleted: easyblocks/g/gpi_2.pyo deleted: easyblocks/l/lammps.pyo deleted: easyblocks/o/opencl.pyo deleted: easyblocks/p/__init__.py deleted: easyblocks/p/p4vasp.py deleted: easyblocks/p/p4vasp.pyo deleted: easyblocks/q/qscintilla.pyo deleted: easyblocks/q/qwt.pyo deleted: easyblocks/s/snucl.pyo deleted: toolchains/__init__.py deleted: toolchains/__init__.pyo deleted: toolchains/gcccore.py deleted: toolchains/gnu.py deleted: tools/__init__.py deleted: tools/__init__.pyc deleted: tools/__init__.pyo deleted: tools/module_naming_scheme/__init__.py deleted: tools/module_naming_scheme/__init__.pyo deleted: tools/module_naming_scheme/it4i-uv_module_naming_scheme.py deleted: tools/module_naming_scheme/it4i-uv_module_naming_scheme.pyc deleted: tools/module_naming_scheme/it4i-uv_module_naming_scheme.pyo deleted: tools/module_naming_scheme/it4i_module_naming_scheme.py deleted: tools/module_naming_scheme/it4i_module_naming_scheme.pyc deleted: tools/module_naming_scheme/it4i_module_naming_scheme.pyo --- easyblocks/a/allineabase.pyo | Bin 1062 -> 0 bytes "easyblocks/c/\\" | 432 ------------- easyblocks/c/clang.py | 420 ------------- easyblocks/c/clang.py.old | 403 ------------ easyblocks/g/gcc.py | 574 ------------------ easyblocks/g/gpi_2.pyo | Bin 1262 -> 0 bytes easyblocks/l/lammps.pyo | Bin 1691 -> 0 bytes easyblocks/o/opencl.pyo | Bin 1691 -> 0 bytes easyblocks/p/__init__.py | 0 easyblocks/p/p4vasp.py | 59 -- easyblocks/p/p4vasp.pyo | Bin 2098 -> 0 bytes easyblocks/q/qscintilla.pyo | Bin 1647 -> 0 bytes easyblocks/q/qwt.pyo | Bin 2094 -> 0 bytes easyblocks/s/snucl.pyo | Bin 3054 -> 0 bytes toolchains/__init__.py | 0 toolchains/__init__.pyo | Bin 142 -> 0 bytes toolchains/gcccore.py | 39 -- toolchains/gnu.py | 36 -- tools/__init__.py | 3 - tools/__init__.pyc | Bin 239 -> 0 bytes tools/__init__.pyo | Bin 239 -> 0 bytes tools/module_naming_scheme/__init__.py | 3 - tools/module_naming_scheme/__init__.pyo | Bin 260 -> 0 bytes .../it4i-uv_module_naming_scheme.py | 116 ---- .../it4i-uv_module_naming_scheme.pyc | Bin 4426 -> 0 bytes .../it4i-uv_module_naming_scheme.pyo | Bin 4451 -> 0 bytes .../it4i_module_naming_scheme.py | 114 ---- .../it4i_module_naming_scheme.pyc | Bin 3826 -> 0 bytes .../it4i_module_naming_scheme.pyo | Bin 3846 -> 0 bytes 29 files changed, 2199 deletions(-) delete mode 100644 easyblocks/a/allineabase.pyo delete mode 100644 "easyblocks/c/\\" delete mode 100644 easyblocks/c/clang.py delete mode 100644 easyblocks/c/clang.py.old delete mode 100644 easyblocks/g/gcc.py delete mode 100644 easyblocks/g/gpi_2.pyo delete mode 100644 easyblocks/l/lammps.pyo delete mode 100644 easyblocks/o/opencl.pyo delete mode 100644 easyblocks/p/__init__.py delete mode 100644 easyblocks/p/p4vasp.py delete mode 100644 easyblocks/p/p4vasp.pyo delete mode 100644 easyblocks/q/qscintilla.pyo delete mode 100644 easyblocks/q/qwt.pyo delete mode 100644 easyblocks/s/snucl.pyo delete mode 100644 toolchains/__init__.py delete mode 100644 toolchains/__init__.pyo delete mode 100644 toolchains/gcccore.py delete mode 100644 toolchains/gnu.py delete mode 100644 tools/__init__.py delete mode 100644 tools/__init__.pyc delete mode 100644 tools/__init__.pyo delete mode 100644 tools/module_naming_scheme/__init__.py delete mode 100644 tools/module_naming_scheme/__init__.pyo delete mode 100644 tools/module_naming_scheme/it4i-uv_module_naming_scheme.py delete mode 100644 tools/module_naming_scheme/it4i-uv_module_naming_scheme.pyc delete mode 100644 tools/module_naming_scheme/it4i-uv_module_naming_scheme.pyo delete mode 100644 tools/module_naming_scheme/it4i_module_naming_scheme.py delete mode 100644 tools/module_naming_scheme/it4i_module_naming_scheme.pyc delete mode 100644 tools/module_naming_scheme/it4i_module_naming_scheme.pyo diff --git a/easyblocks/a/allineabase.pyo b/easyblocks/a/allineabase.pyo deleted file mode 100644 index 591036e40fcf27feb914224b8c15e7a3511631dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1062 zcmcckiI;0-14l$M0~D|_FfceUFfbH@h!h5fC<cZUMurq7hHOTL943Y+CI&_jpP3<> znIVUTA&P~8F@=R8m5CvZks*bZp@o5=nSmiPij^USjUiZr9b{5F0|Nt>YhrPwQ)y;S zib8Q|K|y{|i9%X_kwOwkBr`8vAu%sSAv3SIBrzuk#B~Hwsfh~3`DrEPiAAY8T$#BA zIjOm+c_pbS3W>!EiFpdCiN%#kIr+)idR$x%iKQhO`9)R=KBc*tMG9Vt#hLlp3L2gv zCJLT;dHH3DC7Jno#hP51|NsC0uffQ`z)-@;z`y`@6vzmO5XiMfrFrqmxhW;w3=9lV zS2!gWr^3Srq}K`LD{%$}hExWIC`JZQC^3OTsfB?dikTrOSc3_qz=VN;A(#xmCWEX1 znZUxpz~BrrNs$2@2{jB1nG6hKwTuiUj0`p4NGV}rXl7(&OkrjS)&MClHU(J<3ad(m zqS8EtlGKV4Xt3%PXDAeB7iAWdD3oWGWWYi@C9_DOAh9H)SQTVb2D%Pi-NfYN)PfS- zoXq6ZyyR2`)#4IRFy-W@$0z3G_-QbM!jg-DfdOhwN@h_I$O9!H=Y$lMrh)?l%qvdK zNh<-VPtHxz03|mtQEbk@z@QI~Oi*IbFQ_cZ$j?I(084=)saQWzADli?6O$5)Q}qfe zOL!0##}}8R7D$3T0kWBaiI))^A|)IQ3=Hw{d5O8H@$n@fhsMX}=BJeAfVd!^#K))P zC&$MJfz*K=gdiw!S`a7(#bC~1V`O9U(_mv@U<d*wtP)vJ;sK>!keBt+iV|~E%kzt} z_27OD0)<bBFp9F0{QR6^y`s`QZ~%iXK)4mmqQt@AfU<!Ejhz6<;UMR-F$pjVFarRP C;1VVP diff --git "a/easyblocks/c/\\" "b/easyblocks/c/\\" deleted file mode 100644 index e372a40..0000000 --- "a/easyblocks/c/\\" +++ /dev/null @@ -1,432 +0,0 @@ -## -# Copyright 2013 Dmitri Gribenko -# Copyright 2013-2017 Ghent University -# Copyright 2017 IT4Innovations -# -# This file is triple-licensed under GPLv2 (see below), MIT, and -# BSD three-clause licenses. -# -# This file is part of EasyBuild, -# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), -# with support of Ghent University (http://ugent.be/hpc), -# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), -# Flemish Research Foundation (FWO) (http://www.fwo.be/en) -# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). -# -# https://github.com/easybuilders/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 <http://www.gnu.org/licenses/>. -## -""" -Support for building and installing Clang, implemented as an easyblock. - -@author: Dmitri Gribenko (National Technical University of Ukraine "KPI") -@author: Ward Poelmans (Ghent University) -@author: Josef Hrabal, Lukas Krupcik (IT4innovations, Czechia) -""" - -import fileinput -import glob -import os -import re -import shutil -import sys -from distutils.version import LooseVersion - -from easybuild.easyblocks.generic.cmakemake import CMakeMake -from easybuild.framework.easyconfig import CUSTOM -from easybuild.tools import run -from easybuild.tools.build_log import EasyBuildError -from easybuild.tools.config import build_option -from easybuild.tools.filetools import mkdir -from easybuild.tools.modules import get_software_root -from easybuild.tools.run import run_cmd -from easybuild.tools.systemtools import get_os_name, get_os_version, get_shared_lib_ext - -# List of all possible build targets for Clang -CLANG_TARGETS = ["all", "AArch64", "ARM", "CppBackend", "Hexagon", "Mips", - "MBlaze", "MSP430", "NVPTX", "PowerPC", "R600", "Sparc", - "SystemZ", "X86", "XCore"] - - -class EB_Clang(CMakeMake): - """Support for bootstrapping Clang.""" - - @staticmethod - def extra_options(): - extra_vars = { - 'assertions': [True, "Enable assertions. Helps to catch bugs in Clang.", CUSTOM], - 'build_targets': [["X86"], "Build targets for LLVM. Possible values: " + ', '.join(CLANG_TARGETS), CUSTOM], - 'bootstrap': [True, "Bootstrap Clang using GCC", CUSTOM], - 'usepolly': [False, "Build Clang with polly", CUSTOM], - 'static_analyzer': [True, "Install the static analyser of Clang", CUSTOM], - # The sanitizer tests often fail on HPC systems due to the 'weird' environment. - 'skip_sanitizer_tests': [False, "Do not run the sanitizer tests", CUSTOM], - } - - return CMakeMake.extra_options(extra_vars) - - def __init__(self, *args, **kwargs): - """Initialize custom class variables for Clang.""" - - super(EB_Clang, self).__init__(*args, **kwargs) - self.llvm_src_dir = None - self.llvm_obj_dir_stage1 = None - self.llvm_obj_dir_stage2 = None - self.llvm_obj_dir_stage3 = None - self.make_parallel_opts = "" - - unknown_targets = [target for target in self.cfg['build_targets'] if target not in CLANG_TARGETS] - - if unknown_targets: - raise EasyBuildError("Some of the chosen build targets (%s) are not in %s.", - ', '.join(unknown_targets), ', '.join(CLANG_TARGETS)) - - if LooseVersion(self.version) < LooseVersion('3.4') and "R600" in self.cfg['build_targets']: - raise EasyBuildError("Build target R600 not supported in < Clang-3.4") - - if LooseVersion(self.version) > LooseVersion('3.3') and "MBlaze" in self.cfg['build_targets']: - raise EasyBuildError("Build target MBlaze is not supported anymore in > Clang-3.3") - - def check_readiness_step(self): - """Fail early on RHEL 5.x and derivatives because of known bug in libc.""" - super(EB_Clang, self).check_readiness_step() - # RHEL 5.x have a buggy libc. Building stage 2 will fail. - if get_os_name() in ['redhat', 'RHEL', 'centos', 'SL'] and get_os_version().startswith('5.'): - raise EasyBuildError("Can not build Clang on %s v5.x: libc is buggy, building stage 2 will fail. " - "See http://stackoverflow.com/questions/7276828/", get_os_name()) - - def extract_step(self): - """ - Prepare a combined LLVM source tree. The layout is: - llvm/ Unpack llvm-*.tar.gz here - projects/ - compiler-rt/ Unpack compiler-rt-*.tar.gz here - openmp/ Unpack openmp-*.tar.xz here - libcxx/ Unpack libcxx-*.tar.xz here - libcxxabi/ Unpack libcxxapbi-*.tar.xz here - tools/ - clang/ Unpack cfe-*.tar.gz here - tools/extra Unpack clang-*.tar.gz here - polly/ Unpack polly-*.tar.gz here - """ - - # Extract everything into separate directories. - super(EB_Clang, self).extract_step() - - # Find the full path to the directory that was unpacked from llvm-*.tar.gz. - for tmp in self.src: - if tmp['name'].startswith("llvm-"): - self.llvm_src_dir = tmp['finalpath'] - break - - if self.llvm_src_dir is None: - raise EasyBuildError("Could not determine LLVM source root (LLVM source was not unpacked?)") - - src_dirs = {} - - def find_source_dir(globpatterns, targetdir): - """Search for directory with globpattern and rename it to targetdir""" - if not isinstance(globpatterns, list): - globpatterns = [globpatterns] - - glob_src_dirs = [glob_dir for globpattern in globpatterns for glob_dir in glob.glob(globpattern)] - if len(glob_src_dirs) != 1: - raise EasyBuildError("Failed to find exactly one source directory for pattern %s: %s", globpatterns, - glob_src_dirs) - src_dirs[glob_src_dirs[0]] = targetdir - - find_source_dir('compiler-rt-*', os.path.join(self.llvm_src_dir, 'projects', 'compiler-rt')) - - if self.cfg["usepolly"]: - find_source_dir('polly-*', os.path.join(self.llvm_src_dir, 'tools', 'polly')) - - find_source_dir('cfe-*', os.path.join(self.llvm_src_dir, 'tools', 'clang')) - - find_source_dir('clang-*', os.path.join(self.llvm_src_dir, 'tools', 'clang', 'tools', 'extra')) - - if LooseVersion(self.version) >= LooseVersion('5.0'): - find_source_dir('libcxx-*', os.path.join(self.llvm_src_dir, 'projects', 'libcxx')) - - if LooseVersion(self.version) >= LooseVersion('5.0'): - find_source_dir('libcxxabi-*', os.path.join(self.llvm_src_dir, 'projects', 'libcxxabi')) - - if LooseVersion(self.version) >= LooseVersion('3.8'): - find_source_dir('openmp-*', os.path.join(self.llvm_src_dir, 'projects', 'openmp')) - - if LooseVersion(self.version) >= LooseVersion('5.0'): - find_source_dir('ldd-*', os.path.join(self.llvm_src_dir, 'tools', 'ldd')) - - if LooseVersion(self.version) >= LooseVersion('5.0'): - find_source_dir('lddb-*', os.path.join(self.llvm_src_dir, 'tools', 'lddb')) - - if LooseVersion(self.version) >= LooseVersion('5.0'): - find_source_dir('libunwind-*', os.path.join(self.llvm_src_dir, 'tools', 'libunwind')) - - if LooseVersion(self.version) >= LooseVersion('5.0'): - find_source_dir('test-*', os.path.join(self.llvm_src_dir, 'tools', 'testsuite')) - - for src in self.src: - for (dirname, new_path) in src_dirs.items(): - if src['name'].startswith(dirname): - old_path = os.path.join(src['finalpath'], dirname) - try: - shutil.move(old_path, new_path) - except IOError, err: - raise EasyBuildError("Failed to move %s to %s: %s", old_path, new_path, err) - src['finalpath'] = new_path - break - - def configure_step(self): - if LooseVersion(self.version) >= LooseVersion('5.0'): - super(EB_Clang, self).configure_step() - return - - """Run CMake for stage 1 Clang.""" - self.llvm_obj_dir_stage1 = os.path.join(self.builddir, 'llvm.obj.1') - if self.cfg['bootstrap']: - self.llvm_obj_dir_stage2 = os.path.join(self.builddir, 'llvm.obj.2') - self.llvm_obj_dir_stage3 = os.path.join(self.builddir, 'llvm.obj.3') - - if LooseVersion(self.version) >= LooseVersion('3.3'): - disable_san_tests = False - # all sanitizer tests will fail when there's a limit on the vmem - # this is ugly but I haven't found a cleaner way so far - (vmemlim, ec) = run_cmd("ulimit -v", regexp=False) - if not vmemlim.startswith("unlimited"): - disable_san_tests = True - self.log.warn("There is a virtual memory limit set of %s KB. The tests of the " - "sanitizers will be disabled as they need unlimited virtual " - "memory unless --strict=error is used." % vmemlim.strip()) - - # the same goes for unlimited stacksize - (stacklim, ec) = run_cmd("ulimit -s", regexp=False) - if stacklim.startswith("unlimited"): - disable_san_tests = True - self.log.warn("The stacksize limit is set to unlimited. This causes the ThreadSanitizer " - "to fail. The sanitizers tests will be disabled unless --strict=error is used.") - - if (disable_san_tests or self.cfg['skip_sanitizer_tests']) and build_option('strict') != run.ERROR: - self.log.debug("Disabling the sanitizer tests") - self.disable_sanitizer_tests() - - # Create and enter build directory. - mkdir(self.llvm_obj_dir_stage1) - os.chdir(self.llvm_obj_dir_stage1) - - # GCC and Clang are installed in different prefixes and Clang will not - # find the GCC installation on its own. - # First try with GCCcore, as GCC built on top of GCCcore is just a wrapper for GCCcore and binutils, - # instead of a full-fledge compiler - gcc_prefix = get_software_root('GCCcore') - - # If that doesn't work, try with GCC - if gcc_prefix is None: - gcc_prefix = get_software_root('GCC') - - # If that doesn't work either, print error and exit - if gcc_prefix is None: - raise EasyBuildError("Can't find GCC or GCCcore to use") - - self.cfg.update('configopts', "-DGCC_INSTALL_PREFIX='%s' " % gcc_prefix) - self.log.debug("Using %s as GCC_INSTALL_PREFIX", gcc_prefix) - - self.cfg['configopts'] += "-DCMAKE_BUILD_TYPE=Release " - if self.cfg['assertions']: - self.cfg['configopts'] += "-DLLVM_ENABLE_ASSERTIONS=ON " - else: - self.cfg['configopts'] += "-DLLVM_ENABLE_ASSERTIONS=OFF " - - self.cfg['configopts'] += '-DLLVM_TARGETS_TO_BUILD="%s" ' % ';'.join(self.cfg['build_targets']) - - if self.cfg['parallel']: - self.make_parallel_opts = "-j %s" % self.cfg['parallel'] - - self.log.info("Configuring") - super(EB_Clang, self).configure_step(srcdir=self.llvm_src_dir) - - def disable_sanitizer_tests(self): - """Disable the tests of all the sanitizers by removing the test directories from the build system""" - if LooseVersion(self.version) < LooseVersion('3.6'): - # for Clang 3.5 and lower, the tests are scattered over several CMakeLists. - # We loop over them, and patch out the rule that adds the sanitizers tests to the testsuite - patchfiles = [ - "lib/asan", - "lib/dfsan", - "lib/lsan", - "lib/msan", - "lib/tsan", - "lib/ubsan", - ] - - for patchfile in patchfiles: - patchfile_fp = os.path.join(self.llvm_src_dir, "projects/compiler-rt", patchfile, "CMakeLists.txt") - if os.path.exists(patchfile_fp): - self.log.debug("Patching %s in %s" % (patchfile, self.llvm_src_dir)) - try: - for line in fileinput.input(patchfile_fp, inplace=1, backup='.orig'): - if "add_subdirectory(lit_tests)" not in line: - sys.stdout.write(line) - except (IOError, OSError), err: - raise EasyBuildError("Failed to patch %s: %s", patchfile_fp, err) - else: - self.log.debug("Not patching non-existent %s in %s" % (patchfile, self.llvm_src_dir)) - - # There is a common part seperate for the specific saniters, we disable all - # the common tests - patchfile = "projects/compiler-rt/lib/sanitizer_common/CMakeLists.txt" - try: - for line in fileinput.input("%s/%s" % (self.llvm_src_dir, patchfile), inplace=1, backup='.orig'): - if "add_subdirectory(tests)" not in line: - sys.stdout.write(line) - except IOError, err: - raise EasyBuildError("Failed to patch %s/%s: %s", self.llvm_src_dir, patchfile, err) - else: - # In Clang 3.6, the sanitizer tests are grouped together in one CMakeLists - # We patch out adding the subdirectories with the sanitizer tests - patchfile = "projects/compiler-rt/test/CMakeLists.txt" - patchfile_fp = os.path.join(self.llvm_src_dir, patchfile) - self.log.debug("Patching %s in %s" % (patchfile, self.llvm_src_dir)) - patch_regex = re.compile(r'add_subdirectory\((.*san|sanitizer_common)\)') - try: - for line in fileinput.input(patchfile_fp, inplace=1, backup='.orig'): - if not patch_regex.search(line): - sys.stdout.write(line) - except IOError, err: - raise EasyBuildError("Failed to patch %s: %s", patchfile_fp, err) - - def build_with_prev_stage(self, prev_obj, next_obj): - """Build Clang stage N using Clang stage N-1""" - - # Create and enter build directory. - mkdir(next_obj) - os.chdir(next_obj) - - # Configure. - CC = os.path.join(prev_obj, 'bin', 'clang') - CXX = os.path.join(prev_obj, 'bin', 'clang++') - - options = "-DCMAKE_INSTALL_PREFIX=%s " % self.installdir - options += "-DCMAKE_C_COMPILER='%s' " % CC - options += "-DCMAKE_CXX_COMPILER='%s' " % CXX - options += self.cfg['configopts'] - - self.log.info("Configuring") - run_cmd("cmake %s %s" % (options, self.llvm_src_dir), log_all=True) - - self.log.info("Building") - run_cmd("make %s" % self.make_parallel_opts, log_all=True) - - def run_clang_tests(self, obj_dir): - os.chdir(obj_dir) - - self.log.info("Running tests") - run_cmd("make %s check-all" % self.make_parallel_opts, log_all=True) - - def build_step(self): - if LooseVersion(self.version) >= LooseVersion('5.0'): - super(EB_Clang, self).build_step() - return - - """Build Clang stage 1, 2, 3""" - - # Stage 1: build using system compiler. - self.log.info("Building stage 1") - os.chdir(self.llvm_obj_dir_stage1) - super(EB_Clang, self).build_step() - - if self.cfg['bootstrap']: - # Stage 1: run tests. - self.run_clang_tests(self.llvm_obj_dir_stage1) - - self.log.info("Building stage 2") - self.build_with_prev_stage(self.llvm_obj_dir_stage1, self.llvm_obj_dir_stage2) - self.run_clang_tests(self.llvm_obj_dir_stage2) - - self.log.info("Building stage 3") - self.build_with_prev_stage(self.llvm_obj_dir_stage2, self.llvm_obj_dir_stage3) - # Don't run stage 3 tests here, do it in the test step. - - def test_step(self): - if LooseVersion(self.version) >= LooseVersion('5.0'): - super(EB_Clang, self).test_step() - return - - if self.cfg['bootstrap']: - self.run_clang_tests(self.llvm_obj_dir_stage3) - else: - self.run_clang_tests(self.llvm_obj_dir_stage1) - - def install_step(self): - if LooseVersion(self.version) >= LooseVersion('5.0'): - super(EB_Clang, self).install_step() - return - - """Install stage 3 binaries.""" - - if self.cfg['bootstrap']: - os.chdir(self.llvm_obj_dir_stage3) - else: - os.chdir(self.llvm_obj_dir_stage1) - super(EB_Clang, self).install_step() - - # the static analyzer is not installed by default - # we do it by hand - if self.cfg['static_analyzer'] and LooseVersion(self.version) < LooseVersion('3.8'): - try: - tools_src_dir = os.path.join(self.llvm_src_dir, 'tools', 'clang', 'tools') - analyzer_target_dir = os.path.join(self.installdir, 'libexec', 'clang-analyzer') - bindir = os.path.join(self.installdir, 'bin') - for scan_dir in ['scan-build', 'scan-view']: - shutil.copytree(os.path.join(tools_src_dir, scan_dir), os.path.join(analyzer_target_dir, scan_dir)) - os.symlink(os.path.relpath(bindir, os.path.join(analyzer_target_dir, scan_dir)), - os.path.join(analyzer_target_dir, scan_dir, 'bin')) - os.symlink(os.path.relpath(os.path.join(analyzer_target_dir, scan_dir, scan_dir), bindir), - os.path.join(bindir, scan_dir)) - - mandir = os.path.join(self.installdir, 'share', 'man', 'man1') - os.makedirs(mandir) - shutil.copy2(os.path.join(tools_src_dir, 'scan-build', 'scan-build.1'), mandir) - except OSError, err: - raise EasyBuildError("Failed to copy static analyzer dirs to install dir: %s", err) - - def sanity_check_step(self): - """Custom sanity check for Clang.""" - shlib_ext = get_shared_lib_ext() - custom_paths = { - 'files': [ - "bin/clang", "bin/clang++", "bin/llvm-ar", "bin/llvm-nm", "bin/llvm-as", "bin/opt", "bin/llvm-link", - "bin/llvm-config", "bin/llvm-symbolizer", "include/llvm-c/Core.h", "include/clang-c/Index.h", - "lib/libclang.%s" % shlib_ext, "lib/clang/%s/include/stddef.h" % self.version, - ], - 'dirs': ["include/clang", "include/llvm", "lib/clang/%s/lib" % self.version], - } - if self.cfg['static_analyzer']: - custom_paths['files'].extend(["bin/scan-build", "bin/scan-view"]) - - if self.cfg["usepolly"]: - custom_paths['files'].extend(["lib/LLVMPolly.%s" % shlib_ext]) - custom_paths['dirs'].extend(["include/polly"]) - - if LooseVersion(self.version) >= LooseVersion('3.8'): - custom_paths['files'].extend(["lib/libomp.%s" % shlib_ext, "lib/clang/%s/include/omp.h" % self.version]) - - super(EB_Clang, self).sanity_check_step(custom_paths=custom_paths) - - def make_module_extra(self): - """Custom variables for Clang module.""" - txt = super(EB_Clang, self).make_module_extra() - # we set the symbolizer path so that asan/tsan give meanfull output by default - asan_symbolizer_path = os.path.join(self.installdir, 'bin', 'llvm-symbolizer') - txt += self.module_generator.set_environment('ASAN_SYMBOLIZER_PATH', asan_symbolizer_path) - return txt diff --git a/easyblocks/c/clang.py b/easyblocks/c/clang.py deleted file mode 100644 index 18edaee..0000000 --- a/easyblocks/c/clang.py +++ /dev/null @@ -1,420 +0,0 @@ -## -# Copyright 2013 Dmitri Gribenko -# Copyright 2013-2017 Ghent University -# Copyright 2017 IT4Innovations -# -# This file is triple-licensed under GPLv2 (see below), MIT, and -# BSD three-clause licenses. -# -# This file is part of EasyBuild, -# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), -# with support of Ghent University (http://ugent.be/hpc), -# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), -# Flemish Research Foundation (FWO) (http://www.fwo.be/en) -# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). -# -# https://github.com/easybuilders/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 <http://www.gnu.org/licenses/>. -## -""" -Support for building and installing Clang, implemented as an easyblock. - -@author: Dmitri Gribenko (National Technical University of Ukraine "KPI") -@author: Ward Poelmans (Ghent University) -@author: Josef Hrabal, Lukas Krupcik (IT4innovations, Czechia) -""" - -import fileinput -import glob -import os -import re -import shutil -import sys -from distutils.version import LooseVersion - -from easybuild.easyblocks.generic.cmakemake import CMakeMake -from easybuild.framework.easyconfig import CUSTOM -from easybuild.tools import run -from easybuild.tools.build_log import EasyBuildError -from easybuild.tools.config import build_option -from easybuild.tools.filetools import mkdir -from easybuild.tools.modules import get_software_root -from easybuild.tools.run import run_cmd -from easybuild.tools.systemtools import get_os_name, get_os_version, get_shared_lib_ext - -# List of all possible build targets for Clang -CLANG_TARGETS = ["all", "AArch64", "ARM", "CppBackend", "Hexagon", "Mips", - "MBlaze", "MSP430", "NVPTX", "PowerPC", "R600", "Sparc", - "SystemZ", "X86", "XCore"] - - -class EB_Clang(CMakeMake): - """Support for bootstrapping Clang.""" - - @staticmethod - def extra_options(): - extra_vars = { - 'assertions': [True, "Enable assertions. Helps to catch bugs in Clang.", CUSTOM], - 'build_targets': [["X86"], "Build targets for LLVM. Possible values: " + ', '.join(CLANG_TARGETS), CUSTOM], - 'bootstrap': [True, "Bootstrap Clang using GCC", CUSTOM], - 'usepolly': [False, "Build Clang with polly", CUSTOM], - 'static_analyzer': [True, "Install the static analyser of Clang", CUSTOM], - # The sanitizer tests often fail on HPC systems due to the 'weird' environment. - 'skip_sanitizer_tests': [False, "Do not run the sanitizer tests", CUSTOM], - } - - return CMakeMake.extra_options(extra_vars) - - def __init__(self, *args, **kwargs): - """Initialize custom class variables for Clang.""" - - super(EB_Clang, self).__init__(*args, **kwargs) - self.llvm_src_dir = None - self.llvm_obj_dir_stage1 = None - self.llvm_obj_dir_stage2 = None - self.llvm_obj_dir_stage3 = None - self.make_parallel_opts = "" - - unknown_targets = [target for target in self.cfg['build_targets'] if target not in CLANG_TARGETS] - - if unknown_targets: - raise EasyBuildError("Some of the chosen build targets (%s) are not in %s.", - ', '.join(unknown_targets), ', '.join(CLANG_TARGETS)) - - if LooseVersion(self.version) < LooseVersion('3.4') and "R600" in self.cfg['build_targets']: - raise EasyBuildError("Build target R600 not supported in < Clang-3.4") - - if LooseVersion(self.version) > LooseVersion('3.3') and "MBlaze" in self.cfg['build_targets']: - raise EasyBuildError("Build target MBlaze is not supported anymore in > Clang-3.3") - - def check_readiness_step(self): - """Fail early on RHEL 5.x and derivatives because of known bug in libc.""" - super(EB_Clang, self).check_readiness_step() - # RHEL 5.x have a buggy libc. Building stage 2 will fail. - if get_os_name() in ['redhat', 'RHEL', 'centos', 'SL'] and get_os_version().startswith('5.'): - raise EasyBuildError("Can not build Clang on %s v5.x: libc is buggy, building stage 2 will fail. " - "See http://stackoverflow.com/questions/7276828/", get_os_name()) - - def extract_step(self): - """ - Prepare a combined LLVM source tree. The layout is: - llvm/ Unpack llvm-*.tar.gz here - projects/ - compiler-rt/ Unpack compiler-rt-*.tar.gz here - openmp/ Unpack openmp-*.tar.xz here - libcxx/ Unpack libcxx-*.tar.xz here - libcxxabi/ Unpack libcxxapbi-*.tar.xz here - tools/ - clang/ Unpack cfe-*.tar.gz here - tools/extra Unpack clang-*.tar.gz here - polly/ Unpack polly-*.tar.gz here - """ - - # Extract everything into separate directories. - super(EB_Clang, self).extract_step() - - # Find the full path to the directory that was unpacked from llvm-*.tar.gz. - for tmp in self.src: - if tmp['name'].startswith("llvm-"): - self.llvm_src_dir = tmp['finalpath'] - break - - if self.llvm_src_dir is None: - raise EasyBuildError("Could not determine LLVM source root (LLVM source was not unpacked?)") - - src_dirs = {} - - def find_source_dir(globpatterns, targetdir): - """Search for directory with globpattern and rename it to targetdir""" - if not isinstance(globpatterns, list): - globpatterns = [globpatterns] - - glob_src_dirs = [glob_dir for globpattern in globpatterns for glob_dir in glob.glob(globpattern)] - if len(glob_src_dirs) != 1: - raise EasyBuildError("Failed to find exactly one source directory for pattern %s: %s", globpatterns, - glob_src_dirs) - src_dirs[glob_src_dirs[0]] = targetdir - - find_source_dir('compiler-rt-*', os.path.join(self.llvm_src_dir, 'projects', 'compiler-rt')) - - if self.cfg["usepolly"]: - find_source_dir('polly-*', os.path.join(self.llvm_src_dir, 'tools', 'polly')) - - find_source_dir('cfe-*', os.path.join(self.llvm_src_dir, 'tools', 'clang')) - - find_source_dir('clang-*', os.path.join(self.llvm_src_dir, 'tools', 'clang', 'tools', 'extra')) - - if LooseVersion(self.version) >= LooseVersion('5.0'): - find_source_dir('libcxx-*', os.path.join(self.llvm_src_dir, 'projects', 'libcxx')) - - if LooseVersion(self.version) >= LooseVersion('5.0'): - find_source_dir('libcxxabi-*', os.path.join(self.llvm_src_dir, 'projects', 'libcxxabi')) - - if LooseVersion(self.version) >= LooseVersion('3.8'): - find_source_dir('openmp-*', os.path.join(self.llvm_src_dir, 'projects', 'openmp')) - - for src in self.src: - for (dirname, new_path) in src_dirs.items(): - if src['name'].startswith(dirname): - old_path = os.path.join(src['finalpath'], dirname) - try: - shutil.move(old_path, new_path) - except IOError, err: - raise EasyBuildError("Failed to move %s to %s: %s", old_path, new_path, err) - src['finalpath'] = new_path - break - - def configure_step(self): - if LooseVersion(self.version) >= LooseVersion('5.0'): - super(EB_Clang, self).configure_step() - return - - """Run CMake for stage 1 Clang.""" - self.llvm_obj_dir_stage1 = os.path.join(self.builddir, 'llvm.obj.1') - if self.cfg['bootstrap']: - self.llvm_obj_dir_stage2 = os.path.join(self.builddir, 'llvm.obj.2') - self.llvm_obj_dir_stage3 = os.path.join(self.builddir, 'llvm.obj.3') - - if LooseVersion(self.version) >= LooseVersion('3.3'): - disable_san_tests = False - # all sanitizer tests will fail when there's a limit on the vmem - # this is ugly but I haven't found a cleaner way so far - (vmemlim, ec) = run_cmd("ulimit -v", regexp=False) - if not vmemlim.startswith("unlimited"): - disable_san_tests = True - self.log.warn("There is a virtual memory limit set of %s KB. The tests of the " - "sanitizers will be disabled as they need unlimited virtual " - "memory unless --strict=error is used." % vmemlim.strip()) - - # the same goes for unlimited stacksize - (stacklim, ec) = run_cmd("ulimit -s", regexp=False) - if stacklim.startswith("unlimited"): - disable_san_tests = True - self.log.warn("The stacksize limit is set to unlimited. This causes the ThreadSanitizer " - "to fail. The sanitizers tests will be disabled unless --strict=error is used.") - - if (disable_san_tests or self.cfg['skip_sanitizer_tests']) and build_option('strict') != run.ERROR: - self.log.debug("Disabling the sanitizer tests") - self.disable_sanitizer_tests() - - # Create and enter build directory. - mkdir(self.llvm_obj_dir_stage1) - os.chdir(self.llvm_obj_dir_stage1) - - # GCC and Clang are installed in different prefixes and Clang will not - # find the GCC installation on its own. - # First try with GCCcore, as GCC built on top of GCCcore is just a wrapper for GCCcore and binutils, - # instead of a full-fledge compiler - gcc_prefix = get_software_root('GCCcore') - - # If that doesn't work, try with GCC - if gcc_prefix is None: - gcc_prefix = get_software_root('GCC') - - # If that doesn't work either, print error and exit - if gcc_prefix is None: - raise EasyBuildError("Can't find GCC or GCCcore to use") - - self.cfg.update('configopts', "-DGCC_INSTALL_PREFIX='%s' " % gcc_prefix) - self.log.debug("Using %s as GCC_INSTALL_PREFIX", gcc_prefix) - - self.cfg['configopts'] += "-DCMAKE_BUILD_TYPE=Release " - if self.cfg['assertions']: - self.cfg['configopts'] += "-DLLVM_ENABLE_ASSERTIONS=ON " - else: - self.cfg['configopts'] += "-DLLVM_ENABLE_ASSERTIONS=OFF " - - self.cfg['configopts'] += '-DLLVM_TARGETS_TO_BUILD="%s" ' % ';'.join(self.cfg['build_targets']) - - if self.cfg['parallel']: - self.make_parallel_opts = "-j %s" % self.cfg['parallel'] - - self.log.info("Configuring") - super(EB_Clang, self).configure_step(srcdir=self.llvm_src_dir) - - def disable_sanitizer_tests(self): - """Disable the tests of all the sanitizers by removing the test directories from the build system""" - if LooseVersion(self.version) < LooseVersion('3.6'): - # for Clang 3.5 and lower, the tests are scattered over several CMakeLists. - # We loop over them, and patch out the rule that adds the sanitizers tests to the testsuite - patchfiles = [ - "lib/asan", - "lib/dfsan", - "lib/lsan", - "lib/msan", - "lib/tsan", - "lib/ubsan", - ] - - for patchfile in patchfiles: - patchfile_fp = os.path.join(self.llvm_src_dir, "projects/compiler-rt", patchfile, "CMakeLists.txt") - if os.path.exists(patchfile_fp): - self.log.debug("Patching %s in %s" % (patchfile, self.llvm_src_dir)) - try: - for line in fileinput.input(patchfile_fp, inplace=1, backup='.orig'): - if "add_subdirectory(lit_tests)" not in line: - sys.stdout.write(line) - except (IOError, OSError), err: - raise EasyBuildError("Failed to patch %s: %s", patchfile_fp, err) - else: - self.log.debug("Not patching non-existent %s in %s" % (patchfile, self.llvm_src_dir)) - - # There is a common part seperate for the specific saniters, we disable all - # the common tests - patchfile = "projects/compiler-rt/lib/sanitizer_common/CMakeLists.txt" - try: - for line in fileinput.input("%s/%s" % (self.llvm_src_dir, patchfile), inplace=1, backup='.orig'): - if "add_subdirectory(tests)" not in line: - sys.stdout.write(line) - except IOError, err: - raise EasyBuildError("Failed to patch %s/%s: %s", self.llvm_src_dir, patchfile, err) - else: - # In Clang 3.6, the sanitizer tests are grouped together in one CMakeLists - # We patch out adding the subdirectories with the sanitizer tests - patchfile = "projects/compiler-rt/test/CMakeLists.txt" - patchfile_fp = os.path.join(self.llvm_src_dir, patchfile) - self.log.debug("Patching %s in %s" % (patchfile, self.llvm_src_dir)) - patch_regex = re.compile(r'add_subdirectory\((.*san|sanitizer_common)\)') - try: - for line in fileinput.input(patchfile_fp, inplace=1, backup='.orig'): - if not patch_regex.search(line): - sys.stdout.write(line) - except IOError, err: - raise EasyBuildError("Failed to patch %s: %s", patchfile_fp, err) - - def build_with_prev_stage(self, prev_obj, next_obj): - """Build Clang stage N using Clang stage N-1""" - - # Create and enter build directory. - mkdir(next_obj) - os.chdir(next_obj) - - # Configure. - CC = os.path.join(prev_obj, 'bin', 'clang') - CXX = os.path.join(prev_obj, 'bin', 'clang++') - - options = "-DCMAKE_INSTALL_PREFIX=%s " % self.installdir - options += "-DCMAKE_C_COMPILER='%s' " % CC - options += "-DCMAKE_CXX_COMPILER='%s' " % CXX - options += self.cfg['configopts'] - - self.log.info("Configuring") - run_cmd("cmake %s %s" % (options, self.llvm_src_dir), log_all=True) - - self.log.info("Building") - run_cmd("make %s" % self.make_parallel_opts, log_all=True) - - def run_clang_tests(self, obj_dir): - os.chdir(obj_dir) - - self.log.info("Running tests") - run_cmd("make %s check-all" % self.make_parallel_opts, log_all=True) - - def build_step(self): - if LooseVersion(self.version) >= LooseVersion('5.0'): - super(EB_Clang, self).build_step() - return - - """Build Clang stage 1, 2, 3""" - - # Stage 1: build using system compiler. - self.log.info("Building stage 1") - os.chdir(self.llvm_obj_dir_stage1) - super(EB_Clang, self).build_step() - - if self.cfg['bootstrap']: - # Stage 1: run tests. - self.run_clang_tests(self.llvm_obj_dir_stage1) - - self.log.info("Building stage 2") - self.build_with_prev_stage(self.llvm_obj_dir_stage1, self.llvm_obj_dir_stage2) - self.run_clang_tests(self.llvm_obj_dir_stage2) - - self.log.info("Building stage 3") - self.build_with_prev_stage(self.llvm_obj_dir_stage2, self.llvm_obj_dir_stage3) - # Don't run stage 3 tests here, do it in the test step. - - def test_step(self): - if LooseVersion(self.version) >= LooseVersion('5.0'): - super(EB_Clang, self).test_step() - return - - if self.cfg['bootstrap']: - self.run_clang_tests(self.llvm_obj_dir_stage3) - else: - self.run_clang_tests(self.llvm_obj_dir_stage1) - - def install_step(self): - if LooseVersion(self.version) >= LooseVersion('5.0'): - super(EB_Clang, self).install_step() - return - - """Install stage 3 binaries.""" - - if self.cfg['bootstrap']: - os.chdir(self.llvm_obj_dir_stage3) - else: - os.chdir(self.llvm_obj_dir_stage1) - super(EB_Clang, self).install_step() - - # the static analyzer is not installed by default - # we do it by hand - if self.cfg['static_analyzer'] and LooseVersion(self.version) < LooseVersion('3.8'): - try: - tools_src_dir = os.path.join(self.llvm_src_dir, 'tools', 'clang', 'tools') - analyzer_target_dir = os.path.join(self.installdir, 'libexec', 'clang-analyzer') - bindir = os.path.join(self.installdir, 'bin') - for scan_dir in ['scan-build', 'scan-view']: - shutil.copytree(os.path.join(tools_src_dir, scan_dir), os.path.join(analyzer_target_dir, scan_dir)) - os.symlink(os.path.relpath(bindir, os.path.join(analyzer_target_dir, scan_dir)), - os.path.join(analyzer_target_dir, scan_dir, 'bin')) - os.symlink(os.path.relpath(os.path.join(analyzer_target_dir, scan_dir, scan_dir), bindir), - os.path.join(bindir, scan_dir)) - - mandir = os.path.join(self.installdir, 'share', 'man', 'man1') - os.makedirs(mandir) - shutil.copy2(os.path.join(tools_src_dir, 'scan-build', 'scan-build.1'), mandir) - except OSError, err: - raise EasyBuildError("Failed to copy static analyzer dirs to install dir: %s", err) - - def sanity_check_step(self): - """Custom sanity check for Clang.""" - shlib_ext = get_shared_lib_ext() - custom_paths = { - 'files': [ - "bin/clang", "bin/clang++", "bin/llvm-ar", "bin/llvm-nm", "bin/llvm-as", "bin/opt", "bin/llvm-link", - "bin/llvm-config", "bin/llvm-symbolizer", "include/llvm-c/Core.h", "include/clang-c/Index.h", - "lib/libclang.%s" % shlib_ext, "lib/clang/%s/include/stddef.h" % self.version, - ], - 'dirs': ["include/clang", "include/llvm", "lib/clang/%s/lib" % self.version], - } - if self.cfg['static_analyzer']: - custom_paths['files'].extend(["bin/scan-build", "bin/scan-view"]) - - if self.cfg["usepolly"]: - custom_paths['files'].extend(["lib/LLVMPolly.%s" % shlib_ext]) - custom_paths['dirs'].extend(["include/polly"]) - - if LooseVersion(self.version) >= LooseVersion('3.8'): - custom_paths['files'].extend(["lib/libomp.%s" % shlib_ext, "lib/clang/%s/include/omp.h" % self.version]) - - super(EB_Clang, self).sanity_check_step(custom_paths=custom_paths) - - def make_module_extra(self): - """Custom variables for Clang module.""" - txt = super(EB_Clang, self).make_module_extra() - # we set the symbolizer path so that asan/tsan give meanfull output by default - asan_symbolizer_path = os.path.join(self.installdir, 'bin', 'llvm-symbolizer') - txt += self.module_generator.set_environment('ASAN_SYMBOLIZER_PATH', asan_symbolizer_path) - return txt diff --git a/easyblocks/c/clang.py.old b/easyblocks/c/clang.py.old deleted file mode 100644 index e0b60ed..0000000 --- a/easyblocks/c/clang.py.old +++ /dev/null @@ -1,403 +0,0 @@ -## -# Copyright 2013 Dmitri Gribenko -# Copyright 2013-2017 Ghent University -# -# This file is triple-licensed under GPLv2 (see below), MIT, and -# BSD three-clause licenses. -# -# This file is part of EasyBuild, -# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), -# with support of Ghent University (http://ugent.be/hpc), -# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), -# Flemish Research Foundation (FWO) (http://www.fwo.be/en) -# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). -# -# https://github.com/easybuilders/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 <http://www.gnu.org/licenses/>. -## -""" -Support for building and installing Clang, implemented as an easyblock. - -@author: Dmitri Gribenko (National Technical University of Ukraine "KPI") -@author: Ward Poelmans (Ghent University) -""" - -import fileinput -import glob -import os -import re -import shutil -import sys -from distutils.version import LooseVersion - -from easybuild.easyblocks.generic.cmakemake import CMakeMake -from easybuild.framework.easyconfig import CUSTOM -from easybuild.tools import run -from easybuild.tools.build_log import EasyBuildError -from easybuild.tools.config import build_option -from easybuild.tools.filetools import mkdir -from easybuild.tools.modules import get_software_root -from easybuild.tools.run import run_cmd -from easybuild.tools.systemtools import get_os_name, get_os_version, get_shared_lib_ext - -# List of all possible build targets for Clang -CLANG_TARGETS = ["all", "AArch64", "ARM", "CppBackend", "Hexagon", "Mips", - "MBlaze", "MSP430", "NVPTX", "PowerPC", "R600", "Sparc", - "SystemZ", "X86", "XCore"] - - -class EB_Clang(CMakeMake): - """Support for bootstrapping Clang.""" - - @staticmethod - def extra_options(): - extra_vars = { - 'assertions': [True, "Enable assertions. Helps to catch bugs in Clang.", CUSTOM], - 'build_targets': [["X86"], "Build targets for LLVM. Possible values: " + ', '.join(CLANG_TARGETS), CUSTOM], - 'bootstrap': [True, "Bootstrap Clang using GCC", CUSTOM], - 'usepolly': [False, "Build Clang with polly", CUSTOM], - 'static_analyzer': [True, "Install the static analyser of Clang", CUSTOM], - # The sanitizer tests often fail on HPC systems due to the 'weird' environment. - 'skip_sanitizer_tests': [False, "Do not run the sanitizer tests", CUSTOM], - } - - return CMakeMake.extra_options(extra_vars) - - def __init__(self, *args, **kwargs): - """Initialize custom class variables for Clang.""" - - super(EB_Clang, self).__init__(*args, **kwargs) - self.llvm_src_dir = None - self.llvm_obj_dir_stage1 = None - self.llvm_obj_dir_stage2 = None - self.llvm_obj_dir_stage3 = None - self.make_parallel_opts = "" - - unknown_targets = [target for target in self.cfg['build_targets'] if target not in CLANG_TARGETS] - - if unknown_targets: - raise EasyBuildError("Some of the chosen build targets (%s) are not in %s.", - ', '.join(unknown_targets), ', '.join(CLANG_TARGETS)) - - if LooseVersion(self.version) < LooseVersion('3.4') and "R600" in self.cfg['build_targets']: - raise EasyBuildError("Build target R600 not supported in < Clang-3.4") - - if LooseVersion(self.version) > LooseVersion('3.3') and "MBlaze" in self.cfg['build_targets']: - raise EasyBuildError("Build target MBlaze is not supported anymore in > Clang-3.3") - - def check_readiness_step(self): - """Fail early on RHEL 5.x and derivatives because of known bug in libc.""" - super(EB_Clang, self).check_readiness_step() - # RHEL 5.x have a buggy libc. Building stage 2 will fail. - if get_os_name() in ['redhat', 'RHEL', 'centos', 'SL'] and get_os_version().startswith('5.'): - raise EasyBuildError("Can not build Clang on %s v5.x: libc is buggy, building stage 2 will fail. " - "See http://stackoverflow.com/questions/7276828/", get_os_name()) - - def extract_step(self): - """ - Prepare a combined LLVM source tree. The layout is: - llvm/ Unpack llvm-*.tar.gz here - projects/ - compiler-rt/ Unpack compiler-rt-*.tar.gz here - openmp/ Unpack openmp-*.tar.xz here - libcxx/ - libcxxabi/ - tools/ - clang/ Unpack clang-*.tar.gz here - clang/tools/extra - polly/ Unpack polly-*.tar.gz here - """ - - # Extract everything into separate directories. - super(EB_Clang, self).extract_step() - - # Find the full path to the directory that was unpacked from llvm-*.tar.gz. - for tmp in self.src: - if tmp['name'].startswith("llvm-"): - self.llvm_src_dir = tmp['finalpath'] - break - - if self.llvm_src_dir is None: - raise EasyBuildError("Could not determine LLVM source root (LLVM source was not unpacked?)") - - src_dirs = {} - - def find_source_dir(globpatterns, targetdir): - """Search for directory with globpattern and rename it to targetdir""" - if not isinstance(globpatterns, list): - globpatterns = [globpatterns] - - glob_src_dirs = [glob_dir for globpattern in globpatterns for glob_dir in glob.glob(globpattern)] - if len(glob_src_dirs) != 1: - raise EasyBuildError("Failed to find exactly one source directory for pattern %s: %s", globpatterns, - glob_src_dirs) - src_dirs[glob_src_dirs[0]] = targetdir - - find_source_dir('compiler-rt-*', os.path.join(self.llvm_src_dir, 'projects', 'compiler-rt')) - - if self.cfg["usepolly"]: - find_source_dir('polly-*', os.path.join(self.llvm_src_dir, 'tools', 'polly')) - - find_source_dir('cfe-*', os.path.join(self.llvm_src_dir, 'tools', 'clang')) - - find_source_dir('clang-*', os.path.join(self.llvm_src_dir, 'tools', 'clang', 'tools', 'extra')) - - if LooseVersion(self.version) >= LooseVersion('5.0'): - find_source_dir('libcxx-*', os.path.join(self.llvm_src_dir, 'projects', 'libcxx')) - - if LooseVersion(self.version) >= LooseVersion('5.0'): - find_source_dir('libcxxabi-*', os.path.join(self.llvm_src_dir, 'projects', 'libcxxabi')) - - if LooseVersion(self.version) >= LooseVersion('3.8'): - find_source_dir('openmp-*', os.path.join(self.llvm_src_dir, 'projects', 'openmp')) - - for src in self.src: - for (dirname, new_path) in src_dirs.items(): - if src['name'].startswith(dirname): - old_path = os.path.join(src['finalpath'], dirname) - try: - shutil.move(old_path, new_path) - except IOError, err: - raise EasyBuildError("Failed to move %s to %s: %s", old_path, new_path, err) - src['finalpath'] = new_path - break - - def configure_step(self): - """Run CMake for stage 1 Clang.""" - - self.llvm_obj_dir_stage1 = os.path.join(self.builddir, 'llvm.obj.1') - if self.cfg['bootstrap']: - self.llvm_obj_dir_stage2 = os.path.join(self.builddir, 'llvm.obj.2') - self.llvm_obj_dir_stage3 = os.path.join(self.builddir, 'llvm.obj.3') - - if LooseVersion(self.version) >= LooseVersion('3.3'): - disable_san_tests = False - # all sanitizer tests will fail when there's a limit on the vmem - # this is ugly but I haven't found a cleaner way so far - (vmemlim, ec) = run_cmd("ulimit -v", regexp=False) - if not vmemlim.startswith("unlimited"): - disable_san_tests = True - self.log.warn("There is a virtual memory limit set of %s KB. The tests of the " - "sanitizers will be disabled as they need unlimited virtual " - "memory unless --strict=error is used." % vmemlim.strip()) - - # the same goes for unlimited stacksize - (stacklim, ec) = run_cmd("ulimit -s", regexp=False) - if stacklim.startswith("unlimited"): - disable_san_tests = True - self.log.warn("The stacksize limit is set to unlimited. This causes the ThreadSanitizer " - "to fail. The sanitizers tests will be disabled unless --strict=error is used.") - - if (disable_san_tests or self.cfg['skip_sanitizer_tests']) and build_option('strict') != run.ERROR: - self.log.debug("Disabling the sanitizer tests") - self.disable_sanitizer_tests() - - # Create and enter build directory. - mkdir(self.llvm_obj_dir_stage1) - os.chdir(self.llvm_obj_dir_stage1) - - # GCC and Clang are installed in different prefixes and Clang will not - # find the GCC installation on its own. - # First try with GCCcore, as GCC built on top of GCCcore is just a wrapper for GCCcore and binutils, - # instead of a full-fledge compiler - gcc_prefix = get_software_root('GCCcore') - - # If that doesn't work, try with GCC - if gcc_prefix is None: - gcc_prefix = get_software_root('GCC') - - # If that doesn't work either, print error and exit - if gcc_prefix is None: - raise EasyBuildError("Can't find GCC or GCCcore to use") - - self.cfg.update('configopts', "-DGCC_INSTALL_PREFIX='%s' " % gcc_prefix) - self.log.debug("Using %s as GCC_INSTALL_PREFIX", gcc_prefix) - - self.cfg['configopts'] += "-DCMAKE_BUILD_TYPE=Release " - if self.cfg['assertions']: - self.cfg['configopts'] += "-DLLVM_ENABLE_ASSERTIONS=ON " - else: - self.cfg['configopts'] += "-DLLVM_ENABLE_ASSERTIONS=OFF " - - self.cfg['configopts'] += '-DLLVM_TARGETS_TO_BUILD="%s" ' % ';'.join(self.cfg['build_targets']) - - if self.cfg['parallel']: - self.make_parallel_opts = "-j %s" % self.cfg['parallel'] - - self.log.info("Configuring") - super(EB_Clang, self).configure_step(srcdir=self.llvm_src_dir) - - def disable_sanitizer_tests(self): - """Disable the tests of all the sanitizers by removing the test directories from the build system""" - if LooseVersion(self.version) < LooseVersion('3.6'): - # for Clang 3.5 and lower, the tests are scattered over several CMakeLists. - # We loop over them, and patch out the rule that adds the sanitizers tests to the testsuite - patchfiles = [ - "lib/asan", - "lib/dfsan", - "lib/lsan", - "lib/msan", - "lib/tsan", - "lib/ubsan", - ] - - for patchfile in patchfiles: - patchfile_fp = os.path.join(self.llvm_src_dir, "projects/compiler-rt", patchfile, "CMakeLists.txt") - if os.path.exists(patchfile_fp): - self.log.debug("Patching %s in %s" % (patchfile, self.llvm_src_dir)) - try: - for line in fileinput.input(patchfile_fp, inplace=1, backup='.orig'): - if "add_subdirectory(lit_tests)" not in line: - sys.stdout.write(line) - except (IOError, OSError), err: - raise EasyBuildError("Failed to patch %s: %s", patchfile_fp, err) - else: - self.log.debug("Not patching non-existent %s in %s" % (patchfile, self.llvm_src_dir)) - - # There is a common part seperate for the specific saniters, we disable all - # the common tests - patchfile = "projects/compiler-rt/lib/sanitizer_common/CMakeLists.txt" - try: - for line in fileinput.input("%s/%s" % (self.llvm_src_dir, patchfile), inplace=1, backup='.orig'): - if "add_subdirectory(tests)" not in line: - sys.stdout.write(line) - except IOError, err: - raise EasyBuildError("Failed to patch %s/%s: %s", self.llvm_src_dir, patchfile, err) - else: - # In Clang 3.6, the sanitizer tests are grouped together in one CMakeLists - # We patch out adding the subdirectories with the sanitizer tests - patchfile = "projects/compiler-rt/test/CMakeLists.txt" - patchfile_fp = os.path.join(self.llvm_src_dir, patchfile) - self.log.debug("Patching %s in %s" % (patchfile, self.llvm_src_dir)) - patch_regex = re.compile(r'add_subdirectory\((.*san|sanitizer_common)\)') - try: - for line in fileinput.input(patchfile_fp, inplace=1, backup='.orig'): - if not patch_regex.search(line): - sys.stdout.write(line) - except IOError, err: - raise EasyBuildError("Failed to patch %s: %s", patchfile_fp, err) - - def build_with_prev_stage(self, prev_obj, next_obj): - """Build Clang stage N using Clang stage N-1""" - - # Create and enter build directory. - mkdir(next_obj) - os.chdir(next_obj) - - # Configure. - CC = os.path.join(prev_obj, 'bin', 'clang') - CXX = os.path.join(prev_obj, 'bin', 'clang++') - - options = "-DCMAKE_INSTALL_PREFIX=%s " % self.installdir - options += "-DCMAKE_C_COMPILER='%s' " % CC - options += "-DCMAKE_CXX_COMPILER='%s' " % CXX - options += self.cfg['configopts'] - - self.log.info("Configuring") - run_cmd("cmake %s %s" % (options, self.llvm_src_dir), log_all=True) - - self.log.info("Building") - run_cmd("make %s" % self.make_parallel_opts, log_all=True) - - def run_clang_tests(self, obj_dir): - os.chdir(obj_dir) - - self.log.info("Running tests") - run_cmd("make %s check-all" % self.make_parallel_opts, log_all=True) - - def build_step(self): - """Build Clang stage 1, 2, 3""" - - # Stage 1: build using system compiler. - self.log.info("Building stage 1") - os.chdir(self.llvm_obj_dir_stage1) - super(EB_Clang, self).build_step() - - if self.cfg['bootstrap']: - # Stage 1: run tests. - self.run_clang_tests(self.llvm_obj_dir_stage1) - - self.log.info("Building stage 2") - self.build_with_prev_stage(self.llvm_obj_dir_stage1, self.llvm_obj_dir_stage2) - self.run_clang_tests(self.llvm_obj_dir_stage2) - - self.log.info("Building stage 3") - self.build_with_prev_stage(self.llvm_obj_dir_stage2, self.llvm_obj_dir_stage3) - # Don't run stage 3 tests here, do it in the test step. - - def test_step(self): - if self.cfg['bootstrap']: - self.run_clang_tests(self.llvm_obj_dir_stage3) - else: - self.run_clang_tests(self.llvm_obj_dir_stage1) - - def install_step(self): - """Install stage 3 binaries.""" - - if self.cfg['bootstrap']: - os.chdir(self.llvm_obj_dir_stage3) - else: - os.chdir(self.llvm_obj_dir_stage1) - super(EB_Clang, self).install_step() - - # the static analyzer is not installed by default - # we do it by hand - if self.cfg['static_analyzer'] and LooseVersion(self.version) < LooseVersion('3.8'): - try: - tools_src_dir = os.path.join(self.llvm_src_dir, 'tools', 'clang', 'tools') - analyzer_target_dir = os.path.join(self.installdir, 'libexec', 'clang-analyzer') - bindir = os.path.join(self.installdir, 'bin') - for scan_dir in ['scan-build', 'scan-view']: - shutil.copytree(os.path.join(tools_src_dir, scan_dir), os.path.join(analyzer_target_dir, scan_dir)) - os.symlink(os.path.relpath(bindir, os.path.join(analyzer_target_dir, scan_dir)), - os.path.join(analyzer_target_dir, scan_dir, 'bin')) - os.symlink(os.path.relpath(os.path.join(analyzer_target_dir, scan_dir, scan_dir), bindir), - os.path.join(bindir, scan_dir)) - - mandir = os.path.join(self.installdir, 'share', 'man', 'man1') - os.makedirs(mandir) - shutil.copy2(os.path.join(tools_src_dir, 'scan-build', 'scan-build.1'), mandir) - except OSError, err: - raise EasyBuildError("Failed to copy static analyzer dirs to install dir: %s", err) - - def sanity_check_step(self): - """Custom sanity check for Clang.""" - shlib_ext = get_shared_lib_ext() - custom_paths = { - 'files': [ - "bin/clang", "bin/clang++", "bin/llvm-ar", "bin/llvm-nm", "bin/llvm-as", "bin/opt", "bin/llvm-link", - "bin/llvm-config", "bin/llvm-symbolizer", "include/llvm-c/Core.h", "include/clang-c/Index.h", - "lib/libclang.%s" % shlib_ext, "lib/clang/%s/include/stddef.h" % self.version, - ], - 'dirs': ["include/clang", "include/llvm", "lib/clang/%s/lib" % self.version], - } - if self.cfg['static_analyzer']: - custom_paths['files'].extend(["bin/scan-build", "bin/scan-view"]) - - if self.cfg["usepolly"]: - custom_paths['files'].extend(["lib/LLVMPolly.%s" % shlib_ext]) - custom_paths['dirs'].extend(["include/polly"]) - - if LooseVersion(self.version) >= LooseVersion('3.8'): - custom_paths['files'].extend(["lib/libomp.%s" % shlib_ext, "lib/clang/%s/include/omp.h" % self.version]) - - super(EB_Clang, self).sanity_check_step(custom_paths=custom_paths) - - def make_module_extra(self): - """Custom variables for Clang module.""" - txt = super(EB_Clang, self).make_module_extra() - # we set the symbolizer path so that asan/tsan give meanfull output by default - asan_symbolizer_path = os.path.join(self.installdir, 'bin', 'llvm-symbolizer') - txt += self.module_generator.set_environment('ASAN_SYMBOLIZER_PATH', asan_symbolizer_path) - return txt diff --git a/easyblocks/g/gcc.py b/easyblocks/g/gcc.py deleted file mode 100644 index 5d40177..0000000 --- a/easyblocks/g/gcc.py +++ /dev/null @@ -1,574 +0,0 @@ -## -# Copyright 2009-2015 Ghent University -# -# This file is part of EasyBuild, -# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), -# with support of Ghent University (http://ugent.be/hpc), -# the Flemish Supercomputer Centre (VSC) (https://vscentrum.be/nl/en), -# the Hercules foundation (http://www.herculesstichting.be/in_English) -# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). -# -# 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 <http://www.gnu.org/licenses/>. -## -""" -EasyBuild support for building and installing GCC, implemented as an easyblock - -@author: Stijn De Weirdt (Ghent University) -@author: Dries Verdegem (Ghent University) -@author: Kenneth Hoste (Ghent University) -@author: Pieter De Baets (Ghent University) -@author: Jens Timmerman (Ghent University) -@author: Toon Willems (Ghent University) -@author: Ward Poelmans (Ghent University) -""" - -import os -import re -import shutil -from copy import copy -from distutils.version import LooseVersion -from vsc.utils.missing import any - -import easybuild.tools.environment as env -from easybuild.easyblocks.generic.configuremake import ConfigureMake -from easybuild.framework.easyconfig import CUSTOM -from easybuild.tools.build_log import EasyBuildError -from easybuild.tools.modules import get_software_root -from easybuild.tools.run import run_cmd -from easybuild.tools.systemtools import check_os_dependency, get_os_name, get_os_type, get_shared_lib_ext, get_platform_name - - -class EB_GCC(ConfigureMake): - """ - Self-contained build of GCC. - Uses system compiler for initial build, then bootstraps. - """ - - @staticmethod - def extra_options(): - extra_vars = { - 'languages': [[], "List of languages to build GCC for (--enable-languages)", CUSTOM], - 'withlto': [True, "Enable LTO support", CUSTOM], - 'withcloog': [False, "Build GCC with CLooG support", CUSTOM], - 'withppl': [False, "Build GCC with PPL support", CUSTOM], - 'withisl': [False, "Build GCC with ISL support", CUSTOM], - 'pplwatchdog': [False, "Enable PPL watchdog", CUSTOM], - 'clooguseisl': [False, "Use ISL with CLooG or not", CUSTOM], - 'multilib': [False, "Build multilib gcc (both i386 and x86_64)", CUSTOM], - } - return ConfigureMake.extra_options(extra_vars) - - def __init__(self, *args, **kwargs): - super(EB_GCC, self).__init__(*args, **kwargs) - - self.stagedbuild = False - - if LooseVersion(self.version) >= LooseVersion("4.8.0") and self.cfg['clooguseisl'] and not self.cfg['withisl']: - raise EasyBuildError("Using ISL bundled with CLooG is unsupported in >=GCC-4.8.0. " - "Use a seperate ISL: set withisl=True") - - # I think ISL without CLooG has no purpose in GCC < 5.0.0 ... - if LooseVersion(self.version) < LooseVersion("5.0.0") and self.cfg['withisl'] and not self.cfg['withcloog']: - raise EasyBuildError("Activating ISL without CLooG is pointless") - - # unset some environment variables that are known to may cause nasty build errors when bootstrapping - self.cfg.update('unwanted_env_vars', ['CPATH', 'C_INCLUDE_PATH', 'CPLUS_INCLUDE_PATH', 'OBJC_INCLUDE_PATH']) - # ubuntu needs the LIBRARY_PATH env var to work apparently (#363) - if get_os_name() not in ['ubuntu', 'debian']: - self.cfg.update('unwanted_env_vars', ['LIBRARY_PATH']) - - self.platform_lib = get_platform_name(withversion=True) - - def create_dir(self, dirname): - """ - Create a dir to build in. - """ - dirpath = os.path.join(self.cfg['start_dir'], dirname) - try: - os.mkdir(dirpath) - os.chdir(dirpath) - self.log.debug("Created dir at %s" % dirpath) - return dirpath - except OSError, err: - raise EasyBuildError("Can't use dir %s to build in: %s", dirpath, err) - - def prep_extra_src_dirs(self, stage, target_prefix=None): - """ - Prepare extra (optional) source directories, so GCC will build these as well. - """ - if LooseVersion(self.version) >= LooseVersion('4.5'): - known_stages = ["stage1", "stage2", "stage3"] - if stage not in known_stages: - raise EasyBuildError("Incorrect argument for prep_extra_src_dirs, should be one of: %s", known_stages) - - configopts = '' - if stage == "stage2": - # no MPFR/MPC needed in stage 2 - extra_src_dirs = ["gmp"] - else: - extra_src_dirs = ["gmp", "mpfr", "mpc"] - - # list of the extra dirs that are needed depending on the 'with%s' option - # the order is important: keep CLooG last! - self.with_dirs = ["isl", "ppl", "cloog"] - - # add optional ones that were selected (e.g. CLooG, PPL, ...) - for x in self.with_dirs: - if self.cfg['with%s' % x]: - extra_src_dirs.append(x) - - # see if modules are loaded - # if module is available, just use the --with-X GCC configure option - for extra in copy(extra_src_dirs): - envvar = get_software_root(extra) - if envvar: - configopts += " --with-%s=%s" % (extra, envvar) - extra_src_dirs.remove(extra) - elif extra in self.with_dirs and stage in ["stage1", "stage3"]: - # building CLooG or PPL or ISL requires a recent compiler - # our best bet is to do a 3-staged build of GCC, and - # build CLooG/PPL/ISL with the GCC we're building in stage 2 - # then (bootstrap) build GCC in stage 3 - # also, no need to stage cloog/ppl/isl in stage3 (may even cause troubles) - self.stagedbuild = True - extra_src_dirs.remove(extra) - - # try and find source directories with given prefixes - # these sources should be included in list of sources in .eb spec file, - # so EasyBuild can unpack them in the build dir - found_src_dirs = [] - versions = {} - names = {} - all_dirs = os.listdir(self.builddir) - for d in all_dirs: - for sd in extra_src_dirs: - if d.startswith(sd): - found_src_dirs.append({ - 'source_dir': d, - 'target_dir': sd - }) - # expected format: get_name[-subname]-get_version - ds = os.path.basename(d).split('-') - name = '-'.join(ds[0:-1]) - names.update({sd: name}) - ver = ds[-1] - versions.update({sd: ver}) - - # we need to find all dirs specified, or else... - if not len(found_src_dirs) == len(extra_src_dirs): - raise EasyBuildError("Couldn't find all source dirs %s: found %s from %s", - extra_src_dirs, found_src_dirs, all_dirs) - - # copy to a dir with name as expected by GCC build framework - for d in found_src_dirs: - src = os.path.join(self.builddir, d['source_dir']) - if target_prefix: - dst = os.path.join(target_prefix, d['target_dir']) - else: - dst = os.path.join(self.cfg['start_dir'], d['target_dir']) - if not os.path.exists(dst): - try: - shutil.copytree(src, dst) - except OSError, err: - raise EasyBuildError("Failed to copy src %s to dst %s: %s", src, dst, err) - self.log.debug("Copied %s to %s, so GCC can build %s" % (src, dst, d['target_dir'])) - else: - self.log.debug("No need to copy %s to %s, it's already there." % (src, dst)) - else: - # in versions prior to GCC v4.5, there's no support for extra source dirs, so return only empty info - configopts = '' - names = {} - versions = {} - - return { - 'configopts': configopts, - 'names': names, - 'versions': versions - } - - def run_configure_cmd(self, cmd): - """ - Run a configure command, with some extra checking (e.g. for unrecognized options). - """ - (out, ec) = run_cmd("%s %s" % (self.cfg['preconfigopts'], cmd), log_all=True, simple=False) - - if ec != 0: - raise EasyBuildError("Command '%s' exited with exit code != 0 (%s)", cmd, ec) - - # configure scripts tend to simply ignore unrecognized options - # we should be more strict here, because GCC is very much a moving target - unknown_re = re.compile("WARNING: unrecognized options") - - unknown_options = unknown_re.findall(out) - if unknown_options: - raise EasyBuildError("Unrecognized options found during configure: %s", unknown_options) - - def configure_step(self): - """ - Configure for GCC build: - - prepare extra source dirs (GMP, MPFR, MPC, ...) - - create obj dir to build in (GCC doesn't like to be built in source dir) - - add configure and make options, according to .eb spec file - - decide whether or not to do a staged build (which is required to enable PPL/CLooG support) - - set platform_lib based on config.guess output - """ - - # self.configopts will be reused in a 3-staged build, - # configopts is only used in first configure - self.configopts = self.cfg['configopts'] - - # I) prepare extra source dirs, e.g. for GMP, MPFR, MPC (if required), so GCC can build them - stage1_info = self.prep_extra_src_dirs("stage1") - configopts = stage1_info['configopts'] - - # II) update config options - - # enable specified language support - if self.cfg['languages']: - self.configopts += " --enable-languages=%s" % ','.join(self.cfg['languages']) - - # enable link-time-optimization (LTO) support, if desired - if self.cfg['withlto']: - self.configopts += " --enable-lto" - - # configure for a release build - self.configopts += " --enable-checking=release " - # enable multilib: allow both 32 and 64 bit - if self.cfg['multilib']: - glibc_32bit = [ - "glibc.i686", # Fedora, RedHat-based - "glibc.ppc", # "" on Power - "libc6-dev-i386", # Debian-based - "gcc-c++-32bit", # OpenSuSE, SLES - ] - if not any([check_os_dependency(dep) for dep in glibc_32bit]): - raise EasyBuildError("Using multilib requires 32-bit glibc (install one of %s, depending on your OS)", - ', '.join(glibc_32bit)) - self.configopts += " --enable-multilib --with-multilib-list=m32,m64" - else: - self.configopts += " --disable-multilib" - # build both static and dynamic libraries (???) - self.configopts += " --enable-shared=yes --enable-static=yes " - # use POSIX threads - self.configopts += " --enable-threads=posix " - # use GOLD as default linker, enable plugin support - self.configopts += " --enable-gold=default --enable-plugins " - self.configopts += " --enable-ld --with-plugin-ld=ld.gold" - - # enable bootstrap build for self-containment (unless for staged build) - if not self.stagedbuild: - configopts += " --enable-bootstrap" - else: - configopts += " --disable-bootstrap" - - if self.stagedbuild: - # - # STAGE 1: configure GCC build that will be used to build PPL/CLooG - # - self.log.info("Starting with stage 1 of 3-staged build to enable CLooG and/or PPL, ISL support...") - self.stage1installdir = os.path.join(self.builddir, 'GCC_stage1_eb') - configopts += " --prefix=%(p)s --with-local-prefix=%(p)s" % {'p': self.stage1installdir} - - else: - # unstaged build, so just run standard configure/make/make install - # set prefixes - self.log.info("Performing regular GCC build...") - configopts += " --prefix=%(p)s --with-local-prefix=%(p)s" % {'p': self.installdir} - - # III) create obj dir to build in, and change to it - # GCC doesn't like to be built in the source dir - if self.stagedbuild: - self.stage1prefix = self.create_dir("stage1_obj") - else: - self.create_dir("obj") - - # IV) actual configure, but not on default path - cmd = "../configure %s %s" % (self.configopts, configopts) - - # instead of relying on uname, we run the same command GCC uses to - # determine the platform - out, ec = run_cmd("../config.guess", simple=False) - if ec == 0: - self.platform_lib = out.rstrip() - - self.run_configure_cmd(cmd) - - def build_step(self): - - if self.stagedbuild: - - # make and install stage 1 build of GCC - paracmd = '' - if self.cfg['parallel']: - paracmd = "-j %s" % self.cfg['parallel'] - - cmd = "%s make %s %s" % (self.cfg['prebuildopts'], paracmd, self.cfg['buildopts']) - run_cmd(cmd, log_all=True, simple=True) - - cmd = "make install %s" % (self.cfg['installopts']) - run_cmd(cmd, log_all=True, simple=True) - - # register built GCC as compiler to use for stage 2/3 - path = "%s/bin:%s" % (self.stage1installdir, os.getenv('PATH')) - env.setvar('PATH', path) - - ld_lib_path = "%(dir)s/lib64:%(dir)s/lib:%(val)s" % { - 'dir': self.stage1installdir, - 'val': os.getenv('LD_LIBRARY_PATH') - } - env.setvar('LD_LIBRARY_PATH', ld_lib_path) - - # - # STAGE 2: build GMP/PPL/CLooG for stage 3 - # - - # create dir to build GMP/PPL/CLooG in - stage2dir = "stage2_stuff" - stage2prefix = self.create_dir(stage2dir) - - # prepare directories to build GMP/PPL/CLooG - stage2_info = self.prep_extra_src_dirs("stage2", target_prefix=stage2prefix) - configopts = stage2_info['configopts'] - - # build PPL and CLooG (GMP as dependency) - - for lib in ["gmp"] + self.with_dirs: - self.log.debug("Building %s in stage 2" % lib) - if lib == "gmp" or self.cfg['with%s' % lib]: - libdir = os.path.join(stage2prefix, lib) - try: - os.chdir(libdir) - except OSError, err: - raise EasyBuildError("Failed to change to %s: %s", libdir, err) - if lib == "gmp": - cmd = "./configure --prefix=%s " % stage2prefix - cmd += "--with-pic --disable-shared --enable-cxx" - elif lib == "ppl": - self.pplver = LooseVersion(stage2_info['versions']['ppl']) - - cmd = "./configure --prefix=%s --with-pic -disable-shared " % stage2prefix - # only enable C/C++ interfaces (Java interface is sometimes troublesome) - cmd += "--enable-interfaces='c c++' " - - # enable watchdog (or not) - if self.pplver <= LooseVersion("0.11"): - if self.cfg['pplwatchdog']: - cmd += "--enable-watchdog " - else: - cmd += "--disable-watchdog " - elif self.cfg['pplwatchdog']: - raise EasyBuildError("Enabling PPL watchdog only supported in PPL <= v0.11 .") - - # make sure GMP we just built is found - cmd += "--with-gmp=%s " % stage2prefix - elif lib == "isl": - cmd = "./configure --prefix=%s --with-pic --disable-shared " % stage2prefix - cmd += "--with-gmp=system --with-gmp-prefix=%s " % stage2prefix - elif lib == "cloog": - self.cloogname = stage2_info['names']['cloog'] - self.cloogver = LooseVersion(stage2_info['versions']['cloog']) - v0_15 = LooseVersion("0.15") - v0_16 = LooseVersion("0.16") - - cmd = "./configure --prefix=%s --with-pic --disable-shared " % stage2prefix - - # use ISL or PPL - if self.cfg['clooguseisl']: - if self.cfg['withisl']: - self.log.debug("Using external ISL for CLooG") - cmd += "--with-isl=system --with-isl-prefix=%s " % stage2prefix - elif self.cloogver >= v0_16: - self.log.debug("Using bundled ISL for CLooG") - cmd += "--with-isl=bundled " - else: - raise EasyBuildError("Using ISL is only supported in CLooG >= v0.16 (detected v%s).", - self.cloogver) - else: - if self.cloogname == "cloog-ppl" and self.cloogver >= v0_15 and self.cloogver < v0_16: - cmd += "--with-ppl=%s " % stage2prefix - else: - errormsg = "PPL only supported with CLooG-PPL v0.15.x (detected v%s)" % self.cloogver - errormsg += "\nNeither using PPL or ISL-based ClooG, I'm out of options..." - raise EasyBuildError(errormsg) - - # make sure GMP is found - if self.cloogver >= v0_15 and self.cloogver < v0_16: - cmd += "--with-gmp=%s " % stage2prefix - elif self.cloogver >= v0_16: - cmd += "--with-gmp=system --with-gmp-prefix=%s " % stage2prefix - else: - raise EasyBuildError("Don't know how to specify location of GMP to configure of CLooG v%s.", - self.cloogver) - else: - raise EasyBuildError("Don't know how to configure for %s", lib) - - # configure - self.run_configure_cmd(cmd) - - # build and 'install' - cmd = "make %s" % paracmd - run_cmd(cmd, log_all=True, simple=True) - - cmd = "make install" - run_cmd(cmd, log_all=True, simple=True) - - if lib == "gmp": - # make sure correct GMP is found - libpath = os.path.join(stage2prefix, 'lib') - incpath = os.path.join(stage2prefix, 'include') - - cppflags = os.getenv('CPPFLAGS', '') - env.setvar('CPPFLAGS', "%s -L%s -I%s " % (cppflags, libpath, incpath)) - - # - # STAGE 3: bootstrap build of final GCC (with PPL/CLooG support) - # - - # create new obj dir and change into it - self.create_dir("stage3_obj") - - # reconfigure for stage 3 build - self.log.info("Stage 2 of 3-staged build completed, continuing with stage 2 " - "(with CLooG and/or PPL, ISL support enabled)...") - - stage3_info = self.prep_extra_src_dirs("stage3") - configopts = stage3_info['configopts'] - configopts += " --prefix=%(p)s --with-local-prefix=%(p)s" % {'p': self.installdir} - - # enable bootstrapping for self-containment - configopts += " --enable-bootstrap " - - # PPL config options - if self.cfg['withppl']: - # for PPL build and CLooG-PPL linking - for lib in ["lib64", "lib"]: - path = os.path.join(self.stage1installdir, lib, "libstdc++.a") - if os.path.exists(path): - libstdcxxpath = path - break - configopts += "--with-host-libstdcxx='-static-libgcc %s -lm' " % libstdcxxpath - - configopts += "--with-ppl=%s " % stage2prefix - - if self.pplver <= LooseVersion("0.11"): - if self.cfg['pplwatchdog']: - configopts += "--enable-watchdog " - else: - configopts += "--disable-watchdog " - - # CLooG config options - if self.cfg['withcloog']: - configopts += "--with-cloog=%s " % stage2prefix - - if self.cfg['clooguseisl'] and self.cloogver >= LooseVersion("0.16") and LooseVersion(self.version) < LooseVersion("4.8.0"): - configopts += "--enable-cloog-backend=isl " - - if self.cfg['withisl']: - configopts += "--with-isl=%s " % stage2prefix - - # configure - cmd = "../configure %s %s" % (self.configopts, configopts) - self.run_configure_cmd(cmd) - - # build with bootstrapping for self-containment - self.cfg.update('buildopts', 'bootstrap') - - # call standard build_step - super(EB_GCC, self).build_step() - - # make install is just standard install_step, nothing special there - - def sanity_check_step(self): - """ - Custom sanity check for GCC - """ - - os_type = get_os_type() - sharedlib_ext = get_shared_lib_ext() - common_infix = os.path.join('gcc', self.platform_lib, self.version) - - bin_files = ["gcov"] - lib_files = [] - if LooseVersion(self.version) >= LooseVersion('4.2'): - # libgomp was added in GCC 4.2.0 - ["libgomp.%s" % sharedlib_ext, "libgomp.a"] - if os_type == 'Linux': - lib_files.extend(["libgcc_s.%s" % sharedlib_ext]) - # libmudflap is replaced by asan (see release notes gcc 4.9.0) - if LooseVersion(self.version) < LooseVersion("4.9.0"): - lib_files.extend(["libmudflap.%s" % sharedlib_ext, "libmudflap.a"]) - else: - lib_files.extend(["libasan.%s" % sharedlib_ext, "libasan.a"]) - libexec_files = [] - dirs = ['lib/%s' % common_infix] - - if not self.cfg['languages']: - # default languages are c, c++, fortran - bin_files = ["c++", "cpp", "g++", "gcc", "gcov", "gfortran"] - lib_files.extend(["libstdc++.%s" % sharedlib_ext, "libstdc++.a"]) - libexec_files = ['cc1', 'cc1plus', 'collect2', 'f951'] - - if 'c' in self.cfg['languages']: - bin_files.extend(['cpp', 'gcc']) - - if 'c++' in self.cfg['languages']: - bin_files.extend(['c++', 'g++']) - dirs.append('include/c++/%s' % self.version) - lib_files.extend(["libstdc++.%s" % sharedlib_ext, "libstdc++.a"]) - - if 'fortran' in self.cfg['languages']: - bin_files.append('gfortran') - lib_files.extend(['libgfortran.%s' % sharedlib_ext, 'libgfortran.a']) - - if self.cfg['withlto']: - libexec_files.extend(['lto1', 'lto-wrapper']) - if os_type in ['Linux']: - libexec_files.append('liblto_plugin.%s' % sharedlib_ext) - - bin_files = ["bin/%s" % x for x in bin_files] - libdirs64 = ['lib64'] - libdirs32 = ['lib', 'lib32'] - libdirs = libdirs64 + libdirs32 - if self.cfg['multilib']: - # with multilib enabled, both lib and lib64 should be there - lib_files64 = [os.path.join(libdir, x) for libdir in libdirs64 for x in lib_files] - lib_files32 = [tuple([os.path.join(libdir, x) for libdir in libdirs32]) for x in lib_files] - lib_files = lib_files64 + lib_files32 - else: - # lib64 on SuSE and Darwin, lib otherwise - lib_files = [tuple([os.path.join(libdir, x) for libdir in libdirs]) for x in lib_files] - # lib on SuSE, libexec otherwise - libdirs = ['libexec', 'lib'] - libexec_files = [tuple([os.path.join(libdir, common_infix, x) for libdir in libdirs]) for x in libexec_files] - - custom_paths = { - 'files': bin_files + lib_files + libexec_files, - 'dirs': dirs, - } - - super(EB_GCC, self).sanity_check_step(custom_paths=custom_paths) - - def make_module_req_guess(self): - """ - Make sure all GCC libs are in LD_LIBRARY_PATH - """ - guesses = super(EB_GCC, self).make_module_req_guess() - guesses.update({ - 'PATH': ['bin'], - 'LD_LIBRARY_PATH': ['lib', 'lib64', - 'lib/gcc/%s/%s' % (self.platform_lib, self.cfg['version'])], - 'MANPATH': ['man', 'share/man'] - }) - return guesses diff --git a/easyblocks/g/gpi_2.pyo b/easyblocks/g/gpi_2.pyo deleted file mode 100644 index 8fcb1802e0f4cd8decd1ad9928924f85fc688faf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1262 zcmcckiI;0-14l$M0~D|_FfceUFfbH@h!h5fC<cZUMurq7hHOTL943Y+CI&_jpP3<> znIVUTA&P~8F@=R8m5CvZks*bZp@o5=nSmiPij^USjUiZr9b{4s0|Nt>YhrPwQ)y;S zib8Q|K|y{|i9%X_kwOwkBr`8vAu%sSAv3SIBrzuk#B~qw)HTxK%FHduNzF~oD@jdJ zNGw)J%u`5BEUrw-$xqJK<Kl8iEG@~%FS1hbDb39+Qt(PF&dkqN(C`c~QSi*m%P&hT z$;{6y*5u0k|NsAg4MqkAh7wK&1_rQ8Kt@1>Ku#<w&5KXYO)236Njt^62YANkX6BU^ z#~Z=J1*F{x<Qs7Y28L7yhA2h`Q0Op$LZ^j+A&QwHC|H9Dq(F;-fgzY!Kk6le3<l|A zVPIfz2I<dcU|^_WV8~=($Yf;51Y3~8&d|)nkgv$V2$Eo7$Yce@NHZe?V+u1^EgOSa zEh9so9I^ry2CxEFBn2hx3^k0Pm?`04Xl7(&OkrmT*5CkHY6x;PD7Y&Xic0ffQK46y zp-`M%lvz-sP@Y+m0TWKiEK(>)EXgQgV_;w?El$lX$Sf9PU|@j6FIc5-fF~@Xi**<n z81(d^u?sR%w?IL)SV318q*6DxAk$XG)hWo|Kg2)4)z3G;vse<vto+gv1!Uuduo_na zipQM%^!UV_96t?EJcA><BtJhVIU_MM4=kTw08SDm%nS?+>8T|ppfLB#&r1ah<m9J= z1v2x}@=LfF7#N@~PRT3^0!0#7GNh<96&%fAUU6zp8dz^~Zi)sd1A&QRP+;nVQz|HV z>laj(WaQ@|34o<QDX>^ST|d1bGu}wApb~5)I6uS}m!uYe!k`$G9vPS=83h=b8Tpt5 z7<m~rKu#_JMOl1&USe))d^}iRe0*+xN@)&=3krw$_>}zQ`1l}x1_lPOlMn=Xjtc^% zP*4;XgY0KxWMlHv07ZTfC^AZ9L0JNnF+twdODjsuO)bwa%GQJXGYAwmCBi7mKrvIS lS5%q@4qUJW2v>qx<T(`_I5v>ruoD2KZIDCRm;@LFm;vhkHH82G diff --git a/easyblocks/l/lammps.pyo b/easyblocks/l/lammps.pyo deleted file mode 100644 index 0740ac48f70f2762e4e5ac279dbb66919c3d5c6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1691 zcmcckiI;0-14l$M0~ByDFfceUFfbHnFfcHrFfc?hFr+Xtq%bjLGcrUm!q`j<QA}Vq zGeb5rLk<f=6bl0*NF579HY-C88$%QugwM*5&CZa+!4Sp4z?j0ukjlc4#>kMu&d|cZ z(9FOP8N~@QI#>f_YjF(&0|S?9VsWKYX=YA}LUCz9L4Hw*LRx;2LJ~+MGcR2sF)u|S zGq1QLF((Ja^>OqK2ng2U%FHduNzF~oD@jdJNGw)J%u`5BEUrw-$xqJa;&MnVEy>6) zvQqFV&CM)Q@JcMs%+FTP@C-3g@XX80FH0=R%+D*<<jVa2|NnnK4MqkAh7wK&1_rQG zKt@1>_+UaHx40G+<rhK3*%=rZic0h1lXFub+MMEj9DRKQg5hBbGSLYXrs50?45<v@ zaAbgnU<(676f;9mum%%Ifi?pJLojjv_6-QuO9q+D%D}(?3O{F%0U#%(Ff!CIFk~`- zf>u(jmXV=^k)ei>A%&Ttgo&Y<k&&^4nIV&fA(IuRjD<lmg_WV1iJ_K>0Y#3DA%zVr z&J0${&XCCgiae0%Yz$(}j0}vG6JR<x!AjT|ni(1LwHX*eY9Q)4pb}v9C0q=d+)x3K z{yatouyc5j#6V8qVW?pS8N~?Fzzeg3m7#`-A%zp<B#<JAADE#c%}fl8;d!bIEG2vl zSzHYHk_?QDwJZ#bCHxF2TnsfVU<WrbGUPEaFh-<sGX!h!fI>`|fq@~YG*6)zl!hu5 zauc&t6>_t4in$pW7*vbl{1TAjf}&J#O3W`PDJ}uUdrp3Od}2-xINpm(5{pXWQ!<N6 zm_g<iC4=dt%)DYb1_lO5l7OXMg_O*q)Z~)<qDqC#Vg=RWVp#?T1{b)PYOz9UMP_kH zv5rDYYEEiNW?nkPy4-?zklU0Q7#Q3VGjmc?6iV{pW<sq<%FIhFs?<?XE%wt80HtM+ zbCT22gFq>)goS~DA*84@wFJb=F9!1q5=%0`jI8|3yb>-31_o#rgLx(=KOHQenU|Jd z0!nY0#ULp*kUuj@OEPmxK+K}tlA_d9uzYSdNFJmzIlrLN2pm4H70IaupsW@IO0^mw zNwA^CsX1xjpaNwekU7Og$spaFAh#zLrKgsFcpy)t78PlLiYYKrY{bC8pbyUGpbV*B zP+5|ZpNAv>mI7tpV*MQboW$JRf?~abO0f69kr-cGl3D<Ynqmczp-h5|0*o?@5{%-E z%#31;JdE6oB8&ozyo?fzQj7wO8lZqH0p+v!_`Jm2)cAO?N%8Ty`6;D2ATB69#K))P zC&$MJfua-aN(4csdxJn8mj(qi$N_AOY)l%U2nqtZIS7;{gFp$m1Y{xD!=SLxODjsu zO)bwa%GLvmfdU~2<i`?8Pyqxg8Ntd*^7C_w^&o+flb;TbmlBY1U|mQ`ic0gqsR!&B jgqOf9GW`V(N*hSv*$IOD2l5OX6AvQ~lK`UtqX07iOuU45 diff --git a/easyblocks/o/opencl.pyo b/easyblocks/o/opencl.pyo deleted file mode 100644 index 23e18b8ed59358b0ce8afd695adf79e6c25f5a7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1691 zcmcckiI;0-14l$M0~D|^FfceUFfbJRFfcHrFfc?hFr+Xtq%bjLGcrUmg4xUr*-Q*M z%nVV?42&Q-7KUsVh8$LgC{_l>6jp{*W`;CIh7>l276yi928PHeHjwsU4R(;JYZw?9 zxLgy9E1gO+b5azFOA89}i%JyI@{1IbKq8rW=?aN?DGHf+#U+V3IUufoL290}j}BL6 zZb43JZfaghYKlT)u|i^=LTX}hWl~Ola<(3qXNf{-ajHUber~Ela(+sxLRwLNu0nch zUTRThvVvz`NotN$VsWZMa!z7#u^tzfLt<%3Mt+f%f=_8~W|4wdVsU1Ewt|Ldh>3z{ zUS57#Vo7FxUa=-u=Kufy|NCh$GB7Zda56A3z)gY(f&5fdnirp(n^FP_Ifz@~feF&) z1oE~x0|P@U12_N~7^0X!!Pvq83c#RX4JMEREd~aLV4?#f8DuaQ0|NudNzNes3XBX4 zH4F@y3=EmzNCL5$K;bSa*38JjSi;PZ$-<Dy3RVLVPhn<gW@4yiWB|#rG1M?Jz!b7W zIkij-6?zOcObjluY7Di^3@I!OHOvfRwJZ!J91Jxq3@NOjFiBwpk<E-ujD=AQ;UL4< z!A63uOJQe7;Q-mw%*c?!$sk$FiY`~f%FxWrP|F4uXJ@Ek139CXouR^qp@yBoCDw(Z zmIEvYHm`<_p$2STEhj??7efsv*h5?lX-xRsb%i0kgp(mygBui5sSFGZj>#pZi8-)D z299ekE(IviRY<KUDN0N(QAo?oNiBw?q@Vy_Bn8R&1(gaV`3fZ&sR|{D=|!m}3MrXI zsmUezMU`-6#i9%h4DR`$BwUgYN!=h-3aZ86lvG@jSX2_9l37&3%)r1<RFGQ?N+d-E zxkkwanfVH;#R@eFV3uxXN?8dgq2=VK$0z3GfD>9VI5&W`<`<Ndure?(WP%cTCMX*h z^Dr<lBo`>?7J-aWE!GG79IQAeKfQzntT-(nERdX*UII#i`Nd%Ig2a*xFe58JGY@QR zat6qaVEZ$ROHwk6f<TE6tR|$WG_?ej457I-C9_Ba#05(hr{<)Aon2Ir3-%@l#GCOs znZ+eRAU8nlhvuB((j<^QpeO>lA-<p}H7&EEL<r>8lGNPd_>%niq}2H2{DREX6tD%E zC8@b3AoZYViq9_sS)u{*KA0#rVqjp<2bU0_az($OvLquv4@m$l1u8s>_4D=f3sUov zbMy)-OF%&f^-g?oNos*KD9tE=jOCDKlwss$<Y#1OU}NNBlwww5lz{R?8HE|8m^8qi z0(mn&J})shH9j63IPvkh`6;D2ATB5r<Kt8EljGxqWEdD2z%E4)WV$&B6n_#RcY++i z#>mD5E^CA285kIXK>jIF0~J4@!V(k|dI+EEK?_JdaN0>qEKUsq`LskBMSV$reonDo nQE47H=E1fh+ze)s>F^RzSlK{A$4&s`0gwP26AzOBqX07i)s2vG diff --git a/easyblocks/p/__init__.py b/easyblocks/p/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/easyblocks/p/p4vasp.py b/easyblocks/p/p4vasp.py deleted file mode 100644 index 524b958..0000000 --- a/easyblocks/p/p4vasp.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env python -# -# Copyright (C) 2015 IT4Innovations -# Lumir Jasiok -# lumir.jasiok@vsb.cz -# http://www.it4i.cz -# -# -# - -""" -EasyBuild support for building and installing p4vasp, -implemented as an easyblock - -@author: Lumir Jasiok (IT4 Innovations) -""" - -import os - -from easybuild.framework.easyblock import EasyBlock -from easybuild.tools.run import run_cmd - - -class EB_p4vasp(EasyBlock): - """Support for building and installing p4vasp.""" - - def configure_step(self): - """ - Create %(builddir)s/install/Configuration.mk file to skip - run "python configure.py local" - """ - builddir = os.path.join(self.builddir, '%s-%s' - % (self.name, self.version)) - installdir = self.installdir - p4vasp_path = installdir.split('/')[1:-1] - p4vasp_root = os.path.join('/', *p4vasp_path) - self.log.info("p4vasp builddir id %s" % builddir) - self.log.info("p4vasp installdir id %s" % installdir) - self.log.info("p4vasp root dir is %s" % p4vasp_root) - - conf_file = os.path.join(builddir, 'install', 'Configuration.mk') - fd = open(conf_file, 'w') - conf_content = """ - ROOT = %s - P4VASP_HOME = %s - SITE_PACKAGES = %s/python-packages - INCLUDEDIR = %s/include - LIBDIR = %s/lib - BINDIR = %s/bin - """ % (p4vasp_root, installdir, installdir, - installdir, installdir, installdir) - - fd.write(conf_content) - fd.close() - - def build_step(self): - """Run simply make install""" - cmd = "make install" - run_cmd(cmd, log_all=True) diff --git a/easyblocks/p/p4vasp.pyo b/easyblocks/p/p4vasp.pyo deleted file mode 100644 index 696ae2ddcaf438f40b298b70cd6f227d5de96f0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2098 zcmcckiI;0-14l$M0~D|^FfceUFfbJRFfcHrFfc?hFr+Xtq%bjLGcrUmg4xUr*-Q*M z%nVV?42&Q-7KUsVh8$LgC{_l>6jp{*W`;CIh7>l276yi928PHeHjwsU4R(;JH4F?4 zT&{`5l}@FZIVlRor3D4~MI{Pp`9%szAd$?xbcMvc6ot&Z;*!Li91yp_q%5(xK!+<c zw;(4qH#M&$HANw@SRpY_AvLkMGASoNIh%{iA+fY1BfrQ>!KXAgvq-@!u{bk7TS3D! z#6-a}FE76=u_QA;uUL~S^Z)<<|NS%=85kH!I2jliz)k@f0TBYZv8XgJJ~=l9BJC6p zu^t{iAe~MipC~XeFr+eo!-Rn$iU|}lEexPANnrx{Jc@-OC|H9Tq*9xKfgzY^kLo3Z ztl(f^U;trfkOAL7u4Q1zWMs%>VyIzY$YciD24b*)xvUInOblYpOboS*U_Ki|EfYfx z6GJ9DDCC<N8B&-TQdk%iYnd5JV8)~{G1M?K^e{5iLd@V`$mC>5VP&XcWDsj+WMBlD z4iRGm8HFas&QQYwQ3p4$hLItKgCT{Jp_!SXmX)D|i=l><A%%+p<SaIZ6mF1?8nCnA zWEvZTSS>q44I4uyH$x3O1K3_RhD;t%x?xP=VF=dX1^K@ilxP&7z_}<ju_RSNRRf$} zQZkD)i}j(YMc+9;FD)~@v<MvAdb!yOX_+~x3MKgp#o3t!Tu=iPic0eolnN?KGV=2j zlA$_M^$IE#a`KZCbClrfidh*L7*vaORf|hNQKFv-BEbo$Sd@W*0g^Bv$u=dkNFg&t zLAAJ893caB6+#Y4S5ba`i2_)rSV6V81eETe%8LaU7#Pq!0(L-o@nhtG0C^|K-#-LI zL$IxaYBAjPAfW)0FvsA4cn^PHR|N$H4C!Fc5ZCwsM`v$Gch_LBv_2$QbPE!bvlG)( zQBCvobM^^!adq(w0+|gmO+Pa)Ij1xw6~$5?Pba7nxU!tgBorl1o_^>`k}~t)O8mgl zUc$t{z>r^D!U77>#F7j!BP%~MuLP7aV6hJt%}dNp1&3i-YEf}!eqIR|0|NszJX11@ zN<a}=T#%DlQUc15Ir-^eU72}l`CvwVL24dYO?gpfNh+9?oReRissXYHtfDwICoPDR zfq@~22b34NK~4e}OYsFDmm%>%5eqIlKq)I8l>Wf}NJ}XJ=>!WV=jWBA=9OrGN?b5e zY{bC8pbsw1KxH5_5|9MIQlL_*Sie9YlJ4{hDogkn7#Kh%f|7h{d~r!?fix()$bbxH z6=D=)<YW|M6lD|vK_&@CehwZ+0VZBXZ~+4fTu{h@3m7R-S<eV6K1vusB|r)jLkS~8 zGb1Bo3Nu5n21p$^VF#7wDHMas;Yx+v#Ozd9DP0Wm8nOU5E^_kI;}dgo{4_vT1%dJo zI4DDkN>d?1!l0l8MM!dP3OF3V1i66$igIwG00)ExC?G)YW?*7t)BwdlIMu|*gOW;o zJUD^G$LHp!l;)(y$AjG)AD@z+93LMf35sS}1_lPOa}WfX4hsT#UjpPDP}R!D$i~De z3$6=;Ks87ZNU#KC8#s<Z(XW?Ql$e`Zo?n!$2Nnaxdk`o}OF#hz76L0P$<NOz)+;K_ l1BWfx8iZrPEHYgT4k;T**w}$eqhe4#U}NH85?~Zy1^@%3=yL!7 diff --git a/easyblocks/q/qscintilla.pyo b/easyblocks/q/qscintilla.pyo deleted file mode 100644 index cb9ae9bd04128dc779984c0e68ea3e127f2463a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1647 zcmcckiI;0-14l$M0~D|_FfceUFfbH@h!h5fC<cZUMurq7hHOTL943Y+CI&_jpP3<> znIVUTA&P~8F@=R8m5CvZks*bZp@o5=nSmiPij^USjUiZr9c0o51_lN$*TmvVr_#)v z6oul_f`a^_5{0z<B84Q7NM>HTLSkNuLS|lZNn%b8h#MH3oS9dWnUj;KpsN5@U6QX5 zSfY@h##NG$s(_G9P01_)X-Lk`Ey&MH%`4GS$jmLsNzF~oD@jdJNGw)J%u`5BEUrw- z$xqJK<Kl8iEG@~%FS1hbDb39+Qt(PF&dkqN(C`c~@yyH1FH0=R%+D*<<jVa2|Nnmt zMg|6k5>5sN2C(ZvCP0Kh-YP21i%-r?Dd7c4JH;bh3=c|>ZYNLxXfiM`q%tr>F*1Mx zlnE4|Ees4%%%ETeF<2N<m_Z>I#mW#Atib}(5)TS91qB6#V5HE(5kOoZbtr+PKp>F7 zI+8)|V`5-n09oh^vQ(7;9N9Gt44Didw@HfCGBT7fGSo1F99Y7{(9FmPitS(xP%0_r zV_;x#&d*EBOfM};RVXe=EhrXeU|>)!Rw&F(%uZD(EQUp*UO`blIG_rOQj@_t@(W6e zOF+Sxlb;@+n3LnD!3+v(5Rsgg9t3h)3CLX`MWv}4AV-3E#i==IC15qVDH@;z3nq%q z7#JAz!I2C~PWlCvB^mj7NCIFfQ0x`!7wRLss<H&+2Z)PGi&Eo3evk%*1juRzCP7Au z!-$K4fdQKALE!`Pv1+jbD0oVE7#J7|ic-N@02CZSAWI?P5CjTea3BP+F)%QI10V>b zH;4norHao%E(6;Q_O$|4eGT%OCnPsR(gi;xU4Z-z%jV#qFDOcdCh7qQ0gx-9wu8d} zl>Cc9kpPN$4N$<BfPy<dJ})shH9o!s6k_r5x%nxjIUp`5KH}q3@{{A^gFt0O5H|w@ zLlCGq0H;a>K|%Tq0wsM>P~3oA!p6eJ#L3FZ>IZgQkN_yh$b!liQ27Q*`g&<aiMgre z`9;}!@H8I;N-ZVAD9TFm^K**zic0e!X$)iu!nt4;1#SihnhhkF>_8D;3<^p%CILnP FW&nW+iV*++ diff --git a/easyblocks/q/qwt.pyo b/easyblocks/q/qwt.pyo deleted file mode 100644 index 148e4370a1c57fdb5e653c50220456d7e172804a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2094 zcmcckiI;0-14l$M0~D|`FfceUFfbHHFfcHrFfc?hFr+Xtq%bjLGcrUm!q`j<QA}Vq zGeb5rLk<f=6bl0*NF579HY-C88$%Qu17iv+Ln;eH8Y4pr8$$~NLo)+IWE4Bds9+6{ zEyW8N7#O%*6N@XIN;7j(6pBj=3i69e6w>mG6p}z9nR)37iFqjsnR&$}i8(nSZeV$d zf-YBJi9&d0N_uKZF<5a(YH~(iW^!VVf@48JPG)jqNoIatv5rD!Zb43JZfaghYKlT) zu|i^=LTX}hWl~Ola<(29mqTJ{Nk)E=m4Z)cZf22!S7LEyezt;!XNZYsUS56~#1Kuc z%>V!Y|M$~iWME(@;bdT70J|4t1Vjkrk)qPP_~hJ_5;l;uQ+!}~2|P4G+MGb4smZ{= zkjelKK?Z2pwJ<P5F@u5w#9(1aVFm?K6e~keum%fAiw`Jx6ciK`f{_9SJuDQ63JWff zG07mufZWT>z`)=PvS9_tQw$85j0~Af3^fc4narR#l}uq`Xl7!lWn?H}VW?pQISj;Q zVyIza$YcdYV=Xg72^&KuJ3|T!n85*7&%#i{!jQ?ykirT!i;F?5h8Zlu3f9RDN(Rl0 z42&RSco=F}8DJb<keQ4r>|kxo3@IE8l47-N3?+OFHEdu-DVz+!8eAY3tAU)JpO==I zURso@P+XE)prcTbSdyFpN*smdCCOkpy@H}laAXyiBo>v#r(_lt^D;0npvV_9F)%O` zX&0L?FfhcG=4DpI6l+&=#T07?hKIy^`UQtL`uM~L1i89-M#L0r+r|`YYs3U=Yl2iL z>uGV-7ArF_Fo5(aRLA5gU}{pZRZuOC$*au-<*Q-=1_lPzVuixo#Ozds!txTmf};Eq zkedpMQXy{6FDNPY)8Gfi2*_pm#U-FbP>@)X0cK?7XXcfFA}%>C9W0PvkeUZ(6s0Dn zlz_AprIvtVH#tAIATuWw?0?@-pAb(UPd`_%*5cBn5>O~Y(@;ug5!is@)YR+}Rt5%! z@}kU=R4^+!C%-r~2$WvHITflbCk<>U$i4AtAS*z&rlo)d^NTXm<4aO2O2GPyQqxl_ zN;nu881hofA;Ms{=cZ_Yf&)wx>oYJg=!0`4D6{JqRF-7q=OGDzr9e5YSievo9A=dz zd<+Z>Ap61b9}kLuSx~Z&0GY}p!^qFb!^jE70*t(jyo_9of{fr~4{|9eJi*Cc6;!e@ zf>Rp<DE~={fzmo7G_98~F*GwWGN!OF1Z#jor5F@s&=RU7wV)Uj#;U~%pqMP-VPIe= zC`tvFR-gz3M?g+~dVFF|j-Lj|%R!((0EZ+v5JQSeQ#C-22@+;tU<i_AU|;|T2ACi# zL_n?s+Yb&69Z+b1Jj%dC1)qbw=Lso%!FjD1lsut+hn33UC@CmPg(fOcC<MtcFfgEd zKL`|2)b%>Zc~EP?o;O7HyauQ=1}DMz_`Jm2)cAOC+K-RV%}*)K0dYYQ86TgLpBx__ zBn65MIS`?M5+!8EOAsiMLCLZhlmOV6*_b%_IaxJ8oFGui5d=zFLEND14hk4>S_fqV zy|kjl+|=^?qHH~|7%2S*fl_w~D8Yb*z{*PU^K**zic0gqX$x!{*sTbHtkeW@pA960 U>_CwXPW)_4Jd8X{0*nI802Hp|oB#j- diff --git a/easyblocks/s/snucl.pyo b/easyblocks/s/snucl.pyo deleted file mode 100644 index 3e57ecc7b742a86797471b7adab7f1e9e7aed276..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3054 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 bII3+RVP*%aw~9gOiH(Vek%viuQGgi$AXkVY diff --git a/toolchains/__init__.py b/toolchains/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/toolchains/__init__.pyo b/toolchains/__init__.pyo deleted file mode 100644 index a3fcd9cd4a42733a58478db11b03c3d04b9272c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmcckiI;0-14l$M0~9baFfceUFfbIeFfcHrFfasbfJFQ>K+<SLu{i?+gMMN`L9u>n zVsT|sX=YA}enDkPMt&ZWKuLanPI5+KW?r#=e0*kJW=VX!UO{CE2Ll6xO>TZlX-=vg J$cAE&1pu~6AXWeX diff --git a/toolchains/gcccore.py b/toolchains/gcccore.py deleted file mode 100644 index 4cdbd3d..0000000 --- a/toolchains/gcccore.py +++ /dev/null @@ -1,39 +0,0 @@ -## -# Copyright 2012-2015 Ghent University -# -# This file is part of EasyBuild, -# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), -# with support of Ghent University (http://ugent.be/hpc), -# the Flemish Supercomputer Centre (VSC) (https://vscentrum.be/nl/en), -# the Hercules foundation (http://www.herculesstichting.be/in_English) -# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). -# -# 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 <http://www.gnu.org/licenses/>. -## -""" -EasyBuild support for GCC compiler toolchain. - -@author: Kenneth Hoste (Ghent University) -""" - -from easybuild.toolchains.compiler.gcc import Gcc -from easybuild.tools.toolchain import DUMMY_TOOLCHAIN_NAME - -class GCCcore(Gcc): - """Compiler-only toolchain, including only GCC and binutils.""" - NAME = 'GCCcore' - # Replace the default compiler module name with our own - COMPILER_MODULE_NAME = [NAME] - SUBTOOLCHAIN = DUMMY_TOOLCHAIN_NAME diff --git a/toolchains/gnu.py b/toolchains/gnu.py deleted file mode 100644 index 8b7f97a..0000000 --- a/toolchains/gnu.py +++ /dev/null @@ -1,36 +0,0 @@ -## -# Copyright 2012-2015 Ghent University -# -# This file is part of EasyBuild, -# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), -# with support of Ghent University (http://ugent.be/hpc), -# the Flemish Supercomputer Centre (VSC) (https://vscentrum.be/nl/en), -# the Hercules foundation (http://www.herculesstichting.be/in_English) -# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). -# -# 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 <http://www.gnu.org/licenses/>. -## -""" -EasyBuild support for GCC compiler toolchain. - -@author: Kenneth Hoste (Ghent University) -""" - -from easybuild.toolchains.compiler.gcc import Gcc - - -class GNU(Gcc): - """Compiler-only toolchain, including only GCC and binutils.""" - NAME = 'GNU' diff --git a/tools/__init__.py b/tools/__init__.py deleted file mode 100644 index 12cd9a6..0000000 --- a/tools/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from pkgutil import extend_path -# we're not the only ones in this namespace -__path__ = extend_path(__path__, __name__) diff --git a/tools/__init__.pyc b/tools/__init__.pyc deleted file mode 100644 index 4b6454c03a2b41a2962280a4c5a5895a82c97705..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmcckiI;0-14l$M0~D|@FfceUFfbG=GcYiuFfgPrGGsF_<S;TsF)}cwGBTtxF{Cmx zG&3<oF)^etF$8NcGcYh@{{R2~zXl@%149Wn0|P^9MM-L2N_;_LNrs;W$iNbI1_p+L z?DW!-%$y*QMI{^z3=HvL74h*<PF`YeYJ9u~NE$&D8!<32=qDBw6ziuZ7FQ;fX6B^m x7gUyH<mVv?l;r2<6zj*wXXa&=#K-FuRDzAP$<0qG%}KQbxvQ9ofq_AQ2>@k#H%kBj diff --git a/tools/__init__.pyo b/tools/__init__.pyo deleted file mode 100644 index 4b6454c03a2b41a2962280a4c5a5895a82c97705..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmcckiI;0-14l$M0~D|@FfceUFfbG=GcYiuFfgPrGGsF_<S;TsF)}cwGBTtxF{Cmx zG&3<oF)^etF$8NcGcYh@{{R2~zXl@%149Wn0|P^9MM-L2N_;_LNrs;W$iNbI1_p+L z?DW!-%$y*QMI{^z3=HvL74h*<PF`YeYJ9u~NE$&D8!<32=qDBw6ziuZ7FQ;fX6B^m x7gUyH<mVv?l;r2<6zj*wXXa&=#K-FuRDzAP$<0qG%}KQbxvQ9ofq_AQ2>@k#H%kBj diff --git a/tools/module_naming_scheme/__init__.py b/tools/module_naming_scheme/__init__.py deleted file mode 100644 index 12cd9a6..0000000 --- a/tools/module_naming_scheme/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from pkgutil import extend_path -# we're not the only ones in this namespace -__path__ = extend_path(__path__, __name__) diff --git a/tools/module_naming_scheme/__init__.pyo b/tools/module_naming_scheme/__init__.pyo deleted file mode 100644 index 66ae3d0384ab1aa34a00f05257b99e6bdbdff3f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 zcmcckiI;0-14l$M0~D|@FfceUFfbG=GcYiuFfgPrGGsF_<S;TsF)}cwGBTtxF{Cmx zG&3<oF)^etF$8NcGcYh@{{R2~zXl@%149Wn0|P^9MM-L2N_;_LNrs;W$iNbI1_p+L z?DW!-%$y*QMI{^z3=HvL74h*<PF`YeYJ9u~NE$&DyE8B_=qDBw6ziuZ7FQ;fX6B^m z7gUyH<mVv?l;r2<6zk{ar<CTT#^)vGX6B{G7bj<==BDb$$7kkcmc+;F6;y)lv4N<v O139*siGhJZfC&K2VL!qE diff --git a/tools/module_naming_scheme/it4i-uv_module_naming_scheme.py b/tools/module_naming_scheme/it4i-uv_module_naming_scheme.py deleted file mode 100644 index 7671ece..0000000 --- a/tools/module_naming_scheme/it4i-uv_module_naming_scheme.py +++ /dev/null @@ -1,116 +0,0 @@ -#!/usr/bin/env python -# -# Copyright (C) 2015 IT4Innovations -# Lumir Jasiok -# lumir.jasiok@vsb.cz -# http://www.it4i.cz -# -# - -import os - -from easybuild.tools.config import install_path -from easybuild.tools.module_naming_scheme import ModuleNamingScheme - -class IT4I_UV_ModuleNamingScheme(ModuleNamingScheme): - """Class implementing an example module naming scheme.""" - - #REQUIRED_KEYS = ['name', 'version', 'toolchain', 'moduleclass', 'sources', 'description', 'versionsuffix'] - REQUIRED_KEYS = [] - - def det_install_subdir(self, ec): - """ - Determine name of software installation subdirectory of install path. - @param ec: dict-like object with easyconfig parameter values; for now only the 'name', - 'version', 'versionsuffix' and 'toolchain' parameters are guaranteed to be available - @return: string with name of subdirectory, e.g.: '<compiler>/<mpi_lib>/<name>/<version>' - """ - # by default: use full module name as name for install subdir - - # fetch required values - name = ec['name'] - version = ec['version'] - tc_name = ec['toolchain']['name'] - tc_version = ec['toolchain']['version'] - moduleclass = ec['moduleclass'] - version_suffix = ec['versionsuffix'] - - if version_suffix != '': - self.log.info("IT4I UV version_suffix %s" % version_suffix) - else: - self.log.info("IT4I UV version_suffix not found") - - - # Get the install path from configuration - installpath = os.path.join(install_path(), 'uv') - self.log.info("IT4I UV Install path for software is %s" % installpath) - self.log.info("IT4I UV This application moduleclass is %s" % moduleclass) - moduleclass_dir = os.path.join(installpath, moduleclass) - - if (tc_name == "dummy" and (tc_version == "dummy" or not tc_version)): - self.software_full_version = version - self.log.info("IT4I UV Software full name (dummy toolchain) is %s" % self.software_full_version) - else: - self.software_full_version = version + "-" + tc_name + "-" + tc_version - self.log.info("IT4I UV Software full name is %s" % self.software_full_version) - - if (version_suffix != ''): - self.software_full_version += version_suffix - self.log.info("IT4I UV Software full name (with version_suffix) is %s" % self.software_full_version) - - if not os.path.isdir(moduleclass_dir): - self.log.info("IT4I UV software moduleclass directory %s missing, creating" % moduleclass_dir) - os.mkdir(moduleclass_dir) - - software_dir = os.path.join(moduleclass_dir, name) - if not os.path.isdir(software_dir): - self.log.info("IT4I UV software application directory %s missing, creating" % software_dir) - os.mkdir(software_dir) - - symlink_path = os.path.join(software_dir, self.software_full_version) - if not os.path.islink(symlink_path): - self.log.info("IT4I UV Missing application symlink %s, creating" % symlink_path) - os.symlink(os.path.join(installpath, 'all', name, self.software_full_version), symlink_path) - - - return os.path.join('all', name, self.software_full_version) - - def det_module_subdir(self, ec): - """ - Determine subdirectory for module file in $MODULEPATH. - This determines the separation between module names exposed to users, and what's part of the $MODULEPATH. - @param ec: dict-like object with easyconfig parameter values; for now only the 'name', - 'version', 'versionsuffix' and 'toolchain' parameters are guaranteed to be available - @return: string with subdir path (relative to $MODULEPATH), e.g. '<compiler>/<mpi_lib>' - """ - # by default: no subdirectory, but we have to use 'uv' subdirectory - return 'uv' - - def det_full_module_name(self, ec): - """ - Determine full module name from given easyconfig, according to an example module naming scheme. - - @param ec: dict-like object with easyconfig parameter values (e.g. 'name', 'version', etc.) - - @return: string representing full module name, e.g.: 'goolf/1.4.10/gzip/1.5' - """ - - # fetch required values - name = ec['name'] - version = ec['version'] - tc_name = ec['toolchain']['name'] - tc_version = ec['toolchain']['version'] - version_suffix = ec['versionsuffix'] - - - if (tc_name == "dummy" and (tc_version == "dummy" or not tc_version)): - self.module_full_version = version - else: - self.module_full_version = version + "-" + tc_name + "-" + tc_version - - if (version_suffix != ''): - self.module_full_version += version_suffix - - self.log.debug("IT4I UV Full module name is %s" % self.module_full_version) - - return os.path.join(name, self.module_full_version) diff --git a/tools/module_naming_scheme/it4i-uv_module_naming_scheme.pyc b/tools/module_naming_scheme/it4i-uv_module_naming_scheme.pyc deleted file mode 100644 index dd3856cbe612cf8d227ba5ed7a25083473da9653..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4426 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 PSPW{@@GuE53NQfx9K>i& diff --git a/tools/module_naming_scheme/it4i-uv_module_naming_scheme.pyo b/tools/module_naming_scheme/it4i-uv_module_naming_scheme.pyo deleted file mode 100644 index ff8e686a7e37363f54df366ab9ccbb6032e893cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4451 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 U5GUDzyjcut?C>xNFbXgM0038U)&Kwi diff --git a/tools/module_naming_scheme/it4i_module_naming_scheme.py b/tools/module_naming_scheme/it4i_module_naming_scheme.py deleted file mode 100644 index c6223a5..0000000 --- a/tools/module_naming_scheme/it4i_module_naming_scheme.py +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/env python -# -# Copyright (C) 2015 IT4Innovations -# Lumir Jasiok -# lumir.jasiok@vsb.cz -# http://www.it4i.cz -# -# - -import os - -from easybuild.tools.config import install_path -from easybuild.tools.module_naming_scheme import ModuleNamingScheme - - -class IT4IModuleNamingScheme(ModuleNamingScheme): - """Class implementing an example module naming scheme.""" - - REQUIRED_KEYS = [] - - def det_install_subdir(self, ec): - """ - Determine name of software installation subdirectory of install path. - @param ec: dict-like object with easyconfig parameter values; for now - only the 'name', 'version', 'versionsuffix' and - 'toolchain' parameters are guaranteed to be available - @return: string with name of subdirectory, e.g.: - '<compiler>/<mpi_lib>/<name>/<version>' - """ - # by default: use full module name as name for install subdir - - # fetch required values - name = ec['name'] - version = ec['version'] - tc_name = ec['toolchain']['name'] - tc_version = ec['toolchain']['version'] - moduleclass = ec['moduleclass'] - version_suffix = ec['versionsuffix'] - - if version_suffix != '': - self.log.info("IT4I found version_suffix %s" % version_suffix) - else: - self.log.info("IT4I version_suffix not found") - - # Get the install path from configuration - installpath = install_path() - self.log.info("IT4I Install path for software is %s" % installpath) - self.log.info("IT4I This application moduleclass is %s" % moduleclass) - moduleclass_dir = os.path.join(installpath, moduleclass) - - if (tc_name == "dummy" and (tc_version == "dummy" or not tc_version)): - self.software_full_version = version - self.log.info("IT4I Software full name (dummy toolchain) is %s" - % self.software_full_version) - else: - self.software_full_version = version + "-" + tc_name + "-" \ - + tc_version - self.log.info("IT4I Software full name is %s" - % self.software_full_version) - - if (version_suffix != ''): - self.software_full_version += version_suffix - self.log.info("IT4I Software full name (with version_suffix) is %s" - % self.software_full_version) - - if not os.path.isdir(moduleclass_dir): - self.log.info("IT4I software moduleclass directory %s \ - missing, creating" % moduleclass_dir) - os.mkdir(moduleclass_dir) - - software_dir = os.path.join(moduleclass_dir, name) - if not os.path.isdir(software_dir): - self.log.info("IT4I software application directory %s \ - missing, creating" % software_dir) - os.mkdir(software_dir) - - symlink_path = os.path.join(software_dir, self.software_full_version) - if not os.path.islink(symlink_path): - self.log.info("IT4I Missing application symlink %s, creating" - % symlink_path) - os.symlink(os.path.join(installpath, 'all', name, self.software_full_version), symlink_path) - return os.path.join('all', name, self.software_full_version) - - def det_full_module_name(self, ec): - """ - Determine full module name from given easyconfig, according to and - example module naming scheme. - - @param ec: dict-like object with easyconfig parameter values - (e.g. 'name', 'version', etc.) - - @return: string representing full module name, e.g.: - 'goolf/1.4.10/gzip/1.5' - """ - - # fetch required values - name = ec['name'] - version = ec['version'] - tc_name = ec['toolchain']['name'] - tc_version = ec['toolchain']['version'] - version_suffix = ec['versionsuffix'] - - if (tc_name == "dummy" and (tc_version == "dummy" or not tc_version)): - self.module_full_version = version - else: - self.module_full_version = version + "-" + tc_name + "-" + tc_version - - if (version_suffix != ''): - self.module_full_version += version_suffix - - self.log.debug("IT4I Full module name is %s" - % self.module_full_version) - - return os.path.join(name, self.module_full_version) diff --git a/tools/module_naming_scheme/it4i_module_naming_scheme.pyc b/tools/module_naming_scheme/it4i_module_naming_scheme.pyc deleted file mode 100644 index 1d6b93770b37b197ca64b711caa5fe022f78be93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3826 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 Z<uJ%YHV~)Sf#RSTRI%_d2`~yU0{}TAomT(= diff --git a/tools/module_naming_scheme/it4i_module_naming_scheme.pyo b/tools/module_naming_scheme/it4i_module_naming_scheme.pyo deleted file mode 100644 index 1472617cca540355c53f80853cc58dc7943515f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3846 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 -- GitLab