1{
2 stdenv,
3 buildEnv,
4 lib,
5 libGL,
6 ioquake3,
7 makeWrapper,
8}:
9
10{
11 paks,
12 pname ? (lib.head paks).pname,
13 version ? (lib.head paks).version,
14 description ? "",
15}:
16
17let
18 libPath = lib.makeLibraryPath [
19 libGL
20 stdenv.cc.cc
21 ];
22 env = buildEnv {
23 name = "quake3-env";
24 paths = [ ioquake3 ] ++ paks;
25 };
26
27in
28stdenv.mkDerivation {
29 pname = "${pname}-${ioquake3.name}";
30 inherit version;
31
32 nativeBuildInputs = [ makeWrapper ];
33
34 buildCommand =
35 let
36 setBasepath = "+set fs_basepath ${env}";
37 in
38 lib.optionalString stdenv.hostPlatform.isLinux ''
39 mkdir -p $out/bin
40
41 # We add Mesa to the end of $LD_LIBRARY_PATH to provide fallback
42 # software rendering. GCC is needed so that libgcc_s.so can be found
43 # when Mesa is used.
44 makeWrapper ${env}/bin/ioquake3 $out/bin/${pname} \
45 --suffix-each LD_LIBRARY_PATH ':' "${libPath}" \
46 --add-flags "${setBasepath} +set r_allowSoftwareGL 1"
47
48 makeWrapper ${env}/bin/ioq3ded $out/bin/${pname}-server \
49 --add-flags "${setBasepath}"
50 ''
51 + lib.optionalString stdenv.hostPlatform.isDarwin ''
52 mkdir -p $out/Applications $out/bin
53 makeWrapper ${env}/bin/ioquake3 $out/bin/${pname} \
54 --add-flags "${setBasepath}"
55 makeWrapper ${env}/bin/ioq3ded $out/bin/${pname}-server \
56 --add-flags "${setBasepath}"
57
58 cp -RL ${env}/Applications/ioquake3.app/ $out/Applications/${pname}.app
59 chmod -R +w $out/Applications/
60
61 wrapProgram $out/Applications/${pname}.app/Contents/MacOS/ioquake3 \
62 --add-flags "${setBasepath}"
63 wrapProgram $out/Applications/${pname}.app/Contents/MacOS/ioq3ded \
64 --add-flags "${setBasepath}"
65 '';
66
67 meta = {
68 mainProgram = "${pname}";
69 inherit ((lib.head paks).meta)
70 description
71 longDescription
72 homepage
73 license
74 ;
75 inherit (ioquake3.meta) platforms;
76 };
77}