Files

112 lines
2.4 KiB
Nix

{
lib,
stdenv,
fetchFromGitHub,
cmake,
ninja,
python3,
validatePkgConfig,
versionCheckHook,
testers,
nix-update-script,
enableCmdline ? !stdenv.hostPlatform.isNone,
enableMath ? false,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "jerryscript";
version = "3.0.0";
outputs = [
"out"
"lib"
"dev"
];
src = fetchFromGitHub {
owner = "jerryscript-project";
repo = "jerryscript";
tag = "v${finalAttrs.version}";
hash = "sha256-Evu4qLlwg3Sf9w/ojtZMNxGJEtopHgKnwqlpf115zD4=";
};
patches = [
# https://github.com/jerryscript-project/jerryscript/issues/5263
./fix-gcc15.patch
];
postPatch = ''
# get rid of bundled CMake toolchain files
rm cmake/toolchain_*
'';
nativeBuildInputs = [
cmake
ninja
];
cmakeFlags = [
(lib.cmakeBool "JERRY_CMDLINE" enableCmdline)
(lib.cmakeBool "JERRY_MATH" enableMath)
(lib.cmakeBool "BUILD_SHARED_LIBS" (!stdenv.hostPlatform.isStatic))
];
env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-enum-enum-conversion -Wno-enum-float-conversion -Wno-literal-range";
nativeCheckInputs = [
python3
];
doCheck = true;
checkPhase = ''
runHook preCheck
pushd ../
python3 tools/run-tests.py --unittests
popd
runHook postCheck
'';
# Uses a custom lib variable that ignores what nixpkgs's cmake setupHook specifies.
postInstall = ''
mkdir $lib
mv "$out/lib" "$lib/"
'';
nativeInstallCheckInputs = [
validatePkgConfig
versionCheckHook
];
doInstallCheck = true;
postInstallCheck = ''
echo 'print("Hello" + " " + "World!")' | \
"$out/bin/jerry" - | \
cmp - <(echo "Hello World!")
'';
passthru = {
tests.pkg-config = testers.hasPkgConfigModules {
package = finalAttrs.finalPackage;
versionCheck = true;
};
updateScript = nix-update-script { };
};
meta = {
description = "Lightweight JavaScript engine for resource-constrained devices";
homepage = "https://jerryscript.net/";
downloadPage = "https://github.com/jerryscript-project/jerryscript/";
changelog = "https://github.com/jerryscript-project/jerryscript/releases/tag/v${finalAttrs.version}";
license = lib.licenses.asl20;
mainProgram = "jerry";
pkgConfigModules = [
"libjerry-core"
"libjerry-ext"
"libjerry-port"
];
maintainers = with lib.maintainers; [
wishstudio
];
};
})