diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index af0ec94e8a49..8ed71a1850db 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -3404,6 +3404,12 @@ githubId = 6754950; name = "David Armstrong Lewis"; }; + davidcromp = { + email = "davidcrompton1192@gmail.com"; + github = "DavidCromp"; + githubId = 10701143; + name = "David Crompton"; + }; davidrusu = { email = "davidrusu.me@gmail.com"; github = "davidrusu"; diff --git a/pkgs/applications/science/biology/neuron/default.nix b/pkgs/applications/science/biology/neuron/default.nix index a35d586b9ac3..65d581e553b7 100644 --- a/pkgs/applications/science/biology/neuron/default.nix +++ b/pkgs/applications/science/biology/neuron/default.nix @@ -1,94 +1,104 @@ -{ lib, stdenv +{ lib +, stdenv , fetchurl -, pkg-config -, automake -, autoconf -, libtool -, ncurses , readline -, which -, python ? null -, useMpi ? false +, xorg , mpi -, iv +, cmake +, bison +, flex +, git +, perl +, gsl +, xcbuild +, python3 +, useMpi ? false +, useIv ? true +, useCore ? false +, useRx3d ? false }: + stdenv.mkDerivation rec { - pname = "neuron${lib.optionalString useMpi "-mpi"}"; - version = "7.5"; + pname = "neuron"; + version = "8.2.1"; - nativeBuildInputs = [ which pkg-config automake autoconf libtool ]; - buildInputs = [ ncurses readline python iv ] - ++ lib.optional useMpi mpi; + # format is for pythonModule conversion + format = "other"; - src = fetchurl { - url = "https://www.neuron.yale.edu/ftp/neuron/versions/v${version}/nrn-${version}.tar.gz"; - sha256 = "0f26v3qvzblcdjg7isq0m9j2q8q7x3vhmkfllv8lsr3gyj44lljf"; - }; + nativeBuildInputs = [ + cmake + bison + flex + git + ] ++ lib.optional useCore [ perl gsl ] + ++ lib.optional stdenv.isDarwin [ xcbuild ]; - patches = (lib.optionals (stdenv.isDarwin) [ ./neuron-carbon-disable.patch ]); + buildInputs = lib.optional useIv [ + xorg.libX11.dev + xorg.libXcomposite.dev + xorg.libXext.dev + ]; - # With LLVM 3.8 and above, clang (really libc++) gets upset if you attempt to redefine these... - postPatch = lib.optionalString stdenv.cc.isClang '' - substituteInPlace src/gnu/neuron_gnu_builtin.h \ - --replace 'double abs(double arg);' "" \ - --replace 'float abs(float arg);' "" \ - --replace 'short abs(short arg);' "" \ - --replace 'long abs(long arg);' "" - '' + lib.optionalString stdenv.isDarwin '' - # we are darwin, but we don't have all the quirks the source wants to compensate for - substituteInPlace src/nrnpython/setup.py.in --replace 'readline="edit"' 'readline="readline"' - for f in src/nrnpython/*.[ch] ; do - substituteInPlace $f --replace "" "" + propagatedBuildInputs = [ + readline + python3 + python3.pkgs.wheel + python3.pkgs.setuptools + python3.pkgs.scikit-build + python3.pkgs.matplotlib + ] ++ lib.optional useMpi [ + mpi + ] ++ lib.optional useMpi [ + python3.pkgs.mpi4py + ] ++ lib.optional useRx3d [ + python3.pkgs.cython + python3.pkgs.numpy + ]; + + patches = [ ./neuron_darwin_rpath.patch ]; + + # Patch build shells for cmake (bin, src, cmake) and submodules (external) + postPatch = '' + patchShebangs ./bin ./src ./external ./cmake + sed -e 's#DESTDIR =#DESTDIR = '"$out"'#' -i external/coreneuron/extra/nrnivmodl_core_makefile.in + ''; + + cmakeFlags = [ + "-DNRN_ENABLE_INTERVIEWS=${if useIv then "ON" else "OFF"}" + "-DNRN_ENABLE_MPI=${if useMpi then "ON" else "OFF"}" + "-DNRN_ENABLE_CORENEURON=${if useCore then "ON" else "OFF"}" + "-DNRN_ENABLE_RX3D=${if useRx3d then "ON" else "OFF"}" + ]; + + postInstall = '' + mkdir -p $out/${python3.sitePackages} + mv $out/lib/python/* $out/${python3.sitePackages}/ + rm -rf $out/lib/python build + for entry in $out/lib/*.so; do + # remove references to build + patchelf --set-rpath $(patchelf --print-rpath $entry | tr ':' '\n' | sed '/^\/build/d' | tr '\n' ':') $entry done ''; - enableParallelBuilding = true; - - ## neuron install by default everything under prefix/${host_arch}/* - ## override this to support nix standard file hierarchy - ## without issues: install everything under prefix/ - preConfigure = '' - ./build.sh - export prefix="''${prefix} --exec-prefix=''${out}" - ''; - - configureFlags = with lib; - [ "--with-readline=${readline}" "--with-iv=${iv}" ] - ++ optionals (python != null) [ "--with-nrnpython=${python.interpreter}" ] - ++ (if useMpi then ["--with-mpi" "--with-paranrn"] - else ["--without-mpi"]); - - - postInstall = lib.optionalString (python != null) '' - ## standardise python neuron install dir if any - if [[ -d $out/lib/python ]]; then - mkdir -p ''${out}/${python.sitePackages} - mv ''${out}/lib/python/* ''${out}/${python.sitePackages}/ - fi - ''; - - propagatedBuildInputs = [ readline ncurses which libtool ]; + src = fetchurl { + url = "https://github.com/neuronsimulator/nrn/releases/download/${version}/full-src-package-${version}.tar.gz"; + sha256 = "0kb0dn7nmivv3zflzkbj2fj3184zwp2crkxp0mdxkwm4kpnxqz0v"; + }; meta = with lib; { - broken = stdenv.isDarwin; description = "Simulation environment for empirically-based simulations of neurons and networks of neurons"; - - longDescription = "NEURON is a simulation environment for developing and exercising models of - neurons and networks of neurons. It is particularly well-suited to problems where - cable properties of cells play an important role, possibly including extracellular - potential close to the membrane), and where cell membrane properties are complex, - involving many ion-specific channels, ion accumulation, and second messengers"; - - sourceProvenance = with sourceTypes; [ - fromSource - ] ++ lib.optionals (python != null) [ - binaryNativeCode # "geometry3d" bundled libraries - ]; - license = licenses.bsd3; - homepage = "http://www.neuron.yale.edu/neuron"; - maintainers = [ maintainers.adev ]; - # source claims it's only tested for x86 and powerpc - platforms = platforms.x86_64 ++ platforms.i686; + longDescription = '' + NEURON is a simulation environment for developing and exercising models of + neurons and networks of neurons. It is particularly well-suited to problems where + cable properties of cells play an important role, possibly including extracellular + potential close to the membrane), and where cell membrane properties are complex, + involving many ion-specific channels, ion accumulation, and second messengers + ''; + sourceProvenance = with sourceTypes; [ fromSource ]; + license = licenses.bsd3; + homepage = "http://www.neuron.yale.edu/neuron"; + maintainers = with maintainers; [ adev davidcromp ]; + platforms = platforms.all; }; } diff --git a/pkgs/applications/science/biology/neuron/neuron-carbon-disable.patch b/pkgs/applications/science/biology/neuron/neuron-carbon-disable.patch deleted file mode 100644 index 923bffb1c338..000000000000 --- a/pkgs/applications/science/biology/neuron/neuron-carbon-disable.patch +++ /dev/null @@ -1,21 +0,0 @@ ---- nrn-7.4/src/mac/Makefile.am 2015-11-12 21:42:45.000000000 +0100 -+++ nrn-7.4.new/src/mac/Makefile.am 2016-08-24 17:43:39.000000000 +0200 -@@ -15,18 +15,8 @@ - host_cpu = @host_cpu@ - - if MAC_DARWIN --carbon = @enable_carbon@ - bin_SCRIPTS = $(launch_scripts) - install: install-am --if UniversalMacBinary -- $(CC) -arch ppc -o aoutppc -Dcpu="\"$(host_cpu)\"" -I. $(srcdir)/launch.c $(srcdir)/mac2uxarg.c -framework Carbon -- $(CC) -arch i386 -o aouti386 -Dcpu="\"$(host_cpu)\"" -I. $(srcdir)/launch.c $(srcdir)/mac2uxarg.c -framework Carbon -- lipo aouti386 aoutppc -create -output a.out --else -- gcc -g -arch i386 -Dncpu="\"$(host_cpu)\"" -I. $(srcdir)/launch.c $(srcdir)/mac2uxarg.c -framework Carbon -- --endif -- carbon=$(carbon) sh $(srcdir)/launch_inst.sh "$(host_cpu)" "$(DESTDIR)$(prefix)" "$(srcdir)" - for i in $(S) ; do \ - sed "s/^CPU.*/CPU=\"$(host_cpu)\"/" < $(DESTDIR)$(bindir)/$$i > temp; \ - mv temp $(DESTDIR)$(bindir)/$$i; \ diff --git a/pkgs/applications/science/biology/neuron/neuron_darwin_rpath.patch b/pkgs/applications/science/biology/neuron/neuron_darwin_rpath.patch new file mode 100644 index 000000000000..1b0fa2670782 --- /dev/null +++ b/pkgs/applications/science/biology/neuron/neuron_darwin_rpath.patch @@ -0,0 +1,11 @@ +--- a/src/nrnpython/setup.py.in ++++ b/src/nrnpython/setup.py.in +@@ -124,7 +124,7 @@ libdirs = [destdir + get_escaped_path("@NRN_LIBDIR@"), + rpath_prefix_flag='-Wl,-R' + extra_link_args = [@NRN_LINK_FLAGS_COMMA_SEPARATED_STRINGS@] + @MAC_DARWIN_FALSE@extra_link_args += [rpath_prefix_flag+lib_path for lib_path in libdirs] +-@MAC_DARWIN_TRUE@extra_link_args.append("-Wl,-rpath,@loader_path/../../") ++@MAC_DARWIN_TRUE@extra_link_args.append("-Wl,-rpath,@loader_path/../../../") + @MAC_DARWIN_TRUE@extra_link_args.append("-Wl,-rpath,%s" % ivlibdir) + + # as neuron module will be built during make, add build/lib diff --git a/pkgs/development/python-modules/neuronpy/default.nix b/pkgs/development/python-modules/neuronpy/default.nix deleted file mode 100644 index 2d388dfa4c27..000000000000 --- a/pkgs/development/python-modules/neuronpy/default.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ lib -, buildPythonPackage -, fetchPypi -, numpy -, matplotlib -, scipy -, isPy27 -}: - -buildPythonPackage rec { - pname = "neuronpy"; - version = "0.1.6"; - disabled = !isPy27; - - src = fetchPypi { - inherit pname version; - sha256 = "1clhc2b5fy2l8nfrji4dagmj9419nj6kam090yqxhq5c28sngk25"; - }; - - propagatedBuildInputs = [ numpy matplotlib scipy ]; - - #No tests included - doCheck = false; - - meta = with lib; { - description = "Interfaces and utilities for the NEURON simulator and analysis of neural data"; - maintainers = [ maintainers.nico202 ]; - license = licenses.mit; - }; - -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 33e3f7fd1601..7a0bfd20762d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -36422,11 +36422,11 @@ with pkgs; nest-mpi = callPackage ../applications/science/biology/nest { withMpi = true; }; - neuron = callPackage ../applications/science/biology/neuron { python = null; }; + neuron = callPackage ../applications/science/biology/neuron { }; neuron-mpi = neuron.override {useMpi = true; }; - neuron-full = neuron-mpi.override { python = python2; }; + neuron-full = neuron-mpi.override { useCore = true; useRx3d = true; }; mrbayes = callPackage ../applications/science/biology/mrbayes { }; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index f09a8eb1a188..bfbfb1504357 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -6334,11 +6334,9 @@ self: super: with self; { networkx = callPackage ../development/python-modules/networkx { }; - neuron-mpi = toPythonModule (pkgs.neuron-mpi.override { inherit python; }); + neuron-full = pkgs.neuron-full.override { python3 = python; }; - neuron = toPythonModule (pkgs.neuron.override { inherit python; }); - - neuronpy = callPackage ../development/python-modules/neuronpy { }; + neuronpy = python.pkgs.toPythonModule neuron-full; nevow = callPackage ../development/python-modules/nevow { };