Merge "Fix genantlr() to support buck caching"
diff --git a/BUCK b/BUCK
index d467528..ee5ba75 100644
--- a/BUCK
+++ b/BUCK
@@ -8,11 +8,13 @@
 
 genrule(
   name = 'api',
-  cmd = 'echo',
+  cmd = '',
   srcs = [],
   deps = [
     ':extension-api',
+    ':extension-api-src',
     ':plugin-api',
+    ':plugin-api-src',
   ],
   out = '__fake.api__',
 )
@@ -29,18 +31,33 @@
   export_deps = True,
   visibility = ['PUBLIC'],
 )
+genrule(
+  name = 'extension-api-src',
+  cmd = 'ln -s $DEPS $OUT',
+  srcs = [],
+  deps = ['//gerrit-extension-api:api-src'],
+  out = 'extension-api-src.jar',
+)
+
+PLUGIN_API = [
+  '//gerrit-server:server',
+  '//gerrit-sshd:sshd',
+  '//gerrit-httpd:httpd',
+]
 
 java_binary(name = 'plugin-api', deps = [':plugin-lib'])
 java_library(
   name = 'plugin-lib',
-  deps = [
-    '//gerrit-server:server',
-    '//gerrit-sshd:sshd',
-    '//gerrit-httpd:httpd',
-  ],
+  deps = PLUGIN_API,
   export_deps = True,
   visibility = ['PUBLIC'],
 )
+java_binary(
+  name = 'plugin-api-src',
+  deps = [
+    '//gerrit-extension-api:api-src',
+  ] + [d + '-src' for d in PLUGIN_API],
+)
 
 genrule(
   name = 'download',
diff --git a/gerrit-extension-api/BUCK b/gerrit-extension-api/BUCK
index 75539f6..4145636 100644
--- a/gerrit-extension-api/BUCK
+++ b/gerrit-extension-api/BUCK
@@ -1,6 +1,14 @@
+SRCS = glob(['src/main/java/com/google/gerrit/extensions/**/*.java'])
+
 java_library2(
   name = 'api',
-  srcs = glob(['src/main/java/com/google/gerrit/extensions/**/*.java']),
+  srcs = SRCS,
   compile_deps = ['//lib/guice:guice'],
   visibility = ['PUBLIC'],
 )
+
+java_sources(
+  name = 'api-src',
+  srcs = SRCS,
+  visibility = ['PUBLIC'],
+)
diff --git a/gerrit-httpd/BUCK b/gerrit-httpd/BUCK
index 51f951d..c906459 100644
--- a/gerrit-httpd/BUCK
+++ b/gerrit-httpd/BUCK
@@ -1,7 +1,10 @@
+SRCS = glob(['src/main/java/**/*.java'])
+RESOURCES = glob(['src/main/resources/**/*'])
+
 java_library2(
   name = 'httpd',
-  srcs = glob(['src/main/java/**/*.java']),
-  resources = glob(['src/main/resources/**/*']),
+  srcs = SRCS,
+  resources = RESOURCES,
   deps = [
     '//gerrit-antlr:query_exception',
     '//gerrit-common:server',
@@ -33,6 +36,12 @@
   visibility = ['PUBLIC'],
 )
 
+java_sources(
+  name = 'httpd-src',
+  srcs = SRCS + RESOURCES,
+  visibility = ['PUBLIC'],
+)
+
 java_test(
   name = 'httpd_tests',
   srcs = glob(['src/test/java/**/*.java']),
diff --git a/gerrit-server/BUCK b/gerrit-server/BUCK
index 1d676a0..95f5b11 100644
--- a/gerrit-server/BUCK
+++ b/gerrit-server/BUCK
@@ -1,10 +1,13 @@
 include_defs('//lib/prolog/DEFS')
 
+SRCS = glob(['src/main/java/**/*.java'])
+RESOURCES =  glob(['src/main/resources/**/*'])
+
 # TODO(sop) break up gerrit-server java_library(), its too big
 java_library2(
   name = 'server',
-  srcs = glob(['src/main/java/**/*.java']),
-  resources = glob(['src/main/resources/**/*']),
+  srcs = SRCS,
+  resources = RESOURCES,
   deps = [
     '//gerrit-antlr:query_exception',
     '//gerrit-antlr:query_parser',
@@ -51,6 +54,12 @@
   visibility = ['PUBLIC'],
 )
 
+java_sources(
+  name = 'server-src',
+  srcs = SRCS + RESOURCES,
+  visibility = ['PUBLIC'],
+)
+
 prolog_cafe_library(
   name = 'common_rules',
   srcs = ['src/main/prolog/gerrit_common.pl'],
diff --git a/gerrit-sshd/BUCK b/gerrit-sshd/BUCK
index 769be58..93a3ef7 100644
--- a/gerrit-sshd/BUCK
+++ b/gerrit-sshd/BUCK
@@ -1,6 +1,8 @@
+SRCS = glob(['src/main/java/**/*.java'])
+
 java_library2(
   name = 'sshd',
-  srcs = glob(['src/main/java/**/*.java']),
+  srcs = SRCS,
   deps = [
     '//gerrit-extension-api:api',
     '//gerrit-cache-h2:cache-h2',
@@ -29,3 +31,9 @@
   ],
   visibility = ['PUBLIC'],
 )
+
+java_sources(
+  name = 'sshd-src',
+  srcs = SRCS,
+  visibility = ['PUBLIC'],
+)
diff --git a/tools/DEFS b/tools/DEFS
index 5b83ef0..50d325c 100644
--- a/tools/DEFS
+++ b/tools/DEFS
@@ -168,3 +168,14 @@
     ],
     visibility = visibility,
   )
+
+def java_sources(
+    name,
+    srcs,
+    visibility = []
+  ):
+  java_library(
+    name = name,
+    resources = srcs,
+    visibility = visibility,
+  )