Files
nixpkgs/pkgs/applications/science/misc/openmodelica/mkderivation/default.nix
Dark Steveneq 646b892680
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
push sheeet
2025-10-09 14:15:47 +02:00

133 lines
3.3 KiB
Nix

# mkOpenModelicaDerivation is an mkDerivation function for packages
# from OpenModelica suite.
{
stdenv,
lib,
fetchgit,
autoconf,
automake,
libtool,
cmake,
autoreconfHook,
symlinkJoin,
}:
pkg:
let
inherit (builtins)
hasAttr
getAttr
length
elemAt
;
inherit (lib) attrByPath concatStringsSep;
# A few helpers functions:
# getAttrDef is just a getAttr with default fallback
getAttrDef =
attr: default: x:
attrByPath [ attr ] default x;
# getAttr-like helper for optional append to string:
# "Hello" + appendByAttr "a" " " {a = "world";} = "Hello world"
# "Hello" + appendByAttr "a" " " {} = "Hello"
appendByAttr =
attr: sep: x:
lib.optionalString (hasAttr attr x) (sep + (getAttr attr x));
# Are there any OM dependencies at all?
ifDeps = length pkg.omdeps != 0;
# Dependencies of current OpenModelica-target joined in one file tree.
# Return the dep itself in case it is a single one.
joinedDeps =
if length pkg.omdeps == 1 then
elemAt pkg.omdeps 0
else
symlinkJoin {
name = pkg.pname + "-omhome";
paths = pkg.omdeps;
};
# Should we run ./configure for the target pkg?
omautoconf = getAttrDef "omautoconf" false pkg;
# Name of the make target
omtarget = getAttrDef "omtarget" pkg.pname pkg;
# Directory of target sources
omdir = getAttrDef "omdir" pkg.pname pkg;
# Simple to to m4 configuration scripts
postPatch =
lib.optionalString ifDeps ''
sed -i ''$(find -name omhome.m4) -e 's|if test ! -z "$USINGPRESETBUILDDIR"|if test ! -z "$USINGPRESETBUILDDIR" -a -z "$OMHOME"|'
''
+ appendByAttr "postPatch" "\n" pkg;
# Update shebangs in the scripts before running configuration.
preAutoreconf = "patchShebangs --build common" + appendByAttr "preAutoreconf" "\n" pkg;
# Tell OpenModelica where built dependencies are located.
configureFlags =
lib.optional ifDeps "--with-openmodelicahome=${joinedDeps}" ++ getAttrDef "configureFlags" [ ] pkg;
# Our own configurePhase that accounts for omautoconf
configurePhase = ''
runHook preConfigure
export configureFlags="''${configureFlags} --with-ombuilddir=$PWD/build --prefix=$prefix"
./configure --no-recursion $configureFlags
${lib.optionalString omautoconf "(cd ${omdir}; ./configure $configureFlags)"}
runHook postConfigure
'';
# Targets that we want to build ourselves:
deptargets = lib.forEach pkg.omdeps (dep: dep.omtarget);
# ... so we ask openmodelica makefile to skip those targets.
preBuild = ''
for target in ${concatStringsSep " " deptargets}; do
touch ''${target}.skip;
done
''
+ appendByAttr "preBuild" "\n" pkg;
makeFlags = "${omtarget}" + appendByAttr "makeFlags" " " pkg;
installFlags = "-i " + appendByAttr "installFlags" " " pkg;
in
stdenv.mkDerivation (
pkg
// {
inherit
omtarget
postPatch
preAutoreconf
configureFlags
configurePhase
preBuild
makeFlags
installFlags
;
src = fetchgit (import ./src-main.nix);
version = "1.18.0";
nativeBuildInputs = getAttrDef "nativeBuildInputs" [ ] pkg ++ [
autoconf
automake
libtool
cmake
autoreconfHook
];
buildInputs = getAttrDef "buildInputs" [ ] pkg ++ lib.optional ifDeps joinedDeps;
dontUseCmakeConfigure = true;
hardeningDisable = [ "format" ];
}
)