{ lib , stdenv , fetchFromGitHub , runCommand }: stdenv.mkDerivation (finalAttrs: { pname = "cbmbasic"; version = "unstable-2022-12-18"; src = fetchFromGitHub { owner = "mist64"; repo = "cbmbasic"; rev = "352a313313dd0a15a47288c8f8031b54ac8c92a2"; hash = "sha256-aA/ivRap+aDd2wi6KWXam9eP/21lOn6OWTeZ4i/S9Bs="; }; installPhase = '' runHook preInstall mkdir -p $out/bin/ mv cbmbasic $out/bin/ runHook postInstall ''; # NOTE: cbmbasic uses microsoft style linebreaks `\r\n`, and testing has to # accommodate that, else you get very cryptic diffs passthru = { tests.run = runCommand "cbmbasic-test-run" { nativeBuildInputs = [finalAttrs.finalPackage]; } '' echo '#!${lib.getExe finalAttrs.finalPackage}' > helloI.bas; echo 'PRINT"Hello, World!"' >> helloI.bas; chmod +x helloI.bas diff -U3 --color=auto <(./helloI.bas) <(echo -e "Hello, World!\r"); echo '#!/usr/bin/env cbmbasic' > hello.bas; echo 'PRINT"Hello, World!"' >> hello.bas; chmod +x hello.bas diff -U3 --color=auto <(cbmbasic ./hello.bas) <(echo -e "Hello, World!\r"); touch $out; ''; }; meta = with lib; { description = "Portable version of Commodore's version of Microsoft BASIC 6502 as found on the Commodore 64"; longDescription = '' "Commodore BASIC" (cbmbasic) is a 100% compatible version of Commodore's version of Microsoft BASIC 6502 as found on the Commodore 64. You can use it in interactive mode or pass a BASIC file as a command line parameter. This source does not emulate 6502 code; all code is completely native. On a 1 GHz CPU you get about 1000x speed compared to a 1 MHz 6502. ''; homepage = "https://github.com/mist64/cbmbasic"; license = licenses.bsd2; maintainers = [ maintainers.cafkafk ]; mainProgram = "cbmbasic"; platforms = platforms.all; }; })