Files
my-pkgs/pkgs/dolos/default.nix
T
luis 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
dolos fixed
2026-06-05 16:51:59 +02:00

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;
};
}