129 lines
3.3 KiB
Nix
129 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;
|
||
|
};
|
||
|
}
|