Make neuron package more generic (#7393)
Make neuron package more generic * find the bin directory dynamically for use in run_env and spack_env * replace filter_compilers after install with filter_compiler_wrappers * update checksum for _current_ 7.5 version * make +python conflict with ~shared * prepend the architecture specific lib directory to the LD_LIBRARY_PATH Signed-off-by: Ricardo Silva <ricardo.silva@epfl.ch>
This commit is contained in:
parent
8f350d0002
commit
4a54178ff8
1 changed files with 36 additions and 39 deletions
|
@ -27,19 +27,20 @@
|
|||
|
||||
|
||||
class Neuron(Package):
|
||||
"""NEURON is a simulation environment for single and networks of neurons.
|
||||
|
||||
"""NEURON is a simulation environment for modeling individual
|
||||
and networks of neurons. NEURON models individual neurons via
|
||||
the use of sections that are automatically subdivided into individual
|
||||
compartments, instead of requiring the user to manually create
|
||||
compartments. The primary scripting language is hoc but a Python
|
||||
interface is also available."""
|
||||
NEURON is a simulation environment for modeling individual and networks of
|
||||
neurons. NEURON models individual neurons via the use of sections that are
|
||||
automatically subdivided into individual compartments, instead of
|
||||
requiring the user to manually create compartments. The primary scripting
|
||||
language is hoc but a Python interface is also available.
|
||||
"""
|
||||
|
||||
homepage = "https://www.neuron.yale.edu/"
|
||||
url = "http://www.neuron.yale.edu/ftp/neuron/versions/v7.5/nrn-7.5.tar.gz"
|
||||
github = "https://github.com/nrnhines/nrn"
|
||||
|
||||
version('7.5', '1641ae7a7cd02728e5ae4c8aa93b3749')
|
||||
version('7.5', 'fb72c841374dfacbb6c2168ff57bfae9')
|
||||
version('7.4', '2c0bbee8a9e55d60fa26336f4ab7acbf')
|
||||
version('7.3', '993e539cb8bf102ca52e9fefd644ab61')
|
||||
version('7.2', '5486709b6366add932e3a6d141c4f7ad')
|
||||
|
@ -64,6 +65,26 @@ class Neuron(Package):
|
|||
depends_on('python@2.6:', when='+python')
|
||||
depends_on('ncurses', when='~cross-compile')
|
||||
|
||||
conflicts('~shared', when='+python')
|
||||
|
||||
filter_compiler_wrappers('*/bin/nrniv_makefile')
|
||||
|
||||
def get_neuron_archdir(self):
|
||||
"""Determine the architecture-specific neuron base directory.
|
||||
|
||||
Instead of recreating the logic of the neuron's configure
|
||||
we dynamically find the architecture-specific directory by
|
||||
looking for a specific binary.
|
||||
"""
|
||||
file_list = find(self.prefix, '*/bin/nrniv_makefile')
|
||||
# check needed as when initially evaluated the prefix is empty
|
||||
if file_list:
|
||||
neuron_archdir = os.path.dirname(os.path.dirname(file_list[0]))
|
||||
else:
|
||||
neuron_archdir = self.prefix
|
||||
|
||||
return neuron_archdir
|
||||
|
||||
def patch(self):
|
||||
# aclocal need complete include path (especially on os x)
|
||||
pkgconf_inc = '-I %s/share/aclocal/' % (self.spec['pkg-config'].prefix)
|
||||
|
@ -90,18 +111,6 @@ def get_arch_options(self, spec):
|
|||
|
||||
return options
|
||||
|
||||
def get_arch_dir(self):
|
||||
if 'bgq' in self.spec.architecture:
|
||||
arch = 'powerpc64'
|
||||
elif 'cray' in self.spec.architecture:
|
||||
arch = 'x86_64'
|
||||
elif 'ppc64le' in self.spec.architecture:
|
||||
arch = 'powerpc64le'
|
||||
else:
|
||||
arch = self.spec.architecture.target
|
||||
|
||||
return arch
|
||||
|
||||
def get_python_options(self, spec):
|
||||
options = []
|
||||
|
||||
|
@ -199,26 +208,14 @@ def install(self, spec, prefix):
|
|||
make('VERBOSE=1')
|
||||
make('install')
|
||||
|
||||
@run_after('install')
|
||||
def filter_compilers(self):
|
||||
"""run after install to avoid spack compiler wrappers
|
||||
getting embded into nrnivmodl script"""
|
||||
|
||||
arch = self.get_arch_dir()
|
||||
nrnmakefile = join_path(self.prefix, arch, 'bin/nrniv_makefile')
|
||||
|
||||
kwargs = {
|
||||
'backup': False,
|
||||
'string': True
|
||||
}
|
||||
|
||||
filter_file(env['CC'], self.compiler.cc, nrnmakefile, **kwargs)
|
||||
filter_file(env['CXX'], self.compiler.cxx, nrnmakefile, **kwargs)
|
||||
|
||||
def setup_environment(self, spack_env, run_env):
|
||||
arch = self.get_arch_dir()
|
||||
run_env.prepend_path('PATH', join_path(self.prefix, arch, 'bin'))
|
||||
neuron_archdir = self.get_neuron_archdir()
|
||||
run_env.prepend_path('PATH', join_path(neuron_archdir, 'bin'))
|
||||
run_env.prepend_path(
|
||||
'LD_LIBRARY_PATH', join_path(neuron_archdir, 'lib'))
|
||||
|
||||
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
|
||||
arch = self.get_arch_dir()
|
||||
spack_env.prepend_path('PATH', join_path(self.prefix, arch, 'bin'))
|
||||
neuron_archdir = self.get_neuron_archdir()
|
||||
spack_env.prepend_path('PATH', join_path(neuron_archdir, 'bin'))
|
||||
spack_env.prepend_path(
|
||||
'LD_LIBRARY_PATH', join_path(neuron_archdir, 'lib'))
|
||||
|
|
Loading…
Reference in a new issue