1{
2 bazel
3, bazelTest
4, stdenv
5, darwin
6, extraBazelArgs ? ""
7, lib
8, runLocal
9, runtimeShell
10, writeScript
11, writeText
12, distDir
13}:
14
15let
16 toolsBazel = writeScript "bazel" ''
17 #! ${runtimeShell}
18
19 export CXX='${stdenv.cc}/bin/clang++'
20 export LD='${darwin.cctools}/bin/ld'
21 export LIBTOOL='${darwin.cctools}/bin/libtool'
22 export CC='${stdenv.cc}/bin/clang'
23
24 # XXX: hack for macosX, this flags disable bazel usage of xcode
25 # See: https://github.com/bazelbuild/bazel/issues/4231
26 export BAZEL_USE_CPP_ONLY_TOOLCHAIN=1
27
28 exec "$BAZEL_REAL" "$@"
29 '';
30
31 WORKSPACE = writeText "WORKSPACE" ''
32 workspace(name = "our_workspace")
33 '';
34
35 pythonLib = writeText "lib.py" ''
36 def foo():
37 return 43
38 '';
39
40 pythonBin = writeText "bin.py" ''
41 from lib import foo
42
43 assert foo() == 43
44 '';
45
46 pythonBUILD = writeText "BUILD" ''
47 py_library(
48 name = "lib",
49 srcs = [ "lib.py" ],
50 )
51
52 py_binary(
53 name = "bin",
54 srcs = [ "bin.py" ],
55 imports = [ "." ],
56 deps = [ ":lib" ],
57 )
58 '';
59
60 workspaceDir = runLocal "our_workspace" {} (''
61 mkdir $out
62 cp ${WORKSPACE} $out/WORKSPACE
63 mkdir $out/python
64 cp ${pythonLib} $out/python/lib.py
65 cp ${pythonBin} $out/python/bin.py
66 cp ${pythonBUILD} $out/python/BUILD.bazel
67 ''
68 + (lib.optionalString stdenv.isDarwin ''
69 mkdir $out/tools
70 cp ${toolsBazel} $out/tools/bazel
71 ''));
72
73 testBazel = bazelTest {
74 name = "${bazel.pname}-test-builtin-rules";
75 inherit workspaceDir;
76 bazelPkg = bazel;
77 bazelScript = ''
78 ${bazel}/bin/bazel \
79 run \
80 --distdir=${distDir} \
81 ${extraBazelArgs} \
82 //python:bin
83 '';
84 };
85
86in testBazel