diff options
Diffstat (limited to 'nixpkgs/pkgs/development/tools/build-managers/bear')
-rw-r--r-- | nixpkgs/pkgs/development/tools/build-managers/bear/default.nix | 93 | ||||
-rw-r--r-- | nixpkgs/pkgs/development/tools/build-managers/bear/fix-functional-tests.patch | 32 |
2 files changed, 125 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bear/default.nix b/nixpkgs/pkgs/development/tools/build-managers/bear/default.nix new file mode 100644 index 000000000000..431f7b1773f6 --- /dev/null +++ b/nixpkgs/pkgs/development/tools/build-managers/bear/default.nix @@ -0,0 +1,93 @@ +{ lib, stdenv +, fetchFromGitHub +, fetchpatch +, cmake +, ninja +, pkg-config +, grpc +, protobuf +, openssl +, nlohmann_json +, gtest +, spdlog +, c-ares +, zlib +, sqlite +, re2 +, lit +, python3 +, coreutils +}: + +stdenv.mkDerivation rec { + pname = "bear"; + version = "3.1.3"; + + src = fetchFromGitHub { + owner = "rizsotto"; + repo = pname; + rev = version; + hash = "sha256-1nZPzgLWcmaRkOUXdm16IW2Nw/p1w8GBGEfZX/v+En0="; + }; + + nativeBuildInputs = [ + cmake + ninja + pkg-config + + # Used for functional tests, which run during buildPhase. + lit + python3 + ]; + + buildInputs = [ + grpc + protobuf + openssl + nlohmann_json + gtest + spdlog + c-ares + zlib + sqlite + re2 + ]; + + cmakeFlags = [ + # Build system and generated files concatenate install prefix and + # CMAKE_INSTALL_{BIN,LIB}DIR, which breaks if these are absolute paths. + "-DCMAKE_INSTALL_BINDIR=bin" + "-DCMAKE_INSTALL_LIBDIR=lib" + (lib.cmakeBool "ENABLE_UNIT_TESTS" false) + (lib.cmakeBool "ENABLE_FUNC_TESTS" false) + ]; + + patches = [ + # Fix toolchain environment variable handling and the Darwin SIP check. + ./fix-functional-tests.patch + ]; + + postPatch = '' + patchShebangs test/bin + + # /usr/bin/env is used in test commands and embedded scripts. + find test -name '*.sh' \ + -exec sed -ie 's|/usr/bin/env|${coreutils}/bin/env|g' {} + + ''; + + # Functional tests use loopback networking. + __darwinAllowLocalNetworking = true; + + meta = with lib; { + description = "Tool that generates a compilation database for clang tooling"; + longDescription = '' + Note: the bear command is very useful to generate compilation commands + e.g. for YouCompleteMe. You just enter your development nix-shell + and run `bear make`. It's not perfect, but it gets a long way. + ''; + homepage = "https://github.com/rizsotto/Bear"; + license = licenses.gpl3Plus; + platforms = platforms.unix; + maintainers = with maintainers; [ babariviere ]; + }; +} diff --git a/nixpkgs/pkgs/development/tools/build-managers/bear/fix-functional-tests.patch b/nixpkgs/pkgs/development/tools/build-managers/bear/fix-functional-tests.patch new file mode 100644 index 000000000000..99d64f26d077 --- /dev/null +++ b/nixpkgs/pkgs/development/tools/build-managers/bear/fix-functional-tests.patch @@ -0,0 +1,32 @@ +diff --git a/test/lit.cfg b/test/lit.cfg +index 118c979..b69fecc 100644 +--- a/test/lit.cfg ++++ b/test/lit.cfg +@@ -207,13 +207,8 @@ def is_preload_disabled(): + if is_windows: + return True + elif sys.platform == 'darwin': +- command = ['csrutil', 'status'] +- pattern = re.compile(r'System Integrity Protection status:\s+enabled') +- try: +- output = subprocess.check_output(command, stderr=subprocess.STDOUT) +- return any(pattern.match(line) for line in output.decode('utf-8').splitlines()) +- except (OSError, subprocess.CalledProcessError): +- return False ++ # csrutil(8) isn't available in the Nix build sandbox. ++ return True + else: + return False + +@@ -221,6 +216,11 @@ def is_preload_disabled(): + if not is_preload_disabled(): + config.available_features.add('preload') + ++# Preserve the variables required for the Nix toolchain wrappers. ++for var, value in os.environ.items(): ++ if var.startswith('NIX_'): ++ config.environment[var] = value ++ + print(config.substitutions) + print(config.environment) + print(config.available_features) |