Match bazel's semantics for genrule cmd
diff --git a/demo/BUCK b/demo/BUCK
index 78e75e6..eebe5c2 100644
--- a/demo/BUCK
+++ b/demo/BUCK
@@ -1,3 +1,5 @@
+load("//tools/buck:genrule.bzl", "genrule")
+
rust_binary(
name = "demo",
srcs = glob(["src/**/*.rs"]),
diff --git a/tests/BUCK b/tests/BUCK
index a96bfb8..79ae790 100644
--- a/tests/BUCK
+++ b/tests/BUCK
@@ -1,3 +1,5 @@
+load("//tools/buck:genrule.bzl", "genrule")
+
rust_test(
name = "test",
srcs = ["test.rs"],
diff --git a/tools/buck/genrule.bzl b/tools/buck/genrule.bzl
new file mode 100644
index 0000000..b5364b7
--- /dev/null
+++ b/tools/buck/genrule.bzl
@@ -0,0 +1,8 @@
+def genrule(cmd, **kwargs):
+ # Resolve a distracting inconsistency between Buck and Bazel.
+ # Bazel creates the directory for your output file, while Buck expects the
+ # cmd to create it.
+ #
+ # TODO: send this as a PR to Buck, because Bazel's behavior here is better.
+ cmd = "mkdir -p `dirname ${OUT}`; " + cmd
+ native.genrule(cmd = cmd, **kwargs)