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