You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
3.0 KiB
Nix

{ stdenv, lib, bashInteractive, fetchFromGitHub, makeWrapper, flex, bison
, zlib, boost, openmpi, readline, gperftools, cgal, metis, scotch, mpfr }:
stdenv.mkDerivation rec {
version = "20220727";
pname = "OpenFOAM-10";
src = fetchFromGitHub {
owner = "OpenFOAM";
repo = pname;
name = "${pname}-${version}.zip";
rev = version;
sha256 = "2AeUaiOndZPsjedJC+zUDaL3Il9GNbS2eCEtdebaVag=";
};
# a lot of assumptions about being under a directory named OpenFOAM-${version}
postUnpack = ''
echo "resettting sourceRoot to ''${sourceRoot/-${version}.zip/}"
mv "$sourceRoot" "''${sourceRoot/-${version}.zip/}"
sourceRoot="''${sourceRoot/-${version}.zip/}"
'';
patchPhase = ''
patchShebangs .
'';
# one of the following would bake in the rpath, but sourcing etc/bashrc file updates LD_LIBRARY_PATH
# NIX_LDFLAGS="-rpath $out/platform/$WM_OPTIONS/lib $NIX_LDFLAGS"
# NIX_LDFLAGS="${NIX_LDFLAGS/"$out/lib$WM_ARCH_OPTION"/"$out/platform/$WM_OPTIONS/lib"}"
configurePhase = ''
sed -ie 's|/\.\./\.\.|/..|' etc/bashrc
sed -ie 's|FOAM_INST_DIR=$HOME/$WM_PROJECT.*|FOAM_INST_DIR='"$out"/lib/OpenFOAM-${version}'|' etc/bashrc
sed -ie 's|WM_PROJECT_DIR=$WM_PROJECT_INST_DIR/.*|WM_PROJECT_DIR=$FOAM_INST_DIR|' etc/bashrc
sed -ie 's|^\( *complete .\+\)$|\1 \|\| true|' etc/config.sh/bash_completion
sed -ie 's|^\( *unalias .\+ 2> */dev/null *\)$|\1 \|\| true|' etc/config.sh/aliases
sed -ie 's|METIS_ARCH_PATH=.*$|METIS_ARCH_PATH=${metis}|' etc/config.sh/metis
sed -ie 's|SCOTCH_ARCH_PATH=.*$|SCOTCH_ARCH_PATH=${scotch}|' etc/config.sh/scotch
sed -ie 's|gperftools_install=.*$|gperftools_install=${gperftools}|' etc/config.sh/gperftools
declare opts=$(shopt -p) output
set +o errexit
source "$PWD/etc/bashrc"
eval "$opts"
'';
buildPhase = ''
export WM_NCOMPPROCS="''${NIX_BUILD_CORES}"
./Allwmake
'';
# stick etc, bin, and platforms under lib/OpenFOAM-${version}
# fill bin proper up with wrappers that source etc/bashrc for everything in platform/$WM_OPTIONS/bin
# add -mpi suffixed versions that calls proper mpirun for those with libPstream.so depencies too
installPhase = ''
echo "copying etc, bin, and platforms directories to $out/lib/OpenFOAM-${version}"
mkdir -p "$out/lib/OpenFOAM-${version}"
cp -at "$out/lib/OpenFOAM-${version}" etc bin platforms
echo "creating a bin of wrapped binaries from $out/lib/OpenFOAM-${version}/platforms/$WM_OPTIONS/bin"
for program in "$out/lib/OpenFOAM-${version}/platforms/$WM_OPTIONS/bin/"*; do
makeWrapper "$program" "$out/bin/''${program##*/}" \
--run "source \"$out/lib/OpenFOAM-${version}/etc/bashrc\" 2>/dev/null"
done
'';
buildInputs = [
makeWrapper
flex
bison
zlib
boost
openmpi
readline
gperftools
cgal
metis
scotch
mpfr
];
meta = with lib; {
homepage = http://www.openfoam.com;
description = "Free open-source CFD software";
platforms = platforms.linux;
license = licenses.gpl3;
};
}