Silvan Mosberger 374e6bcc40 treewide: Format all Nix files
Format all Nix files using the officially approved formatter,
making the CI check introduced in the previous commit succeed:

  nix-build ci -A fmt.check

This is the next step of the of the [implementation](https://github.com/NixOS/nixfmt/issues/153)
of the accepted [RFC 166](https://github.com/NixOS/rfcs/pull/166).

This commit will lead to merge conflicts for a number of PRs,
up to an estimated ~1100 (~33%) among the PRs with activity in the past 2
months, but that should be lower than what it would be without the previous
[partial treewide format](https://github.com/NixOS/nixpkgs/pull/322537).

Merge conflicts caused by this commit can now automatically be resolved while rebasing using the
[auto-rebase script](8616af08d9/maintainers/scripts/auto-rebase).

If you run into any problems regarding any of this, please reach out to the
[formatting team](https://nixos.org/community/teams/formatting/) by
pinging @NixOS/nix-formatting.
2025-04-01 20:10:43 +02:00

197 lines
5.2 KiB
Nix

{
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";
rev = "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;
in
vmsByPlatform.${platform} or (throw (
"Unsupported platform ${platform}: only the following platforms are supported: "
+ builtins.toString (builtins.attrNames vmsByPlatform)
))