(List (= scope= flags=0 words=[] bindings=[('CURRENT_DIR', {[DQ [ComSub (AndOr OP_AND_IF (Com {[LIT_CHARS cd]} {[DQ [ComSub (Com {[LIT_CHARS dirname]} {[DQ [VarSub BASH_SOURCE bracket_op=(Index {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 0]}})]]})]]}) (Com {[LIT_CHARS pwd]}) )]]})]) (AndOr OP_OR_IF (Com {[LIT_CHARS source]} {[DQ [VarSub CURRENT_DIR][LIT_CHARS /../../integration_test_setup.sh]]}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "integration_test_setup.sh not found!"]]} < (DescriptorRedirectNode target={[LIT_CHARS 2]} &"> 1), > ) (Com {[LIT_CHARS exit]} {[LIT_CHARS 1]}) ) ) (FunctionDef create_android_binary [] (List (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[LIT_CHARS java/bazel]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS java/bazel/BUILD]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "android_library(\n"][LIT_CHARS " name = "][RIGHT_D_QUOTE "\""][LIT_CHARS lib][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " srcs = ["][RIGHT_D_QUOTE "\""][LIT_CHARS Lib.java][RIGHT_D_QUOTE "\""][LIT_CHARS "],\n"][LIT_CHARS ")\n"][LIT_CHARS "\n"][LIT_CHARS "android_binary(\n"][LIT_CHARS " name = "][RIGHT_D_QUOTE "\""][LIT_CHARS bin][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " srcs = [\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS MainActivity.java][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS Jni.java][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " ],\n"][LIT_CHARS " legacy_native_support = 0,\n"][LIT_CHARS " manifest = "][RIGHT_D_QUOTE "\""][LIT_CHARS AndroidManifest.xml][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " deps = [\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS ":lib"][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS ":jni"][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS " ],\n"][LIT_CHARS ")\n"][LIT_CHARS "\n"][LIT_CHARS "cc_library(\n"][LIT_CHARS " name = "][RIGHT_D_QUOTE "\""][LIT_CHARS jni][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " srcs = ["][RIGHT_D_QUOTE "\""][LIT_CHARS jni.cc][RIGHT_D_QUOTE "\""][LIT_CHARS "],\n"][LIT_CHARS " deps = ["][RIGHT_D_QUOTE "\""][LIT_CHARS ":jni_dep"][RIGHT_D_QUOTE "\""][LIT_CHARS "],\n"][LIT_CHARS ")\n"][LIT_CHARS "\n"][LIT_CHARS "cc_library(\n"][LIT_CHARS " name = "][RIGHT_D_QUOTE "\""][LIT_CHARS jni_dep][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " srcs = ["][RIGHT_D_QUOTE "\""][LIT_CHARS jni_dep.cc][RIGHT_D_QUOTE "\""][LIT_CHARS "],\n"][LIT_CHARS " hdrs = ["][RIGHT_D_QUOTE "\""][LIT_CHARS jni_dep.h][RIGHT_D_QUOTE "\""][LIT_CHARS "],\n"][LIT_CHARS ")\n"][LIT_CHARS "\n"]]} 0), > ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS java/bazel/AndroidManifest.xml]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "\n"][LIT_CHARS "\n"][LIT_CHARS " \n"][LIT_CHARS "\n"][LIT_CHARS " \n"][LIT_CHARS " \n"][LIT_CHARS " \n"][LIT_CHARS " \n"][LIT_CHARS " \n"][LIT_CHARS " \n"][LIT_CHARS " \n"][LIT_CHARS " \n"][LIT_CHARS "\n"]]} 0), > ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS java/bazel/Lib.java]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "package bazel;\n"][LIT_CHARS "\n"][LIT_CHARS "public class Lib {\n"][LIT_CHARS " public static String message() {\n"][LIT_CHARS " return "][RIGHT_D_QUOTE "\""][LIT_CHARS "Hello Lib"][RIGHT_D_QUOTE "\""][LIT_CHARS ";\n"][LIT_CHARS " }\n"][LIT_CHARS "}\n"]]} 0), > ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS java/bazel/Jni.java]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "package bazel;\n"][LIT_CHARS "\n"][LIT_CHARS "public class Jni {\n"][LIT_CHARS " public static native String hello();\n"][LIT_CHARS "}\n"][LIT_CHARS "\n"]]} 0), > ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS java/bazel/MainActivity.java]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "package bazel;\n"][LIT_CHARS "\n"][LIT_CHARS "import android.app.Activity;\n"][LIT_CHARS "import android.os.Bundle;\n"][LIT_CHARS "\n"][LIT_CHARS "public class MainActivity extends Activity {\n"][LIT_CHARS " @Override\n"][LIT_CHARS " public void onCreate(Bundle savedInstanceState) {\n"][LIT_CHARS " super.onCreate(savedInstanceState);\n"][LIT_CHARS " }\n"][LIT_CHARS "}\n"]]} 0), > ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS java/bazel/jni_dep.h]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "#pragma once\n"][LIT_CHARS "\n"][LIT_CHARS "#include \n"][LIT_CHARS "\n"][LIT_CHARS "jstring NewStringLatin1(JNIEnv *env, const char *str);\n"]]} 0), > ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS java/bazel/jni_dep.cc]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "#include "][RIGHT_D_QUOTE "\""][LIT_CHARS java/bazel/jni_dep.h][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "\n"][LIT_CHARS "#include \n"][LIT_CHARS "#include \n"][LIT_CHARS "\n"][LIT_CHARS "jstring NewStringLatin1(JNIEnv *env, const char *str) {\n"][LIT_CHARS " int len = strlen(str);\n"][LIT_CHARS " jchar *str1;\n"][LIT_CHARS " str1 = reinterpret_cast(malloc(len * sizeof(jchar)));\n"][LIT_CHARS "\n"][LIT_CHARS " for (int i = 0; i < len; i++) {\n"][LIT_CHARS " str1[i] = (unsigned char)str[i];\n"][LIT_CHARS " }\n"][LIT_CHARS " jstring result = env->NewString(str1, len);\n"][LIT_CHARS " free(str1);\n"][LIT_CHARS " return result;\n"][LIT_CHARS "}\n"]]} 0), > ) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS java/bazel/jni.cc]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "#include \n"][LIT_CHARS "#include \n"][LIT_CHARS "\n"][LIT_CHARS "#include "][RIGHT_D_QUOTE "\""][LIT_CHARS java/bazel/jni_dep.h][RIGHT_D_QUOTE "\""][LIT_CHARS "\n"][LIT_CHARS "\n"][LIT_CHARS "extern "][RIGHT_D_QUOTE "\""][LIT_CHARS C][RIGHT_D_QUOTE "\""][LIT_CHARS " JNIEXPORT jstring JNICALL\n"][LIT_CHARS "Java_bazel_Jni_hello(JNIEnv *env, jclass clazz) {\n"][LIT_CHARS " std::string hello = "][RIGHT_D_QUOTE "\""][LIT_CHARS Hello][RIGHT_D_QUOTE "\""][LIT_CHARS ";\n"][LIT_CHARS " std::string jni = "][RIGHT_D_QUOTE "\""][LIT_CHARS JNI][RIGHT_D_QUOTE "\""][LIT_CHARS ";\n"][LIT_CHARS " return NewStringLatin1(env, (hello + "][RIGHT_D_QUOTE "\""][LIT_CHARS " "][RIGHT_D_QUOTE "\""][LIT_CHARS " + jni).c_str());\n"][LIT_CHARS "}\n"]]} 0), > ) ) ) (FunctionDef check_num_sos [] (List (= scope= flags=0 words=[] bindings=[('num_sos', {[ComSub (Pipeline (Com {[LIT_CHARS unzip]} {[LIT_CHARS -Z1]} {[LIT_CHARS bazel-bin/java/bazel/bin.apk]} {[SQ ]}) (Com {[LIT_CHARS wc]} {[LIT_CHARS -l]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[SQ ]}) )]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [LIT_CHARS 11]]} {[DQ [VarSub num_sos]]}) ) ) (FunctionDef check_soname [] (List (= scope= flags=0 words=[] bindings=[('readelf', {[DQ [VarSub TEST_SRCDIR][LIT_CHARS "/androidndk/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/*/bin/arm-linux-androideabi-readelf"]]})]) (= scope= flags=0 words=[] bindings=[('soname', {[ComSub (Pipeline (Com {[VarSub readelf]} {[LIT_CHARS -d]} {[LIT_CHARS bazel-bin/java/bazel/_dx/bin/native_symlinks/x86/libbin.so]}) (Com {[LIT_CHARS grep]} {[LIT_CHARS SONAME]}) (Com {[LIT_CHARS awk]} {[SQ ]}) )]})]) (Com {[LIT_CHARS assert_equals]} {[DQ [LIT_CHARS libbin]]} {[DQ [VarSub soname]]}) ) ) (FunctionDef test_sdk_library_deps [] (List (Com {[LIT_CHARS create_new_workspace]}) (Com {[LIT_CHARS setup_android_support]}) (Com {[LIT_CHARS mkdir]} {[LIT_CHARS -p]} {[LIT_CHARS java/a]}) (Com {[LIT_CHARS cat]} < (FilenameRedirectNode filename={[LIT_CHARS java/a/BUILD]} "> 1), (HereDocRedirectNode here_end='EOF' do_expansion=True body_word={[DQ [LIT_CHARS "android_library(\n"][LIT_CHARS " name = "][RIGHT_D_QUOTE "\""][LIT_CHARS a][RIGHT_D_QUOTE "\""][LIT_CHARS ",\n"][LIT_CHARS " deps = ["][RIGHT_D_QUOTE "\""][LIT_CHARS "//external:android/mediarouter_v7"][RIGHT_D_QUOTE "\""][LIT_CHARS "],\n"][LIT_CHARS ")\n"]]} 0), > ) (AndOr OP_OR_IF (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS --nobuild]} {[LIT_CHARS //java/a] [LIT_OTHER ":"] [LIT_CHARS a]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) ) ) (FunctionDef test_android_binary [] (List (Com {[LIT_CHARS create_new_workspace]}) (Com {[LIT_CHARS setup_android_support]}) (Com {[LIT_CHARS create_android_binary]}) (= scope= flags=0 words=[] bindings=[('cpus', {[DQ [LIT_CHARS "armeabi,armeabi-v7a,armeabi-v7a-hard,armeabi-thumb,armeabi-v7a-thumb,armeabi-v7a-hard-thumb,arm64-v8a,mips,mips64,x86,x86_64"]]})]) (AndOr OP_OR_IF (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS -s]} {[LIT_CHARS //java/bazel] [LIT_OTHER ":"] [LIT_CHARS bin]} {[LIT_CHARS --fat_apk_cpu] [LIT_OTHER "="] [DQ [VarSub cpus]]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (Com {[LIT_CHARS check_num_sos]}) (Com {[LIT_CHARS check_soname]}) ) ) (FunctionDef test_android_binary_clang [] (List (If (DBracket {B! {B1 UNARY_FILE_r {[DQ [VarSub BAZEL_RUNFILES][LIT_CHARS /external/androidndk/ndk/source.properties]]}}}) (Com {[LIT_CHARS return]}) ) (Com {[LIT_CHARS create_new_workspace]}) (Com {[LIT_CHARS setup_android_support]}) (Com {[LIT_CHARS create_android_binary]}) (= scope= flags=0 words=[] bindings=[('cpus', {[DQ [LIT_CHARS "armeabi,armeabi-v7a,armeabi-v7a-hard,armeabi-thumb,armeabi-v7a-thumb,armeabi-v7a-hard-thumb,arm64-v8a,mips,mips64,x86,x86_64"]]})]) (AndOr OP_OR_IF (Com {[LIT_CHARS bazel]} {[LIT_CHARS build]} {[LIT_CHARS -s]} {[LIT_CHARS //java/bazel] [LIT_OTHER ":"] [LIT_CHARS bin]} {[LIT_CHARS --fat_apk_cpu] [LIT_OTHER "="] [DQ [VarSub cpus]]} {[LIT_CHARS --android_compiler] [LIT_OTHER "="] [LIT_CHARS clang3.8]}) (Com {[LIT_CHARS fail]} {[DQ [LIT_CHARS "build failed"]]}) ) (Com {[LIT_CHARS check_num_sos]}) (Com {[LIT_CHARS check_soname]}) ) ) (If (DBracket {B! {B1 UNARY_FILE_r {[DQ [VarSub TEST_SRCDIR][LIT_CHARS /androidndk/ndk/RELEASE.TXT]]}}}) (If (DBracket {B! {B1 UNARY_FILE_r {[DQ [VarSub TEST_SRCDIR][LIT_CHARS /androidndk/ndk/source.properties]]}}}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Not running Android tests due to lack of an Android NDK."]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) ) ) (If (DBracket {B! {B1 UNARY_FILE_r {[DQ [VarSub TEST_SRCDIR][LIT_CHARS /androidsdk/tools/android]]}}}) (List (Com {[LIT_CHARS echo]} {[DQ [LIT_CHARS "Not running Android tests due to lack of an Android SDK."]]}) (Com {[LIT_CHARS exit]} {[LIT_CHARS 0]}) ) ) (Com {[LIT_CHARS run_suite]} {[DQ [LIT_CHARS "Android integration tests"]]}) )