diff --git a/shell.nix b/shell.nix index 33c306f..8a550ca 100644 --- a/shell.nix +++ b/shell.nix @@ -2,8 +2,13 @@ let currentDir = builtins.toString ./.; - pnpm = pkgs.callPackage ./tools/nix/pnpm.nix { nodejs = pkgs.nodejs_20; }; + pnpm = pkgs.pnpm.override { + version = "10.4.1"; + hash = "sha256-S3Aoh5hplZM9QwCDawTW0CpDvHK1Lk9+k6TKYIuVkZc="; + nodejs = pkgs.nodejs_20; + }; cxxopts = pkgs.cxxopts.override { enableUnicodeHelp = false; }; + antlr4 = pkgs.callPackage ./tools/nix/antlr4.nix { }; in pkgs.mkShell { @@ -23,11 +28,9 @@ pkgs.mkShell { pnpm pkgs.httpie pkgs.llvmPackages_18.libllvm - pkgs.libffi - pkgs.libxml2 cxxopts - pkgs.antlr4_13 - pkgs.antlr4_13.runtime.cpp + antlr4.antlr + antlr4.runtime.cpp ]; shellHook = '' diff --git a/tools/nix/antlr4.nix b/tools/nix/antlr4.nix new file mode 100644 index 0000000..e8e072c --- /dev/null +++ b/tools/nix/antlr4.nix @@ -0,0 +1,62 @@ +{ stdenv +, fetchurl +, fetchFromGitHub +, jre +, cmake, ninja, pkg-config +}: +# From https://github.com/NixOS/nixpkgs/blob/nixos-24.11/pkgs/development/tools/parsing/antlr/4.nix +let + mkAntlr = { + version, jarHash, srcHash + }: rec { + antlr = stdenv.mkDerivation { + pname = "antlr"; + inherit version; + src = fetchurl { + url = "https://www.antlr.org/download/antlr-${version}-complete.jar"; + hash = jarHash; + }; + dontUnpack = true; + installPhase = '' + mkdir -p "$out"/{share/java,bin} + ln -s "$src" "$out/share/java/antlr-${version}-complete.jar" + echo "#! ${stdenv.shell}" >> "$out/bin/antlr" + echo "'${jre}/bin/java' -cp '$out/share/java/antlr-${version}-complete.jar:$CLASSPATH' -Xmx500M org.antlr.v4.Tool \"\$@\"" >> "$out/bin/antlr" + echo "#! ${stdenv.shell}" >> "$out/bin/antlr-parse" + echo "'${jre}/bin/java' -cp '$out/share/java/antlr-${version}-complete.jar:$CLASSPATH' -Xmx500M org.antlr.v4.gui.Interpreter \"\$@\"" >> "$out/bin/antlr-parse" + echo "#! ${stdenv.shell}" >> "$out/bin/grun" + echo "'${jre}/bin/java' -cp '$out/share/java/antlr-${version}-complete.jar:$CLASSPATH' org.antlr.v4.gui.TestRig \"\$@\"" >> "$out/bin/grun" + chmod a+x "$out/bin/antlr" "$out/bin/antlr-parse" "$out/bin/grun" + ln -s "$out/bin/antlr"{,4} + ln -s "$out/bin/antlr"{,4}-parse + ''; + inherit jre; + passthru = { + inherit runtime; + jarLocation = antlr.src; + }; + }; + runtime.cpp = stdenv.mkDerivation { + pname = "antlr-runtime-cpp"; + inherit version; + src = fetchFromGitHub { + owner = "antlr"; + repo = "antlr4"; + rev = version; + hash = srcHash; + }; + outputs = [ "out" "dev" "doc" ]; + nativeBuildInputs = [ cmake ninja pkg-config ]; + cmakeDir = "../runtime/Cpp"; + cmakeFlags = [ + "-DANTLR4_INSTALL=ON" + "-DANTLR_BUILD_CPP_TESTS=OFF" + ]; + }; + }; +in +mkAntlr { + version = "4.13.2"; + jarHash = "sha256-6uLfoRmmQydERnKv9j6ew1ogGA3FuAkLemq4USXfTXY="; + srcHash = "sha256-s1yAdScMYg1wFpYNsBAtpifIhQsnSAgJg7JjPDx+htc="; +} diff --git a/tools/nix/default.nix b/tools/nix/default.nix index 608d77b..fcbc312 100644 --- a/tools/nix/default.nix +++ b/tools/nix/default.nix @@ -1,5 +1,8 @@ let - pkgs = import ./pin-nixpkgs.nix { }; + pkgs = import (fetchTarball { + url = "https://github.com/NixOS/nixpkgs/archive/eb28b94bd14835836b539bc3854a6abf929876d4.tar.gz"; + sha256 = "1wwr70sw70ib0qdr0cf7d9g7czlib5zm8hg8xjll7lsind6cfvwi"; + }) { config = {}; overlays = []; }; in { filc = pkgs.callPackage ./filc.nix { }; } diff --git a/tools/nix/pin-nixpkgs.nix b/tools/nix/pin-nixpkgs.nix index d1c4d96..d039cc2 100644 --- a/tools/nix/pin-nixpkgs.nix +++ b/tools/nix/pin-nixpkgs.nix @@ -2,7 +2,7 @@ let pinNixpkgs = import (fetchTarball { - url = "https://github.com/NixOS/nixpkgs/archive/eb28b94bd14835836b539bc3854a6abf929876d4.tar.gz"; - sha256 = "1wwr70sw70ib0qdr0cf7d9g7czlib5zm8hg8xjll7lsind6cfvwi"; + url = "https://github.com/NixOS/nixpkgs/archive/5cb027673efd44307525d6300e0fa6309dce47d3.tar.gz"; + sha256 = "0qavs0z6djxa52hnxix0ndhl39yv1k6lj7x86xpjdgr078lhcy7a"; } ) { config = {}; overlays = []; }; in pinNixpkgs diff --git a/tools/nix/pnpm.nix b/tools/nix/pnpm.nix deleted file mode 100644 index 5607e2c..0000000 --- a/tools/nix/pnpm.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ stdenvNoCC -, fetchurl -, nodejs -}: - -# From https://github.com/NixOS/nixpkgs/blob/nixos-24.11/pkgs/development/tools/pnpm/generic.nix -stdenvNoCC.mkDerivation (finalAttrs: { - pname = "pnpm"; - version = "9.15.1"; - - src = fetchurl { - url = "https://registry.npmjs.org/pnpm/-/pnpm-${finalAttrs.version}.tgz"; - hash = "sha256-nlNOcK/vBjdPYSa0S9pXYJRxNc4WowrvEBDpZft+Pj4="; - }; - # Remove binary files from src, we don't need them, and this way we make sure - # our distribution is free of binaryNativeCode - preConfigure = '' - rm -r dist/reflink.*node dist/vendor - ''; - - buildInputs = [ nodejs ]; - - installPhase = '' - runHook preInstall - - install -d $out/{bin,libexec} - cp -R . $out/libexec/pnpm - ln -s $out/libexec/pnpm/bin/pnpm.cjs $out/bin/pnpm - ln -s $out/libexec/pnpm/bin/pnpx.cjs $out/bin/pnpx - - runHook postInstall - ''; -})