1{
2 bazel,
3 bazelTest,
4 bazel-examples,
5 stdenv,
6 cctools,
7 extraBazelArgs ? "",
8 lib,
9 openjdk8,
10 jdk11_headless,
11 runLocal,
12 runtimeShell,
13 writeScript,
14 writeText,
15 distDir,
16}:
17
18let
19
20 toolsBazel = writeScript "bazel" ''
21 #! ${runtimeShell}
22
23 export CXX='${stdenv.cc}/bin/clang++'
24 export LD='${cctools}/bin/ld'
25 export LIBTOOL='${cctools}/bin/libtool'
26 export CC='${stdenv.cc}/bin/clang'
27
28 # XXX: hack for macosX, this flags disable bazel usage of xcode
29 # See: https://github.com/bazelbuild/bazel/issues/4231
30 export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1
31
32 exec "$BAZEL_REAL" "$@"
33 '';
34
35 workspaceDir = runLocal "our_workspace" { } (
36 ''
37 cp -r ${bazel-examples}/java-tutorial $out
38 find $out -type d -exec chmod 755 {} \;
39 ''
40 + (lib.optionalString stdenv.hostPlatform.isDarwin ''
41 mkdir $out/tools
42 cp ${toolsBazel} $out/tools/bazel
43 '')
44 );
45
46 testBazel = bazelTest {
47 name = "${bazel.pname}-test-java";
48 inherit workspaceDir;
49 bazelPkg = bazel;
50 buildInputs = [
51 (if lib.strings.versionOlder bazel.version "5.0.0" then openjdk8 else jdk11_headless)
52 ];
53 bazelScript =
54 ''
55 ${bazel}/bin/bazel \
56 run \
57 --announce_rc \
58 ${lib.optionalString (lib.strings.versionOlder "5.0.0" bazel.version) "--toolchain_resolution_debug='@bazel_tools//tools/jdk:(runtime_)?toolchain_type'"} \
59 --distdir=${distDir} \
60 --verbose_failures \
61 --curses=no \
62 --strict_java_deps=off \
63 //:ProjectRunner \
64 ''
65 + lib.optionalString (lib.strings.versionOlder bazel.version "5.0.0") ''
66 --host_javabase='@local_jdk//:jdk' \
67 --java_toolchain='@bazel_tools//tools/jdk:toolchain_hostjdk8' \
68 --javabase='@local_jdk//:jdk' \
69 ''
70 + extraBazelArgs;
71 };
72
73in
74testBazel