1{ bazel
2, bazelTest
3, bazel-examples
4, stdenv
5, symlinkJoin
6, callPackage
7, darwin
8, extraBazelArgs ? ""
9, lib
10, openjdk8
11, jdk11_headless
12, runLocal
13, runtimeShell
14, writeScript
15, writeText
16, repoCache ? "unused"
17, distDir
18}:
19
20let
21
22 localDistDir = callPackage ./bazel-repository-cache.nix {
23 lockfile = ./cpp-test-MODULE.bazel.lock;
24
25 # Take all the rules_ deps, bazel_ deps and their transitive dependencies,
26 # but none of the platform-specific binaries, as they are large and useless.
27 requiredDepNamePredicate = name:
28 null == builtins.match ".*(macos|osx|linux|win|apple|android|maven).*" name
29 && null != builtins.match "(platforms|com_google_|protobuf|rules_|bazel_).*" name ;
30 };
31
32 mergedDistDir = symlinkJoin {
33 name = "mergedDistDir";
34 paths = [ localDistDir distDir ];
35 };
36
37 toolsBazel = writeScript "bazel" ''
38 #! ${runtimeShell}
39
40 export CXX='${stdenv.cc}/bin/clang++'
41 export LD='${darwin.cctools}/bin/ld'
42 export LIBTOOL='${darwin.cctools}/bin/libtool'
43 export CC='${stdenv.cc}/bin/clang'
44
45 # XXX: hack for macosX, this flags disable bazel usage of xcode
46 # See: https://github.com/bazelbuild/bazel/issues/4231
47 export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1
48
49 exec "$BAZEL_REAL" "$@"
50 '';
51
52 workspaceDir = runLocal "our_workspace" {} (''
53 cp -r ${bazel-examples}/java-tutorial $out
54 find $out -type d -exec chmod 755 {} \;
55 cp ${./cpp-test-MODULE.bazel} $out/MODULE.bazel
56 cp ${./cpp-test-MODULE.bazel.lock} $out/MODULE.bazel.lock
57 ''
58 + (lib.optionalString stdenv.isDarwin ''
59 mkdir $out/tools
60 cp ${toolsBazel} $out/tools/bazel
61 ''));
62
63 testBazel = bazelTest {
64 name = "bazel-test-java";
65 inherit workspaceDir;
66 bazelPkg = bazel;
67 buildInputs = [ (if lib.strings.versionOlder bazel.version "5.0.0" then openjdk8 else jdk11_headless) ];
68 bazelScript = ''
69 ${bazel}/bin/bazel \
70 run \
71 --announce_rc \
72 ${lib.optionalString (lib.strings.versionOlder "5.0.0" bazel.version)
73 "--toolchain_resolution_debug='@bazel_tools//tools/jdk:(runtime_)?toolchain_type'"
74 } \
75 --distdir=${mergedDistDir} \
76 --repository_cache=${mergedDistDir} \
77 --verbose_failures \
78 --curses=no \
79 --strict_java_deps=off \
80 //:ProjectRunner \
81 '' + lib.optionalString (lib.strings.versionOlder bazel.version "5.0.0") ''
82 --host_javabase='@local_jdk//:jdk' \
83 --java_toolchain='@bazel_tools//tools/jdk:toolchain_hostjdk8' \
84 --javabase='@local_jdk//:jdk' \
85 '' + extraBazelArgs;
86 };
87
88in testBazel
89