Something went wrong. Try again.
What happens if I push all of nixpkgs
Something went wrong. Try again.
5.5 kB · 201 lines
Nix
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202{ config, stdenv, lib, fetchFromGitHub, fetchurl, alsa-lib, coreutils, file, freetype, gnugrep, libpulseaudio, libtool, libuuid, openssl, pango, pkg-config, xorg,}:let buildVM = { # VM-specific information, manually extracted from building/<platformDir>/<vmName>/build/mvm platformDir, vmName, scriptName, configureFlagsArray, configureFlags, }: let src = fetchFromGitHub { owner = "OpenSmalltalk"; repo = "opensmalltalk-vm"; tag = "202206021410"; hash = "sha256-QqElPiJuqD5svFjWrLz1zL0Tf+pHxQ2fPvkVRn2lyBI="; }; in stdenv.mkDerivation { pname = let vmNameNoDots = builtins.replaceStrings [ "." ] [ "-" ] vmName; in "opensmalltalk-vm-${platformDir}-${vmNameNoDots}"; version = src.rev;
inherit src;
postPatch = '' vmVersionFiles=$(sed -n 's/^versionfiles="\(.*\)"/\1/p' ./scripts/updateSCCSVersions) for vmVersionFile in $vmVersionFiles; do substituteInPlace "$vmVersionFile" \ --replace "\$Date\$" "\$Date: Thu Jan 1 00:00:00 1970 +0000 \$" \ --replace "\$URL\$" "\$URL: ${src.url} \$" \ --replace "\$Rev\$" "\$Rev: ${src.rev} \$" \ --replace "\$CommitHash\$" "\$CommitHash: 000000000000 \$" done patchShebangs --build ./building/${platformDir} scripts substituteInPlace ./platforms/unix/config/mkmf \ --replace "/bin/rm" "rm" substituteInPlace ./platforms/unix/config/configure \ --replace "/usr/bin/file" "file" \ --replace "/usr/bin/pkg-config" "pkg-config" \ '';
preConfigure = '' cd building/${platformDir}/${vmName}/build # Exits with non-zero code if the check fails, counterintuitively ../../../../scripts/checkSCCSversion && exit 1 cp ../plugins.int ../plugins.ext . configureFlagsArray=${configureFlagsArray} '';
configureScript = "../../../../platforms/unix/config/configure";
configureFlags = [ "--with-scriptname=${scriptName}" ] ++ configureFlags;
buildFlags = [ "all" ];
enableParallelBuilding = true;
nativeBuildInputs = [ file pkg-config ];
buildInputs = [ alsa-lib freetype libpulseaudio libtool libuuid openssl pango xorg.libX11 xorg.libXrandr ];
postInstall = '' rm "$out/squeak" cd "$out/bin" BIN="$(find ../lib -type f -name squeak)" for f in $(find . -type f); do rm "$f" ln -s "$BIN" "$f" done '';
meta = { description = "Cross-platform virtual machine for Squeak, Pharo, Cuis, and Newspeak"; mainProgram = scriptName; homepage = "https://opensmalltalk.org/"; license = with lib.licenses; [ mit ]; maintainers = with lib.maintainers; [ jakewaksbaum ]; platforms = [ stdenv.targetPlatform.system ]; }; };
vmsByPlatform = { "aarch64-linux" = { "squeak-cog-spur" = buildVM { platformDir = "linux64ARMv8"; vmName = "squeak.cog.spur"; scriptName = "squeak"; configureFlagsArray = '' ( CFLAGS="-DNDEBUG -DDEBUGVM=0 -DMUSL -D_GNU_SOURCE -DUSEEVDEV -DCOGMTVM=0 -DDUAL_MAPPED_CODE_ZONE=1" LIBS="-lrt" ) ''; configureFlags = [ "--with-vmversion=5.0" "--with-src=src/spur64.cog" "--without-npsqueak" "--enable-fast-bitblt" ]; };
"squeak-stack-spur" = buildVM { platformDir = "linux64ARMv8"; vmName = "squeak.stack.spur"; scriptName = "squeak"; configureFlagsArray = '' ( CFLAGS="-DNDEBUG -DDEBUGVM=0 -DMUSL -D_GNU_SOURCE -DUSEEVDEV -D__ARM_ARCH_ISA_A64 -DARM64 -D__arm__ -D__arm64__ -D__aarch64__" ) ''; configureFlags = [ "--with-vmversion=5.0" "--with-src=src/spur64.stack" "--disable-cogit" "--without-npsqueak" ]; }; };
"x86_64-linux" = { "newspeak-cog-spur" = buildVM { platformDir = "linux64x64"; vmName = "newspeak.cog.spur"; scriptName = "newspeak"; configureFlagsArray = '' ( CFLAGS="-DNDEBUG -DDEBUGVM=0" ) ''; configureFlags = [ "--with-vmversion=5.0" "--with-src=src/spur64.cog.newspeak" "--without-vm-display-fbdev" "--without-npsqueak" ]; };
"squeak-cog-spur" = buildVM { platformDir = "linux64x64"; vmName = "squeak.cog.spur"; scriptName = "squeak"; configureFlagsArray = '' ( CFLAGS="-DNDEBUG -DDEBUGVM=0 -DCOGMTVM=0" ) ''; configureFlags = [ "--with-vmversion=5.0" "--with-src=src/spur64.cog" "--without-npsqueak" ]; }; }; };
platform = stdenv.targetPlatform.system;inif (!config.allowAliases && !(vmsByPlatform ? platform)) then # Don't throw without aliases to not break CI. nullelse vmsByPlatform.${platform} or (throw ( "Unsupported platform ${platform}: only the following platforms are supported: " + builtins.toString (builtins.attrNames vmsByPlatform) ))