diff --git a/pkgs/development/tools/packcc/default.nix b/pkgs/development/tools/packcc/default.nix new file mode 100644 index 000000000000..77ad73158049 --- /dev/null +++ b/pkgs/development/tools/packcc/default.nix @@ -0,0 +1,66 @@ +{ lib +, stdenv +, fetchFromGitHub +, bats +, uncrustify +, testers +, packcc +}: + +stdenv.mkDerivation rec { + pname = "packcc"; + version = "1.8.0"; + + src = fetchFromGitHub { + owner = "arithy"; + repo = "packcc"; + rev = "v${version}"; + hash = "sha256-T7PWM5IGly6jpGt04dh5meQjrZPUTs8VEFTQEPO5RSw="; + }; + + dontConfigure = true; + + preBuild = '' + cd build/${if stdenv.cc.isGNU then "gcc" + else if stdenv.cc.isClang then "clang" + else throw "Unsupported C compiler"} + ''; + + doCheck = true; + + checkInputs = [ bats uncrustify ]; + + preCheck = '' + patchShebangs ../../tests + + # Disable a failing test. + rm -rf ../../tests/style.d + ''; + + installPhase = '' + runHook preInstall + + install -Dm755 release/bin/packcc $out/bin/packcc + + runHook postInstall + ''; + + passthru.tests.version = testers.testVersion { + package = packcc; + }; + + meta = with lib; { + description = "A parser generator for C"; + longDescription = '' + PackCC is a parser generator for C. Its main features are as follows: + - Generates your parser in C from a grammar described in a PEG, + - Gives your parser great efficiency by packrat parsing, + - Supports direct and indirect left-recursive grammar rules. + ''; + homepage = "https://github.com/arithy/packcc"; + changelog = "https://github.com/arithy/packcc/releases/tag/${src.rev}"; + license = licenses.mit; + maintainers = with maintainers; [ azahi ]; + platforms = platforms.unix; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f1733a14dbb4..d044b9044906 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -725,6 +725,8 @@ with pkgs; owl = callPackage ../tools/networking/owl { }; + packcc = callPackage ../development/tools/packcc { }; + packer = callPackage ../development/tools/packer { }; packr = callPackage ../development/libraries/packr { };