diff options
Diffstat (limited to 'var/spack/repos/builtin/packages/fsl/package.py')
-rw-r--r-- | var/spack/repos/builtin/packages/fsl/package.py | 270 |
1 files changed, 125 insertions, 145 deletions
diff --git a/var/spack/repos/builtin/packages/fsl/package.py b/var/spack/repos/builtin/packages/fsl/package.py index e5df50f058..9dea6e9386 100644 --- a/var/spack/repos/builtin/packages/fsl/package.py +++ b/var/spack/repos/builtin/packages/fsl/package.py @@ -12,7 +12,7 @@ from spack.util.environment import EnvironmentModifications class Fsl(Package, CudaPackage): """FSL is a comprehensive library of analysis tools for FMRI, MRI and DTI - brain imaging data.""" + brain imaging data.""" # NOTE: A manual download is required for FSL. Spack will search your # current directory for the download file. Alternatively, add this file to @@ -20,40 +20,40 @@ class Fsl(Package, CudaPackage): # mirror, see https://spack.readthedocs.io/en/latest/mirrors.html homepage = "https://fsl.fmrib.ox.ac.uk" - url = "file://{0}/fsl-5.0.10-sources.tar.gz".format(os.getcwd()) + url = "file://{0}/fsl-5.0.10-sources.tar.gz".format(os.getcwd()) manual_download = True - version('6.0.5', sha256='df12b0b1161a26470ddf04e4c5d5d81580a04493890226207667ed8fd2b4b83f') - version('6.0.4', sha256='58b88f38e080b05d70724d57342f58e1baf56e2bd3b98506a72b4446cad5033e') - version('5.0.10', sha256='ca183e489320de0e502a7ba63230a7f55098917a519e8c738b005d526e700842') - - depends_on('python', type=('build', 'run')) - depends_on('expat') - depends_on('libx11') - depends_on('glu') - depends_on('libiconv') - depends_on('openblas', when='@6:') - depends_on('vtk@:8') - - conflicts('cuda_arch=none', when='+cuda', - msg='must select a CUDA architecture') - conflicts('platform=darwin', - msg='currently only packaged for linux') - - patch('build_log.patch') - patch('eddy_Makefile.patch', when='@6.0.4') - patch('iconv.patch') - patch('fslpython_install_v5.patch', when='@:5') - patch('fslpython_install_v604.patch', when='@6.0.4') - patch('fslpython_install_v605.patch', when='@6.0.5') + version("6.0.5", sha256="df12b0b1161a26470ddf04e4c5d5d81580a04493890226207667ed8fd2b4b83f") + version("6.0.4", sha256="58b88f38e080b05d70724d57342f58e1baf56e2bd3b98506a72b4446cad5033e") + version("5.0.10", sha256="ca183e489320de0e502a7ba63230a7f55098917a519e8c738b005d526e700842") + + depends_on("python", type=("build", "run")) + depends_on("expat") + depends_on("libx11") + depends_on("glu") + depends_on("libiconv") + depends_on("openblas", when="@6:") + depends_on("vtk@:8") + + conflicts("cuda_arch=none", when="+cuda", msg="must select a CUDA architecture") + conflicts("platform=darwin", msg="currently only packaged for linux") + + patch("build_log.patch") + patch("eddy_Makefile.patch", when="@6.0.4") + patch("iconv.patch") + patch("fslpython_install_v5.patch", when="@:5") + patch("fslpython_install_v604.patch", when="@6.0.4") + patch("fslpython_install_v605.patch", when="@6.0.5") # Allow fsl to use newer versions of cuda - patch('https://aur.archlinux.org/cgit/aur.git/plain/005-fix_cuda_thrust_include.patch?h=fsl', - sha256='9471addfc2f880350eedadcb99cb8b350abf42be1c0652ccddf49e34e5e48734', - level=2) + patch( + "https://aur.archlinux.org/cgit/aur.git/plain/005-fix_cuda_thrust_include.patch?h=fsl", + sha256="9471addfc2f880350eedadcb99cb8b350abf42be1c0652ccddf49e34e5e48734", + level=2, + ) # allow newer compilers - patch('libxmlpp_bool.patch') + patch("libxmlpp_bool.patch") # These patches disable FSL's attempts to try to submit a subset of FSL # computations to an SGE queue system. That auto-submit mechanism only @@ -63,167 +63,147 @@ class Fsl(Package, CudaPackage): # and without further modification, whether the computation is submitted to # a "local" system, like a workstation, or as a batch job to a cluster # queueing system, regardless of queue system type. - patch('fsl_sub_v5.patch', when='@:5') - patch('fsl_sub_v6.patch', when='@6:') + patch("fsl_sub_v5.patch", when="@:5") + patch("fsl_sub_v6.patch", when="@6:") def patch(self): # Uncomment lines in source file to allow building from source - with working_dir(join_path(self.stage.source_path, 'etc', 'fslconf')): - sourced = FileFilter('fsl.sh') - sourced.filter('#FSLCONFDIR', 'FSLCONFDIR') + with working_dir(join_path(self.stage.source_path, "etc", "fslconf")): + sourced = FileFilter("fsl.sh") + sourced.filter("#FSLCONFDIR", "FSLCONFDIR") - if self.spec.satisfies('@6:'): - sourced.filter('#FSLMACHTYPE', 'FSLMACHTYPE') + if self.spec.satisfies("@6:"): + sourced.filter("#FSLMACHTYPE", "FSLMACHTYPE") else: - sourced.filter(r'#(FSLMACHTYPE).*', r'\1=linux_64-gcc4.8') + sourced.filter(r"#(FSLMACHTYPE).*", r"\1=linux_64-gcc4.8") - if self.spec.satisfies('@:5'): - with working_dir(join_path(self.stage.source_path, 'config', - 'common')): - buildproj = FileFilter('buildproj') - buildproj.filter(r'(^FSLMACHTYPE).*', r'\1=linux_64-gcc4.8') + if self.spec.satisfies("@:5"): + with working_dir(join_path(self.stage.source_path, "config", "common")): + buildproj = FileFilter("buildproj") + buildproj.filter(r"(^FSLMACHTYPE).*", r"\1=linux_64-gcc4.8") # Capture the settings file - if self.spec.satisfies('@6:'): - settings_file = join_path(self.stage.source_path, 'config', - 'buildSettings.mk') + if self.spec.satisfies("@6:"): + settings_file = join_path(self.stage.source_path, "config", "buildSettings.mk") vtk_file = settings_file else: - settings_file = join_path(self.stage.source_path, 'config', - 'linux_64-gcc4.8', 'systemvars.mk') - externals_file = join_path(self.stage.source_path, 'config', - 'linux_64-gcc4.8', 'externallibs.mk') + settings_file = join_path( + self.stage.source_path, "config", "linux_64-gcc4.8", "systemvars.mk" + ) + externals_file = join_path( + self.stage.source_path, "config", "linux_64-gcc4.8", "externallibs.mk" + ) vtk_file = externals_file build_settings = FileFilter(settings_file) vtk_settings = FileFilter(vtk_file) - build_settings.filter(r'^CUDAVER', '#CUDAVER') - build_settings.filter(r'(^CC)\s*=.*', r'\1 = {0}'.format(spack_cc)) - build_settings.filter(r'(^CXX)\s*=.*', r'\1 = {0}'.format(spack_cxx)) - build_settings.filter(r'(^CXX11)\s*=.*', r'\1 = {0}'.format(spack_cxx)) - - vtk_suffix = self.spec['vtk'].version.up_to(2) - vtk_lib_dir = self.spec['vtk'].prefix.lib64 - vtk_include_dir = join_path(self.spec['vtk'].prefix.include, - 'vtk-{0}'.format(vtk_suffix)) - - vtk_settings.filter(r'(^VTKDIR_INC)\s*=.*', - r'\1 = {0}'.format(vtk_include_dir)) - vtk_settings.filter(r'(^VTKDIR_LIB)\s*=.*', - r'\1 = {0}'.format(vtk_lib_dir)) - vtk_settings.filter(r'(^VTKSUFFIX)\s*=.*', - r'\1 = -{0}'.format(vtk_suffix)) - - if '+cuda' in self.spec: - cuda_arch = self.spec.variants['cuda_arch'].value - cuda_gencode = ' '.join(self.cuda_flags(cuda_arch)) - cuda_installation = self.spec['cuda'].prefix - - build_settings.filter(r'(^CUDA_INSTALLATION)\s*=.*', - r'\1 = {0}'.format(cuda_installation)) - build_settings.filter(r'(^LIB_CUDA)\s*=.*', - r'\1 = {0}'.format( - join_path( - cuda_installation, - 'lib64'))) - build_settings.filter(r'(^INC_CUDA)\s*=.*', - r'\1 = {0}'.format( - join_path( - cuda_installation, - 'include'))) - build_settings.filter(r'(^NVCC11)\s*=.*', - r'\1 = {0}'.format( - join_path( - cuda_installation, 'bin', - 'nvcc'))) - build_settings.filter(r'(^NVCC)\s*=.*', - r'\1 = {0}'.format( - join_path( - cuda_installation, 'bin', - 'nvcc'))) - build_settings.filter(r'(^GENCODE_FLAGS)\s*=.*', - r'\1 = {0}'.format(cuda_gencode)) - - if self.spec.satisfies('@6:'): - build_settings.filter(r'(^EDDYBUILDPARAMETERS)\s*=.*', - r'\1 = "cuda=1" "cpu=1"') - build_settings.filter(r'(^fdt_MASTERBUILD)\s*=.*', - r'\1 = COMPILE_GPU=1') - build_settings.filter(r'(^ptx2_MASTERBUILD)\s*=.*', - r'\1 = COMPILE_GPU=1') + build_settings.filter(r"^CUDAVER", "#CUDAVER") + build_settings.filter(r"(^CC)\s*=.*", r"\1 = {0}".format(spack_cc)) + build_settings.filter(r"(^CXX)\s*=.*", r"\1 = {0}".format(spack_cxx)) + build_settings.filter(r"(^CXX11)\s*=.*", r"\1 = {0}".format(spack_cxx)) + + vtk_suffix = self.spec["vtk"].version.up_to(2) + vtk_lib_dir = self.spec["vtk"].prefix.lib64 + vtk_include_dir = join_path(self.spec["vtk"].prefix.include, "vtk-{0}".format(vtk_suffix)) + + vtk_settings.filter(r"(^VTKDIR_INC)\s*=.*", r"\1 = {0}".format(vtk_include_dir)) + vtk_settings.filter(r"(^VTKDIR_LIB)\s*=.*", r"\1 = {0}".format(vtk_lib_dir)) + vtk_settings.filter(r"(^VTKSUFFIX)\s*=.*", r"\1 = -{0}".format(vtk_suffix)) + + if "+cuda" in self.spec: + cuda_arch = self.spec.variants["cuda_arch"].value + cuda_gencode = " ".join(self.cuda_flags(cuda_arch)) + cuda_installation = self.spec["cuda"].prefix + + build_settings.filter( + r"(^CUDA_INSTALLATION)\s*=.*", r"\1 = {0}".format(cuda_installation) + ) + build_settings.filter( + r"(^LIB_CUDA)\s*=.*", r"\1 = {0}".format(join_path(cuda_installation, "lib64")) + ) + build_settings.filter( + r"(^INC_CUDA)\s*=.*", r"\1 = {0}".format(join_path(cuda_installation, "include")) + ) + build_settings.filter( + r"(^NVCC11)\s*=.*", r"\1 = {0}".format(join_path(cuda_installation, "bin", "nvcc")) + ) + build_settings.filter( + r"(^NVCC)\s*=.*", r"\1 = {0}".format(join_path(cuda_installation, "bin", "nvcc")) + ) + build_settings.filter(r"(^GENCODE_FLAGS)\s*=.*", r"\1 = {0}".format(cuda_gencode)) + + if self.spec.satisfies("@6:"): + build_settings.filter(r"(^EDDYBUILDPARAMETERS)\s*=.*", r'\1 = "cuda=1" "cpu=1"') + build_settings.filter(r"(^fdt_MASTERBUILD)\s*=.*", r"\1 = COMPILE_GPU=1") + build_settings.filter(r"(^ptx2_MASTERBUILD)\s*=.*", r"\1 = COMPILE_GPU=1") else: - with open(settings_file, 'a') as f: - f.write('COMPILE_GPU=1\n') + with open(settings_file, "a") as f: + f.write("COMPILE_GPU=1\n") else: - build_settings.filter(r'^CUDA_INSTALLATION', '#CUDA_INSTALLATION') - build_settings.filter(r'^GENCODE_FLAGS', '#GENCODE_FLAGS') - build_settings.filter(r'^LIB_CUDA', '#LIB_CUDA') - build_settings.filter(r'^INC_CUDA', '#INC_CUDA') - build_settings.filter(r'^NVCC', '#NVCC') - - if self.spec.satisfies('@6:'): - build_settings.filter(r'(^EDDYBUILDPARAMETERS)\s*=.*', - r'\1 = "cpu=1"') - build_settings.filter(r'(^fdt_MASTERBUILD)\s*=.*', - r'\1 = COMPILE_GPU=0') - build_settings.filter(r'(^ptx2_MASTERBUILD)\s*=.*', - r'\1 = COMPILE_GPU=0') - - filter_file(r'(configure_opts=".*)"', - r'\1 --x-includes={0} --x-libraries={1}"'.format( - self.spec['libx11'].prefix.include, - self.spec['libx11'].prefix.lib), - join_path('extras', 'src', 'tk', 'unix', 'fslconfigure')) - filter_file(r' -L/lib64', - r'', - join_path('src', 'fabber_core', 'Makefile')) + build_settings.filter(r"^CUDA_INSTALLATION", "#CUDA_INSTALLATION") + build_settings.filter(r"^GENCODE_FLAGS", "#GENCODE_FLAGS") + build_settings.filter(r"^LIB_CUDA", "#LIB_CUDA") + build_settings.filter(r"^INC_CUDA", "#INC_CUDA") + build_settings.filter(r"^NVCC", "#NVCC") + + if self.spec.satisfies("@6:"): + build_settings.filter(r"(^EDDYBUILDPARAMETERS)\s*=.*", r'\1 = "cpu=1"') + build_settings.filter(r"(^fdt_MASTERBUILD)\s*=.*", r"\1 = COMPILE_GPU=0") + build_settings.filter(r"(^ptx2_MASTERBUILD)\s*=.*", r"\1 = COMPILE_GPU=0") + + filter_file( + r'(configure_opts=".*)"', + r'\1 --x-includes={0} --x-libraries={1}"'.format( + self.spec["libx11"].prefix.include, self.spec["libx11"].prefix.lib + ), + join_path("extras", "src", "tk", "unix", "fslconfigure"), + ) + filter_file(r" -L/lib64", r"", join_path("src", "fabber_core", "Makefile")) def install(self, spec, prefix): - build = Executable(join_path(self.stage.source_path, 'build')) + build = Executable(join_path(self.stage.source_path, "build")) build() - rm = which('rm') - for file in glob.glob('build*'): - rm('-f', file) - rm('-r', '-f', 'src') - rm('-r', '-f', join_path('extras', 'src')) - rm('-r', '-f', join_path('extras', 'include')) + rm = which("rm") + for file in glob.glob("build*"): + rm("-f", file) + rm("-r", "-f", "src") + rm("-r", "-f", join_path("extras", "src")) + rm("-r", "-f", join_path("extras", "include")) - install_tree('.', prefix) + install_tree(".", prefix) - @run_after('install') + @run_after("install") def postinstall(self): # The PYTHON related environment variables need to be unset here so # the post install script does not get confused. - vars_to_unset = ['PYTHONPATH', 'PYTHONHOME'] + vars_to_unset = ["PYTHONPATH", "PYTHONHOME"] with spack.util.environment.preserve_environment(*vars_to_unset): for v in vars_to_unset: del os.environ[v] - script = Executable(join_path(prefix, 'etc', 'fslconf', - 'post_install.sh')) - script('-f', prefix) + script = Executable(join_path(prefix, "etc", "fslconf", "post_install.sh")) + script("-f", prefix) def setup_build_environment(self, env): if not self.stage.source_path: self.stage.fetch() self.stage.expand_archive() - env.set('FSLDIR', self.stage.source_path) + env.set("FSLDIR", self.stage.source_path) # Below is for sourcing purposes during building - fslsetup = join_path(self.stage.source_path, 'etc', 'fslconf', - 'fsl.sh') + fslsetup = join_path(self.stage.source_path, "etc", "fslconf", "fsl.sh") if os.path.isfile(fslsetup): env.extend(EnvironmentModifications.from_sourcing_file(fslsetup)) def setup_run_environment(self, env): # Set the environment variables after copying tree - env.set('FSLDIR', self.prefix) - fslsetup = join_path(self.prefix, 'etc', 'fslconf', 'fsl.sh') + env.set("FSLDIR", self.prefix) + fslsetup = join_path(self.prefix, "etc", "fslconf", "fsl.sh") if os.path.isfile(fslsetup): env.extend(EnvironmentModifications.from_sourcing_file(fslsetup)) |