Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{ 2 lib, 3 stdenv, 4 fetchFromGitHub, 5 6 # nativeBuildInputs 7 docbook_xml_dtd_45, 8 docbook_xsl, 9 installShellFiles, 10 libxslt, 11 pkg-config, 12 python3, 13 which, 14 15 # buildInputs 16 pcre, 17 18 versionCheckHook, 19 gitUpdater, 20}: 21 22stdenv.mkDerivation (finalAttrs: { 23 pname = "cppcheck"; 24 version = "2.17.1"; 25 26 outputs = [ 27 "out" 28 "man" 29 ]; 30 31 src = fetchFromGitHub { 32 owner = "danmar"; 33 repo = "cppcheck"; 34 tag = finalAttrs.version; 35 hash = "sha256-jsLhVKNr/4RWw2SVNkycm/xbcy1BKIf983oTnaJKV6U="; 36 }; 37 38 nativeBuildInputs = [ 39 docbook_xml_dtd_45 40 docbook_xsl 41 installShellFiles 42 libxslt 43 pkg-config 44 python3 45 which 46 ]; 47 48 buildInputs = [ 49 pcre 50 (python3.withPackages (ps: [ ps.pygments ])) 51 ]; 52 53 makeFlags = [ 54 "PREFIX=$(out)" 55 "MATCHCOMPILER=yes" 56 "FILESDIR=$(out)/share/cppcheck" 57 "HAVE_RULES=yes" 58 ]; 59 60 enableParallelBuilding = true; 61 strictDeps = true; 62 63 # test/testcondition.cpp:4949(TestCondition::alwaysTrueContainer): Assertion failed. 64 doCheck = !(stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch64); 65 doInstallCheck = true; 66 67 postPatch = '' 68 substituteInPlace Makefile \ 69 --replace-fail 'PCRE_CONFIG = $(shell which pcre-config)' 'PCRE_CONFIG = $(PKG_CONFIG) libpcre' 70 '' 71 # Expected: 72 # Internal Error. MathLib::toDoubleNumber: conversion failed: 1invalid 73 # 74 # Actual: 75 # Internal Error. MathLib::toDoubleNumber: input was not completely consumed: 1invalid 76 + lib.optionalString stdenv.hostPlatform.isDarwin '' 77 substituteInPlace test/testmathlib.cpp \ 78 --replace-fail \ 79 'ASSERT_THROW_INTERNAL_EQUALS(MathLib::toDoubleNumber("1invalid"), INTERNAL, "Internal Error. MathLib::toDoubleNumber: conversion failed: 1invalid");' \ 80 "" \ 81 --replace-fail \ 82 'ASSERT_THROW_INTERNAL_EQUALS(MathLib::toDoubleNumber("1.1invalid"), INTERNAL, "Internal Error. MathLib::toDoubleNumber: conversion failed: 1.1invalid");' \ 83 "" 84 ''; 85 86 postBuild = '' 87 make DB2MAN=${docbook_xsl}/xml/xsl/docbook/manpages/docbook.xsl man 88 ''; 89 90 postInstall = '' 91 installManPage cppcheck.1 92 ''; 93 94 nativeInstallCheckInputs = [ 95 versionCheckHook 96 ]; 97 versionCheckProgramArg = "--version"; 98 installCheckPhase = '' 99 runHook preInstallCheck 100 101 echo 'int main() {}' > ./installcheck.cpp 102 $out/bin/cppcheck ./installcheck.cpp > /dev/null 103 104 runHook postInstallCheck 105 ''; 106 107 passthru = { 108 updateScript = gitUpdater { }; 109 }; 110 111 meta = { 112 description = "Static analysis tool for C/C++ code"; 113 longDescription = '' 114 Check C/C++ code for memory leaks, mismatching allocation-deallocation, 115 buffer overruns and more. 116 ''; 117 homepage = "http://cppcheck.sourceforge.net"; 118 license = lib.licenses.gpl3Plus; 119 maintainers = with lib.maintainers; [ joachifm ]; 120 platforms = lib.platforms.unix; 121 }; 122})