diff options
Diffstat (limited to 'nixpkgs/pkgs/development/tools/build-managers/bazel/protobuf-test.nix')
-rw-r--r-- | nixpkgs/pkgs/development/tools/build-managers/bazel/protobuf-test.nix | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/tools/build-managers/bazel/protobuf-test.nix b/nixpkgs/pkgs/development/tools/build-managers/bazel/protobuf-test.nix new file mode 100644 index 000000000000..90065be67bc7 --- /dev/null +++ b/nixpkgs/pkgs/development/tools/build-managers/bazel/protobuf-test.nix @@ -0,0 +1,152 @@ +{ + bazel +, bazelTest +, fetchFromGitHub +, fetchurl +, gccStdenv +, lib +, openjdk8 +, runLocal +, runtimeShell +, writeScript +, writeText +}: + +let + com_google_protobuf = fetchFromGitHub { + owner = "protocolbuffers"; + repo = "protobuf"; + rev = "v3.7.0"; + sha256 = "0nlxif4cajqllsj2vdh7zp14ag48fb8lsa64zmq8625q9m2lcmdh"; + }; + + bazel_skylib = fetchFromGitHub { + owner = "bazelbuild"; + repo = "bazel-skylib"; + rev = "f83cb8dd6f5658bc574ccd873e25197055265d1c"; + sha256 = "091fb0ky0956wgv8gghy9ay3yfx6497mb72qvibf0y9dllmxyn9l"; + }; + + net_zlib = fetchurl rec { + url = "https://zlib.net/zlib-1.2.11.tar.gz"; + sha256 = "c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1"; + + passthru.sha256 = sha256; + }; + + WORKSPACE = writeText "WORKSPACE" '' + workspace(name = "our_workspace") + + load("//:proto-support.bzl", "protobuf_deps") + protobuf_deps() + ''; + + protoSupport = writeText "proto-support.bzl" '' + """Load dependencies needed to compile the protobuf library as a 3rd-party consumer.""" + + load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + + def protobuf_deps(): + """Loads common dependencies needed to compile the protobuf library.""" + + if "zlib" not in native.existing_rules(): + # proto_library, cc_proto_library, and java_proto_library rules implicitly + # depend on @com_google_protobuf for protoc and proto runtimes. + # This statement defines the @com_google_protobuf repo. + native.local_repository( + name = "com_google_protobuf", + path = "${com_google_protobuf}", + ) + native.local_repository( + name = "bazel_skylib", + path = "${bazel_skylib}", + ) + + native.bind( + name = "zlib", + actual = "@net_zlib//:zlib", + ) + http_archive( + name = "net_zlib", + build_file = "@com_google_protobuf//:third_party/zlib.BUILD", + sha256 = "${net_zlib.sha256}", + strip_prefix = "zlib-1.2.11", + urls = ["file://${net_zlib}"], + ) + ''; + + personProto = writeText "person.proto" '' + syntax = "proto3"; + + package person; + + message Person { + string name = 1; + int32 id = 2; + string email = 3; + } + ''; + + personBUILD = writeText "BUILD" '' + proto_library( + name = "person_proto", + srcs = ["person.proto"], + visibility = ["//visibility:public"], + ) + + java_proto_library( + name = "person_java_proto", + deps = [":person_proto"], + ) + + cc_proto_library( + name = "person_cc_proto", + deps = [":person_proto"], + ) + ''; + + toolsBazel = writeScript "bazel" '' + #! ${runtimeShell} + + export CXX='${gccStdenv.cc}/bin/g++' + export LD='${gccStdenv.cc}/bin/ld' + export CC='${gccStdenv.cc}/bin/gcc' + + # XXX: hack for macosX, this flags disable bazel usage of xcode + # See: https://github.com/bazelbuild/bazel/issues/4231 + export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1 + + exec "$BAZEL_REAL" "$@" + ''; + + workspaceDir = runLocal "our_workspace" {} ('' + mkdir $out + cp ${WORKSPACE} $out/WORKSPACE + touch $out/BUILD.bazel + cp ${protoSupport} $out/proto-support.bzl + mkdir $out/person + cp ${personProto} $out/person/person.proto + cp ${personBUILD} $out/person/BUILD.bazel + '' + + (lib.optionalString gccStdenv.isDarwin '' + mkdir $out/tools + cp ${toolsBazel} $out/tools/bazel + '')); + + testBazel = bazelTest { + name = "bazel-test-protocol-buffers"; + inherit workspaceDir; + bazelPkg = bazel; + buildInputs = [ openjdk8 ]; + bazelScript = '' + ${bazel}/bin/bazel \ + build \ + --host_javabase='@local_jdk//:jdk' \ + --java_toolchain='@bazel_tools//tools/jdk:toolchain_hostjdk8' \ + --javabase='@local_jdk//:jdk' \ + --verbose_failures \ + //... + ''; + }; + +in testBazel |