Support cpufeatures from Android NDK. Fixes https://github.com/bazelbuild/bazel/issues/2499. Example usage: $ cat jni.cc #include "ndk/sources/android/cpufeatures/cpu-features.h" ... AndroidCpuFamily family = android_getCpuFamily(); $ cat BUILD cc_library( name = "jni", srcs = ["jni.cc"], deps = ["@androidndk//:cpufeatures"], ) android_binary( name = "app", manifest = 'AndroidManifest.xml', srcs = glob(["*.java"]), deps = [":jni"], ) $ cat WORKSPACE android_sdk_repository(name = 'androidsdk') android_ndk_repository(name = 'androidndk') RELNOTES: android_ndk_repository now creates a cc_library (@androidndk//:cpufeatures) for the cpufeatures library that is bundled in the Android NDK. See https://developer.android.com/ndk/guides/cpu-features.html for more details. PiperOrigin-RevId: 154732798
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java index 2a45ad0..98411f1 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryFunction.java
@@ -238,6 +238,7 @@ String ccToolchainSuiteTemplate = getTemplate("android_ndk_cc_toolchain_suite_template.txt"); String ccToolchainTemplate = getTemplate("android_ndk_cc_toolchain_template.txt"); String stlFilegroupTemplate = getTemplate("android_ndk_stl_filegroup_template.txt"); + String miscLibrariesTemplate = getTemplate("android_ndk_misc_libraries_template.txt"); StringBuilder ccToolchainSuites = new StringBuilder(); StringBuilder ccToolchainRules = new StringBuilder(); @@ -281,7 +282,8 @@ .replace("%ruleName%", ruleName) .replace("%ccToolchainSuites%", ccToolchainSuites) .replace("%ccToolchainRules%", ccToolchainRules) - .replace("%stlFilegroups%", stlFilegroups); + .replace("%stlFilegroups%", stlFilegroups) + .replace("%miscLibraries%", miscLibrariesTemplate); } static String createToolchainName(String stlName) {
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_ndk_build_file_template.txt b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_ndk_build_file_template.txt index eeee1d2..eb2f818 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_ndk_build_file_template.txt +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_ndk_build_file_template.txt
@@ -44,3 +44,9 @@ ################################################################ %stlFilegroups% + +################################################################ +# Miscellaneous runtime libraries +################################################################ + +%miscLibraries%
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_ndk_misc_libraries_template.txt b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_ndk_misc_libraries_template.txt new file mode 100644 index 0000000..d15b335 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/android_ndk_misc_libraries_template.txt
@@ -0,0 +1,5 @@ +cc_library( + name = 'cpufeatures', + srcs = glob(['ndk/sources/android/cpufeatures/*.c']), + hdrs = glob(['ndk/sources/android/cpufeatures/*.h']), +)
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java index 3c6ad91..00853ed 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java +++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/AndroidNdkRepositoryTest.java
@@ -18,8 +18,10 @@ import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; +import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.FilesToRunProvider; import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; +import com.google.devtools.build.lib.packages.AttributeContainer; import com.google.devtools.build.lib.testutil.MoreAsserts; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; import com.google.devtools.build.lib.vfs.FileSystemUtils; @@ -150,4 +152,29 @@ + "'androidndk' is 15. The major revisions supported by Bazel are [10, 11, 12, 13, 14]." + " Defaulting to revision 14."); } + + @Test + public void testMiscLibraries() throws Exception { + scratchPlatformsDirectories("arch-x86", 19, 20, 22, 24); + scratch.file(String.format("/ndk/sources/android/cpufeatures/cpu-features.c")); + scratch.file(String.format("/ndk/sources/android/cpufeatures/cpu-features.h")); + FileSystemUtils.appendIsoLatin1( + scratch.resolve("WORKSPACE"), + "android_ndk_repository(", + " name = 'androidndk',", + " path = '/ndk',", + ")"); + invalidatePackages(); + + ConfiguredTarget cpufeatures = getConfiguredTarget("@androidndk//:cpufeatures"); + assertThat(cpufeatures).isNotNull(); + AttributeContainer attributes = + cpufeatures.getTarget().getAssociatedRule().getAttributeContainer(); + assertThat(attributes.isAttributeValueExplicitlySpecified("srcs")).isTrue(); + assertThat(attributes.getAttr("srcs").toString()) + .isEqualTo("[@androidndk//:ndk/sources/android/cpufeatures/cpu-features.c]"); + assertThat(attributes.isAttributeValueExplicitlySpecified("hdrs")).isTrue(); + assertThat(attributes.getAttr("hdrs").toString()) + .isEqualTo("[@androidndk//:ndk/sources/android/cpufeatures/cpu-features.h]"); + } }
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/ndk12bfiles.txt b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/ndk12bfiles.txt index e53209b..e293d12 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/ndk12bfiles.txt +++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/ndk12bfiles.txt
@@ -1,4 +1,192 @@ -hread.req.lockable/thread.req.lockable.req/nothing_to_do.pass.cpp +rces/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.promise/set_value_at_thread_exit_void.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.promise/set_value_const.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.promise/set_value_void.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.promise/swap.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.promise/uses_allocator.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.shared_future/copy_assign.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.shared_future/copy_ctor.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.shared_future/ctor_future.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.shared_future/default.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.shared_future/dtor.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.shared_future/get.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.shared_future/move_assign.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.shared_future/move_ctor.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.shared_future/wait_for.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.shared_future/wait.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.shared_future/wait_until.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.state/nothing_to_do.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/futures.task.members/assign_copy.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/futures.task.members/assign_move.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/futures.task.members/ctor1.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/futures.task.members/ctor2.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/futures.task.members/ctor_copy.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/futures.task.members/ctor_default.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/futures.task.members/ctor_func_alloc.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/futures.task.members/ctor_func.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/futures.task.members/ctor_move.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/futures.task.members/dtor.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/futures.task.members/get_future.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/futures.task.members/make_ready_at_thread_exit.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/futures.task.members/operator.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/futures.task.members/reset.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/futures.task.members/swap.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/futures.task.nonmembers/swap.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/futures.task.nonmembers/uses_allocator.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.tas/types.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.unique_future/copy_assign.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.unique_future/copy_ctor.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.unique_future/default.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.unique_future/dtor.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.unique_future/get.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.unique_future/move_assign.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.unique_future/move_ctor.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.unique_future/share.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.unique_future/wait_for.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.unique_future/wait.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/futures.unique_future/wait_until.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/test_allocator.h +sources/cxx-stl/llvm-libc++/libcxx/test/thread/futures/version.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/macro.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/cv_status.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/notify_all_at_thread_exit.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvarany/assign.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvarany/copy.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvarany/default.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvarany/destructor.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvarany/notify_all.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvarany/notify_one.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvarany/wait.exception.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvarany/wait_for.exception.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvarany/wait_for.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvarany/wait_for_pred.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvarany/wait.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvarany/wait_pred.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvarany/wait_until.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvarany/wait_until_pred.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvar/assign.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvar/copy.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvar/default.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvar/destructor.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvar/native_handle.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvar/notify_all.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvar/notify_one.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvar/wait_for.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvar/wait_for_pred.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvar/wait.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvar/wait_pred.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvar/wait_until.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/thread.condition.condvar/wait_until_pred.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.condition/version.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.general/nothing_to_do.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock.algorithm/lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock.algorithm/try_lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.guard/adopt_lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.guard/assign.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.guard/copy.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.guard/mutex.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.guard/mutex.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.guard/types.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/copy_assign.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/copy_ctor.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/default.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/move_assign.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/move_ctor.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_adopt_lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_defer_lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_duration.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_time_point.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.cons/mutex_try_to_lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/try_lock_for.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/try_lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/try_lock_until.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.locking/unlock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.mod/member_swap.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.mod/nonmember_swap.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.mod/release.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.obs/mutex.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.obs/op_bool.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/thread.lock.shared.obs/owns_lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.shared/types.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/copy_assign.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/copy_ctor.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/default.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_assign.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/move_ctor.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_adopt_lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_defer_lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_duration.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_time_point.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.cons/mutex_try_to_lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_for.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/try_lock_until.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.locking/unlock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/member_swap.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/nonmember_swap.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.mod/release.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/mutex.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/op_bool.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/thread.lock.unique.obs/owns_lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/thread.lock.unique/types.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.lock/types.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/nothing_to_do.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.general/nothing_to_do.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/nothing_to_do.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/assign.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/copy.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/default.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/native_handle.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.class/try_lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/assign.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/copy.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/default.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/native_handle.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.mutex.requirements.mutex/thread.mutex.recursive/try_lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/nothing_to_do.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/assign.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/copy.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/default.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/lock_shared.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_for.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_for.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_shared_until.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.sharedtimedmutex.requirements/thread.sharedtimedmutex.class/try_lock_until.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/nothing_to_do.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/assign.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/copy.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/default.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_for.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.class/try_lock_until.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/assign.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/copy.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/default.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_for.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.mutex.requirements/thread.timedmutex.requirements/thread.timedmutex.recursive/try_lock_until.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.once/nothing_to_do.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.once/thread.once.callonce/call_once.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.once/thread.once.onceflag/assign.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.once/thread.once.onceflag/copy.fail.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/thread.once/thread.once.onceflag/default.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.mutex/version.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.req/nothing_to_do.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.req/thread.req.exception/nothing_to_do.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.req/thread.req.lockable/nothing_to_do.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.req/thread.req.lockable/thread.req.lockable.basic/nothing_to_do.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.req/thread.req.lockable/thread.req.lockable.general/nothing_to_do.pass.cpp +sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.req/thread.req.lockable/thread.req.lockable.req/nothing_to_do.pass.cpp sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.req/thread.req.lockable/thread.req.lockable.timed/nothing_to_do.pass.cpp sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.req/thread.req.native/nothing_to_do.pass.cpp sources/cxx-stl/llvm-libc++/libcxx/test/thread/thread.req/thread.req.paramname/nothing_to_do.pass.cpp
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/ndkfiles.txt b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/ndkfiles.txt index 3fc3e9f..d06793f 100644 --- a/src/test/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/ndkfiles.txt +++ b/src/test/java/com/google/devtools/build/lib/bazel/rules/android/ndkcrosstools/ndkfiles.txt
@@ -1,4 +1,371 @@ -m.h +id-21/arch-x86_64/usr/include/linux/netfilter/xt_helper.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_HMARK.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_IDLETIMER.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_ipcomp.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_iprange.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_ipvs.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_l2tp.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_LED.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_length.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_limit.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_LOG.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_mac.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_mark.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_MARK.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_multiport.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_nfacct.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_NFLOG.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_NFQUEUE.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_osf.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_owner.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_physdev.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_pkttype.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_policy.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_quota.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_rateest.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_RATEEST.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_realm.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_recent.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_rpfilter.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_sctp.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_SECMARK.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_set.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_socket.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_state.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_statistic.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_string.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_SYNPROXY.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_tcpmss.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_TCPMSS.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_TCPOPTSTRIP.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_tcpudp.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_TEE.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_time.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_TPROXY.h +platforms/android-21/arch-x86_64/usr/include/linux/netfilter/xt_u32.h +platforms/android-21/arch-x86_64/usr/include/linux/net.h +platforms/android-21/arch-x86_64/usr/include/linux/netlink_diag.h +platforms/android-21/arch-x86_64/usr/include/linux/netlink.h +platforms/android-21/arch-x86_64/usr/include/linux/netrom.h +platforms/android-21/arch-x86_64/usr/include/linux/net_tstamp.h +platforms/android-21/arch-x86_64/usr/include/linux/nfc.h +platforms/android-21/arch-x86_64/usr/include/linux/nfs2.h +platforms/android-21/arch-x86_64/usr/include/linux/nfs3.h +platforms/android-21/arch-x86_64/usr/include/linux/nfs4.h +platforms/android-21/arch-x86_64/usr/include/linux/nfs4_mount.h +platforms/android-21/arch-x86_64/usr/include/linux/nfsacl.h +platforms/android-21/arch-x86_64/usr/include/linux/nfsd/cld.h +platforms/android-21/arch-x86_64/usr/include/linux/nfsd/debug.h +platforms/android-21/arch-x86_64/usr/include/linux/nfsd/export.h +platforms/android-21/arch-x86_64/usr/include/linux/nfsd/nfsfh.h +platforms/android-21/arch-x86_64/usr/include/linux/nfsd/stats.h +platforms/android-21/arch-x86_64/usr/include/linux/nfs_fs.h +platforms/android-21/arch-x86_64/usr/include/linux/nfs.h +platforms/android-21/arch-x86_64/usr/include/linux/nfs_idmap.h +platforms/android-21/arch-x86_64/usr/include/linux/nfs_mount.h +platforms/android-21/arch-x86_64/usr/include/linux/nl80211.h +platforms/android-21/arch-x86_64/usr/include/linux/n_r3964.h +platforms/android-21/arch-x86_64/usr/include/linux/nubus.h +platforms/android-21/arch-x86_64/usr/include/linux/nvme.h +platforms/android-21/arch-x86_64/usr/include/linux/nvram.h +platforms/android-21/arch-x86_64/usr/include/linux/omap3isp.h +platforms/android-21/arch-x86_64/usr/include/linux/omapfb.h +platforms/android-21/arch-x86_64/usr/include/linux/oom.h +platforms/android-21/arch-x86_64/usr/include/linux/openvswitch.h +platforms/android-21/arch-x86_64/usr/include/linux/packet_diag.h +platforms/android-21/arch-x86_64/usr/include/linux/param.h +platforms/android-21/arch-x86_64/usr/include/linux/parport.h +platforms/android-21/arch-x86_64/usr/include/linux/patchkey.h +platforms/android-21/arch-x86_64/usr/include/linux/pci.h +platforms/android-21/arch-x86_64/usr/include/linux/pci_regs.h +platforms/android-21/arch-x86_64/usr/include/linux/perf_event.h +platforms/android-21/arch-x86_64/usr/include/linux/personality.h +platforms/android-21/arch-x86_64/usr/include/linux/pfkeyv2.h +platforms/android-21/arch-x86_64/usr/include/linux/pg.h +platforms/android-21/arch-x86_64/usr/include/linux/phantom.h +platforms/android-21/arch-x86_64/usr/include/linux/phonet.h +platforms/android-21/arch-x86_64/usr/include/linux/pktcdvd.h +platforms/android-21/arch-x86_64/usr/include/linux/pkt_cls.h +platforms/android-21/arch-x86_64/usr/include/linux/pkt_sched.h +platforms/android-21/arch-x86_64/usr/include/linux/pmu.h +platforms/android-21/arch-x86_64/usr/include/linux/poll.h +platforms/android-21/arch-x86_64/usr/include/linux/posix_types.h +platforms/android-21/arch-x86_64/usr/include/linux/ppdev.h +platforms/android-21/arch-x86_64/usr/include/linux/ppp-comp.h +platforms/android-21/arch-x86_64/usr/include/linux/ppp_defs.h +platforms/android-21/arch-x86_64/usr/include/linux/ppp-ioctl.h +platforms/android-21/arch-x86_64/usr/include/linux/pps.h +platforms/android-21/arch-x86_64/usr/include/linux/prctl.h +platforms/android-21/arch-x86_64/usr/include/linux/ptp_clock.h +platforms/android-21/arch-x86_64/usr/include/linux/ptrace.h +platforms/android-21/arch-x86_64/usr/include/linux/qnx4_fs.h +platforms/android-21/arch-x86_64/usr/include/linux/qnxtypes.h +platforms/android-21/arch-x86_64/usr/include/linux/quota.h +platforms/android-21/arch-x86_64/usr/include/linux/radeonfb.h +platforms/android-21/arch-x86_64/usr/include/linux/raid/md_p.h +platforms/android-21/arch-x86_64/usr/include/linux/raid/md_u.h +platforms/android-21/arch-x86_64/usr/include/linux/random.h +platforms/android-21/arch-x86_64/usr/include/linux/raw.h +platforms/android-21/arch-x86_64/usr/include/linux/rds.h +platforms/android-21/arch-x86_64/usr/include/linux/reboot.h +platforms/android-21/arch-x86_64/usr/include/linux/reiserfs_fs.h +platforms/android-21/arch-x86_64/usr/include/linux/reiserfs_xattr.h +platforms/android-21/arch-x86_64/usr/include/linux/resource.h +platforms/android-21/arch-x86_64/usr/include/linux/rfkill.h +platforms/android-21/arch-x86_64/usr/include/linux/romfs_fs.h +platforms/android-21/arch-x86_64/usr/include/linux/rose.h +platforms/android-21/arch-x86_64/usr/include/linux/route.h +platforms/android-21/arch-x86_64/usr/include/linux/rtc.h +platforms/android-21/arch-x86_64/usr/include/linux/rtnetlink.h +platforms/android-21/arch-x86_64/usr/include/linux/scc.h +platforms/android-21/arch-x86_64/usr/include/linux/sched.h +platforms/android-21/arch-x86_64/usr/include/linux/screen_info.h +platforms/android-21/arch-x86_64/usr/include/linux/sctp.h +platforms/android-21/arch-x86_64/usr/include/linux/sdla.h +platforms/android-21/arch-x86_64/usr/include/linux/seccomp.h +platforms/android-21/arch-x86_64/usr/include/linux/securebits.h +platforms/android-21/arch-x86_64/usr/include/linux/selinux_netlink.h +platforms/android-21/arch-x86_64/usr/include/linux/sem.h +platforms/android-21/arch-x86_64/usr/include/linux/serial_core.h +platforms/android-21/arch-x86_64/usr/include/linux/serial.h +platforms/android-21/arch-x86_64/usr/include/linux/serial_reg.h +platforms/android-21/arch-x86_64/usr/include/linux/serio.h +platforms/android-21/arch-x86_64/usr/include/linux/shm.h +platforms/android-21/arch-x86_64/usr/include/linux/signalfd.h +platforms/android-21/arch-x86_64/usr/include/linux/signal.h +platforms/android-21/arch-x86_64/usr/include/linux/snmp.h +platforms/android-21/arch-x86_64/usr/include/linux/sock_diag.h +platforms/android-21/arch-x86_64/usr/include/linux/socket.h +platforms/android-21/arch-x86_64/usr/include/linux/sockios.h +platforms/android-21/arch-x86_64/usr/include/linux/som.h +platforms/android-21/arch-x86_64/usr/include/linux/sonet.h +platforms/android-21/arch-x86_64/usr/include/linux/sonypi.h +platforms/android-21/arch-x86_64/usr/include/linux/soundcard.h +platforms/android-21/arch-x86_64/usr/include/linux/sound.h +platforms/android-21/arch-x86_64/usr/include/linux/spi/spidev.h +platforms/android-21/arch-x86_64/usr/include/linux/stat.h +platforms/android-21/arch-x86_64/usr/include/linux/stddef.h +platforms/android-21/arch-x86_64/usr/include/linux/string.h +platforms/android-21/arch-x86_64/usr/include/linux/sunrpc/debug.h +platforms/android-21/arch-x86_64/usr/include/linux/suspend_ioctls.h +platforms/android-21/arch-x86_64/usr/include/linux/swab.h +platforms/android-21/arch-x86_64/usr/include/linux/sw_sync.h +platforms/android-21/arch-x86_64/usr/include/linux/sync.h +platforms/android-21/arch-x86_64/usr/include/linux/synclink.h +platforms/android-21/arch-x86_64/usr/include/linux/sysctl.h +platforms/android-21/arch-x86_64/usr/include/linux/sysinfo.h +platforms/android-21/arch-x86_64/usr/include/linux/taskstats.h +platforms/android-21/arch-x86_64/usr/include/linux/tc_act/tc_csum.h +platforms/android-21/arch-x86_64/usr/include/linux/tc_act/tc_defact.h +platforms/android-21/arch-x86_64/usr/include/linux/tc_act/tc_gact.h +platforms/android-21/arch-x86_64/usr/include/linux/tc_act/tc_ipt.h +platforms/android-21/arch-x86_64/usr/include/linux/tc_act/tc_mirred.h +platforms/android-21/arch-x86_64/usr/include/linux/tc_act/tc_nat.h +platforms/android-21/arch-x86_64/usr/include/linux/tc_act/tc_pedit.h +platforms/android-21/arch-x86_64/usr/include/linux/tc_act/tc_skbedit.h +platforms/android-21/arch-x86_64/usr/include/linux/tc_ematch/tc_em_cmp.h +platforms/android-21/arch-x86_64/usr/include/linux/tc_ematch/tc_em_meta.h +platforms/android-21/arch-x86_64/usr/include/linux/tc_ematch/tc_em_nbyte.h +platforms/android-21/arch-x86_64/usr/include/linux/tc_ematch/tc_em_text.h +platforms/android-21/arch-x86_64/usr/include/linux/tcp.h +platforms/android-21/arch-x86_64/usr/include/linux/tcp_metrics.h +platforms/android-21/arch-x86_64/usr/include/linux/telephony.h +platforms/android-21/arch-x86_64/usr/include/linux/termios.h +platforms/android-21/arch-x86_64/usr/include/linux/time.h +platforms/android-21/arch-x86_64/usr/include/linux/times.h +platforms/android-21/arch-x86_64/usr/include/linux/timex.h +platforms/android-21/arch-x86_64/usr/include/linux/tiocl.h +platforms/android-21/arch-x86_64/usr/include/linux/tipc_config.h +platforms/android-21/arch-x86_64/usr/include/linux/tipc.h +platforms/android-21/arch-x86_64/usr/include/linux/toshiba.h +platforms/android-21/arch-x86_64/usr/include/linux/tty_flags.h +platforms/android-21/arch-x86_64/usr/include/linux/tty.h +platforms/android-21/arch-x86_64/usr/include/linux/types.h +platforms/android-21/arch-x86_64/usr/include/linux/udf_fs_i.h +platforms/android-21/arch-x86_64/usr/include/linux/udp.h +platforms/android-21/arch-x86_64/usr/include/linux/uhid.h +platforms/android-21/arch-x86_64/usr/include/linux/uinput.h +platforms/android-21/arch-x86_64/usr/include/linux/uio.h +platforms/android-21/arch-x86_64/usr/include/linux/ultrasound.h +platforms/android-21/arch-x86_64/usr/include/linux/un.h +platforms/android-21/arch-x86_64/usr/include/linux/unistd.h +platforms/android-21/arch-x86_64/usr/include/linux/unix_diag.h +platforms/android-21/arch-x86_64/usr/include/linux/usb/audio.h +platforms/android-21/arch-x86_64/usr/include/linux/usb/cdc.h +platforms/android-21/arch-x86_64/usr/include/linux/usb/cdc-wdm.h +platforms/android-21/arch-x86_64/usr/include/linux/usb/ch11.h +platforms/android-21/arch-x86_64/usr/include/linux/usb/ch9.h +platforms/android-21/arch-x86_64/usr/include/linux/usbdevice_fs.h +platforms/android-21/arch-x86_64/usr/include/linux/usb/f_accessory.h +platforms/android-21/arch-x86_64/usr/include/linux/usb/f_mtp.h +platforms/android-21/arch-x86_64/usr/include/linux/usb/functionfs.h +platforms/android-21/arch-x86_64/usr/include/linux/usb/gadgetfs.h +platforms/android-21/arch-x86_64/usr/include/linux/usb/g_printer.h +platforms/android-21/arch-x86_64/usr/include/linux/usb/midi.h +platforms/android-21/arch-x86_64/usr/include/linux/usb/tmc.h +platforms/android-21/arch-x86_64/usr/include/linux/usb/video.h +platforms/android-21/arch-x86_64/usr/include/linux/utime.h +platforms/android-21/arch-x86_64/usr/include/linux/utsname.h +platforms/android-21/arch-x86_64/usr/include/linux/uuid.h +platforms/android-21/arch-x86_64/usr/include/linux/uvcvideo.h +platforms/android-21/arch-x86_64/usr/include/linux/v4l2-common.h +platforms/android-21/arch-x86_64/usr/include/linux/v4l2-controls.h +platforms/android-21/arch-x86_64/usr/include/linux/v4l2-dv-timings.h +platforms/android-21/arch-x86_64/usr/include/linux/v4l2-mediabus.h +platforms/android-21/arch-x86_64/usr/include/linux/v4l2-subdev.h +platforms/android-21/arch-x86_64/usr/include/linux/version.h +platforms/android-21/arch-x86_64/usr/include/linux/veth.h +platforms/android-21/arch-x86_64/usr/include/linux/vfio.h +platforms/android-21/arch-x86_64/usr/include/linux/vhost.h +platforms/android-21/arch-x86_64/usr/include/linux/videodev2.h +platforms/android-21/arch-x86_64/usr/include/linux/virtio_9p.h +platforms/android-21/arch-x86_64/usr/include/linux/virtio_balloon.h +platforms/android-21/arch-x86_64/usr/include/linux/virtio_blk.h +platforms/android-21/arch-x86_64/usr/include/linux/virtio_config.h +platforms/android-21/arch-x86_64/usr/include/linux/virtio_console.h +platforms/android-21/arch-x86_64/usr/include/linux/virtio_ids.h +platforms/android-21/arch-x86_64/usr/include/linux/virtio_net.h +platforms/android-21/arch-x86_64/usr/include/linux/virtio_pci.h +platforms/android-21/arch-x86_64/usr/include/linux/virtio_ring.h +platforms/android-21/arch-x86_64/usr/include/linux/virtio_rng.h +platforms/android-21/arch-x86_64/usr/include/linux/vm_sockets.h +platforms/android-21/arch-x86_64/usr/include/linux/vsp1.h +platforms/android-21/arch-x86_64/usr/include/linux/vt.h +platforms/android-21/arch-x86_64/usr/include/linux/wait.h +platforms/android-21/arch-x86_64/usr/include/linux/wanrouter.h +platforms/android-21/arch-x86_64/usr/include/linux/watchdog.h +platforms/android-21/arch-x86_64/usr/include/linux/wimax.h +platforms/android-21/arch-x86_64/usr/include/linux/wimax/i2400m.h +platforms/android-21/arch-x86_64/usr/include/linux/wireless.h +platforms/android-21/arch-x86_64/usr/include/linux/x25.h +platforms/android-21/arch-x86_64/usr/include/linux/xattr.h +platforms/android-21/arch-x86_64/usr/include/linux/xfrm.h +platforms/android-21/arch-x86_64/usr/include/linux/zorro.h +platforms/android-21/arch-x86_64/usr/include/linux/zorro_ids.h +platforms/android-21/arch-x86_64/usr/include/locale.h +platforms/android-21/arch-x86_64/usr/include/machine/asm.h +platforms/android-21/arch-x86_64/usr/include/machine/elf_machdep.h +platforms/android-21/arch-x86_64/usr/include/machine/endian.h +platforms/android-21/arch-x86_64/usr/include/machine/exec.h +platforms/android-21/arch-x86_64/usr/include/machine/fenv.h +platforms/android-21/arch-x86_64/usr/include/machine/fpu.h +platforms/android-21/arch-x86_64/usr/include/machine/ieee.h +platforms/android-21/arch-x86_64/usr/include/machine/setjmp.h +platforms/android-21/arch-x86_64/usr/include/machine/wchar_limits.h +platforms/android-21/arch-x86_64/usr/include/malloc.h +platforms/android-21/arch-x86_64/usr/include/math.h +platforms/android-21/arch-x86_64/usr/include/media/NdkMediaCodec.h +platforms/android-21/arch-x86_64/usr/include/media/NdkMediaCrypto.h +platforms/android-21/arch-x86_64/usr/include/media/NdkMediaDrm.h +platforms/android-21/arch-x86_64/usr/include/media/NdkMediaError.h +platforms/android-21/arch-x86_64/usr/include/media/NdkMediaExtractor.h +platforms/android-21/arch-x86_64/usr/include/media/NdkMediaFormat.h +platforms/android-21/arch-x86_64/usr/include/media/NdkMediaMuxer.h +platforms/android-21/arch-x86_64/usr/include/memory.h +platforms/android-21/arch-x86_64/usr/include/mntent.h +platforms/android-21/arch-x86_64/usr/include/netdb.h +platforms/android-21/arch-x86_64/usr/include/net/ethernet.h +platforms/android-21/arch-x86_64/usr/include/net/ethertypes.h +platforms/android-21/arch-x86_64/usr/include/net/if_arp.h +platforms/android-21/arch-x86_64/usr/include/net/if_ether.h +platforms/android-21/arch-x86_64/usr/include/net/if.h +platforms/android-21/arch-x86_64/usr/include/net/if_ieee1394.h +platforms/android-21/arch-x86_64/usr/include/net/if_packet.h +platforms/android-21/arch-x86_64/usr/include/net/if_types.h +platforms/android-21/arch-x86_64/usr/include/netinet/ether.h +platforms/android-21/arch-x86_64/usr/include/netinet/icmp6.h +platforms/android-21/arch-x86_64/usr/include/netinet/if_ether.h +platforms/android-21/arch-x86_64/usr/include/netinet/in6.h +platforms/android-21/arch-x86_64/usr/include/netinet/in.h +platforms/android-21/arch-x86_64/usr/include/netinet/in_systm.h +platforms/android-21/arch-x86_64/usr/include/netinet/ip6.h +platforms/android-21/arch-x86_64/usr/include/netinet/ip.h +platforms/android-21/arch-x86_64/usr/include/netinet/ip_icmp.h +platforms/android-21/arch-x86_64/usr/include/netinet/tcp.h +platforms/android-21/arch-x86_64/usr/include/netinet/udp.h +platforms/android-21/arch-x86_64/usr/include/netpacket/packet.h +platforms/android-21/arch-x86_64/usr/include/net/route.h +platforms/android-21/arch-x86_64/usr/include/nsswitch.h +platforms/android-21/arch-x86_64/usr/include/OMXAL/OpenMAXAL_Android.h +platforms/android-21/arch-x86_64/usr/include/OMXAL/OpenMAXAL.h +platforms/android-21/arch-x86_64/usr/include/OMXAL/OpenMAXAL_Platform.h +platforms/android-21/arch-x86_64/usr/include/pathconf.h +platforms/android-21/arch-x86_64/usr/include/paths.h +platforms/android-21/arch-x86_64/usr/include/poll.h +platforms/android-21/arch-x86_64/usr/include/pthread.h +platforms/android-21/arch-x86_64/usr/include/pwd.h +platforms/android-21/arch-x86_64/usr/include/regex.h +platforms/android-21/arch-x86_64/usr/include/resolv.h +platforms/android-21/arch-x86_64/usr/include/rs/cpp/RenderScript.h +platforms/android-21/arch-x86_64/usr/include/rs/cpp/rsCppStructs.h +platforms/android-21/arch-x86_64/usr/include/rs/cpp/rsDispatch.h +platforms/android-21/arch-x86_64/usr/include/rs/cpp/util/RefBase.h +platforms/android-21/arch-x86_64/usr/include/rs/cpp/util/StrongPointer.h +platforms/android-21/arch-x86_64/usr/include/rs/cpp/util/TypeHelpers.h +platforms/android-21/arch-x86_64/usr/include/rs/rsDefines.h +platforms/android-21/arch-x86_64/usr/include/rs/scriptc/rs_allocation.rsh +platforms/android-21/arch-x86_64/usr/include/rs/scriptc/rs_atomic.rsh +platforms/android-21/arch-x86_64/usr/include/rs/scriptc/rs_core_math.rsh +platforms/android-21/arch-x86_64/usr/include/rs/scriptc/rs_core.rsh +platforms/android-21/arch-x86_64/usr/include/rs/scriptc/rs_debug.rsh +platforms/android-21/arch-x86_64/usr/include/rs/scriptc/rs_element.rsh +platforms/android-21/arch-x86_64/usr/include/rs/scriptc/rs_math.rsh +platforms/android-21/arch-x86_64/usr/include/rs/scriptc/rs_matrix.rsh +platforms/android-21/arch-x86_64/usr/include/rs/scriptc/rs_object.rsh +platforms/android-21/arch-x86_64/usr/include/rs/scriptc/rs_quaternion.rsh +platforms/android-21/arch-x86_64/usr/include/rs/scriptc/rs_sampler.rsh +platforms/android-21/arch-x86_64/usr/include/rs/scriptc/rs_time.rsh +platforms/android-21/arch-x86_64/usr/include/rs/scriptc/rs_types.rsh +platforms/android-21/arch-x86_64/usr/include/sched.h +platforms/android-21/arch-x86_64/usr/include/search.h +platforms/android-21/arch-x86_64/usr/include/semaphore.h +platforms/android-21/arch-x86_64/usr/include/setjmp.h +platforms/android-21/arch-x86_64/usr/include/sgtty.h +platforms/android-21/arch-x86_64/usr/include/signal.h +platforms/android-21/arch-x86_64/usr/include/SLES/OpenSLES_AndroidConfiguration.h +platforms/android-21/arch-x86_64/usr/include/SLES/OpenSLES_Android.h +platforms/android-21/arch-x86_64/usr/include/SLES/OpenSLES_AndroidMetadata.h +platforms/android-21/arch-x86_64/usr/include/SLES/OpenSLES.h +platforms/android-21/arch-x86_64/usr/include/SLES/OpenSLES_Platform.h +platforms/android-21/arch-x86_64/usr/include/stdatomic.h +platforms/android-21/arch-x86_64/usr/include/stdint.h +platforms/android-21/arch-x86_64/usr/include/stdio.h +platforms/android-21/arch-x86_64/usr/include/stdlib.h +platforms/android-21/arch-x86_64/usr/include/string.h +platforms/android-21/arch-x86_64/usr/include/strings.h +platforms/android-21/arch-x86_64/usr/include/sys/auxv.h +platforms/android-21/arch-x86_64/usr/include/sys/cachectl.h +platforms/android-21/arch-x86_64/usr/include/sys/capability.h +platforms/android-21/arch-x86_64/usr/include/sys/cdefs_elf.h +platforms/android-21/arch-x86_64/usr/include/sys/cdefs.h +platforms/android-21/arch-x86_64/usr/include/sys/endian.h +platforms/android-21/arch-x86_64/usr/include/sys/epoll.h +platforms/android-21/arch-x86_64/usr/include/sys/errno.h +platforms/android-21/arch-x86_64/usr/include/sys/eventfd.h +platforms/android-21/arch-x86_64/usr/include/sys/file.h +platforms/android-21/arch-x86_64/usr/include/sys/fsuid.h +platforms/android-21/arch-x86_64/usr/include/sys/glibc-syscalls.h +platforms/android-21/arch-x86_64/usr/include/sys/inotify.h +platforms/android-21/arch-x86_64/usr/include/sys/ioctl_compat.h +platforms/android-21/arch-x86_64/usr/include/sys/ioctl.h +platforms/android-21/arch-x86_64/usr/include/sys/ipc.h +platforms/android-21/arch-x86_64/usr/include/sys/klog.h +platforms/android-21/arch-x86_64/usr/include/sys/limits.h +platforms/android-21/arch-x86_64/usr/include/syslog.h +platforms/android-21/arch-x86_64/usr/include/sys/mman.h +platforms/android-21/arch-x86_64/usr/include/sys/mount.h +platforms/android-21/arch-x86_64/usr/include/sys/msg.h +platforms/android-21/arch-x86_64/usr/include/sys/param.h +platforms/android-21/arch-x86_64/usr/include/sys/personality.h +platforms/android-21/arch-x86_64/usr/include/sys/poll.h +platforms/android-21/arch-x86_64/usr/include/sys/prctl.h +platforms/android-21/arch-x86_64/usr/include/sys/ptrace.h +platforms/android-21/arch-x86_64/usr/include/sys/queue.h +platforms/android-21/arch-x86_64/usr/include/sys/reboot.h +platforms/android-21/arch-x86_64/usr/include/sys/reg.h +platforms/android-21/arch-x86_64/usr/include/sys/resource.h +platforms/android-21/arch-x86_64/usr/include/sys/select.h +platforms/android-21/arch-x86_64/usr/include/sys/sem.h platforms/android-21/arch-x86_64/usr/include/sys/sendfile.h platforms/android-21/arch-x86_64/usr/include/sys/shm.h platforms/android-21/arch-x86_64/usr/include/sys/signalfd.h
diff --git a/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java b/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java index a3ea359..dcd3ea0 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/ConfigurationFragmentPolicyTest.java
@@ -1,89 +1,4 @@ -// Copyright 2016 The Bazel Authors. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -package com.google.devtools.build.lib.packages; - -import static com.google.common.truth.Truth.assertThat; - -import com.google.common.collect.ImmutableSet; -import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition; -import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy.MissingFragmentPolicy; -import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; - -/** - * Tests for the ConfigurationFragmentPolicy builder and methods. - */ -@RunWith(JUnit4.class) -public final class ConfigurationFragmentPolicyTest { - - @SkylarkModule(name = "test_fragment", doc = "first fragment") - private static final class TestFragment {} - - @SkylarkModule(name = "other_fragment", doc = "second fragment") - private static final class OtherFragment {} - - @SkylarkModule(name = "unknown_fragment", doc = "useless waste of permgen") - private static final class UnknownFragment {} - - @Test - public void testMissingFragmentPolicy() throws Exception { - ConfigurationFragmentPolicy policy = - new ConfigurationFragmentPolicy.Builder() - .setMissingFragmentPolicy(MissingFragmentPolicy.IGNORE) - .build(); - - assertThat(policy.getMissingFragmentPolicy()).isEqualTo(MissingFragmentPolicy.IGNORE); - - ConfigurationFragmentPolicy otherPolicy = - new ConfigurationFragmentPolicy.Builder() - .setMissingFragmentPolicy(MissingFragmentPolicy.CREATE_FAIL_ACTIONS) - .build(); - - assertThat(otherPolicy.getMissingFragmentPolicy()) - .isEqualTo(MissingFragmentPolicy.CREATE_FAIL_ACTIONS); - } - - @Test - public void testRequiresConfigurationFragments_AddsToRequiredSet() throws Exception { - // Although these aren't configuration fragments, there are no requirements as to what the class - // has to be, so... - ConfigurationFragmentPolicy policy = - new ConfigurationFragmentPolicy.Builder() - .requiresConfigurationFragments(ImmutableSet.<Class<?>>of(Integer.class, String.class)) - .requiresConfigurationFragments(ImmutableSet.<Class<?>>of(String.class, Long.class)) - .build(); - - assertThat(policy.getRequiredConfigurationFragments()) - .containsExactly(Integer.class, String.class, Long.class); - } - - @Test - public void testRequiresConfigurationFragments_RequiredAndLegalForSpecifiedConfiguration() - throws Exception { - ConfigurationFragmentPolicy policy = - new ConfigurationFragmentPolicy.Builder() - .requiresConfigurationFragments(ImmutableSet.<Class<?>>of(Integer.class)) - .requiresHostConfigurationFragments(ImmutableSet.<Class<?>>of(Long.class)) - .build(); - - assertThat(policy.getRequiredConfigurationFragments()).containsAllOf(Integer.class, Long.class); - - assertThat(policy.isLegalConfigurationFragment(Integer.class)).isTrue(); - assertThat(policy.isLegalConfigurationFragment(Integer.class, ConfigurationTransition.NONE)) +(policy.isLegalConfigurationFragment(Integer.class, ConfigurationTransition.NONE)) .isTrue(); // TODO(mstaib): .isFalse() when dynamic configurations care which configuration a fragment was // specified for
diff --git a/src/test/java/com/google/devtools/build/lib/packages/GlobCacheTest.java b/src/test/java/com/google/devtools/build/lib/packages/GlobCacheTest.java index 30011adc..5b9beaf 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/GlobCacheTest.java +++ b/src/test/java/com/google/devtools/build/lib/packages/GlobCacheTest.java
@@ -1,4 +1,270 @@ -syntactic shorthand for Lists.newArrayList(strings) */ +// Copyright 2015 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.packages; + +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.fail; + +import com.google.common.collect.Lists; +import com.google.devtools.build.lib.cmdline.PackageIdentifier; +import com.google.devtools.build.lib.packages.Globber.BadGlobException; +import com.google.devtools.build.lib.testutil.Scratch; +import com.google.devtools.build.lib.testutil.TestUtils; +import com.google.devtools.build.lib.util.Pair; +import com.google.devtools.build.lib.vfs.FileSystemUtils; +import com.google.devtools.build.lib.vfs.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** + * Tests for {@link GlobCache} + */ +@RunWith(JUnit4.class) +public class GlobCacheTest { + + private static final List<String> NONE = Collections.emptyList(); + + private Scratch scratch = new Scratch("/workspace"); + + private Path packageDirectory; + private Path buildFile; + private GlobCache cache; + + @Before + public final void createFiles() throws Exception { + buildFile = scratch.file("isolated/BUILD", + "# contents don't matter in this test"); + scratch.file("isolated/sub/BUILD", + "# contents don't matter in this test"); + + packageDirectory = buildFile.getParentDirectory(); + + scratch.file("isolated/first.txt", + "# this is first.txt"); + + scratch.file("isolated/second.txt", + "# this is second.txt"); + + scratch.file("isolated/first.js", + "# this is first.js"); + + scratch.file("isolated/second.js", + "# this is second.js"); + + // Files in subdirectories + + scratch.file("isolated/foo/first.js", + "# this is foo/first.js"); + + scratch.file("isolated/foo/second.js", + "# this is foo/second.js"); + + scratch.file("isolated/bar/first.js", + "# this is bar/first.js"); + + scratch.file("isolated/bar/second.js", + "# this is bar/second.js"); + + scratch.file("isolated/sub/sub.js", + "# this is sub/sub.js"); + + cache = + new GlobCache( + packageDirectory, + PackageIdentifier.createInMainRepo("isolated"), + new CachingPackageLocator() { + @Override + public Path getBuildFileForPackage(PackageIdentifier packageId) { + String packageName = packageId.getPackageFragment().getPathString(); + if (packageName.equals("isolated")) { + return scratch.resolve("isolated/BUILD"); + } else if (packageName.equals("isolated/sub")) { + return scratch.resolve("isolated/sub/BUILD"); + } else { + return null; + } + } + }, + null, + TestUtils.getPool(), + -1); + } + + @After + public final void deleteFiles() throws Exception { + FileSystemUtils.deleteTreesBelow(scratch.getFileSystem().getRootDirectory()); + } + + @Test + public void testSafeGlob() throws Exception { + List<Path> paths = cache.safeGlobUnsorted("*.js", false).get(); + assertPathsAre(paths, + "/workspace/isolated/first.js", "/workspace/isolated/second.js"); + } + + @Test + public void testSafeGlobInvalidPatterns() throws Exception { + for (String pattern : new String[] {"Foo?.txt", "List{Test}.py"}) { + try { + cache.safeGlobUnsorted(pattern, false); + fail("Expected pattern " + pattern + " to fail"); + } catch (BadGlobException expected) { + } + } + } + + @Test + public void testGetGlob() throws Exception { + List<String> glob = cache.getGlobUnsorted("*.js"); + assertThat(glob).containsExactly("first.js", "second.js"); + } + + @Test + public void testGetGlob_subdirectory() throws Exception { + List<String> glob = cache.getGlobUnsorted("foo/*.js"); + assertThat(glob).containsExactly("foo/first.js", "foo/second.js"); + } + + @Test + public void testGetKeySet() throws Exception { + assertThat(cache.getKeySet()).isEmpty(); + + cache.getGlobUnsorted("*.java"); + assertThat(cache.getKeySet()).containsExactly(Pair.of("*.java", false)); + + cache.getGlobUnsorted("*.java"); + assertThat(cache.getKeySet()).containsExactly(Pair.of("*.java", false)); + + cache.getGlobUnsorted("*.js"); + assertThat(cache.getKeySet()).containsExactly(Pair.of("*.java", false), Pair.of("*.js", false)); + + cache.getGlobUnsorted("*.java", true); + assertThat(cache.getKeySet()).containsExactly(Pair.of("*.java", false), Pair.of("*.js", false), + Pair.of("*.java", true)); + + try { + cache.getGlobUnsorted("invalid?"); + fail("Expected an invalid regex exception"); + } catch (BadGlobException expected) { + } + assertThat(cache.getKeySet()).containsExactly(Pair.of("*.java", false), Pair.of("*.js", false), + Pair.of("*.java", true)); + + cache.getGlobUnsorted("foo/first.*"); + assertThat(cache.getKeySet()).containsExactly(Pair.of("*.java", false), Pair.of("*.java", true), + Pair.of("*.js", false), Pair.of("foo/first.*", false)); + } + + @Test + public void testGlob() throws Exception { + assertEmpty(cache.globUnsorted(list("*.java"), NONE, false)); + + assertThat(cache.globUnsorted(list("*.*"), NONE, false)).containsExactly( + "first.js", "first.txt", "second.js", "second.txt"); + + assertThat(cache.globUnsorted(list("*.*"), list("first.js"), false)).containsExactly( + "first.txt", "second.js", "second.txt"); + + assertThat(cache.globUnsorted(list("*.txt", "first.*"), NONE, false)).containsExactly( + "first.txt", "second.txt", "first.js"); + } + + @Test + public void testRecursiveGlobDoesNotMatchSubpackage() throws Exception { + List<String> glob = cache.getGlobUnsorted("**/*.js"); + assertThat(glob).containsExactly("first.js", "second.js", "foo/first.js", "bar/first.js", + "foo/second.js", "bar/second.js"); + } + + @Test + public void testSingleFileExclude_Star() throws Exception { + assertThat(cache.globUnsorted(list("*"), list("first.txt"), false)).containsExactly( + "BUILD", "bar", "first.js", "foo", "second.js", "second.txt"); + } + + @Test + public void testSingleFileExclude_StarStar() throws Exception { + assertThat(cache.globUnsorted(list("**"), list("first.txt"), false)).containsExactly( + "BUILD", "bar", "bar/first.js", "bar/second.js", "first.js", "foo", "foo/first.js", + "foo/second.js", "second.js", "second.txt"); + } + + @Test + public void testExcludeAll_Star() throws Exception { + assertThat(cache.globUnsorted(list("*"), list("*"), false)).isEmpty(); + } + + @Test + public void testExcludeAll_Star_NoMatchesAnyway() throws Exception { + assertThat(cache.globUnsorted(list("nope"), list("*"), false)).isEmpty(); + } + + @Test + public void testExcludeAll_StarStar() throws Exception { + assertThat(cache.globUnsorted(list("**"), list("**"), false)).isEmpty(); + } + + @Test + public void testExcludeAll_Manual() throws Exception { + assertThat(cache.globUnsorted(list("**"), list("*", "*/*", "*/*/*"), false)).isEmpty(); + } + + @Test + public void testSingleFileExcludeDoesntMatch() throws Exception { + assertThat(cache.globUnsorted(list("first.txt"), list("nope.txt"), false)).containsExactly( + "first.txt"); + } + + @Test + public void testExcludeDirectory() throws Exception { + assertThat(cache.globUnsorted(list("foo/*"), NONE, true)).containsExactly( + "foo/first.js", "foo/second.js"); + assertThat(cache.globUnsorted(list("foo/*"), list("foo"), false)).containsExactly( + "foo/first.js", "foo/second.js"); + } + + @Test + public void testChildGlobWithChildExclude() throws Exception { + assertThat(cache.globUnsorted(list("foo/*"), list("foo/*"), false)).isEmpty(); + assertThat( + cache.globUnsorted(list("foo/first.js", "foo/second.js"), list("foo/*"), false)).isEmpty(); + assertThat(cache.globUnsorted(list("foo/first.js"), list("foo/first.js"), false)).isEmpty(); + assertThat(cache.globUnsorted(list("foo/first.js"), list("*/first.js"), false)).isEmpty(); + assertThat(cache.globUnsorted(list("foo/first.js"), list("*/*"), false)).isEmpty(); + } + + private void assertEmpty(Collection<?> glob) { + assertThat(glob).isEmpty(); + } + + private void assertPathsAre(List<Path> paths, String... strings) { + List<String> pathStrings = new ArrayList<>(); + for (Path path : paths) { + pathStrings.add(path.getPathString()); + } + assertThat(pathStrings).containsExactlyElementsIn(Arrays.asList(strings)); + } + + /* syntactic shorthand for Lists.newArrayList(strings) */ private List<String> list(String... strings) { return Lists.newArrayList(strings); }