diff --git a/pkgs/by-name/wi/wings/package.nix b/pkgs/by-name/wi/wings/package.nix index ee8df8dea284..c6c9fb52fa5f 100644 --- a/pkgs/by-name/wi/wings/package.nix +++ b/pkgs/by-name/wi/wings/package.nix @@ -1,21 +1,48 @@ -{ lib, stdenv, fetchurl, fetchpatch, erlang, cl, libGL, libGLU, runtimeShell }: +{ + lib, + stdenv, + fetchFromGitHub, + erlang, + cl, + libGL, + libGLU, + runtimeShell, + git, + eigen, + libigl, + nix-update-script, +}: stdenv.mkDerivation rec { pname = "wings"; - version = "2.2.4"; + version = "2.4.1"; - src = fetchurl { - url = "mirror://sourceforge/wings/wings-${version}.tar.bz2"; - sha256 = "1xcmifs4vq2810pqqvsjsm8z3lz24ys4c05xkh82nyppip2s89a3"; + src = fetchFromGitHub { + owner = "dgud"; + repo = "wings"; + tag = "v${version}"; + hash = "sha256-3ulWbAOtYujaymN50u7buvnBdtYMEAe8Ji3arvPUH/s="; }; - patches = [ - (fetchpatch { - url = "https://github.com/dgud/wings/commit/94b3a3c6a0cfdcdbd98edce055d5c83ecb361f37.patch"; - hash = "sha256-DHT1TiYoowloIWrdutBu70mL+557cTFr1dRcNgwbkpE="; - }) + nativeBuildInputs = [ git ]; + buildInputs = [ + erlang + cl + libGL + libGLU + eigen + libigl + cl ]; + preBuildPhases = [ "setupDepsPhase" ]; + setupDepsPhase = '' + mkdir -p _deps/eigen _deps/libigl + ln -s ${eigen}/include/eigen3/* _deps/eigen/ + ln -s ${libigl}/include/* _deps/libigl/ + ln -s ${cl}/lib/erlang/lib/cl* _deps/cl + ''; + postPatch = '' find . -type f -name "Makefile" -exec sed -i 's,-Werror ,,' {} \; sed -i 's,../../wings/,../,' icons/Makefile @@ -25,31 +52,65 @@ stdenv.mkDerivation rec { find . -type f -name "*.[eh]rl" -exec sed -i 's,wings/src/,../src/,' {} \; find . -type f -name "*.[eh]rl" -exec sed -i 's,wings/e3d/,../e3d/,' {} \; find . -type f -name "*.[eh]rl" -exec sed -i 's,wings/intl_tools/,../intl_tools/,' {} \; + echo "${version}" > version ''; - buildInputs = [ erlang cl libGL libGLU ]; + makeFlags = [ + "TYPE=opt" + "WINGS_VSN=${version}" + ]; - ERL_LIBS = "${cl}/lib/erlang/lib"; + preBuild = '' + mkdir -p priv + ''; + + buildPhase = '' + runHook preBuild + + make TYPE=opt WINGS_VSN=${version} + cd c_src + make + cd .. + + runHook postBuild + ''; + + postBuild = '' + test -d ebin || exit 1 + test -d priv || exit 1 + ''; # I did not test the *cl* part. I added the -pa just by imitation. installPhase = '' - mkdir -p $out/bin $out/lib/wings-${version}/ebin - cp ebin/* $out/lib/wings-${version}/ebin - cp -R textures shaders plugins $out/lib/wings-${version} + runHook preInstall + + mkdir -p $out/bin $out/lib/wings-${version}/ebin $out/lib/wings-${version}/priv + cp -R ebin/* $out/lib/wings-${version}/ebin/ + cp -R textures shaders plugins $out/lib/wings-${version}/ + cp -R priv/* $out/lib/wings-${version}/priv/ || true + if [ -d c_src ]; then + find c_src -name "*.so" -exec cp {} $out/lib/wings-${version}/priv/ \; + fi cat << EOF > $out/bin/wings #!${runtimeShell} ${erlang}/bin/erl \ -pa $out/lib/wings-${version}/ebin -run wings_start start_halt "$@" EOF chmod +x $out/bin/wings + + runHook postInstall ''; + passthru = { + updateScript = nix-update-script { }; + }; + meta = { homepage = "https://www.wings3d.com/"; description = "Subdivision modeler inspired by Nendo and Mirai from Izware"; license = lib.licenses.tcltk; - maintainers = [ ]; - platforms = with lib.platforms; linux; + maintainers = with lib.maintainers; [ ]; + platforms = lib.platforms.linux; mainProgram = "wings"; }; }