Provide helpful errors when bucklets are missing

Based on experience, most users clone without --recursive, and don't
know to look for submodules when something fails. This causes the
first "buck build" to fail with a cryptic error:

  [+] PARSING BUILD FILES...0.0s
  Traceback (most recent call last):
    File ".../buck-out/tmp/buck_run.TJfecZrGH8/buck3109317914122554851.py", line 1205, in <module>
      main()
    File ".../buck-out/tmp/buck_run.TJfecZrGH8/buck3109317914122554851.py", line 588, in main
      buildFileProcessor.process(build_file.rstrip())
    File ".../buck-out/tmp/buck_run.TJfecZrGH8/buck3109317914122554851.py", line 487, in process
      build_env['BUILD_FILE_SYMBOL_TABLE'])
    File "..././BUCK", line 2, in <module>
      include_defs('//bucklets/maven_package.bucklet')
    File ".../buck-out/tmp/buck_run.TJfecZrGH8/buck3109317914122554851.py", line 85, in invoke
      return self.func(*args, **updated_kwargs)
    File ".../buck-out/tmp/buck_run.TJfecZrGH8/buck3109317914122554851.py", line 403, in include_defs
      execfile(include_file, build_env['BUILD_FILE_SYMBOL_TABLE'])
  IOError: [Errno 2] No such file or directory: '.../bucklets/maven_package.bucklet'
BUILD FAILED: Parse error for BUCK file ./BUCK: End of input at line 1 column 1

Instead, provide a wrapper around include_defs specifically for
bucklets, which checks that the bucklets directory exists and is
non-empty. If it is empty, buck fails with a more useful error:

  [+] PARSING BUILD FILES...0.2s
  Bucklets directory is empty: .../gitiles/bucklets
  Run `git submodule init`
  BUILD FAILED: Parse error for BUCK file ./BUCK: End of input at line 1 column 1

The unfortunate chicken-and-egg problem with this approach is this
common functionality cannot live in the bucklets repo itself.

Change-Id: I767f582f8978075355203af126d253dfc28ea8cd
diff --git a/BUCK b/BUCK
index 4c72c31..dc197fa 100644
--- a/BUCK
+++ b/BUCK
@@ -1,5 +1,6 @@
 include_defs('//VERSION')
-include_defs('//bucklets/maven_package.bucklet')
+include_defs('//bucklets.defs')
+include_bucklets(['maven_package.bucklet'])
 
 DEPS = [
   '//gitiles-dev:dev',
diff --git a/bucklets.defs b/bucklets.defs
new file mode 100644
index 0000000..56c0a96
--- /dev/null
+++ b/bucklets.defs
@@ -0,0 +1,20 @@
+import os
+import sys
+
+def include_bucklets(names):
+  d = os.getcwd()
+  while not os.path.lexists(os.path.join(d, '.buckversion')):
+    d = os.path.dirname(d)
+
+  bd = os.path.join(d, 'bucklets')
+  if not os.path.isdir(bd) or not os.listdir(bd):
+    sys.stderr.write(('Bucklets directory is missing or empty: %s\n'
+                      'Run `git submodule update --init`') % bd)
+    sys.exit(1)
+
+  for name in names:
+    path = os.path.join(bd, name)
+    if not os.path.isfile(path):
+      sys.stderr.write('Missing bucklet: %s\n' % path)
+      sys.exit(1)
+    include_defs('//bucklets/%s' % name)
diff --git a/gitiles-servlet/BUCK b/gitiles-servlet/BUCK
index 217075b..dcbeaea 100644
--- a/gitiles-servlet/BUCK
+++ b/gitiles-servlet/BUCK
@@ -1,5 +1,8 @@
-include_defs('//bucklets/java_sources.bucklet')
-include_defs('//bucklets/java_doc.bucklet')
+include_defs('//bucklets.defs')
+include_bucklets([
+  'java_sources.bucklet',
+  'java_doc.bucklet',
+])
 
 SRCS = glob(['src/main/java/**/*.java'])
 RSRC = glob(['src/main/resources/**/*'])
diff --git a/gitiles-war/BUCK b/gitiles-war/BUCK
index 0523e62..37708a5 100644
--- a/gitiles-war/BUCK
+++ b/gitiles-war/BUCK
@@ -1,4 +1,5 @@
-include_defs('//bucklets/war.bucklet')
+include_defs('//bucklets.defs')
+include_bucklets(['war.bucklet'])
 
 war(
   name = 'gitiles',
diff --git a/lib/BUCK b/lib/BUCK
index a5f03b0..bdaaf61 100644
--- a/lib/BUCK
+++ b/lib/BUCK
@@ -1,4 +1,5 @@
-include_defs('//bucklets/maven_jar.bucklet')
+include_defs('//bucklets.defs')
+include_bucklets(['maven_jar.bucklet'])
 
 maven_jar(
   name = 'guava',
diff --git a/lib/guice/BUCK b/lib/guice/BUCK
index 1643150..59a4655 100644
--- a/lib/guice/BUCK
+++ b/lib/guice/BUCK
@@ -1,4 +1,5 @@
-include_defs('//bucklets/maven_jar.bucklet')
+include_defs('//bucklets.defs')
+include_bucklets(['maven_jar.bucklet'])
 
 VERSION = '4.0-beta'
 EXCLUDE = [
diff --git a/lib/jetty/BUCK b/lib/jetty/BUCK
index 525f94c..c007231 100644
--- a/lib/jetty/BUCK
+++ b/lib/jetty/BUCK
@@ -1,4 +1,5 @@
-include_defs('//bucklets/maven_jar.bucklet')
+include_defs('//bucklets.defs')
+include_bucklets(['maven_jar.bucklet'])
 
 VERS = '8.1.7.v20120910'
 EXCLUDE = ['about.html']
diff --git a/lib/jgit/BUCK b/lib/jgit/BUCK
index 8a83a08..9e7225c 100644
--- a/lib/jgit/BUCK
+++ b/lib/jgit/BUCK
@@ -1,4 +1,5 @@
-include_defs('//bucklets/maven_jar.bucklet')
+include_defs('//bucklets.defs')
+include_bucklets(['maven_jar.bucklet'])
 
 REPO = GERRIT
 VERS = '3.3.2.201404171909-r.128-g79448bc'
diff --git a/lib/slf4j/BUCK b/lib/slf4j/BUCK
index b04b670..410061f 100644
--- a/lib/slf4j/BUCK
+++ b/lib/slf4j/BUCK
@@ -1,4 +1,5 @@
-include_defs('//bucklets/maven_jar.bucklet')
+include_defs('//bucklets.defs')
+include_bucklets(['maven_jar.bucklet'])
 
 VERS = '1.6.1'
 
diff --git a/lib/soy/BUCK b/lib/soy/BUCK
index f97bdc0..050239d 100644
--- a/lib/soy/BUCK
+++ b/lib/soy/BUCK
@@ -1,4 +1,5 @@
-include_defs('//bucklets/maven_jar.bucklet')
+include_defs('//bucklets.defs')
+include_bucklets(['maven_jar.bucklet'])
 
 maven_jar(
   name = 'soy',