Nix expr: refactor
This commit is contained in:
parent
0ad79c2cc2
commit
655038f68e
|
@ -0,0 +1,92 @@
|
|||
{ lib
|
||||
# infrastructure
|
||||
, commentUnless
|
||||
, versionAtLeast
|
||||
, writeShellScriptBin
|
||||
, writeText
|
||||
# rundeps
|
||||
, mesa
|
||||
, mono
|
||||
, openal
|
||||
# other parameters
|
||||
, debugPInvokes
|
||||
, hawkVersion
|
||||
, initConfig # pretend this is JSON; the following env. vars will be substituted by the wrapper script (if surrounded by double-percent e.g. `%%BIZHAWK_DATA_HOME%%`): `BIZHAWK_DATA_HOME`
|
||||
}:
|
||||
let
|
||||
initConfigFile = writeText "config.json" (builtins.toJSON ({
|
||||
LastWrittenFrom = if builtins.length (builtins.splitVersion hawkVersion) < 3 then "${hawkVersion}.0" else hawkVersion;
|
||||
PathEntries = {
|
||||
Paths = [
|
||||
({ "System" = "Global_NULL"; Type = "Base"; Path = "%%BIZHAWK_DATA_HOME%%"; } // lib.optionalAttrs (!versionAtLeast "2.7.1" hawkVersion) { "Ordinal" = 1; })
|
||||
];
|
||||
};
|
||||
} // initConfig));
|
||||
in rec {
|
||||
wrapperScript = writeShellScriptBin "emuhawk-wrapper" ''
|
||||
set -e
|
||||
|
||||
if [ ! -e "$BIZHAWK_HOME/EmuHawk.exe" ]; then
|
||||
printf "no such file: %s\n" "$BIZHAWK_HOME/EmuHawk.exe"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$XDG_DATA_HOME" ]; then
|
||||
BIZHAWK_DATA_HOME="$XDG_DATA_HOME"
|
||||
else
|
||||
BIZHAWK_DATA_HOME="$HOME/.local/share"
|
||||
fi
|
||||
BIZHAWK_DATA_HOME="$BIZHAWK_DATA_HOME/emuhawk-monort-${hawkVersion}"
|
||||
mkdir -p "$BIZHAWK_DATA_HOME"
|
||||
cd "$BIZHAWK_DATA_HOME"
|
||||
|
||||
if [ ! -e config.json ]; then
|
||||
cat ${initConfigFile} >config.json # cp kept the perms as 444 -- don't @ me
|
||||
sed -i "s@%%BIZHAWK_DATA_HOME%%@$BIZHAWK_DATA_HOME@g" config.json
|
||||
fi
|
||||
|
||||
export LD_LIBRARY_PATH=$BIZHAWK_HOME/dll:$BIZHAWK_GLHACKDIR:${lib.makeLibraryPath [ openal ]}
|
||||
${commentUnless debugPInvokes}MONO_LOG_LEVEL=debug MONO_LOG_MASK=dll
|
||||
if [ "$1" = "--mono-no-redirect" ]; then
|
||||
shift
|
||||
printf "(received --mono-no-redirect, stdout was not captured)\n" >EmuHawkMono_laststdout.txt
|
||||
exec ${mono}/bin/mono $BIZHAWK_HOME/EmuHawk.exe --config=config.json "$@"
|
||||
else
|
||||
exec ${mono}/bin/mono $BIZHAWK_HOME/EmuHawk.exe --config=config.json "$@" >EmuHawkMono_laststdout.txt
|
||||
fi
|
||||
'';
|
||||
wrapperScriptNonNixOS = writeShellScriptBin "emuhawk-wrapper-non-nixos" ''
|
||||
set -e
|
||||
|
||||
if [ "$XDG_STATE_HOME" ]; then
|
||||
BIZHAWK_GLHACKDIR="$XDG_STATE_HOME"
|
||||
else
|
||||
BIZHAWK_GLHACKDIR="$HOME/.local/state"
|
||||
fi
|
||||
export BIZHAWK_GLHACKDIR="$BIZHAWK_GLHACKDIR/emuhawk-monort-${hawkVersion}-non-nixos"
|
||||
mkdir -p "$BIZHAWK_GLHACKDIR"
|
||||
if [ ! -e "$BIZHAWK_GLHACKDIR/libGLX_indirect.so.0" ]; then
|
||||
ln -fsvT "${lib.getOutput "drivers" mesa}/lib/libGLX_mesa.so.0" "$BIZHAWK_GLHACKDIR/libGLX_indirect.so.0"
|
||||
fi
|
||||
# collect links to certain GL libs (and their deps) from host, added to LD_LIBRARY_PATH without polluting it with all libs from host
|
||||
for l in libbsd.so.0 libdrm_amdgpu.so.1 libdrm_nouveau.so.2 libdrm_radeon.so.1 libedit.so.0 libedit.so.2 libelf.so.1 libffi.so.7 libGLdispatch.so.0 libicudata.so.69 libicuuc.so.69 libLLVM-11.so libLLVM-12.so.1 liblzma.so.5 libncursesw.so.6 libsensors.so.5 libstdc++.so.6 libtinfo.so.6 libvulkan.so.1 libxml2.so.2 libz.so.1 libzstd.so.1; do
|
||||
if [ -e "$BIZHAWK_GLHACKDIR/$l" ]; then continue; fi
|
||||
# else it's either a broken link or it doesn't exist, we use ln -f to cover both
|
||||
for d in /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib64 /lib /lib64; do
|
||||
if [ -e "$d/$l" ]; then
|
||||
ln -fsvT "$d/$l" "$BIZHAWK_GLHACKDIR/$l"
|
||||
break
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
for d in /usr/lib/dri /usr/lib/x86_64-linux-gnu/dri; do
|
||||
if [ -e "$d" ]; then
|
||||
export LIBGL_DRIVERS_PATH=$d
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
exec ${wrapperScript}/bin/emuhawk-wrapper "$@"
|
||||
'';
|
||||
}
|
100
default.nix
100
default.nix
|
@ -2,14 +2,11 @@
|
|||
|
||||
{ pkgs ? import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/2fa862644fc15ecb525eb8cd0a60276f1c340c7c.tar.gz") {}
|
||||
# infrastructure
|
||||
, lib ? pkgs.lib
|
||||
, stdenv ? pkgs.stdenvNoCC
|
||||
, buildDotnetModule ? pkgs.buildDotnetModule
|
||||
, fetchFromGitHub ? pkgs.fetchFromGitHub
|
||||
#, makeDesktopItem ? pkgs.makeDesktopItem
|
||||
, makeWrapper ? pkgs.makeWrapper
|
||||
, writeShellScriptBin ? pkgs.writeShellScriptBin
|
||||
, writeText ? pkgs.writeText
|
||||
# source
|
||||
, useCWDAsSource ? false
|
||||
, hawkVersion ? if useCWDAsSource then "2.7.1-local" else "2.7" # used to distinguish parallel installs' config and other data
|
||||
|
@ -25,7 +22,7 @@
|
|||
owner = "TASEmulators";
|
||||
repo = "BizHawk";
|
||||
rev = "dbaf2595625f79093eeec37d2d4a7a9a4d37f370";
|
||||
hash = "sha256-2M9+p5NYCJQlItcyLxU7bY6JC5/lacM5jfZoILGkHrU=";
|
||||
hash = "sha256-AQhnBy8lSiuFqA6I7lk6M1u3osAJEoEMELGDgGC/aII="; # changes randomly? maybe when submodules are changed? --yoshi
|
||||
leaveDotGit = true;
|
||||
}
|
||||
# makedeps
|
||||
|
@ -40,19 +37,20 @@
|
|||
, uname ? stdenv
|
||||
# other parameters
|
||||
, buildConfig ? "Release" # "Debug"/"Release"
|
||||
, debugPInvokes ? false
|
||||
, debugPInvokes ? false # forwarded to Dist/wrapper-scripts.nix
|
||||
, doCheck ? false # runs `Dist/BuildTest${buildConfig}.sh`
|
||||
, forNixOS ? false
|
||||
, initConfig ? {} # pretend this is JSON; the following env. vars will be substituted by the wrapper script (if surrounded by double-percent e.g. `%%BIZHAWK_DATA_HOME%%`): `BIZHAWK_DATA_HOME`
|
||||
, initConfig ? {} # forwarded to Dist/wrapper-scripts.nix (see docs there)
|
||||
}:
|
||||
let
|
||||
lib = pkgs.lib;
|
||||
commentUnless = b: lib.optionalString (!b) "# ";
|
||||
versionAtLeast = reqVer: drv: builtins.compareVersions reqVer drv.version <= 0;
|
||||
versionAtLeast = exVer: acVer: builtins.compareVersions exVer acVer <= 0;
|
||||
monoFinal = if mono != null
|
||||
then mono
|
||||
else if versionAtLeast "6.12.0.151" pkgs.mono
|
||||
else if versionAtLeast "6.12.0.151" pkgs.mono.version
|
||||
then pkgs.mono
|
||||
else pkgs.callPackage ./mono-6.12.0.151.nix {};
|
||||
else pkgs.callPackage Dist/mono-6.12.0.151.nix {}; # not actually reproducible :( https://github.com/NixOS/nixpkgs/issues/143110#issuecomment-984251253
|
||||
bizhawk = buildDotnetModule rec {
|
||||
pname = "BizHawk";
|
||||
version = hawkVersion;
|
||||
|
@ -60,7 +58,7 @@ let
|
|||
nativeBuildInputs = [ git p7zip ];
|
||||
buildInputs = [ mesa monoFinal openal uname ];# ++ lib.optionals (forNixOS) [ gtk2-x11 ];
|
||||
projectFile = "BizHawk.sln";
|
||||
nugetDeps = ./deps.nix;
|
||||
nugetDeps = Dist/deps.nix;
|
||||
extraDotnetBuildFlags = "-maxcpucount:$NIX_BUILD_CORES -p:BuildInParallel=true --no-restore";
|
||||
buildPhase = ''
|
||||
${commentUnless useCWDAsSource}cd src/BizHawk.Version
|
||||
|
@ -86,80 +84,11 @@ let
|
|||
'';
|
||||
dontPatchELF = true;
|
||||
};
|
||||
initConfigFile = writeText "config.json" (builtins.toJSON ({
|
||||
LastWrittenFrom = if builtins.length (builtins.splitVersion hawkVersion) < 3 then "${hawkVersion}.0" else hawkVersion;
|
||||
PathEntries = {
|
||||
Paths = [
|
||||
({ "System" = "Global_NULL"; Type = "Base"; Path = "%%BIZHAWK_DATA_HOME%%"; } // lib.optionalAttrs (!versionAtLeast "2.7.1" bizhawk) { "Ordinal" = 1; })
|
||||
];
|
||||
};
|
||||
} // initConfig));
|
||||
wrapperScript = writeShellScriptBin "emuhawk-wrapper" ''
|
||||
set -e
|
||||
|
||||
if [ ! -e "$BIZHAWK_HOME/EmuHawk.exe" ]; then
|
||||
printf "no such file: %s\n" "$BIZHAWK_HOME/EmuHawk.exe"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$XDG_DATA_HOME" ]; then
|
||||
BIZHAWK_DATA_HOME="$XDG_DATA_HOME"
|
||||
else
|
||||
BIZHAWK_DATA_HOME="$HOME/.local/share"
|
||||
fi
|
||||
BIZHAWK_DATA_HOME="$BIZHAWK_DATA_HOME/emuhawk-monort-${hawkVersion}"
|
||||
mkdir -p "$BIZHAWK_DATA_HOME"
|
||||
cd "$BIZHAWK_DATA_HOME"
|
||||
|
||||
if [ ! -e config.json ]; then
|
||||
cat ${initConfigFile} >config.json # cp kept the perms as 444 -- don't @ me
|
||||
sed -i "s@%%BIZHAWK_DATA_HOME%%@$BIZHAWK_DATA_HOME@g" config.json
|
||||
fi
|
||||
|
||||
export LD_LIBRARY_PATH=$BIZHAWK_HOME/dll:$BIZHAWK_GLHACKDIR:${lib.makeLibraryPath [ openal ]}
|
||||
${commentUnless debugPInvokes}MONO_LOG_LEVEL=debug MONO_LOG_MASK=dll
|
||||
if [ "$1" = "--mono-no-redirect" ]; then
|
||||
shift
|
||||
printf "(received --mono-no-redirect, stdout was not captured)\n" >EmuHawkMono_laststdout.txt
|
||||
exec ${monoFinal}/bin/mono $BIZHAWK_HOME/EmuHawk.exe --config=config.json "$@"
|
||||
else
|
||||
exec ${monoFinal}/bin/mono $BIZHAWK_HOME/EmuHawk.exe --config=config.json "$@" >EmuHawkMono_laststdout.txt
|
||||
fi
|
||||
'';
|
||||
wrapperScriptNonNixOS = writeShellScriptBin "emuhawk-wrapper-non-nixos" ''
|
||||
set -e
|
||||
|
||||
if [ "$XDG_STATE_HOME" ]; then
|
||||
BIZHAWK_GLHACKDIR="$XDG_STATE_HOME"
|
||||
else
|
||||
BIZHAWK_GLHACKDIR="$HOME/.local/state"
|
||||
fi
|
||||
export BIZHAWK_GLHACKDIR="$BIZHAWK_GLHACKDIR/emuhawk-monort-${hawkVersion}-non-nixos"
|
||||
mkdir -p "$BIZHAWK_GLHACKDIR"
|
||||
if [ ! -e "$BIZHAWK_GLHACKDIR/libGLX_indirect.so.0" ]; then
|
||||
ln -fsvT "${lib.getOutput "drivers" mesa}/lib/libGLX_mesa.so.0" "$BIZHAWK_GLHACKDIR/libGLX_indirect.so.0"
|
||||
fi
|
||||
# collect links to certain GL libs (and their deps) from host, added to LD_LIBRARY_PATH without polluting it with all libs from host
|
||||
for l in libbsd.so.0 libdrm_amdgpu.so.1 libdrm_nouveau.so.2 libdrm_radeon.so.1 libedit.so.0 libedit.so.2 libelf.so.1 libffi.so.7 libGLdispatch.so.0 libicudata.so.69 libicuuc.so.69 libLLVM-11.so libLLVM-12.so.1 liblzma.so.5 libncursesw.so.6 libsensors.so.5 libstdc++.so.6 libtinfo.so.6 libvulkan.so.1 libxml2.so.2 libz.so.1 libzstd.so.1; do
|
||||
if [ -e "$BIZHAWK_GLHACKDIR/$l" ]; then continue; fi
|
||||
# else it's either a broken link or it doesn't exist, we use ln -f to cover both
|
||||
for d in /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib64 /lib /lib64; do
|
||||
if [ -e "$d/$l" ]; then
|
||||
ln -fsvT "$d/$l" "$BIZHAWK_GLHACKDIR/$l"
|
||||
break
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
for d in /usr/lib/dri /usr/lib/x86_64-linux-gnu/dri; do
|
||||
if [ -e "$d" ]; then
|
||||
export LIBGL_DRIVERS_PATH=$d
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
exec ${wrapperScript}/bin/emuhawk-wrapper "$@"
|
||||
'';
|
||||
wrapperScripts = import Dist/wrapper-scripts.nix {
|
||||
inherit (pkgs) lib writeShellScriptBin writeText;
|
||||
inherit commentUnless versionAtLeast mesa openal debugPInvokes hawkVersion initConfig;
|
||||
mono = monoFinal;
|
||||
};
|
||||
in {
|
||||
bizhawkAssemblies = bizhawk;
|
||||
emuhawk = stdenv.mkDerivation rec {
|
||||
|
@ -174,7 +103,7 @@ in {
|
|||
dontBuild = true;
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
makeWrapper ${if forNixOS then "${wrapperScript}/bin/emuhawk-wrapper" else "${wrapperScriptNonNixOS}/bin/emuhawk-wrapper-non-nixos"} $out/bin/${pname}-${version} \
|
||||
makeWrapper ${if forNixOS then "${wrapperScripts.wrapperScript}/bin/emuhawk-wrapper" else "${wrapperScripts.wrapperScriptNonNixOS}/bin/emuhawk-wrapper-non-nixos"} $out/bin/${pname}-${version} \
|
||||
--set BIZHAWK_HOME ${bizhawk}
|
||||
'';
|
||||
dontFixup = true;
|
||||
|
@ -184,5 +113,6 @@ in {
|
|||
# desktopName = "EmuHawk (Mono Runtime)"; # actually Name
|
||||
# }) ];
|
||||
};
|
||||
emuhawkWrapperScriptNonNixOS = wrapperScripts.wrapperScriptNonNixOS;
|
||||
mono = monoFinal;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue