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 , 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
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 { stdenv.mkDerivation rec {
inherit version src; version = "10.4.1";
name = "geant4-${version}"; 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 = '' cmakeFlags = [
${multiThreadingFlag} "-DGEANT4_INSTALL_DATA=OFF"
-DGEANT4_INSTALL_DATA=OFF "-DGEANT4_USE_GDML=${if enableGDML then "ON" else "OFF"}"
-DGEANT4_USE_GDML=${if enableGDML then "ON" else "OFF"} "-DGEANT4_USE_G3TOG4=${if enableG3toG4 then "ON" else "OFF"}"
-DGEANT4_USE_G3TOG4=${if enableG3toG4 then "ON" else "OFF"} "-DGEANT4_USE_QT=${if enableQT then "ON" else "OFF"}"
-DGEANT4_USE_QT=${if enableQT then "ON" else "OFF"} "-DGEANT4_USE_XM=${if enableXM 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_OPENGL_X11=${if enableOpenGLX11 then "ON" else "OFF"} "-DGEANT4_USE_INVENTOR=${if enableInventor 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_RAYTRACER_X11=${if enableRaytracerX11 then "ON" else "OFF"} "-DGEANT4_USE_SYSTEM_CLHEP=${if clhep != null 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_EXPAT=${if expat != null then "ON" else "OFF"} "-DGEANT4_USE_SYSTEM_ZLIB=${if zlib != 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"}"
-DINVENTOR_INCLUDE_DIR=${coin3d}/include ] ++ stdenv.lib.optionals enableInventor [
-DINVENTOR_LIBRARY_RELEASE=${coin3d}/lib/libCoin.so "-DINVENTOR_INCLUDE_DIR=${coin3d}/include"
''; "-DINVENTOR_LIBRARY_RELEASE=${coin3d}/lib/libCoin.so"
];
enableParallelBuilding = true; enableParallelBuilding = true;
buildInputs = [ cmake clhep expat zlib xercesc qt motif libGLU_combined xlibsWrapper libXmu libXpm coin3d soxt ]; nativeBuildInputs = [ cmake ];
propagatedBuildInputs = [ clhep expat zlib xercesc qt motif libGLU_combined xlibsWrapper libXmu libXpm coin3d soxt ]; 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 = '' postFixup = ''
# Don't try to export invalid environment variables. # Don't try to export invalid environment variables.
@ -107,22 +96,6 @@ let
homepage = http://www.geant4.org; homepage = http://www.geant4.org;
license = licenses.g4sl; license = licenses.g4sl;
maintainers = with maintainers; [ tmplt ]; maintainers = with maintainers; [ tmplt ];
platforms = platforms.all; platforms = platforms.linux;
};
};
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;
}; };
} }

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,33 +9,33 @@
}: }:
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;
@ -60,15 +60,4 @@ let
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 { };