nixpkgs/pkgs/by-name/bl/blendfarm/package.nix

128 lines
3.3 KiB
Nix

{
lib,
stdenv,
fetchFromGitHub,
buildDotnetModule,
dotnetCorePackages,
xz,
pcre,
autoPatchelfHook,
bintools,
fixDarwinDylibNames,
darwin,
fontconfig,
libgdiplus,
libXrandr,
glib,
writeShellScriptBin,
blender,
openssl,
libkrb5,
icu,
}:
let
# blendfarm (client) will run from the current workdir.
# It needs to create files there, so it cannot be in the nix store.
# We also need to create some files there so it can work with its
# server part.
USERHOMEDIR = "~/.local/share/blendfarm";
blendfarm-nix = writeShellScriptBin "blendfarm-nix" ''
if [[ -z $BLENDFARM_HOME && ! -d ${USERHOMEDIR} ]]; then
echo "Creating home for blendfarm at ${USERHOMEDIR}"
echo "You can change that by setting BLENDFARM_HOME to another directory"
fi
if [[ -z $BLENDFARM_HOME ]]; then
BLENDFARM_HOME=${USERHOMEDIR}
fi
mkdir -p $BLENDFARM_HOME/BlenderData/nix-blender-linux64 > /dev/null 2>&1
ln -s ${lib.getExe blender} $BLENDFARM_HOME/BlenderData/nix-blender-linux64/blender > /dev/null 2>&1
echo "nix-blender" > $BLENDFARM_HOME/VersionCustom
cd $BLENDFARM_HOME
exec -a "$0" @out@/bin/LogicReinc.BlendFarm "$@"
'';
in
buildDotnetModule rec {
pname = "blendfarm";
version = "1.1.6";
src = fetchFromGitHub {
owner = "LogicReinc";
repo = "LogicReinc.BlendFarm";
rev = "v${version}";
hash = "sha256-2w2tdl5n0IFTuthY97NYMeyRe2r72jaKFfoNSjWQMM4=";
};
nativeBuildInputs =
[ ]
++ lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ]
++ lib.optionals stdenv.hostPlatform.isDarwin [
bintools
fixDarwinDylibNames
darwin.autoSignDarwinBinariesHook
];
buildInputs = [
stdenv.cc.cc.lib
fontconfig
openssl
libkrb5
icu
];
runtimeDeps = [
xz
pcre
libgdiplus
glib
libXrandr
] ++ lib.optionals stdenv.hostPlatform.isLinux [ blender ];
# there is no "*.so.3" or "*.so.5" in nixpkgs. So ignore the warning
# and add it later
autoPatchelfIgnoreMissingDeps = [
"libpcre.so.3"
"liblzma.so.5"
];
dotnet-sdk = dotnetCorePackages.sdk_6_0;
dotnet-runtime = dotnetCorePackages.runtime_6_0;
projectFile = [
"LogicReinc.BlendFarm.Client/LogicReinc.BlendFarm.Client.csproj"
"LogicReinc.BlendFarm.Server/LogicReinc.BlendFarm.Server.csproj"
"LogicReinc.BlendFarm/LogicReinc.BlendFarm.csproj"
];
nugetDeps = ./deps.nix;
executables = [
"LogicReinc.BlendFarm"
"LogicReinc.BlendFarm.Server"
];
# add libraries not found by autopatchelf
libPath = lib.makeLibraryPath [
pcre
xz
];
makeWrapperArgs = [ "--prefix LD_LIBRARY_PATH : ${libPath}" ];
postInstall =
lib.optionalString stdenv.hostPlatform.isLinux ''
mkdir -p $out/bin
cp -v ${blendfarm-nix}/bin/blendfarm-nix $out/bin
substituteInPlace $out/bin/blendfarm-nix --subst-var out
''
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
ln -s ${libgdiplus}/lib/libgdiplus.dylib $out/lib/blendfarm/
'';
meta = with lib; {
description = "A open-source, cross-platform, stand-alone, Network Renderer for Blender";
homepage = "https://github.com/LogicReinc/LogicReinc.BlendFarm";
license = with licenses; [ gpl3Plus ];
maintainers = with maintainers; [ gador ];
mainProgram = "blendfarm-nix";
platforms = platforms.unix;
};
}