1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 erlang,
6 cl,
7 libGL,
8 libGLU,
9 runtimeShell,
10 git,
11 eigen,
12 libigl,
13 nix-update-script,
14}:
15
16stdenv.mkDerivation rec {
17 pname = "wings";
18 version = "2.4.1";
19
20 src = fetchFromGitHub {
21 owner = "dgud";
22 repo = "wings";
23 tag = "v${version}";
24 hash = "sha256-3ulWbAOtYujaymN50u7buvnBdtYMEAe8Ji3arvPUH/s=";
25 };
26
27 nativeBuildInputs = [ git ];
28 buildInputs = [
29 erlang
30 cl
31 libGL
32 libGLU
33 eigen
34 libigl
35 cl
36 ];
37
38 preBuildPhases = [ "setupDepsPhase" ];
39 setupDepsPhase = ''
40 mkdir -p _deps/eigen _deps/libigl
41 ln -s ${eigen}/include/eigen3/* _deps/eigen/
42 ln -s ${libigl}/include/* _deps/libigl/
43 ln -s ${cl}/lib/erlang/lib/cl* _deps/cl
44 '';
45
46 postPatch = ''
47 find . -type f -name "Makefile" -exec sed -i 's,-Werror ,,' {} \;
48 sed -i 's,../../wings/,../,' icons/Makefile
49 find plugins_src -mindepth 2 -type f -name "*.[eh]rl" -exec sed -i 's,wings/src/,../../src/,' {} \;
50 find plugins_src -mindepth 2 -type f -name "*.[eh]rl" -exec sed -i 's,wings/e3d/,../../e3d/,' {} \;
51 find plugins_src -mindepth 2 -type f -name "*.[eh]rl" -exec sed -i 's,wings/intl_tools/,../../intl_tools/,' {} \;
52 find . -type f -name "*.[eh]rl" -exec sed -i 's,wings/src/,../src/,' {} \;
53 find . -type f -name "*.[eh]rl" -exec sed -i 's,wings/e3d/,../e3d/,' {} \;
54 find . -type f -name "*.[eh]rl" -exec sed -i 's,wings/intl_tools/,../intl_tools/,' {} \;
55 echo "${version}" > version
56 '';
57
58 makeFlags = [
59 "TYPE=opt"
60 "WINGS_VSN=${version}"
61 ];
62
63 preBuild = ''
64 mkdir -p priv
65 '';
66
67 buildPhase = ''
68 runHook preBuild
69
70 make TYPE=opt WINGS_VSN=${version}
71 cd c_src
72 make
73 cd ..
74
75 runHook postBuild
76 '';
77
78 postBuild = ''
79 test -d ebin || exit 1
80 test -d priv || exit 1
81 '';
82
83 # I did not test the *cl* part. I added the -pa just by imitation.
84 installPhase = ''
85 runHook preInstall
86
87 mkdir -p $out/bin $out/lib/wings-${version}/ebin $out/lib/wings-${version}/priv
88 cp -R ebin/* $out/lib/wings-${version}/ebin/
89 cp -R textures shaders plugins $out/lib/wings-${version}/
90 cp -R priv/* $out/lib/wings-${version}/priv/ || true
91 if [ -d c_src ]; then
92 find c_src -name "*.so" -exec cp {} $out/lib/wings-${version}/priv/ \;
93 fi
94 cat << EOF > $out/bin/wings
95 #!${runtimeShell}
96 ${erlang}/bin/erl \
97 -pa $out/lib/wings-${version}/ebin -run wings_start start_halt "$@"
98 EOF
99 chmod +x $out/bin/wings
100
101 runHook postInstall
102 '';
103
104 passthru = {
105 updateScript = nix-update-script { };
106 };
107
108 meta = {
109 homepage = "https://www.wings3d.com/";
110 description = "Subdivision modeler inspired by Nendo and Mirai from Izware";
111 license = lib.licenses.tcltk;
112 maintainers = with lib.maintainers; [ ];
113 platforms = lib.platforms.linux;
114 mainProgram = "wings";
115 };
116}