From dada959cfa9ef7cc44b5c873c3f6d0ec0f2bcaff Mon Sep 17 00:00:00 2001 From: James Groom Date: Tue, 21 Nov 2023 04:15:37 +0000 Subject: [PATCH] Nix expr: Add binary releases back to 2.3.2, some cleanup --- Dist/historical.nix | 137 +++++++++++++++++++++++++++-------- Dist/launch-scripts.nix | 3 +- Dist/nix_expr_check_attrs.sh | 3 +- Dist/nix_expr_usage_docs.md | 8 ++ Dist/packages-managed.nix | 2 +- Dist/packages.nix | 19 +++-- default.nix | 28 ++++--- 7 files changed, 150 insertions(+), 50 deletions(-) diff --git a/Dist/historical.nix b/Dist/historical.nix index 62691e23eb..ba1273fc65 100644 --- a/Dist/historical.nix +++ b/Dist/historical.nix @@ -1,6 +1,6 @@ { lib # infrastructure -, drvVersionAtLeast +, isVersionAtLeast , replaceDotWithUnderscore , fetchFromGitHub , fetchFromGitLab @@ -13,14 +13,17 @@ * updating? make sure to hit the rest of this file, the hand-written deps `/Dist/deps-historical.nix`, * the shell script for CI `/Dist/nix_expr_check_attrs.sh`, and the docs `/Dist/nix_expr_usage_docs.md` */ - releases = [ "2.9.1" "2.9" "2.8" "2.7" "2.6.3" "2.6.2" "2.6.1" "2.6" ]; + releases = [ + "2.9.1" "2.9" "2.8" "2.7" "2.6.3" "2.6.2" "2.6.1" "2.6" + "2.5.2" "2.5.1" "2.5" "2.4.2" "2.4.1" "2.4" "2.3.3" "2.3.2" + ]; releaseCount = lib.length releases; releaseFrags = builtins.map replaceDotWithUnderscore releases; releaseOffsetLookup = lib.listToAttrs (lib.imap0 (lib.flip lib.nameValuePair) releaseFrags); depsForHistoricalRelease = releaseFrag: fetchNuGet: let file = import ./deps-historical.nix; - windows = (builtins.map (s: file."since-${s}") releaseFrags) ++ (builtins.map (s: file."until-${s}") releaseFrags); - extras = builtins.map (s: file."only-${s}") releaseFrags; + windows = builtins.map (s: file."since-${s}" or []) releaseFrags ++ builtins.map (s: file."until-${s}" or []) releaseFrags; + extras = builtins.map (s: file."only-${s}" or []) releaseFrags; i = releaseOffsetLookup.${releaseFrag}; in builtins.map fetchNuGet (lib.elemAt extras i ++ lib.concatLists (lib.sublist i releaseCount windows)); releaseTagSourceInfos = let @@ -36,11 +39,10 @@ }; in (lib.optionalAttrs (dotnet-sdk != null) { inherit dotnet-sdk; }) // { inherit shortHash version; - branch = "master"; - drv = fetchFromGitHub (fetcherArgs // { owner = "TASEmulators"; }); + src = fetchFromGitHub (fetcherArgs // { owner = "TASEmulators"; }); #TODO can use `srcs` w/ `buildDotnetModule`? # verified hashes match for 2.7 through 2.9, but 2.9.1 rev (745efb1dd) was missing (force-push nonsense IIRC) - drv1 = fetchFromGitLab (fetcherArgs // { owner = "TASVideos"; }); + src1 = fetchFromGitLab (fetcherArgs // { owner = "TASVideos"; }); nugetDeps = let releaseFrag = replaceDotWithUnderscore version; in mkNugetDeps { @@ -138,6 +140,47 @@ hashPostPatching = "sha256-kswmNENYxumQlJdUKRQcb5Ni5+aXUqKxEnJ8jX5OHQ0="; dotnet-sdk = dotnet-sdk_5; }; + # if you want to get these building from source, start by changing `releasesEmuHawkInstallables` in `default.nix` so the attrs are actually exposed + info-2_5_2 = { + version = "2.5.2"; + rev = "21a476200e76ef815d2bb66dffc167f9720a4eb9"; + hashPostPatching = ""; + }; + info-2_5_1 = { + version = "2.5.1"; + rev = "f104807193bd5a4bffdd67d52967ab844038775e"; + hashPostPatching = ""; + }; + info-2_5 = { + version = "2.5"; + rev = "5b93ef14dc613417eb937c1f793dd2dfb851d717"; + hashPostPatching = ""; + }; + info-2_4_2 = { + version = "2.4.2"; + rev = "546ccda9189e346840909350eca8b1fdcadad081"; + hashPostPatching = ""; + }; + info-2_4_1 = { + version = "2.4.1"; + rev = "60a1ddea5e4775f3be4bd417d53cacf0eba978c4"; + hashPostPatching = ""; + }; + info-2_4 = { + version = "2.4"; + rev = "16f5da9f9c2e57ac7a8bb70b2028e3a9501127b8"; + hashPostPatching = ""; + }; + info-2_3_3 = { + version = "2.3.3"; + rev = "c330541c35e97c66df31d1616a69927cf65bf318"; + hashPostPatching = ""; + }; + info-2_3_2 = { + version = "2.3.2"; + rev = "92847b1d1d534108143cfbff1e266036332c0573"; + hashPostPatching = ""; + }; }; in { inherit depsForHistoricalRelease releaseFrags releaseTagSourceInfos; @@ -145,40 +188,51 @@ in { populateHawkSourceInfo = hawkSourceInfo: let inherit (hawkSourceInfo) version; neededExtraManagedDepsApprox = [ "virtu" ] - ++ lib.optionals (drvVersionAtLeast "2.6" version) [ "hawkQuantizer" "isoParser" ] - ++ lib.optionals (drvVersionAtLeast "2.6.2" version) [ "flatBuffersGenOutput" "srcGenReflectionCache" ] - ++ lib.optionals (!drvVersionAtLeast "2.9" version) [ "flatBuffersCore" "gongShell" ] - ++ lib.optionals (drvVersionAtLeast "2.9" version) [ "bizhawkAnalyzer" "nlua" ] - ++ lib.optional (drvVersionAtLeast "2.9.1" version) "srcGenVersionInfo" - ++ lib.optionals (!drvVersionAtLeast "2.9.2" version) [ "slimDX" "systemDataSqliteDropIn" ] - ++ lib.optional (drvVersionAtLeast "2.9.2" version) "srcGenSettingsUtil" + ++ lib.optionals (isVersionAtLeast "2.6" version) [ "hawkQuantizer" "isoParser" ] + ++ lib.optionals (isVersionAtLeast "2.6.2" version) [ "flatBuffersGenOutput" "srcGenReflectionCache" ] + ++ lib.optionals (!isVersionAtLeast "2.9" version) [ "flatBuffersCore" "gongShell" ] + ++ lib.optionals (isVersionAtLeast "2.9" version) [ "bizhawkAnalyzer" "nlua" ] + ++ lib.optional (isVersionAtLeast "2.9.1" version) "srcGenVersionInfo" + ++ lib.optionals (!isVersionAtLeast "2.9.2" version) [ "slimDX" "systemDataSqliteDropIn" ] + ++ lib.optional (isVersionAtLeast "2.9.2" version) "srcGenSettingsUtil" ; in { inherit neededExtraManagedDepsApprox; __contentAddressed = false; #TODO try w/ CA - copyingAssetsInEmuHawkProj = drvVersionAtLeast "2.6.3" version; + copyingAssetsInEmuHawkProj = isVersionAtLeast "2.6.3" version; dotnet-sdk = dotnet-sdk_6; - exePathRespectsEnvVar = drvVersionAtLeast "2.9.2" version; - hasAssetsInOutput = !drvVersionAtLeast "2.6.1" version; - hasFFmpegPatch_e68a49aa5 = drvVersionAtLeast "2.9.2" version; # with e68a49aa5, downloading *and running* FFmpeg finally works; TODO use FFmpeg from Nixpkgs since it's a stable version (4.4.1) - hasMiscTypeCheckerPatch_6afb3be98 = drvVersionAtLeast "2.6.2" version; + exePathRespectsEnvVar = isVersionAtLeast "2.9.2" version; + hasAssemblyResolveHandler = isVersionAtLeast "2.3.3" version; + hasAssetsInOutput = !isVersionAtLeast "2.6.1" version; + hasFFmpegPatch_e68a49aa5 = isVersionAtLeast "2.9.2" version; # with e68a49aa5, downloading *and running* FFmpeg finally works; TODO use FFmpeg from Nixpkgs since it's a stable version (4.4.1) + hasMiscTypeCheckerPatch_6afb3be98 = isVersionAtLeast "2.6.2" version; neededExtraManagedDeps = neededExtraManagedDepsApprox; - needsSDL = drvVersionAtLeast "2.9.2" version; + needsSDL = isVersionAtLeast "2.9.2" version; nugetDeps = ./deps.nix; - packageScriptNeeds7Zip = !drvVersionAtLeast "2.6.3" version; - packageScriptRemovesWinFilesFromLinux = drvVersionAtLeast "2.9.2" version; - pathConfigNeedsOrdinal = !drvVersionAtLeast "2.7.1" version; + packageScriptNeeds7Zip = !isVersionAtLeast "2.6.3" version; + packageScriptRemovesWinFilesFromLinux = isVersionAtLeast "2.9.2" version; + pathConfigNeedsOrdinal = !isVersionAtLeast "2.7.1" version; releaseArtifactHasRogueOTKAsmConfig = version == "2.9.1"; - versionProjNeedsDoubleBuild = !drvVersionAtLeast "2.9.1" version; + releaseArtifactNeedsLowercaseAsms = !isVersionAtLeast "2.3.3" version; + releaseArtifactNeedsOTKAsmConfig = isVersionAtLeast "2.3.3" version && !isVersionAtLeast "2.5" version; # see a1b501fe5 + releaseArtifactNeedsVBDotnetReference = !isVersionAtLeast "2.5.1" version; + versionProjNeedsDoubleBuild = !isVersionAtLeast "2.9.1" version; #TODO warn about missing/broken features when eval'ing older releases } // hawkSourceInfo; /** to be passed to `splitReleaseArtifact` */ releaseArtifactInfos = lib.mapAttrs' (releaseFrag: value: { name = "bizhawkAssemblies-${releaseFrag}-bin"; - value = { - hawkSourceInfo = releaseTagSourceInfos."info-${releaseFrag}" // { branch = "release"; } // value.hawkSourceInfo or {}; - } // value; + value = let + hawkSourceInfo = releaseTagSourceInfos."info-${releaseFrag}" // value.hawkSourceInfo or {}; + in { + inherit hawkSourceInfo; + ${if isVersionAtLeast "2.6" hawkSourceInfo.version + then if isVersionAtLeast "2.6.3" hawkSourceInfo.version + then null + else "zippedTarball" + else "crossPlatformArtifact"} = true; + } // lib.optionalAttrs (!isVersionAtLeast "2.6" hawkSourceInfo.version) { stripRoot = false; } // value; }) { "2_9_1" = { @@ -200,16 +254,39 @@ in { hashPrePatching = "sha256-gCHySfNOjqazbQDqk5lKJIYmPI6onqcaVDwuY8Ud2ns="; }; "2_6_2" = { - zippedTarball = true; hashPrePatching = "sha256-tlnF/ZQOkLMbiEV2BqhxzQ/KixGZ30+LgOUoHvpv13s="; }; "2_6_1" = { - zippedTarball = true; hashPrePatching = "sha256-Ou4NbRo7Gh0HWviXSEHtp0PpsGDdYsN8yhR0/gQy3rY="; }; "2_6" = { - zippedTarball = true; hashPrePatching = "sha256-AHP1mgedC9wUq+YAJD0gM4Lrl0H0UkrWyifEDC9KLog="; }; + "2_5_2" = { + hashPrePatching = "sha256-vurAHOSWwpHZ96cLnRvb6wR+6dvTVKgoqUvlU4Qyp3g="; + }; + "2_5_1" = { + hashPrePatching = "sha256-tB6UXQPFHPIhV5bERkv/kAktyMn3dnlI4nzIwXO9imQ="; + }; + "2_5" = { + url = "https://github.com/TASEmulators/BizHawk/releases/download/2.5/BizHawk-2.5.0.zip"; + hashPrePatching = "sha256-OPuNxgHWYBCw6gkkllir0U9z+ZF3K8K2o24W00MWgLk="; + }; + "2_4_2" = { + hashPrePatching = "sha256-0ZunzBTO4O+B89N5PI0+AeVFBhe9shEtCANsYJBVdaY="; + }; + "2_4_1" = { + hashPrePatching = "sha256-uORUDsPh7ePRzB69wqKW65Cch35Fjg34Q0aa7Vcf+dA="; + }; + "2_4" = { + hashPrePatching = "sha256-vgocYt0Wo5LSLxHF5W1aFi2xqkklMYhZP4zHOIFbCb0="; + }; + "2_3_3" = { + hashPrePatching = "sha256-kLPNpnggnrc7TgA6NCC0P/tkFiUgTHVyKPdUz0UX1EE="; + }; + "2_3_2" = { + hashPrePatching = "sha256-x2DwrzBkPAGhlov/eU/VwXuHVP/Rv0o7pZptmsSQLJU="; + }; + # older releases won't pass prereq checker w/o WINE libs, relevant change was https://github.com/TASEmulators/BizHawk/commit/27a4062ea22e5cb4a81628580ce47fec7a2709a5#diff-aff17d6fcf6169cad48e9c8d08145b0de360e874aa8ffee0ea66e636cccda39f }; } diff --git a/Dist/launch-scripts.nix b/Dist/launch-scripts.nix index 52e507e5e9..0a81a8df11 100644 --- a/Dist/launch-scripts.nix +++ b/Dist/launch-scripts.nix @@ -78,7 +78,8 @@ else export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$ldLibPath" fi - ${lib.optionalString (!debugPInvokes) "# "}export MONO_LOG_LEVEL=debug MONO_LOG_MASK=dll # pass `--arg debugPInvokes true` to nix-build to enable + ${if bizhawkAssemblies.hawkSourceInfo.hasAssemblyResolveHandler then "" else ''export MONO_PATH="$BIZHAWK_HOME/dll/nlua:$BIZHAWK_HOME/dll" + ''}${lib.optionalString (!debugPInvokes) "# "}export MONO_LOG_LEVEL=debug MONO_LOG_MASK=dll # pass `--arg debugPInvokes true` to nix-build to enable ${lib.optionalString debugDotnetHostCrashes "# "}export MONO_CRASH_NOFILE=1 # pass `--arg debugDotnetHostCrashes true` to nix-build to disable if [ "$1" = '--mono-no-redirect' ]; then printf "(passing --mono-no-redirect is no longer necessary)\n" >&2 diff --git a/Dist/nix_expr_check_attrs.sh b/Dist/nix_expr_check_attrs.sh index 389ccfd18e..b6a7d25184 100755 --- a/Dist/nix_expr_check_attrs.sh +++ b/Dist/nix_expr_check_attrs.sh @@ -7,6 +7,7 @@ nix-instantiate --eval --strict -E 'import Dist/exposed-attr-checker.nix {}' printf "\n" attrNamesToCheck='discohawk-latest emuhawk-2_9_1 emuhawk-2_9 emuhawk-2_8 emuhawk-2_7 emuhawk-2_6_3 emuhawk-2_6_2 emuhawk-2_6_1 emuhawk-2_6' +attrNamesToCheckBinOnly='emuhawk-2_5_2 emuhawk-2_5_1 emuhawk-2_5 emuhawk-2_4_2 emuhawk-2_4_1 emuhawk-2_4 emuhawk-2_3_3 emuhawk-2_3_2' # not checking `forNixOS = false` since it's just the same wrapped with nixGL #commonBuildFlags='--pure --arg doCheck true' # not working :( commonBuildFlags='--pure' @@ -37,7 +38,7 @@ else done fi printf "Packaging releases.\n" -for a in $attrNamesToCheck; do +for a in $attrNamesToCheck $attrNamesToCheckBinOnly; do b -A "$a-bin" b -A "$a-bin.assemblies" --check done diff --git a/Dist/nix_expr_usage_docs.md b/Dist/nix_expr_usage_docs.md index 461fce3de4..c4d5ebe03d 100644 --- a/Dist/nix_expr_usage_docs.md +++ b/Dist/nix_expr_usage_docs.md @@ -23,6 +23,14 @@ Version | Attr for asms | Attr for EmuHawk | Attr for DiscoHawk 2.6.1 from source | DIY | `emuhawk-2_6_1` | DIY 2.6 | `bizhawkAssemblies-2_6-bin` | `emuhawk-2_6-bin` | DIY 2.6 from source | DIY | `emuhawk-2_6` | DIY +2.5.2 | `bizhawkAssemblies-2_5_2-bin` | `emuhawk-2_5_2-bin` | DIY +2.5.1 | `bizhawkAssemblies-2_5_1-bin` | `emuhawk-2_5_1-bin` | DIY +2.5 | `bizhawkAssemblies-2_5-bin` | `emuhawk-2_5-bin` | DIY +2.4.2 | `bizhawkAssemblies-2_4_2-bin` | `emuhawk-2_4_2-bin` | DIY +2.4.1 | `bizhawkAssemblies-2_4_1-bin` | `emuhawk-2_4_1-bin` | DIY +2.4 | `bizhawkAssemblies-2_4-bin` | `emuhawk-2_4-bin` | DIY +2.3.3 | `bizhawkAssemblies-2_3_3-bin` | `emuhawk-2_3_3-bin` | DIY +2.3.2 | `bizhawkAssemblies-2_3_2-bin` | `emuhawk-2_3_2-bin` | DIY Nix functions and data: - `buildAssembliesFor` diff --git a/Dist/packages-managed.nix b/Dist/packages-managed.nix index 1d5cd768a9..8e205ae213 100644 --- a/Dist/packages-managed.nix +++ b/Dist/packages-managed.nix @@ -2,7 +2,7 @@ grabFromReferences = { filePfx, subdir ? "" }: runCommand filePfx { inherit (hawkSourceInfo) __contentAddressed; meta.sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; - } ''mkdir -p "$out${subdir}"; cp -vt "$out${subdir}" '${hawkSourceInfo.drv}/References${subdir}'/${filePfx}*''; + } ''mkdir -p "$out${subdir}"; cp -vt "$out${subdir}" '${hawkSourceInfo.src}/References${subdir}/${filePfx}'*''; in { #TODO build all but flatBuffersCore, gongShell, slimDX, and systemDataSqliteDropIn from source bizhawkAnalyzer = grabFromReferences { filePfx = "BizHawk.Analyzer"; }; flatBuffersCore = grabFromReferences { filePfx = "FlatBuffers.Core"; }; diff --git a/Dist/packages.nix b/Dist/packages.nix index b8e9afb6de..f620995316 100644 --- a/Dist/packages.nix +++ b/Dist/packages.nix @@ -18,6 +18,7 @@ # rundeps , lua , mono +, monoBasic , openal , SDL2 , udev @@ -47,9 +48,8 @@ * TODO replace this with something more like `buildExtraManagedDepsFor`; for existing Nix exprs see https://gitlab.com/YoshiRulz/yoshis-hawk-thoughts/-/issues/10 */ buildUnmanagedDepsFor = hawkSourceInfo: stdenv.mkDerivation { - inherit (hawkSourceInfo) version; + inherit (hawkSourceInfo) src version; pname = "bizhawk-native-deps"; - src = hawkSourceInfo.drv; dontBuild = true; installPhase = '' runHook preInstall @@ -73,10 +73,9 @@ extraManagedDeps = hawkSourceInfo.extraManagedDeps or buildExtraManagedDepsFor hawkSourceInfo; in buildDotnetModule (lib.fix (finalAttrs: { # proper `finalAttrs` not supported >:( inherit doCheck mono; - inherit (hawkSourceInfo) __contentAddressed dotnet-sdk nugetDeps version; + inherit (hawkSourceInfo) __contentAddressed dotnet-sdk nugetDeps src version; pname = "BizHawk"; isLocalBuild = lib.hasSuffix "-local" finalAttrs.version; - src = hawkSourceInfo.drv; postUnpack = lib.optionalString finalAttrs.isLocalBuild ''(cd BizHawk-*-local; Dist/CleanupBuildOutputDirs.sh)''; outputs = [ "out" "assets" "extraUnmanagedDeps" "waterboxCores" ]; propagatedBuildOutputs = []; # without this, other outputs depend on `out` @@ -254,8 +253,9 @@ in { splitReleaseArtifact = { hawkSourceInfo , hashPrePatching + , crossPlatformArtifact ? false , zippedTarball ? false - , url ? "https://github.com/TASEmulators/BizHawk/releases/download/${hawkSourceInfo.version}/BizHawk-${hawkSourceInfo.version}-linux-x64${if zippedTarball then ".tar.zip" else ".tar.gz"}" + , url ? "https://github.com/TASEmulators/BizHawk/releases/download/${hawkSourceInfo.version}/BizHawk-${hawkSourceInfo.version}${if crossPlatformArtifact then ".zip" else if zippedTarball then "-linux-x64.tar.zip" else "-linux-x64.tar.gz"}" , stripRoot ? true }: assert buildConfig == "Release"; let artifact = fetchzip { inherit stripRoot url; hash = hashPrePatching; }; @@ -275,10 +275,13 @@ in { rm -f EmuHawkMono.sh ${if hawkSourceInfo'.releaseArtifactHasRogueOTKAsmConfig then ''mv -ft dll OpenTK.dll.config '' else ""}rmdir Firmware - mkdir ExternalTools && touch ExternalTools/.keep + mkdir -p ExternalTools; touch ExternalTools/.keep - mkdir -p $out; mv -t $out defctrl.json DiscoHawk.exe* dll EmuHawk.exe* gamedb Shaders - printf '${emuhawkBuildFlavour}' >$out/dll/custombuild.txt + mkdir -p $out; mv -t $out defctrl.json DiscoHawk.exe* dll EmuHawk.exe* gamedb [Ss]haders + ${if hawkSourceInfo'.releaseArtifactNeedsVBDotnetReference then ''cp -t $out/dll '${lib.getOutput "out" monoBasic}/usr/lib/mono/4.5/Microsoft.VisualBasic.dll' + '' else ""}${if hawkSourceInfo'.releaseArtifactNeedsLowercaseAsms then ''(cd $out/dll; for s in Client.Common Emulation.Cores; do cp BizHawk.$s.dll Bizhawk.$s.dll; done) + '' else ""}${if hawkSourceInfo'.releaseArtifactNeedsOTKAsmConfig then ''cp -t $out/dll '${releaseTagSourceInfos.info-2_6.src}/Assets/dll/OpenTK.dll.config' + '' else ""}printf '${emuhawkBuildFlavour}' >$out/dll/custombuild.txt mkdir -p $extraUnmanagedDeps/lib; mv -t $extraUnmanagedDeps/lib $out/dll/*.so* mkdir -p $waterboxCores/dll; mv -t $waterboxCores/dll $out/dll/*.wbx* diff --git a/default.nix b/default.nix index fbb43b648d..bad8c36714 100644 --- a/default.nix +++ b/default.nix @@ -3,6 +3,7 @@ , stdenv ? pkgs.stdenvNoCC # infrastructure , buildDotnetModule ? pkgs.buildDotnetModule +, dpkg ? pkgs.dpkg , fetchFromGitHub ? pkgs.fetchFromGitHub , fetchFromGitLab ? pkgs.fetchFromGitLab , fetchpatch ? pkgs.fetchpatch @@ -19,8 +20,7 @@ version = "2.9.2-local"; # used in default value of `BIZHAWK_DATA_HOME`, which distinguishes parallel installs' config and other data in { inherit version; - branch = "master"; # must be regex-escaped (interpolated as `sed "s/.../${branch}/"`); written into movies and savestates, written to config to detect in-place upgrades (N/A to Nix), and of course also shown in the About dialog - drv = builtins.path { path = ./.; name = "BizHawk-${version}"; }; # source derivation; did have filter here for speed, but it wasn't faster and it wasn't correct and it couldn't be made correct and I'm mad + src = builtins.path { path = ./.; name = "BizHawk-${version}"; }; # source derivation; did have filter here for speed, but it wasn't faster and it wasn't correct and it couldn't be made correct and I'm mad } # makedeps , dotnet-sdk_6 ? pkgs.dotnet-sdk_6 @@ -50,8 +50,8 @@ in { , forNixOS ? true , initConfig ? {} # forwarded to Dist/launch-scripts.nix (see docs there) }: let + isVersionAtLeast = lib.flip lib.versionAtLeast; # I stand by this being the more useful param order w.r.t. currying replaceDotWithUnderscore = s: lib.replaceStrings [ "." ] [ "_" ] s; - drvVersionAtLeast = exVer: acVer: builtins.compareVersions exVer acVer <= 0; /** you can't actually make hard links in the sandbox, so this just copies, and we'll rely on Nix' automatic deduping */ hardLinkJoin = { name @@ -72,7 +72,7 @@ in { ''; inherit (import Dist/historical.nix { inherit lib - drvVersionAtLeast replaceDotWithUnderscore + isVersionAtLeast replaceDotWithUnderscore fetchFromGitHub fetchFromGitLab mkNugetDeps dotnet-sdk_5 dotnet-sdk_6; }) depsForHistoricalRelease populateHawkSourceInfo releaseArtifactInfos releaseFrags releaseTagSourceInfos; @@ -94,10 +94,16 @@ in { buildConfig doCheck emuhawkBuildFlavour extraDefines extraDotnetBuildFlags; mono = if mono != null then mono # allow older Mono if set explicitly - else if drvVersionAtLeast "6.12.0.151" pkgs.mono.version + else if isVersionAtLeast "6.12.0.151" pkgs.mono.version then pkgs.mono else lib.trace "provided Mono too old, using Mono from Nixpkgs 23.05" (import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/23.05.tar.gz") {}).mono; + monoBasic = fetchzip { + url = "https://download.mono-project.com/repo/debian/pool/main/m/mono-basic/libmono-microsoft-visualbasic10.0-cil_4.7-0xamarin3+debian9b1_all.deb"; + nativeBuildInputs = [ dpkg ]; + hash = "sha256-2m1FwpDxzqVXR6GUB3oFuTqIXCde/msb+tg8v6lIN6s="; + # tried and failed building from source, following https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=mono-basic + }; }; emuhawk-local = pp.buildEmuHawkInstallableFor { inherit forNixOS; @@ -106,8 +112,8 @@ in { asmsFromReleaseArtifacts = lib.mapAttrs (_: pp.splitReleaseArtifact) releaseArtifactInfos; # the asms for from-CWD and latest release from-source are exposed below as `bizhawkAssemblies` and `bizhawkAssemblies-latest`, respectively # apart from that, no `asmsFromSource`, since if you're only after the assets you might as well use the release artifact - releasesEmuHawkInstallables = lib.listToAttrs (lib.concatLists (builtins.map - (versionFrag: [ + releasesEmuHawkInstallables = lib.pipe releaseFrags [ + (builtins.map (versionFrag: [ ({ name = "emuhawk-${versionFrag}"; value = pp.buildEmuHawkInstallableFor { @@ -122,8 +128,12 @@ in { bizhawkAssemblies = asmsFromReleaseArtifacts."bizhawkAssemblies-${versionFrag}-bin"; }; }) - ]) - releaseFrags)); + ])) + lib.concatLists + lib.listToAttrs + (lib.filterAttrs (name: value: lib.hasSuffix "-bin" name + || isVersionAtLeast "2.6" value.hawkSourceInfo.version)) + ]; latestVersionFrag = lib.head releaseFrags; combined = pp // asmsFromReleaseArtifacts // releasesEmuHawkInstallables // { inherit depsForHistoricalRelease releaseTagSourceInfos;