4f610e96a0
CI / Nix Flake Check (push) Successful in 52s
CI / Build Packages (default) (push) Successful in 52s
CI / Build Packages (example-a) (push) Successful in 46s
CI / Build Packages (example-b) (push) Successful in 46s
CI / Build Packages (pyzotero) (push) Successful in 54s
CI / Build Packages (pyzotero-cli) (push) Successful in 56s
151 lines
3.6 KiB
Nix
151 lines
3.6 KiB
Nix
{
|
|
lib,
|
|
buildNpmPackage,
|
|
fetchFromGitHub,
|
|
python3,
|
|
nodejs,
|
|
}:
|
|
|
|
let
|
|
version = "2.9.3";
|
|
|
|
tree-sitter-elixir = fetchFromGitHub {
|
|
owner = "elixir-lang";
|
|
repo = "tree-sitter-elixir";
|
|
rev = "v0.3.5";
|
|
hash = "sha256-C5/+t49pcFh45GqLZRjRs/sH8Ej+dklR/brad+snsyQ=";
|
|
};
|
|
in
|
|
buildNpmPackage rec {
|
|
pname = "dolos";
|
|
inherit version;
|
|
|
|
inherit nodejs;
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "dodona-edu";
|
|
repo = "dolos";
|
|
rev = "v${version}";
|
|
hash = "sha256-kilCxSe4njHyoXVXpyLmx5HnGkzFptLYOypQmldGnzc=";
|
|
fetchSubmodules = true;
|
|
};
|
|
|
|
npmWorkspace = "cli";
|
|
npmDepsHash = "sha256-3RMUWo6vybfi0BvQ12jjxuYFPDe3HkTv24L3BsuOCFg=";
|
|
|
|
nativeBuildInputs = [ python3 ];
|
|
|
|
TREE_SITTER_BUILD_FROM_SOURCE = "1";
|
|
npm_config_build_from_source = "true";
|
|
|
|
dontNpmBuild = true;
|
|
|
|
npmRebuildFlags = [ "--ignore-scripts" ];
|
|
|
|
postConfigure = ''
|
|
sed -i '2s/^/process.exit(0);\n/' node_modules/tree-sitter-cli/install.js
|
|
npm rebuild
|
|
'';
|
|
|
|
preBuild = ''
|
|
cp -r ${tree-sitter-elixir} parsers/elixir
|
|
chmod -R u+w parsers/elixir
|
|
|
|
cat > parsers/elixir/binding.gyp << 'GYPEOF'
|
|
{
|
|
"targets": [
|
|
{
|
|
"target_name": "tree_sitter_elixir_binding",
|
|
"dependencies": [
|
|
"<!(node -p \"require('node-addon-api').targets\"):node_addon_api_except",
|
|
],
|
|
"include_dirs": [
|
|
"src",
|
|
"src/tree_sitter",
|
|
],
|
|
"sources": [
|
|
"bindings/node/binding.cc",
|
|
"src/parser.c",
|
|
"src/scanner.c",
|
|
],
|
|
"cflags_c": ["-std=c11"],
|
|
}
|
|
]
|
|
}
|
|
GYPEOF
|
|
|
|
cat > parsers/binding.gyp << 'GYPEOF'
|
|
{
|
|
"includes": [
|
|
"bash/binding.gyp",
|
|
"c/binding.gyp",
|
|
"cpp/binding.gyp",
|
|
"c_sharp/binding.gyp",
|
|
"elm/binding.gyp",
|
|
"elixir/binding.gyp",
|
|
"go/binding.gyp",
|
|
"groovy/binding.gyp",
|
|
"java/binding.gyp",
|
|
"javascript/binding.gyp",
|
|
"modelica/binding.gyp",
|
|
"ocaml/binding.gyp",
|
|
"php/binding.gyp",
|
|
"python/binding.gyp",
|
|
"r/binding.gyp",
|
|
"rust/binding.gyp",
|
|
"scala/binding.gyp",
|
|
"sql/binding.gyp",
|
|
"typescript/binding.gyp",
|
|
"verilog/binding.gyp"
|
|
]
|
|
}
|
|
GYPEOF
|
|
|
|
sed -i '/^parsers.verilog/a \
|
|
parsers.elixir = require("./build/Release/tree_sitter_elixir_binding");\
|
|
parsers.elixir.nodeTypeInfo = require("./elixir/src/node-types.json");
|
|
' parsers/index.js
|
|
|
|
npm run build -w parsers
|
|
'';
|
|
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
npm run build -w cli
|
|
npm run build -w lib
|
|
npm run build -w core
|
|
npm run build -w web
|
|
runHook postBuild
|
|
'';
|
|
|
|
postInstall = ''
|
|
cp -r lib $out/lib/node_modules/dolos-meta/lib
|
|
chmod -R u+w $out/lib/node_modules/dolos-meta/lib
|
|
cp -r core $out/lib/node_modules/dolos-meta/core
|
|
chmod -R u+w $out/lib/node_modules/dolos-meta/core
|
|
cp -r parsers $out/lib/node_modules/dolos-meta/parsers
|
|
chmod -R u+w $out/lib/node_modules/dolos-meta/parsers
|
|
|
|
dolonsDir="$out/lib/node_modules/dolos-meta/node_modules/@dodona"
|
|
|
|
rm -rf "$dolonsDir/dolos-web"
|
|
mkdir -p "$dolonsDir/dolos-web"
|
|
install -m644 web/index.js "$dolonsDir/dolos-web/index.js"
|
|
install -m644 web/index.d.ts "$dolonsDir/dolos-web/index.d.ts" 2>/dev/null || true
|
|
install -m644 web/package.json "$dolonsDir/dolos-web/package.json"
|
|
cp -r web/dist "$dolonsDir/dolos-web/dist"
|
|
chmod -R u+w "$dolonsDir/dolos-web"
|
|
|
|
rm "$dolonsDir/dolos"
|
|
ln -s ../.. "$dolonsDir/dolos"
|
|
'';
|
|
|
|
meta = {
|
|
description = "Source code plagiarism detection tool for programming exercises";
|
|
homepage = "https://dolos.ugent.be";
|
|
license = lib.licenses.mit;
|
|
mainProgram = "dolos";
|
|
platforms = lib.platforms.linux ++ lib.platforms.darwin;
|
|
};
|
|
}
|