Add all the sources to //:srcs filegroup and add a check to detect
missing file to it.

We need to activate this check on presubmits

--
Change-Id: Ia95e92d3816ce92bb69bc0e2cf56e9c60b68d970
Reviewed-on: https://bazel-review.googlesource.com/#/c/3949/
MOS_MIGRATED_REVID=126404792
diff --git a/BUILD b/BUILD
index f7fea21..0e72565 100644
--- a/BUILD
+++ b/BUILD
@@ -27,6 +27,7 @@
             "bazel-*",  # convenience symlinks
             "out",  # IntelliJ with setup-intellij.sh
             "output",  # output of compile.sh
+            "WORKSPACE.user.bzl",  # generated workspace file
             ".*",  # mainly .git* files
         ],
     ) + [
diff --git a/compile.sh b/compile.sh
index 59ec71c..eceefa5 100755
--- a/compile.sh
+++ b/compile.sh
@@ -39,21 +39,24 @@
   echo "  Commands for developers:" >&2
   echo "     all         = compile,determinism,test" >&2
   echo "     determinism = test for stability of Bazel builds" >&2
+  echo "     srcs        = test that //:srcs contains all the sources" >&2
   echo "     test        = run the full test suite of Bazel" >&2
   exit 1
 }
 
 function parse_options() {
-  local keywords="(compile|all|determinism|bootstrap|test)"
+  local keywords="(compile|all|determinism|bootstrap|srcs|test)"
   COMMANDS="${1:-compile}"
   [[ "${COMMANDS}" =~ ^$keywords(,$keywords)*$ ]] || usage "$@"
   DO_COMPILE=
   DO_CHECKSUM=
   DO_FULL_CHECKSUM=1
   DO_TESTS=
+  DO_SRCS_TEST=
   [[ "${COMMANDS}" =~ (compile|all) ]] && DO_COMPILE=1
   [[ "${COMMANDS}" =~ (bootstrap|determinism|all) ]] && DO_CHECKSUM=1
   [[ "${COMMANDS}" =~ (bootstrap) ]] && DO_FULL_CHECKSUM=
+  [[ "${COMMANDS}" =~ (srcs|all) ]] && DO_SRCS_TEST=1
   [[ "${COMMANDS}" =~ (test|all) ]] && DO_TESTS=1
 
   BAZEL_BIN=${2:-"bazel-bin/src/bazel"}
@@ -128,6 +131,35 @@
 fi
 
 #
+# Test that //:srcs contains all the sources
+#
+if [ $DO_SRCS_TEST ]; then
+  new_step "Checking that //:srcs contains all the sources"
+  log "Querying //:srcs"
+  ${BAZEL} query 'kind("source file", deps(//:srcs))' 2>/dev/null \
+    | grep -v '^@' \
+    | sed -e 's|^//||' | sed 's|^:||' | sed 's|:|/|' \
+    | sort -u >"${OUTPUT_DIR}/srcs-query"
+
+  log "Finding all files"
+  # See file BUILD for the list of grep -v exceptions.
+  # tools/defaults package is hidden by Bazel so cannot be put in the srcs.
+  find . -type f | sed 's|./||' \
+    | grep -v '^bazel-' | grep -v '^WORKSPACE.user.bzl' \
+    | grep -v '^\.' | grep -v '^out/' | grep -v '^output/' \
+    | grep -v '^tools/defaults/BUILD' \
+    | sort -u >"${OUTPUT_DIR}/srcs-find"
+
+  log "Diffing"
+  res="$(diff -U 0 "${OUTPUT_DIR}/srcs-find" "${OUTPUT_DIR}/srcs-query" | sed 's|^-||' | grep -Ev '^(@@|\+\+|--)' || true)"
+
+  if [ -n "${res}" ]; then
+    fail "//:srcs filegroup do not contains all the sources, missing:
+${res}"
+  fi
+fi
+
+#
 # Tests
 #
 if [ $DO_TESTS ]; then
diff --git a/examples/BUILD b/examples/BUILD
index 781c81a..b2ec284 100644
--- a/examples/BUILD
+++ b/examples/BUILD
@@ -2,11 +2,13 @@
 
 filegroup(
     name = "srcs",
-    srcs = [
+    srcs = glob(["**"]) + [
+        "//examples/android/java/bazel:srcs",
         "//examples/cpp:srcs",
         "//examples/gen:srcs",
         "//examples/java-native:srcs",
         "//examples/java-skylark:srcs",
+        "//examples/j2objc:srcs",
         "//examples/objc:srcs",
         "//examples/py:srcs",
         "//examples/py_native:srcs",
diff --git a/examples/android/java/bazel/BUILD b/examples/android/java/bazel/BUILD
index 293fb5d..ad550b5 100644
--- a/examples/android/java/bazel/BUILD
+++ b/examples/android/java/bazel/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//examples:__pkg__"],
+)
+
 android_library(
     name = "lib",
     srcs = ["Lib.java"],
diff --git a/examples/cpp/BUILD b/examples/cpp/BUILD
index 7c0543e..3048a0d 100644
--- a/examples/cpp/BUILD
+++ b/examples/cpp/BUILD
@@ -26,8 +26,5 @@
 
 filegroup(
     name = "srcs",
-    srcs = ["BUILD"] + glob([
-        "**/*.cc",
-        "**/*.h",
-    ]),
+    srcs = glob(["**"]),
 )
diff --git a/examples/j2objc/BUILD b/examples/j2objc/BUILD
index 41c7bb7..0a3d389 100644
--- a/examples/j2objc/BUILD
+++ b/examples/j2objc/BUILD
@@ -42,10 +42,6 @@
 
 filegroup(
     name = "srcs",
-    srcs = glob([
-        "J2ObjcExample/*",
-        "src/**",
-        "BUILD",
-    ]),
+    srcs = glob(["**"]),
     visibility = ["//examples:__pkg__"],
 )
diff --git a/examples/java-native/BUILD b/examples/java-native/BUILD
index b698a88..4f4ecd1 100644
--- a/examples/java-native/BUILD
+++ b/examples/java-native/BUILD
@@ -2,7 +2,7 @@
 
 filegroup(
     name = "srcs",
-    srcs = [
+    srcs = glob(["**"]) + [
         "//examples/java-native/src/main/java/com/example/myproject:srcs",
         "//examples/java-native/src/main/resources:srcs",
         "//examples/java-native/src/test/java/com/example/myproject:srcs",
diff --git a/examples/java-skylark/BUILD b/examples/java-skylark/BUILD
index 9a76f2b..74541ae 100644
--- a/examples/java-skylark/BUILD
+++ b/examples/java-skylark/BUILD
@@ -2,7 +2,7 @@
 
 filegroup(
     name = "srcs",
-    srcs = [
+    srcs = glob(["**"]) + [
         "//examples/java-skylark/src/main/java/com/example/myproject:srcs",
         "//examples/java-skylark/src/main/resources:srcs",
         "//examples/java-skylark/src/test/java/com/example/myproject:srcs",
diff --git a/examples/shell/BUILD b/examples/shell/BUILD
index 9aba320..4b51df1 100644
--- a/examples/shell/BUILD
+++ b/examples/shell/BUILD
@@ -24,5 +24,5 @@
 
 filegroup(
     name = "srcs",
-    srcs = ["BUILD"] + glob(["**/*.sh"]) + glob(["**/*.txt"]),
+    srcs = glob(["**"]),
 )
diff --git a/scripts/BUILD b/scripts/BUILD
index 26aab55..398ce4c 100644
--- a/scripts/BUILD
+++ b/scripts/BUILD
@@ -34,6 +34,9 @@
 
 filegroup(
     name = "srcs",
-    srcs = glob(["**"]),
+    srcs = glob(["**"]) + [
+        "//scripts/release:srcs",
+        "//scripts/packages:srcs",
+    ],
     visibility = ["//:__pkg__"],
 )
diff --git a/scripts/packages/BUILD b/scripts/packages/BUILD
index 05702d1..44b4e1c 100644
--- a/scripts/packages/BUILD
+++ b/scripts/packages/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//scripts:__pkg__"],
+)
+
 sh_binary(
     name = "package-info-generator",
     srcs = ["package_info_generator.sh"],
diff --git a/scripts/release/BUILD b/scripts/release/BUILD
index 7ccd9d5..a6a4ab0 100644
--- a/scripts/release/BUILD
+++ b/scripts/release/BUILD
@@ -1,6 +1,12 @@
 # Scripts for building Bazel releases
 package(default_visibility = ["//visibility:private"])
 
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//scripts:__pkg__"],
+)
+
 sh_library(
     name = "relnotes",
     srcs = ["relnotes.sh"],
diff --git a/src/BUILD b/src/BUILD
index 13538cd..321f7fe 100644
--- a/src/BUILD
+++ b/src/BUILD
@@ -133,7 +133,7 @@
         "//third_party:gpl-srcs",
         "//third_party/iossim:srcs",
         "//third_party/java/jarjar:srcs",
-        "//third_party/java/jdk/langtools:srcs",
+        "//third_party/java/jdk/langtools:test-srcs",
         "//third_party/py/concurrent:srcs",
         "//third_party/py/gflags:srcs",
         "//src/java_tools/buildjar/java/com/google/devtools/build/buildjar/jarhelper:srcs",
@@ -295,6 +295,13 @@
         "//src/objc_tools/bundlemerge:srcs",
         "//src/objc_tools/plmerge:srcs",
         "//src/objc_tools/xcodegen:srcs",
+        "//src/test/cpp:srcs",
+        "//src/test/java/com/google/devtools/build/android:srcs",
+        "//src/test/java/com/google/devtools/build/docgen:srcs",
+        "//src/test/java/com/google/devtools/build/lib:srcs",
+        "//src/test/java/com/google/devtools/build/skyframe:srcs",
+        "//src/test/java/com/google/devtools/common/options:srcs",
+        "//src/test/shell:srcs",
         "//src/tools/android/java/com/google/devtools/build/android:srcs",
         "//src/tools/generate_workspace:srcs",
         "//src/tools/xcode/actoolwrapper:srcs",
@@ -309,6 +316,7 @@
         "//src/tools/xcode/xcodelocator:srcs",
         "//src/tools/xcode/xcrunwrapper:srcs",
         "//src/tools/xcode-common:srcs",
+        "//src/tools/remote_worker:srcs",
     ],
     visibility = ["//:__pkg__"],
 )
diff --git a/src/java_tools/buildjar/BUILD b/src/java_tools/buildjar/BUILD
index 56298df..5c379c0 100644
--- a/src/java_tools/buildjar/BUILD
+++ b/src/java_tools/buildjar/BUILD
@@ -41,6 +41,8 @@
         "//src/java_tools/buildjar/java/com/google/devtools/build/buildjar:srcs",
         "//src/java_tools/buildjar/java/com/google/devtools/build/java/bazel:srcs",
         "//src/java_tools/buildjar/java/com/google/devtools/build/java/turbine:srcs",
+        "//src/java_tools/buildjar/javatests/com/google/devtools/build/java/bazel:srcs",
+        "//src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine:srcs",
     ],
     visibility = ["//src:__pkg__"],
 )
diff --git a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/bazel/BUILD b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/bazel/BUILD
index 324082c..4839134 100644
--- a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/bazel/BUILD
+++ b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/bazel/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/java_tools/buildjar:__pkg__"],
+)
+
 java_test(
     name = "BazelJavaCompilerTest",
     size = "small",
diff --git a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/BUILD b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/BUILD
index f454578..317b03b 100644
--- a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/BUILD
+++ b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]) + ["//src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac:srcs"],
+    visibility = ["//src/java_tools/buildjar:__pkg__"],
+)
+
 package_group(
     name = "packages",
     packages = ["//src/java_tools/buildjar/..."],
diff --git a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/BUILD b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/BUILD
index 4132bba..2127783 100644
--- a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/BUILD
+++ b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine:__pkg__"],
+)
+
 java_test(
     name = "JavacTurbineTest",
     srcs = ["JavacTurbineTest.java"],
diff --git a/src/test/cpp/BUILD b/src/test/cpp/BUILD
index 892d73b..acc5461 100644
--- a/src/test/cpp/BUILD
+++ b/src/test/cpp/BUILD
@@ -2,6 +2,12 @@
 #   C++ utility tests for Bazel
 package(default_visibility = ["//visibility:public"])
 
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]) + ["//src/test/cpp/util:srcs"],
+    visibility = ["//src:__pkg__"],
+)
+
 cc_test(
     name = "blaze_util_test",
     srcs = ["blaze_util_test.cc"],
diff --git a/src/test/cpp/util/BUILD b/src/test/cpp/util/BUILD
index c9a4720..0ec5700 100644
--- a/src/test/cpp/util/BUILD
+++ b/src/test/cpp/util/BUILD
@@ -2,6 +2,12 @@
 #   C++ utility tests for Bazel
 package(default_visibility = ["//visibility:public"])
 
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/test/cpp:__pkg__"],
+)
+
 cc_test(
     name = "md5_test",
     srcs = ["md5_test.cc"],
diff --git a/src/test/java/com/google/devtools/build/android/BUILD b/src/test/java/com/google/devtools/build/android/BUILD
index fd1ad29..bf9db4a 100644
--- a/src/test/java/com/google/devtools/build/android/BUILD
+++ b/src/test/java/com/google/devtools/build/android/BUILD
@@ -1,3 +1,14 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]) + [
+        "//src/test/java/com/google/devtools/build/android/ideinfo:srcs",
+        "//src/test/java/com/google/devtools/build/android/idlclass:srcs",
+        "//src/test/java/com/google/devtools/build/android/resources:srcs",
+        "//src/test/java/com/google/devtools/build/android/ziputils:srcs",
+    ],
+    visibility = ["//src:__pkg__"],
+)
+
 java_test(
     name = "AndroidResourceCompilationActionTest",
     size = "medium",
diff --git a/src/test/java/com/google/devtools/build/android/ideinfo/BUILD b/src/test/java/com/google/devtools/build/android/ideinfo/BUILD
index 4bf367e..9de5aa7 100644
--- a/src/test/java/com/google/devtools/build/android/ideinfo/BUILD
+++ b/src/test/java/com/google/devtools/build/android/ideinfo/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/test/java/com/google/devtools/build/android:__pkg__"],
+)
+
 java_test(
     name = "PackageParserTest",
     size = "small",
diff --git a/src/test/java/com/google/devtools/build/android/idlclass/BUILD b/src/test/java/com/google/devtools/build/android/idlclass/BUILD
index d06e046..46f2159 100644
--- a/src/test/java/com/google/devtools/build/android/idlclass/BUILD
+++ b/src/test/java/com/google/devtools/build/android/idlclass/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/test/java/com/google/devtools/build/android:__pkg__"],
+)
+
 java_test(
     name = "IdlClassTest",
     size = "medium",
diff --git a/src/test/java/com/google/devtools/build/android/resources/BUILD b/src/test/java/com/google/devtools/build/android/resources/BUILD
index 5ea3ac5..fa8ef74 100644
--- a/src/test/java/com/google/devtools/build/android/resources/BUILD
+++ b/src/test/java/com/google/devtools/build/android/resources/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/test/java/com/google/devtools/build/android:__pkg__"],
+)
+
 java_test(
     name = "RClassWriterTest",
     size = "medium",
diff --git a/src/test/java/com/google/devtools/build/android/ziputils/BUILD b/src/test/java/com/google/devtools/build/android/ziputils/BUILD
index 643e29e..9507c5a 100644
--- a/src/test/java/com/google/devtools/build/android/ziputils/BUILD
+++ b/src/test/java/com/google/devtools/build/android/ziputils/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/test/java/com/google/devtools/build/android:__pkg__"],
+)
+
 java_test(
     name = "ziputils-tests",
     srcs = glob(["*.java"]),
diff --git a/src/test/java/com/google/devtools/build/docgen/BUILD b/src/test/java/com/google/devtools/build/docgen/BUILD
index 5376077..6c21717 100644
--- a/src/test/java/com/google/devtools/build/docgen/BUILD
+++ b/src/test/java/com/google/devtools/build/docgen/BUILD
@@ -4,6 +4,12 @@
 
 licenses(["notice"])  # Apache 2.0
 
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src:__pkg__"],
+)
+
 test_suite(
     name = "all_tests",
     tags = ["docgen"],
diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD
index 45763d0..5f997d5 100644
--- a/src/test/java/com/google/devtools/build/lib/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/BUILD
@@ -2,6 +2,18 @@
     default_visibility = ["//src/test/java/com/google/devtools/build/lib:__subpackages__"],
 )
 
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]) + [
+        "//src/test/java/com/google/devtools/build/lib/skylark:srcs",
+        "//src/test/java/com/google/devtools/build/lib/skyframe:srcs",
+        "//src/test/java/com/google/devtools/build/lib/rules/repository:srcs",
+        "//src/test/java/com/google/devtools/build/lib/bazel/repository:srcs",
+        "//src/test/java/com/google/devtools/build/lib/buildtool:srcs",
+    ],
+    visibility = ["//src:__pkg__"],
+)
+
 # This should correspond to the list of "EMBEDDED_TOOLS" in TestConstants.java.bazel.
 filegroup(
     name = "embedded_scripts",
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/BUILD b/src/test/java/com/google/devtools/build/lib/bazel/repository/BUILD
index 6ee8c56..0121f7b 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/repository/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]) + ["//src/test/java/com/google/devtools/build/lib/bazel/repository/downloader:srcs"],
+    visibility = ["//src/test/java/com/google/devtools/build/lib:__pkg__"],
+)
+
 java_test(
     name = "RepositoryTests",
     srcs = glob([
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/downloader/BUILD b/src/test/java/com/google/devtools/build/lib/bazel/repository/downloader/BUILD
index 308bdec..f29ceb4 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/repository/downloader/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/downloader/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/test/java/com/google/devtools/build/lib/bazel/repository:__pkg__"],
+)
+
 java_test(
     name = "DownloaderTests",
     srcs = glob(["*.java"]),
diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/BUILD b/src/test/java/com/google/devtools/build/lib/buildtool/BUILD
index dc1559e..d18063a 100644
--- a/src/test/java/com/google/devtools/build/lib/buildtool/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/buildtool/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/test/java/com/google/devtools/build/lib:__pkg__"],
+)
+
 java_library(
     name = "testutil",
     srcs = glob(["util/*.java"]),
diff --git a/src/test/java/com/google/devtools/build/lib/rules/repository/BUILD b/src/test/java/com/google/devtools/build/lib/rules/repository/BUILD
index 6e16c4f..9058c97 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/repository/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/rules/repository/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/test/java/com/google/devtools/build/lib:__pkg__"],
+)
+
 java_test(
     name = "RepositoryTests",
     srcs = glob(["*.java"]),
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
index bd2f417..9d81329 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/test/java/com/google/devtools/build/lib:__pkg__"],
+)
+
 java_library(
     name = "testutil",
     srcs = glob([
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/BUILD b/src/test/java/com/google/devtools/build/lib/skylark/BUILD
index 2580fb2..c81772a 100644
--- a/src/test/java/com/google/devtools/build/lib/skylark/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/skylark/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/test/java/com/google/devtools/build/lib:__pkg__"],
+)
+
 java_library(
     name = "testutil",
     srcs = glob([
diff --git a/src/test/java/com/google/devtools/build/skyframe/BUILD b/src/test/java/com/google/devtools/build/skyframe/BUILD
index fccede9..21b6342 100644
--- a/src/test/java/com/google/devtools/build/skyframe/BUILD
+++ b/src/test/java/com/google/devtools/build/skyframe/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src:__pkg__"],
+)
+
 TESTUTIL_FILES = [
     "TrackingAwaiter.java",
     "GraphTester.java",
diff --git a/src/test/java/com/google/devtools/common/options/BUILD b/src/test/java/com/google/devtools/common/options/BUILD
index 2cd7862..d11c881 100644
--- a/src/test/java/com/google/devtools/common/options/BUILD
+++ b/src/test/java/com/google/devtools/common/options/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src:__pkg__"],
+)
+
 java_test(
     name = "options_test",
     srcs = glob(["*.java"]),
diff --git a/src/test/shell/BUILD b/src/test/shell/BUILD
index 4055e44..95c387b 100644
--- a/src/test/shell/BUILD
+++ b/src/test/shell/BUILD
@@ -1,5 +1,14 @@
 package(default_visibility = ["//visibility:private"])
 
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]) + [
+        "//src/test/shell/bazel:srcs",
+        "//src/test/shell/integration:srcs",
+    ],
+    visibility = ["//src:__pkg__"],
+)
+
 sh_library(
     name = "bashunit",
     srcs = ["unittest.bash"],
diff --git a/src/test/shell/bazel/BUILD b/src/test/shell/bazel/BUILD
index 40b34bc..e064d72 100644
--- a/src/test/shell/bazel/BUILD
+++ b/src/test/shell/bazel/BUILD
@@ -1,5 +1,14 @@
 package(default_visibility = ["//visibility:private"])
 
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]) + [
+        "//src/test/shell/bazel/android:srcs",
+        "//src/test/shell/bazel/testdata:srcs",
+    ],
+    visibility = ["//src/test/shell:__pkg__"],
+)
+
 genrule(
     name = "langtools-copy",
     testonly = 1,
@@ -60,7 +69,7 @@
         "//src/test/shell:bashunit",
         "//third_party:srcs",
         "//third_party/ijar",
-        "//third_party/java/jdk/langtools:srcs",
+        "//third_party/java/jdk/langtools:test-srcs",
         "//tools:srcs",
     ],
     visibility = [
diff --git a/src/test/shell/bazel/android/BUILD b/src/test/shell/bazel/android/BUILD
index 1624388..26c155a 100644
--- a/src/test/shell/bazel/android/BUILD
+++ b/src/test/shell/bazel/android/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/test/shell/bazel:__pkg__"],
+)
+
 sh_test(
     name = "android_integration_test",
     size = "large",
diff --git a/src/test/shell/bazel/testdata/BUILD b/src/test/shell/bazel/testdata/BUILD
index 6064737..c3e91a5 100644
--- a/src/test/shell/bazel/testdata/BUILD
+++ b/src/test/shell/bazel/testdata/BUILD
@@ -1,4 +1,10 @@
 filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/test/shell/bazel:__pkg__"],
+)
+
+filegroup(
     name = "git-repos",
     testonly = 1,
     srcs = [
diff --git a/src/test/shell/integration/BUILD b/src/test/shell/integration/BUILD
index 768f190..35958d4 100644
--- a/src/test/shell/integration/BUILD
+++ b/src/test/shell/integration/BUILD
@@ -1,6 +1,12 @@
 package(default_visibility = ["//visibility:private"])
 
 filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/test/shell:__pkg__"],
+)
+
+filegroup(
     name = "test-deps",
     testonly = 1,
     srcs = [
diff --git a/src/tools/generate_workspace/BUILD b/src/tools/generate_workspace/BUILD
index 5735e73..96bba5c 100644
--- a/src/tools/generate_workspace/BUILD
+++ b/src/tools/generate_workspace/BUILD
@@ -9,6 +9,9 @@
 
 filegroup(
     name = "srcs",
-    srcs = glob(["**"]) + ["//src/tools/generate_workspace/src/main/java/com/google/devtools/build/workspace:srcs"],
+    srcs = glob(["**"]) + [
+        "//src/tools/generate_workspace/src/main/java/com/google/devtools/build/workspace:srcs",
+        "//src/tools/generate_workspace/src/test/java/com/google/devtools/build/workspace:srcs",
+    ],
     visibility = ["//src:__pkg__"],
 )
diff --git a/src/tools/generate_workspace/src/test/java/com/google/devtools/build/workspace/BUILD b/src/tools/generate_workspace/src/test/java/com/google/devtools/build/workspace/BUILD
index 393a3c0..93e5986 100644
--- a/src/tools/generate_workspace/src/test/java/com/google/devtools/build/workspace/BUILD
+++ b/src/tools/generate_workspace/src/test/java/com/google/devtools/build/workspace/BUILD
@@ -1,5 +1,13 @@
 licenses(["notice"])  # Apache 2.0
 
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]) + [
+        "//src/tools/generate_workspace/src/test/java/com/google/devtools/build/workspace/maven:srcs",
+    ],
+    visibility = ["//src/tools/generate_workspace:__pkg__"],
+)
+
 java_test(
     name = "ResultWriterTest",
     srcs = ["ResultWriterTest.java"],
diff --git a/src/tools/generate_workspace/src/test/java/com/google/devtools/build/workspace/maven/BUILD b/src/tools/generate_workspace/src/test/java/com/google/devtools/build/workspace/maven/BUILD
index f02721b..8db2e73 100644
--- a/src/tools/generate_workspace/src/test/java/com/google/devtools/build/workspace/maven/BUILD
+++ b/src/tools/generate_workspace/src/test/java/com/google/devtools/build/workspace/maven/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/tools/generate_workspace/src/test/java/com/google/devtools/build/workspace:__pkg__"],
+)
+
 java_test(
     name = "RuleTest",
     srcs = ["RuleTest.java"],
diff --git a/src/tools/remote_worker/BUILD b/src/tools/remote_worker/BUILD
index 7f44a71..b8ed480 100644
--- a/src/tools/remote_worker/BUILD
+++ b/src/tools/remote_worker/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]) + ["//src/tools/remote_worker/src/main/java/com/google/devtools/build/remote:srcs"],
+    visibility = ["//src:__pkg__"],
+)
+
 java_binary(
     name = "remote_worker",
     main_class = "com.google.devtools.build.remote.RemoteWorker",
diff --git a/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/BUILD b/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/BUILD
index 495d640..d41b79b 100644
--- a/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/BUILD
+++ b/src/tools/remote_worker/src/main/java/com/google/devtools/build/remote/BUILD
@@ -1,3 +1,9 @@
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//src/tools/remote_worker:__pkg__"],
+)
+
 java_library(
     name = "remote",
     srcs = glob(["*.java"]),
diff --git a/third_party/BUILD b/third_party/BUILD
index 750c5ce..44470af 100644
--- a/third_party/BUILD
+++ b/third_party/BUILD
@@ -25,6 +25,7 @@
         "//third_party/py/mock:srcs",
         "//third_party/py/six:srcs",
         "//third_party/zlib:srcs",
+        "//third_party/nanopb:srcs",
     ],
 )
 
diff --git a/third_party/java/jdk/langtools/BUILD b/third_party/java/jdk/langtools/BUILD
index e87fa27..5692999 100644
--- a/third_party/java/jdk/langtools/BUILD
+++ b/third_party/java/jdk/langtools/BUILD
@@ -4,6 +4,11 @@
 
 filegroup(
     name = "srcs",
+    srcs = glob(["**"]),
+)
+
+filegroup(
+    name = "test-srcs",
     srcs = select({
         "//tools/jdk:jdk7": [
             "BUILD",
diff --git a/third_party/nanopb/BUILD b/third_party/nanopb/BUILD
index 49f8257..e0d16b6 100644
--- a/third_party/nanopb/BUILD
+++ b/third_party/nanopb/BUILD
@@ -1,5 +1,11 @@
 licenses(["unencumbered"])
 
+filegroup(
+    name = "srcs",
+    srcs = glob(["**"]),
+    visibility = ["//third_party:__pkg__"],
+)
+
 cc_library(
     name = "nanopb",
     srcs = glob(["*.c"]),
diff --git a/tools/BUILD b/tools/BUILD
index 6689574..360d9eb 100644
--- a/tools/BUILD
+++ b/tools/BUILD
@@ -11,6 +11,7 @@
         "//tools/android/jack:srcs",
         "//tools/buildstamp:srcs",
         "//tools/build_defs/apple:srcs",
+        "//tools/build_defs/apple/test:srcs",
         "//tools/build_defs/docker:srcs",
         "//tools/build_defs/pkg:srcs",
         "//tools/build_rules:srcs",
diff --git a/tools/build_defs/apple/test/BUILD b/tools/build_defs/apple/test/BUILD
index dbc9098..62328aa 100644
--- a/tools/build_defs/apple/test/BUILD
+++ b/tools/build_defs/apple/test/BUILD
@@ -1,5 +1,8 @@
 filegroup(
     name = "srcs",
     srcs = glob(["**"]),
-    visibility = ["//src/test/shell/bazel:__pkg__"],
+    visibility = [
+        "//src/test/shell/bazel:__pkg__",
+        "//tools:__pkg__",
+    ],
 )
diff --git a/tools/test/BUILD b/tools/test/BUILD
index 0631350..846016b 100644
--- a/tools/test/BUILD
+++ b/tools/test/BUILD
@@ -19,8 +19,5 @@
 
 filegroup(
     name = "srcs",
-    srcs = [
-        "BUILD",
-        "test-setup.sh",
-    ],
+    srcs = glob(["*"]),
 )