126 lines
4.0 KiB
Nix
126 lines
4.0 KiB
Nix
{ pkgs, commonFn, gentypeOutputFn }:
|
|
|
|
rec {
|
|
common = commonFn pkgs;
|
|
langPackageJson = let
|
|
raw = pkgs.lib.importJSON ../packages/squiggle-lang/package.json;
|
|
modified = pkgs.lib.recursiveUpdate raw {
|
|
devDependencies."@types/lodash" = "^4.14.182";
|
|
};
|
|
packageJsonString = builtins.toJSON modified;
|
|
in pkgs.writeText "packages/squiggle-lang/patched-package.json"
|
|
packageJsonString;
|
|
yarn-source = pkgs.mkYarnPackage {
|
|
name = "squiggle-lang_yarnsource";
|
|
src = ../packages/squiggle-lang;
|
|
packageJSON = langPackageJson;
|
|
yarnLock = ../yarn.lock;
|
|
pkgConfig = {
|
|
rescript = {
|
|
buildInputs = common.which
|
|
++ (if pkgs.system != "i686-linux" then [ pkgs.gcc_multi ] else [ ]);
|
|
postInstall = ''
|
|
echo "PATCHELF'ING RESCRIPT EXECUTABLES (INCL NINJA)"
|
|
# Patching interpreter for linux/*.exe's
|
|
THE_LD=$(patchelf --print-interpreter $(which mkdir))
|
|
patchelf --set-interpreter $THE_LD linux/*.exe && echo "- patched interpreter for linux/*.exe's"
|
|
|
|
# Replacing needed shared library for linux/ninja.exe
|
|
THE_SO=$(find /nix/store/*/lib64 -name libstdc++.so.6 | head -n 1)
|
|
patchelf --replace-needed libstdc++.so.6 $THE_SO linux/ninja.exe && echo "- replaced needed for linux/ninja.exe"
|
|
'';
|
|
};
|
|
bisect_ppx = {
|
|
buildInputs = common.which;
|
|
postInstall = ''
|
|
echo "PATCHELF'ING BISECT_PPX EXECUTABLE"
|
|
THE_LD=$(patchelf --print-interpreter $(which mkdir))
|
|
patchelf --set-interpreter $THE_LD bin/linux/ppx
|
|
patchelf --set-interpreter $THE_LD bin/linux/bisect-ppx-report
|
|
cp bin/linux/ppx ppx
|
|
'';
|
|
};
|
|
gentype = {
|
|
postInstall = ''
|
|
mv gentype.exe ELFLESS-gentype.exe
|
|
cp ${gentypeOutputFn pkgs}/src/GenType.exe gentype.exe
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
lint = pkgs.stdenv.mkDerivation {
|
|
name = "squiggle-lang-lint";
|
|
src = yarn-source + "/libexec/@quri/squiggle-lang/deps/@quri/squiggle-lang";
|
|
buildInputs = common.buildInputs ++ common.prettier;
|
|
buildPhase = ''
|
|
yarn lint:prettier
|
|
yarn lint:rescript
|
|
'';
|
|
installPhase = "mkdir -p $out";
|
|
};
|
|
build = pkgs.stdenv.mkDerivation {
|
|
name = "squiggle-lang-build";
|
|
# `peggy` is in the `node_modules` that's adjacent to `deps`.
|
|
src = yarn-source + "/libexec/@quri/squiggle-lang";
|
|
buildInputs = common.buildInputs;
|
|
buildPhase = ''
|
|
# so that the path to ppx doesn't need to be patched.
|
|
mv node_modules deps
|
|
|
|
pushd deps/@quri/squiggle-lang
|
|
yarn --offline build:peggy
|
|
yarn --offline build:rescript
|
|
yarn --offline build:typescript
|
|
|
|
# custom gitignore so that the flake keeps build artefacts
|
|
mv .gitignore GITIGNORE
|
|
sed -i /Reducer_Peggy_GeneratedParser.js/d GITIGNORE
|
|
sed -i /\*.bs.js/d GITIGNORE
|
|
sed -i /\*.gen.ts/d GITIGNORE
|
|
sed -i /\*.gen.tsx/d GITIGNORE
|
|
sed -i /\*.gen.js/d GITIGNORE
|
|
sed -i /helpers.js/d GITIGNORE
|
|
|
|
popd
|
|
'';
|
|
installPhase = ''
|
|
mkdir -p $out
|
|
# mkdir -p $out/node_modules
|
|
mv deps/@quri/squiggle-lang/GITIGNORE deps/@quri/squiggle-lang/.gitignore
|
|
|
|
# annoying hack because permissions on transitive dependencies later on
|
|
mv deps/@quri/squiggle-lang/node_modules deps/@quri/squiggle-lang/NODE_MODULES
|
|
mv deps/node_modules deps/@quri/squiggle-lang
|
|
|
|
# the proper install phase
|
|
cp -r deps/@quri/squiggle-lang/. $out
|
|
'';
|
|
};
|
|
test = pkgs.stdenv.mkDerivation {
|
|
name = "squiggle-lang-test";
|
|
src = build;
|
|
buildInputs = common.buildInputs;
|
|
buildPhase = ''
|
|
yarn --offline test
|
|
'';
|
|
installPhase = ''
|
|
mkdir -p $out
|
|
cp -r . $out
|
|
'';
|
|
};
|
|
bundle = pkgs.stdenv.mkDerivation {
|
|
name = "squiggle-lang-bundle";
|
|
src = test;
|
|
buildInputs = common.buildInputs;
|
|
buildPhase = ''
|
|
yarn --offline bundle
|
|
'';
|
|
installPhase = ''
|
|
mkdir -p $out
|
|
cp -r dist $out
|
|
cp *.json $out/dist
|
|
'';
|
|
};
|
|
|
|
}
|