Merge pull request #46019 from veprbl/pr/geant4_overhaul

geant4 overhaul
This commit is contained in:
xeji 2018-09-07 20:08:17 +02:00 committed by GitHub
commit a60e79425b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 112 additions and 213 deletions

View File

@ -1,128 +1,101 @@
{ enableMultiThreading ? false { enableMultiThreading ? true
, enableG3toG4 ? false , enableG3toG4 ? false
, enableInventor ? false , enableInventor ? false
, enableGDML ? false , enableGDML ? false
, enableQT ? false , enableQT ? false
, enableXM ? false , enableXM ? false
, enableOpenGLX11 ? false , enableOpenGLX11 ? true
, enableRaytracerX11 ? false , enableRaytracerX11 ? false
# Standard build environment with cmake. # Standard build environment with cmake.
, stdenv, fetchurl, cmake , stdenv, fetchurl, cmake
# Optional system packages, otherwise internal GEANT4 packages are used. # Optional system packages, otherwise internal GEANT4 packages are used.
, clhep ? null , clhep ? null # not packaged currently
, expat ? null , expat
, zlib ? null , zlib
# For enableGDML. # For enableGDML.
, xercesc ? null , xercesc
# For enableQT. # For enableQT.
, qt ? null # qt4SDK or qt5SDK , qtbase
# For enableXM. # For enableXM.
, motif ? null # motif or lesstif , motif
# For enableInventor # For enableInventor
, coin3d , coin3d
, soxt , soxt
, libXpm ? null , libXpm
# For enableQT, enableXM, enableOpenGLX11, enableRaytracerX11. # For enableQT, enableXM, enableOpenGLX11, enableRaytracerX11.
, libGLU_combined ? null , libGLU_combined
, xlibsWrapper ? null , xlibsWrapper
, libXmu ? null , libXmu
}: }:
# G4persistency library with support for GDML stdenv.mkDerivation rec {
assert enableGDML -> xercesc != null; version = "10.4.1";
name = "geant4-${version}";
# If enableQT, Qt4/5 User Interface and Visualization drivers. src = fetchurl{
assert enableQT -> qt != null; url = "http://cern.ch/geant4-data/releases/geant4.10.04.p01.tar.gz";
sha256 = "a3eb13e4f1217737b842d3869dc5b1fb978f761113e74bd4eaf6017307d234dd";
# Motif User Interface and Visualisation drivers.
assert enableXM -> motif != null;
# OpenGL/X11 User Interface and Visualisation drivers.
assert enableQT || enableXM || enableOpenGLX11 || enableRaytracerX11 -> libGLU_combined != null;
assert enableQT || enableXM || enableOpenGLX11 || enableRaytracerX11 -> xlibsWrapper != null;
assert enableQT || enableXM || enableOpenGLX11 || enableRaytracerX11 -> libXmu != null;
assert enableInventor -> libXpm != null;
let
buildGeant4 =
{ version, src, multiThreadingCapable ? false }:
stdenv.mkDerivation rec {
inherit version src;
name = "geant4-${version}";
multiThreadingFlag = if multiThreadingCapable then "-DGEANT4_BUILD_MULTITHREADED=${if enableMultiThreading then "ON" else "OFF"}" else "";
cmakeFlags = ''
${multiThreadingFlag}
-DGEANT4_INSTALL_DATA=OFF
-DGEANT4_USE_GDML=${if enableGDML then "ON" else "OFF"}
-DGEANT4_USE_G3TOG4=${if enableG3toG4 then "ON" else "OFF"}
-DGEANT4_USE_QT=${if enableQT then "ON" else "OFF"}
-DGEANT4_USE_XM=${if enableXM then "ON" else "OFF"}
-DGEANT4_USE_OPENGL_X11=${if enableOpenGLX11 then "ON" else "OFF"}
-DGEANT4_USE_INVENTOR=${if enableInventor then "ON" else "OFF"}
-DGEANT4_USE_RAYTRACER_X11=${if enableRaytracerX11 then "ON" else "OFF"}
-DGEANT4_USE_SYSTEM_CLHEP=${if clhep != null then "ON" else "OFF"}
-DGEANT4_USE_SYSTEM_EXPAT=${if expat != null then "ON" else "OFF"}
-DGEANT4_USE_SYSTEM_ZLIB=${if zlib != null then "ON" else "OFF"}
-DINVENTOR_INCLUDE_DIR=${coin3d}/include
-DINVENTOR_LIBRARY_RELEASE=${coin3d}/lib/libCoin.so
'';
enableParallelBuilding = true;
buildInputs = [ cmake clhep expat zlib xercesc qt motif libGLU_combined xlibsWrapper libXmu libXpm coin3d soxt ];
propagatedBuildInputs = [ clhep expat zlib xercesc qt motif libGLU_combined xlibsWrapper libXmu libXpm coin3d soxt ];
postFixup = ''
# Don't try to export invalid environment variables.
sed -i 's/export G4\([A-Z]*\)DATA/#export G4\1DATA/' "$out"/bin/geant4.sh
'';
setupHook = ./geant4-hook.sh;
passthru = {
data = import ./datasets.nix { inherit stdenv fetchurl; };
};
# Set the myriad of envars required by Geant4 if we use a nix-shell.
shellHook = ''
source $out/nix-support/setup-hook
'';
meta = with stdenv.lib; {
description = "A toolkit for the simulation of the passage of particles through matter";
longDescription = ''
Geant4 is a toolkit for the simulation of the passage of particles through matter.
Its areas of application include high energy, nuclear and accelerator physics, as well as studies in medical and space science.
The two main reference papers for Geant4 are published in Nuclear Instruments and Methods in Physics Research A 506 (2003) 250-303, and IEEE Transactions on Nuclear Science 53 No. 1 (2006) 270-278.
'';
homepage = http://www.geant4.org;
license = licenses.g4sl;
maintainers = with maintainers; [ tmplt ];
platforms = platforms.all;
};
};
fetchGeant4 = import ./fetch.nix {
inherit stdenv fetchurl;
}; };
in { cmakeFlags = [
v10_0_2 = buildGeant4 { "-DGEANT4_INSTALL_DATA=OFF"
inherit (fetchGeant4.v10_0_2) version src; "-DGEANT4_USE_GDML=${if enableGDML then "ON" else "OFF"}"
multiThreadingCapable = true; "-DGEANT4_USE_G3TOG4=${if enableG3toG4 then "ON" else "OFF"}"
"-DGEANT4_USE_QT=${if enableQT then "ON" else "OFF"}"
"-DGEANT4_USE_XM=${if enableXM then "ON" else "OFF"}"
"-DGEANT4_USE_OPENGL_X11=${if enableOpenGLX11 then "ON" else "OFF"}"
"-DGEANT4_USE_INVENTOR=${if enableInventor then "ON" else "OFF"}"
"-DGEANT4_USE_RAYTRACER_X11=${if enableRaytracerX11 then "ON" else "OFF"}"
"-DGEANT4_USE_SYSTEM_CLHEP=${if clhep != null then "ON" else "OFF"}"
"-DGEANT4_USE_SYSTEM_EXPAT=${if expat != null then "ON" else "OFF"}"
"-DGEANT4_USE_SYSTEM_ZLIB=${if zlib != null then "ON" else "OFF"}"
"-DGEANT4_BUILD_MULTITHREADED=${if enableMultiThreading then "ON" else "OFF"}"
] ++ stdenv.lib.optionals enableInventor [
"-DINVENTOR_INCLUDE_DIR=${coin3d}/include"
"-DINVENTOR_LIBRARY_RELEASE=${coin3d}/lib/libCoin.so"
];
enableParallelBuilding = true;
nativeBuildInputs = [ cmake ];
buildInputs = [ clhep expat zlib libGLU_combined xlibsWrapper libXmu ]
++ stdenv.lib.optionals enableGDML [ xercesc ]
++ stdenv.lib.optionals enableXM [ motif ]
++ stdenv.lib.optionals enableQT [ qtbase ]
++ stdenv.lib.optionals enableInventor [ libXpm coin3d soxt ];
postFixup = ''
# Don't try to export invalid environment variables.
sed -i 's/export G4\([A-Z]*\)DATA/#export G4\1DATA/' "$out"/bin/geant4.sh
'';
setupHook = ./geant4-hook.sh;
passthru = {
data = import ./datasets.nix { inherit stdenv fetchurl; };
}; };
v10_4_1 = buildGeant4 { # Set the myriad of envars required by Geant4 if we use a nix-shell.
inherit (fetchGeant4.v10_4_1) version src; shellHook = ''
multiThreadingCapable = true; source $out/nix-support/setup-hook
'';
meta = with stdenv.lib; {
description = "A toolkit for the simulation of the passage of particles through matter";
longDescription = ''
Geant4 is a toolkit for the simulation of the passage of particles through matter.
Its areas of application include high energy, nuclear and accelerator physics, as well as studies in medical and space science.
The two main reference papers for Geant4 are published in Nuclear Instruments and Methods in Physics Research A 506 (2003) 250-303, and IEEE Transactions on Nuclear Science 53 No. 1 (2006) 270-278.
'';
homepage = http://www.geant4.org;
license = licenses.g4sl;
maintainers = with maintainers; [ tmplt ];
platforms = platforms.linux;
}; };
} }

View File

@ -1,29 +0,0 @@
{ stdenv, fetchurl }:
let
fetch = { version, src ? builtins.getAttr stdenv.hostPlatform.system sources, sources ? null }:
{
inherit version src;
};
in {
v10_0_2 = fetch {
version = "10.0.2";
src = fetchurl{
url = "http://geant4.cern.ch/support/source/geant4.10.00.p02.tar.gz";
sha256 = "9d615200901f1a5760970e8f5970625ea146253e4f7c5ad9df2a9cf84549e848";
};
};
v10_4_1 = fetch {
version = "10.4.1";
src = fetchurl{
url = "http://cern.ch/geant4-data/releases/geant4.10.04.p01.tar.gz";
sha256 = "a3eb13e4f1217737b842d3869dc5b1fb978f761113e74bd4eaf6017307d234dd";
};
};
}

View File

@ -1,12 +0,0 @@
--- environments/g4py/configure 2014-03-17 22:47:05.000000000 +1100
+++ environments/g4py/configure 2014-09-01 15:33:46.523637686 +1000
@@ -4,9 +4,6 @@
# ======================================================================
export LANG=C
-PATH=/bin:/usr/bin
-export PATH
-
# ======================================================================
# testing the echo features
# ======================================================================

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl { stdenv, fetchurl, cmake, xercesc
# The target version of Geant4 # The target version of Geant4
, geant4 , geant4
@ -9,66 +9,55 @@
}: }:
let let
buildG4py = # g4py does not support MT and will fail to build against MT geant
{ version, src, geant4}: geant4_nomt = geant4.override { enableMultiThreading = false; };
boost_python = boost.override { enablePython = true; inherit python; };
in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
inherit version src geant4; inherit (geant4_nomt) version src;
name = "g4py-${version}"; name = "g4py-${version}";
# ./configure overwrites $PATH, which clobbers everything. sourceRoot = "geant4.10.04.p01/environments/g4py";
patches = [ ./configure.patch ];
patchFlags = "-p0";
configurePhase = '' nativeBuildInputs = [ cmake ];
export PYTHONPATH=$PYTHONPATH:${geant4}/lib64:$prefix buildInputs = [ geant4_nomt xercesc boost_python python ];
source ${geant4}/share/Geant4-*/geant4make/geant4make.sh GEANT4_INSTALL = geant4_nomt;
cd environments/g4py
./configure linux64 --prefix=$prefix \ preConfigure = ''
--with-g4install-dir=${geant4} \ # Fix for boost 1.67+
--with-python-incdir=${python}/include/python${python.majorVersion} \ substituteInPlace CMakeLists.txt \
--with-python-libdir=${python}/lib \ --replace "find_package(Boost)" "find_package(Boost 1.40 REQUIRED COMPONENTS python${builtins.replaceStrings ["."] [""] python.majorVersion})"
--with-boost-incdir=${boost.dev}/include \ for f in `find . -name CMakeLists.txt`; do
--with-boost-libdir=${boost.out}/lib substituteInPlace "$f" \
''; --replace "boost_python" "\''${Boost_LIBRARIES}"
done
'';
enableParallelBuilding = true; enableParallelBuilding = true;
buildInputs = [ geant4 boost python ];
setupHook = ./setup-hook.sh; setupHook = ./setup-hook.sh;
# Make sure we set PYTHONPATH # Make sure we set PYTHONPATH
shellHook = '' shellHook = ''
source $out/nix-support/setup-hook source $out/nix-support/setup-hook
''; '';
meta = { meta = {
description = "Python bindings and utilities for Geant4"; description = "Python bindings and utilities for Geant4";
longDescription = '' longDescription = ''
Geant4 is a toolkit for the simulation of the passage of particles Geant4 is a toolkit for the simulation of the passage of particles
through matter. Its areas of application include high energy, through matter. Its areas of application include high energy,
nuclear and accelerator physics, as well as studies in medical and nuclear and accelerator physics, as well as studies in medical and
space science. The two main reference papers for Geant4 are space science. The two main reference papers for Geant4 are
published in Nuclear Instruments and Methods in Physics Research A published in Nuclear Instruments and Methods in Physics Research A
506 (2003) 250-303, and IEEE Transactions on Nuclear Science 53 No. 1 506 (2003) 250-303, and IEEE Transactions on Nuclear Science 53 No. 1
(2006) 270-278. (2006) 270-278.
''; '';
homepage = http://www.geant4.org; homepage = http://www.geant4.org;
license = stdenv.lib.licenses.g4sl; license = stdenv.lib.licenses.g4sl;
maintainers = [ ]; maintainers = [ ];
platforms = stdenv.lib.platforms.all; platforms = stdenv.lib.platforms.all;
};
};
fetchGeant4 = import ../fetch.nix {
inherit stdenv fetchurl;
};
in {
v10_0_2 = buildG4py {
inherit (fetchGeant4.v10_0_2) version src;
geant4 = geant4.v10_0_2;
}; };
} }

View File

@ -21297,29 +21297,7 @@ with pkgs;
fastnlo = callPackage ../development/libraries/physics/fastnlo { }; fastnlo = callPackage ../development/libraries/physics/fastnlo { };
geant4 = callPackage ../development/libraries/physics/geant4 { geant4 = libsForQt5.callPackage ../development/libraries/physics/geant4 { };
enableMultiThreading = true;
enableG3toG4 = false;
enableInventor = false;
enableGDML = false;
enableQT = false;
enableXM = false;
enableOpenGLX11 = true;
enableRaytracerX11 = false;
# Optional system packages, otherwise internal GEANT4 packages are used.
clhep = null;
zlib = null;
# For enableGDML.
xercesc = null;
# For enableQT.
qt = null; # qt4SDK or qt5SDK
# For enableXM.
motif = null; # motif or lesstif
};
cernlib = callPackage ../development/libraries/physics/cernlib { }; cernlib = callPackage ../development/libraries/physics/cernlib { };