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,85 +1,74 @@
{ enableMultiThreading ? false
{ enableMultiThreading ? true
, enableG3toG4 ? false
, enableInventor ? false
, enableGDML ? false
, enableQT ? false
, enableXM ? false
, enableOpenGLX11 ? false
, enableOpenGLX11 ? true
, enableRaytracerX11 ? false
# Standard build environment with cmake.
, stdenv, fetchurl, cmake
# Optional system packages, otherwise internal GEANT4 packages are used.
, clhep ? null
, expat ? null
, zlib ? null
, clhep ? null # not packaged currently
, expat
, zlib
# For enableGDML.
, xercesc ? null
, xercesc
# For enableQT.
, qt ? null # qt4SDK or qt5SDK
, qtbase
# For enableXM.
, motif ? null # motif or lesstif
, motif
# For enableInventor
, coin3d
, soxt
, libXpm ? null
, libXpm
# For enableQT, enableXM, enableOpenGLX11, enableRaytracerX11.
, libGLU_combined ? null
, xlibsWrapper ? null
, libXmu ? null
, libGLU_combined
, xlibsWrapper
, libXmu
}:
# G4persistency library with support for GDML
assert enableGDML -> xercesc != null;
# If enableQT, Qt4/5 User Interface and Visualization drivers.
assert enableQT -> qt != null;
# 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;
version = "10.4.1";
name = "geant4-${version}";
multiThreadingFlag = if multiThreadingCapable then "-DGEANT4_BUILD_MULTITHREADED=${if enableMultiThreading then "ON" else "OFF"}" else "";
src = fetchurl{
url = "http://cern.ch/geant4-data/releases/geant4.10.04.p01.tar.gz";
sha256 = "a3eb13e4f1217737b842d3869dc5b1fb978f761113e74bd4eaf6017307d234dd";
};
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
'';
cmakeFlags = [
"-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"}"
"-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;
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 ];
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.
@ -107,22 +96,6 @@ let
homepage = http://www.geant4.org;
license = licenses.g4sl;
maintainers = with maintainers; [ tmplt ];
platforms = platforms.all;
};
};
fetchGeant4 = import ./fetch.nix {
inherit stdenv fetchurl;
};
in {
v10_0_2 = buildGeant4 {
inherit (fetchGeant4.v10_0_2) version src;
multiThreadingCapable = true;
};
v10_4_1 = buildGeant4 {
inherit (fetchGeant4.v10_4_1) version src;
multiThreadingCapable = true;
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
, geant4
@ -9,33 +9,33 @@
}:
let
buildG4py =
{ version, src, geant4}:
# g4py does not support MT and will fail to build against MT geant
geant4_nomt = geant4.override { enableMultiThreading = false; };
boost_python = boost.override { enablePython = true; inherit python; };
in
stdenv.mkDerivation rec {
inherit version src geant4;
inherit (geant4_nomt) version src;
name = "g4py-${version}";
# ./configure overwrites $PATH, which clobbers everything.
patches = [ ./configure.patch ];
patchFlags = "-p0";
sourceRoot = "geant4.10.04.p01/environments/g4py";
configurePhase = ''
export PYTHONPATH=$PYTHONPATH:${geant4}/lib64:$prefix
nativeBuildInputs = [ cmake ];
buildInputs = [ geant4_nomt xercesc boost_python python ];
source ${geant4}/share/Geant4-*/geant4make/geant4make.sh
cd environments/g4py
GEANT4_INSTALL = geant4_nomt;
./configure linux64 --prefix=$prefix \
--with-g4install-dir=${geant4} \
--with-python-incdir=${python}/include/python${python.majorVersion} \
--with-python-libdir=${python}/lib \
--with-boost-incdir=${boost.dev}/include \
--with-boost-libdir=${boost.out}/lib
preConfigure = ''
# Fix for boost 1.67+
substituteInPlace CMakeLists.txt \
--replace "find_package(Boost)" "find_package(Boost 1.40 REQUIRED COMPONENTS python${builtins.replaceStrings ["."] [""] python.majorVersion})"
for f in `find . -name CMakeLists.txt`; do
substituteInPlace "$f" \
--replace "boost_python" "\''${Boost_LIBRARIES}"
done
'';
enableParallelBuilding = true;
buildInputs = [ geant4 boost python ];
setupHook = ./setup-hook.sh;
@ -60,15 +60,4 @@ let
maintainers = [ ];
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 { };
geant4 = 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
};
geant4 = libsForQt5.callPackage ../development/libraries/physics/geant4 { };
cernlib = callPackage ../development/libraries/physics/cernlib { };