diff --git a/packages/nest/2021-07-17_fix-pyexecdir.patch b/packages/nest/2021-07-17_fix-pyexecdir.patch new file mode 100644 index 0000000000000000000000000000000000000000..121c3eea7e000c3e07238ea8f5410e790bedbd32 --- /dev/null +++ b/packages/nest/2021-07-17_fix-pyexecdir.patch @@ -0,0 +1,77 @@ +diff --git b/CMakeLists.txt a/CMakeLists.txt +index d879164a8..e92b21e70 100644 +--- b/CMakeLists.txt ++++ a/CMakeLists.txt +@@ -83,7 +83,7 @@ set( target-bits-split "standard" CACHE STRING "Split of the 64-bit target neuro + ################################################################################ + + # In general use the CMAKE_INSTALL_<dir> and CMAKE_INSTALL_FULL_<dir> vars from +-# GNUInstallDirs (included after calling nest_process_with_python()), but the ++# GNUInstallDirs (included after calling nest_process_with_python()), but the + # CMAKE_INSTALL_DATADIR is usually just CMAKE_INSTALL_DATAROOTDIR + # and we want it to be CMAKE_INSTALL_DATAROOTDIR/PROJECT_NAME + set( CMAKE_INSTALL_DATADIR "share/${PROJECT_NAME}" CACHE STRING "Relative directory, where NEST installs its data (share/nest)" ) +@@ -130,6 +130,7 @@ nest_set_default_compiler_flags() + # of GNUInstallDirs defining CMAKE_INSTALL_<dir> and CMAKE_INSTALL_FULL_<dir>. + nest_process_with_python() + include( GNUInstallDirs ) ++nest_post_process_with_python() + nest_process_with_optimize() + nest_process_with_debug() + nest_process_with_intel_compiler_flags() +diff --git b/cmake/ProcessOptions.cmake a/cmake/ProcessOptions.cmake +index 1d69c1a84..7e47db25b 100644 +--- b/cmake/ProcessOptions.cmake ++++ a/cmake/ProcessOptions.cmake +@@ -399,25 +399,25 @@ function( NEST_PROCESS_WITH_PYTHON ) + execute_process( COMMAND "${Python_EXECUTABLE}" "-c" + "import sys, os; print(int(bool(os.environ.get('CONDA_DEFAULT_ENV', False)) or (sys.prefix != sys.base_prefix)))" + OUTPUT_VARIABLE Python_InVirtualEnv OUTPUT_STRIP_TRAILING_WHITESPACE ) +- ++ + if ( NOT Python_InVirtualEnv AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT ) + message( FATAL_ERROR "No virtual Python environment found and no installation prefix specified. " + "Please either build and install NEST in a virtual Python environment or specify CMake option -DCMAKE_INSTALL_PREFIX=<nest_install_dir>.") + endif() +- ++ + # Setting CMAKE_INSTALL_PREFIX effects the inclusion of GNUInstallDirs defining CMAKE_INSTALL_<dir> and CMAKE_INSTALL_FULL_<dir> + get_filename_component( Python_EnvRoot "${Python_SITELIB}/../../.." ABSOLUTE) + set ( CMAKE_INSTALL_PREFIX "${Python_EnvRoot}" CACHE PATH "Default install prefix for the active Python interpreter" FORCE ) + endif ( CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT ) + +- set( HAVE_PYTHON ON PARENT_SCOPE ) +- + # export found variables to parent scope ++ set( HAVE_PYTHON ON PARENT_SCOPE ) + set( Python_FOUND "${Python_FOUND}" PARENT_SCOPE ) + set( Python_EXECUTABLE ${Python_EXECUTABLE} PARENT_SCOPE ) + set( PYTHON ${Python_EXECUTABLE} PARENT_SCOPE ) + set( Python_VERSION ${Python_VERSION} PARENT_SCOPE ) +- ++ set( Python_VERSION_MAJOR ${Python_VERSION_MAJOR} PARENT_SCOPE ) ++ set( Python_VERSION_MINOR ${Python_VERSION_MINOR} PARENT_SCOPE ) + set( Python_INCLUDE_DIRS "${Python_INCLUDE_DIRS}" PARENT_SCOPE ) + set( Python_LIBRARIES "${Python_LIBRARIES}" PARENT_SCOPE ) + +@@ -431,7 +431,6 @@ function( NEST_PROCESS_WITH_PYTHON ) + set( CYTHON_VERSION "${CYTHON_VERSION}" PARENT_SCOPE ) + endif () + endif () +- set( PYEXECDIR "lib/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages" PARENT_SCOPE ) + endif () + elseif ( ${with-python} STREQUAL "OFF" ) + else () +@@ -439,6 +438,12 @@ function( NEST_PROCESS_WITH_PYTHON ) + endif () + endfunction() + ++function( NEST_POST_PROCESS_WITH_PYTHON ) ++ if ( Python_FOUND ) ++ set( PYEXECDIR "${CMAKE_INSTALL_LIBDIR}/python${Python_VERSION_MAJOR}.${Python_VERSION_MINOR}/site-packages" PARENT_SCOPE ) ++ endif() ++endfunction() ++ + function( NEST_PROCESS_WITH_OPENMP ) + # Find OPENMP + if ( with-openmp ) diff --git a/packages/nest/package.py b/packages/nest/package.py index 323b91110a5abe7adb8e48186317fb4cae420684..11c02a1b86a9a8c5608665f22eb9c7705e7ee261 100644 --- a/packages/nest/package.py +++ b/packages/nest/package.py @@ -1,4 +1,4 @@ -# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other +# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other # Spack Project Developers. See the top-level COPYRIGHT file for details. # # SPDX-License-Identifier: (Apache-2.0 OR MIT) @@ -8,15 +8,24 @@ from spack import * class Nest(CMakePackage): """NEST is a simulator for spiking neural network models + It focuses on the dynamics, size and structure of neural systems rather than on the exact morphology of individual neurons.""" homepage = "http://www.nest-simulator.org" - url = "https://github.com/nest/nest-simulator/archive/refs/tags/v2.20.0.tar.gz" + urls = [ + 'https://github.com/nest/nest-simulator/releases/download/v2.12.0/nest-2.12.0.tar.gz', + 'https://github.com/nest/nest-simulator/archive/v3.0.tar.gz', + ] git = "https://github.com/nest/nest-simulator.git" version('master', branch='master') + version('3.0', sha256='d481ea67f3251fe3aadf5252ab0a999172f0cd5536c5985366d271d772e686e6') + patch('2021-07-17_fix-pyexecdir.patch', when='@3.0') + version('2.20.1', sha256='df3d32b5899d5d444f708037b290f889ac6ff8eae6b7be9e9faee2c0d660d8e5') version('2.20.0', sha256='40e33187c22d6e843d80095b221fa7fd5ebe4dbc0116765a91fc5c425dd0eca4') + version('2.18.0', sha256='7295c936fbdd5486395b06f54f0d4d35d9a1b6ee50b7b844186ec2c92de641d1') + version('2.16.0', sha256='abfeb61719dec54da9477be035bef1d9d764f4e7663f63f6a6d9211f967e0490') version('2.14.0', sha256='d6316d6c9153100a3220488abfa738958c4b65bf2622bd15540e4aa81e79f17f') version('2.12.0', sha256='bac578f38bb0621618ee9d5f2f1febfee60cddc000ff32e51a5f5470bb3df40d') version('2.10.0', sha256='2b6fc562cd6362e812d94bb742562a5a685fb1c7e08403765dbe123d59b0996c') @@ -24,11 +33,9 @@ class Nest(CMakePackage): version('2.6.0', sha256='5fe4924bc57d0c7dd820aa371de935eedf7e813832c0eee2c976b33c9a8db4cf') version('2.4.2', sha256='8f86e58c1a12b733ffabd8b0400326e5a3494a458149ea8ebe9f19674d05b91b') - maintainers = ['ikitayama'] - - variant('python', default=False, + variant('python', default=True, description='Build the PyNest interface') - variant('mpi', default=False, + variant('mpi', default=True, description='Build with MPI bindings') variant('openmp', default=True, description='"Enable OpenMP support"') @@ -49,17 +56,19 @@ class Nest(CMakePackage): conflicts('~openmp', when='@:2.10.99', msg='Option only introduced for non-ancient versions.') - depends_on('python@2.6:', when='+python', type=('build', 'run')) + #depends_on('python@2.6:2.99', when='@:2.14+python', type=('build', 'run')) + depends_on('python@2.6:2.99', when='@:2.15.99+python', type=('build', 'run')) + depends_on('python@2.6:', when='@2.16:+python', type=('build', 'run')) + depends_on('python@3.8:', when='@3:', type=('build', 'run')) + depends_on('py-numpy@:1.16.99', when='@:2.14.99+python', type=('build', 'run')) depends_on('py-numpy', when='+python', type=('build', 'run')) - depends_on('py-scipy', when='+python', type=('run')) depends_on('py-cython@0.19.2:', when='+python', type='build') depends_on('py-nose', when='+python', type='test') depends_on('py-setuptools', when='+python', type='build') + depends_on('py-setuptools@:44.99.99', when='@:2.15.99+python', type='build') depends_on('mpi', when='+mpi') - depends_on('doxygen', type='build') - depends_on('gsl', when='+gsl') depends_on('readline') depends_on('libtool') @@ -78,6 +87,7 @@ class Nest(CMakePackage): @when('@:2.10.99') def install(self, spec, prefix): + # calculate the "./configure" flags (not cmake!) configure_args = ["CXXFLAGS=-std=c++03", "--prefix=" + prefix, "--with-openmp"] @@ -94,36 +104,45 @@ class Nest(CMakePackage): else: configure_args.append("--without-optimize") - configure(*configure_args) + if 'mpi' in spec: + env['CC'] = spec['mpi'].mpicc + env['CXX'] = spec['mpi'].mpicxx + env['F77'] = spec['mpi'].mpif77 + env['FC'] = spec['mpi'].mpifc + configure(*self.cmake_args(spec, prefix)) make() make("install") def cmake_args(self): - args = [] + args = [ + "--prefix=" + prefix, + ] if '+mpi' in self.spec: args.append('-Dwith-mpi=ON') else: args.append('-Dwith-mpi=OFF') - if '+python' in self.spec: - args.append('-Dwith-python=ON') - args.append('-Dcythonize-pynest=' + self.spec['py-cython'].prefix) + if '+gsl' in self.spec: + args.append('-Dwith-gsl=' + self.spec['gsl'].prefix) else: - args.append('-Dwith-python=OFF') - args.append('-Dcythonize-pynest=OFF') + args.append('-Dwith-gsl=OFF') + + if self.spec.satisfies('@:2.999'): + if '+python': + version = self.spec['python'].version[0] + args.append('-Dwith-python={0}'.format(version)) + args.append('-Dcythonize-pynest=' + self.spec['py-cython'].prefix) + else: + args.append('-Dwith-python=OFF') + args.append('-Dcythonize-pynest=OFF') if '+optimize' in self.spec: args.append('-Dwith-optimize=ON') else: args.append('-Dwith-optimize=OFF') - if '+gsl' in self.spec: - args.append('-Dwith-gsl=' + self.spec['gsl'].prefix) - else: - args.append('-Dwith-gsl=OFF') - if '+openmp' in self.spec: args.append('-Dwith-openmp=ON') else: @@ -151,5 +170,7 @@ class Nest(CMakePackage): self.stage.source_path, recursive=True): install(f, path_headers) - def setup_run_environment(self, env): - env.set("NEST_INSTALL_DIR", self.spec.prefix) + @run_after('install') + @on_package_attributes(run_tests=True) + def installcheck(self): + make("installcheck")