106 lines
3.1 KiB
Nix
106 lines
3.1 KiB
Nix
|
/* The package defintion for an OpenRA out-of-tree mod.
|
||
|
It shares code with `engine.nix` by what is defined in `common.nix`.
|
||
|
To build an out-of-tree mod it needs the source code of the engine available,
|
||
|
and they each need to be build with a specific version or fork of the engine,
|
||
|
so the engine needs to be supplied as an argument as well.
|
||
|
The engine is relatively small and quick to build, so this is not much of a problem.
|
||
|
Building a mod will result in a wrapper script that starts the mod inside the specified engine.
|
||
|
*/
|
||
|
{ stdenv
|
||
|
, packageAttrs
|
||
|
, patchEngine
|
||
|
, wrapLaunchGame
|
||
|
, mod
|
||
|
, engine
|
||
|
}:
|
||
|
|
||
|
with stdenv.lib;
|
||
|
|
||
|
let
|
||
|
engineSourceName = engine.src.name or "engine";
|
||
|
modSourceName = mod.src.name or "mod";
|
||
|
|
||
|
# Based on: https://build.opensuse.org/package/show/home:fusion809/openra-ura
|
||
|
in stdenv.mkDerivation (recursiveUpdate packageAttrs rec {
|
||
|
name = "${pname}-${version}";
|
||
|
pname = "openra-${mod.name}";
|
||
|
inherit (mod) version;
|
||
|
|
||
|
srcs = [
|
||
|
mod.src
|
||
|
engine.src
|
||
|
];
|
||
|
|
||
|
sourceRoot = ".";
|
||
|
|
||
|
postUnpack = ''
|
||
|
mv ${engineSourceName} ${modSourceName}
|
||
|
cd ${modSourceName}
|
||
|
'';
|
||
|
|
||
|
postPatch = ''
|
||
|
cat <<'EOF' > fetch-engine.sh
|
||
|
#!/bin/sh
|
||
|
exit 0
|
||
|
EOF
|
||
|
|
||
|
sed -i 's/^VERSION.*/VERSION = ${version}/g' Makefile
|
||
|
|
||
|
dos2unix *.md
|
||
|
|
||
|
${patchEngine engineSourceName engine.version}
|
||
|
'';
|
||
|
|
||
|
configurePhase = ''
|
||
|
runHook preConfigure
|
||
|
|
||
|
make version VERSION=${escapeShellArg version}
|
||
|
make -C ${engineSourceName} version VERSION=${escapeShellArg engine.version}
|
||
|
|
||
|
runHook postConfigure
|
||
|
'';
|
||
|
|
||
|
checkTarget = "test";
|
||
|
|
||
|
installPhase = ''
|
||
|
runHook preInstall
|
||
|
|
||
|
make -C ${engineSourceName} install-engine install-common-mod-files DATA_INSTALL_DIR=$out/lib/${pname}
|
||
|
|
||
|
cp -r ${engineSourceName}/mods/{${concatStringsSep "," ([ "common" "modcontent" ] ++ engine.mods)}} mods/* \
|
||
|
$out/lib/${pname}/mods/
|
||
|
|
||
|
substitute ${./mod-launch-game.sh} $out/lib/${pname}/launch-game.sh \
|
||
|
--subst-var out \
|
||
|
--subst-var-by name ${escapeShellArg mod.name} \
|
||
|
--subst-var-by title ${escapeShellArg mod.title} \
|
||
|
--subst-var-by assetsError ${escapeShellArg mod.assetsError}
|
||
|
chmod +x $out/lib/${pname}/launch-game.sh
|
||
|
|
||
|
${wrapLaunchGame "-${mod.name}"}
|
||
|
|
||
|
substitute ${./openra-mod.desktop} $(mkdirp $out/share/applications)/${pname}.desktop \
|
||
|
--subst-var-by name ${escapeShellArg mod.name} \
|
||
|
--subst-var-by title ${escapeShellArg mod.title} \
|
||
|
--subst-var-by description ${escapeShellArg mod.description}
|
||
|
|
||
|
cp README.md $(mkdirp $out/share/doc/packages/${pname})/README.md
|
||
|
|
||
|
[[ -e mods/${mod.name}/icon.png ]] && mod_icon=mods/${mod.name}/icon.png || {
|
||
|
[[ -e mods/${mod.name}/logo.png ]] && mod_icon=mods/${mod.name}/logo.png || mod_icon=packaging/linux/mod_256x256.png
|
||
|
}
|
||
|
cp "$mod_icon" $(mkdirp $out/share/pixmaps)/${pname}.png
|
||
|
|
||
|
for size in 16 32 48 64 128 256; do
|
||
|
size=''${size}x''${size}
|
||
|
cp packaging/linux/mod_''${size}.png $(mkdirp $out/share/icons/hicolor/''${size}/apps)/${pname}.png
|
||
|
done
|
||
|
|
||
|
runHook postInstall
|
||
|
'';
|
||
|
|
||
|
meta = {
|
||
|
inherit (mod) description homepage;
|
||
|
};
|
||
|
})
|