(CommandList
  children: [
    (C {(set)} {(-eu)})
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:ScriptDir)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: 
                  (CommandList
                    children: [
                      (C {(dirname)} 
                        {
                          (DQ 
                            (CommandSubPart
                              command_list: 
                                (CommandList
                                  children: [
                                    (Pipeline
                                      children: [
                                        (C {(echo)} {($ VSub_Number "$0")})
                                        (C {(sed)} {(-e)} 
                                          {
                                            (DQ ("s,^") 
                                              (EscapedLiteralPart
                                                token: <Lit_EscapedChar "\\(">
                                              ) ("[^/]") (EscapedLiteralPart token:<Lit_EscapedChar "\\)">) (",") 
                                              (CommandSubPart
                                                command_list: (CommandList children:[(C {(pwd)})])
                                                left_token: <Left_CommandSub "$(">
                                                spids: [43 45]
                                              ) (/) (EscapedLiteralPart token:<Lit_EscapedChar "\\1">) (",")
                                            )
                                          }
                                        )
                                      ]
                                      negated: False
                                    )
                                  ]
                                )
                              left_token: <Left_CommandSub "$(">
                              spids: [26 50]
                            )
                          )
                        }
                      )
                    ]
                  )
                left_token: <Left_CommandSub "$(">
                spids: [22 52]
              )
            }
          spids: [21]
        )
      ]
      spids: [19]
    )
    (Assignment
      keyword: Assign_Readonly
      pairs: [
        (assign_pair
          lhs: (LhsName name:ProtoRootDir)
          op: Equal
          rhs: {(DQ (${ VSub_Name ScriptDir) (/../..))}
          spids: [56]
        )
      ]
      spids: [54]
    )
    (FuncDef
      name: printUsage
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:NAME)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(basename)} {(DQ (${ VSub_Number 0))})]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [73 81]
                      )
                    }
                  spids: [72]
                )
              ]
              spids: [72]
            )
            (SimpleCommand
              words: [{(cat)}]
              redirects: [
                (HereDoc
                  op_id: Redir_DLess
                  fd: -1
                  body: 
                    {
                      (DQ ("usage: ") (${ VSub_Name NAME) (" [OPTIONS]\n") ("\n") 
                        ("This script does the common build steps needed.\n") ("\n") ("OPTIONS:\n") ("\n") (" General:\n") ("\n") ("   -h, --help\n") ("         Show this message\n") 
                        ("   -c, --clean\n") ("         Issue a clean before the normal build.\n") ("   -a, --autogen\n") 
                        ("         Start by rerunning autogen & configure.\n") ("   -r, --regenerate-descriptors\n") 
                        (
"         Run generate_descriptor_proto.sh to regenerate all the checked in\n"
                        ) ("         proto sources.\n") ("   -j #, --jobs #\n") 
                        (
"         Force the number of parallel jobs (useful for debugging build issues).\n"
                        ) ("   --core-only\n") 
                        (
"         Skip some of the core protobuf build/checks to shorten the build time.\n"
                        ) ("   --skip-xcode\n") 
                        (
"         Skip the invoke of Xcode to test the runtime on both iOS and OS X.\n"
                        ) ("   --skip-xcode-ios\n") ("         Skip the invoke of Xcode to test the runtime on iOS.\n") 
                        ("   --skip-xcode-debug\n") ("         Skip the Xcode Debug configuration.\n") ("   --skip-xcode-release\n") 
                        ("         Skip the Xcode Release configuration.\n") ("   --skip-xcode-osx\n") ("         Skip the invoke of Xcode to test the runtime on OS X.\n") 
                        ("   --skip-objc-conformance\n") ("         Skip the Objective C conformance tests (run on OS X).\n") ("\n")
                      )
                    }
                  do_expansion: True
                  here_end: EOF
                  was_filled: True
                  spids: [86]
                )
              ]
            )
          ]
          spids: [69]
        )
      spids: [65 68]
    )
    (FuncDef
      name: header
      body: 
        (BraceGroup
          children: [
            (C {(echo)} {(DQ )})
            (C {(echo)} 
              {(DQ ("========================================================================"))}
            )
            (C {(echo)} {(DQ ("    ") (${ VSub_At "@"))})
            (C {(echo)} 
              {(DQ ("========================================================================"))}
            )
          ]
          spids: [135]
        )
      spids: [131 134]
    )
    (FuncDef
      name: wrapped_make
      body: 
        (BraceGroup
          children: [
            (C {(set)} {(Lit_Other "+") (e)})
            (C {(make)} {($ VSub_Star "$*")})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:MAKE_EXIT_STATUS)
                  op: Equal
                  rhs: {($ VSub_QMark "$?")}
                  spids: [197]
                )
              ]
              spids: [197]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (C {(Lit_Other "[")} {(${ VSub_Name MAKE_EXIT_STATUS)} {(-ne)} {(0)} 
                          {(Lit_Other "]")}
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {
                        (DQ ("Error: 'make ") ($ VSub_Star "$*") ("' exited with status ") 
                          (${ VSub_Name MAKE_EXIT_STATUS)
                        )
                      }
                    )
                    (C {(exit)} {(${ VSub_Name MAKE_EXIT_STATUS)})
                  ]
                  spids: [-1 216]
                )
              ]
              spids: [-1 238]
            )
            (C {(set)} {(-e)})
          ]
          spids: [180]
        )
      spids: [176 179]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:NUM_MAKE_JOBS)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(/usr/sbin/sysctl)} {(-n)} {(hw.ncpu)})])
                left_token: <Left_CommandSub "$(">
                spids: [249 255]
              )
            }
          spids: [248]
        )
      ]
      spids: [248]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_lt
                      left: {(DQ (${ VSub_Name NUM_MAKE_JOBS))}
                      right: {(2)}
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:NUM_MAKE_JOBS) op:Equal rhs:{(2)} spids:[278])]
              spids: [278]
            )
          ]
          spids: [-1 275]
        )
      ]
      spids: [-1 281]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:DO_AUTOGEN) op:Equal rhs:{(no)} spids:[284])]
      spids: [284]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:DO_CLEAN) op:Equal rhs:{(no)} spids:[287])]
      spids: [287]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:REGEN_DESCRIPTORS) op:Equal rhs:{(no)} spids:[290])]
      spids: [290]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:CORE_ONLY) op:Equal rhs:{(no)} spids:[293])]
      spids: [293]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:DO_XCODE_IOS_TESTS) op:Equal rhs:{(yes)} spids:[296])]
      spids: [296]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:DO_XCODE_OSX_TESTS) op:Equal rhs:{(yes)} spids:[299])]
      spids: [299]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:DO_XCODE_DEBUG) op:Equal rhs:{(yes)} spids:[302])]
      spids: [302]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:DO_XCODE_RELEASE) op:Equal rhs:{(yes)} spids:[305])]
      spids: [305]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:DO_OBJC_CONFORMANCE_TESTS)
          op: Equal
          rhs: {(yes)}
          spids: [308]
        )
      ]
      spids: [308]
    )
    (While
      cond: [
        (Sentence
          child: 
            (DBracket
              expr: (BoolBinary op_id:BoolBinary_GlobNEqual left:{($ VSub_Pound "$#")} right:{(0)})
            )
          terminator: <Op_Semi ";">
        )
      ]
      body: 
        (DoGroup
          children: [
            (Case
              to_match: {(DQ (${ VSub_Number 1))}
              arms: [
                (case_arm
                  pat_list: [{(-h)} {(--help)}]
                  action: [(C {(printUsage)}) (C {(exit)} {(0)})]
                  spids: [338 344 355 -1]
                )
                (case_arm
                  pat_list: [{(-c)} {(--clean)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:DO_CLEAN)
                          op: Equal
                          rhs: {(yes)}
                          spids: [367]
                        )
                      ]
                      spids: [367]
                    )
                  ]
                  spids: [358 364 371 -1]
                )
                (case_arm
                  pat_list: [{(-a)} {(--autogen)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:DO_AUTOGEN)
                          op: Equal
                          rhs: {(yes)}
                          spids: [383]
                        )
                      ]
                      spids: [383]
                    )
                  ]
                  spids: [374 380 387 -1]
                )
                (case_arm
                  pat_list: [{(-r)} {(--regenerate-descriptors)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:REGEN_DESCRIPTORS)
                          op: Equal
                          rhs: {(yes)}
                          spids: [399]
                        )
                      ]
                      spids: [399]
                    )
                  ]
                  spids: [390 396 403 -1]
                )
                (case_arm
                  pat_list: [{(-j)} {(--jobs)}]
                  action: [
                    (C {(shift)})
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:NUM_MAKE_JOBS)
                          op: Equal
                          rhs: {(DQ (${ VSub_Number 1))}
                          spids: [418]
                        )
                      ]
                      spids: [418]
                    )
                  ]
                  spids: [406 412 426 -1]
                )
                (case_arm
                  pat_list: [{(--core-only)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:CORE_ONLY)
                          op: Equal
                          rhs: {(yes)}
                          spids: [434]
                        )
                      ]
                      spids: [434]
                    )
                  ]
                  spids: [429 431 438 -1]
                )
                (case_arm
                  pat_list: [{(--skip-xcode)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:DO_XCODE_IOS_TESTS)
                          op: Equal
                          rhs: {(no)}
                          spids: [446]
                        )
                      ]
                      spids: [446]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:DO_XCODE_OSX_TESTS)
                          op: Equal
                          rhs: {(no)}
                          spids: [450]
                        )
                      ]
                      spids: [450]
                    )
                  ]
                  spids: [441 443 454 -1]
                )
                (case_arm
                  pat_list: [{(--skip-xcode-ios)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:DO_XCODE_IOS_TESTS)
                          op: Equal
                          rhs: {(no)}
                          spids: [462]
                        )
                      ]
                      spids: [462]
                    )
                  ]
                  spids: [457 459 466 -1]
                )
                (case_arm
                  pat_list: [{(--skip-xcode-osx)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:DO_XCODE_OSX_TESTS)
                          op: Equal
                          rhs: {(no)}
                          spids: [474]
                        )
                      ]
                      spids: [474]
                    )
                  ]
                  spids: [469 471 478 -1]
                )
                (case_arm
                  pat_list: [{(--skip-xcode-debug)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:DO_XCODE_DEBUG)
                          op: Equal
                          rhs: {(no)}
                          spids: [486]
                        )
                      ]
                      spids: [486]
                    )
                  ]
                  spids: [481 483 490 -1]
                )
                (case_arm
                  pat_list: [{(--skip-xcode-release)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:DO_XCODE_RELEASE)
                          op: Equal
                          rhs: {(no)}
                          spids: [498]
                        )
                      ]
                      spids: [498]
                    )
                  ]
                  spids: [493 495 502 -1]
                )
                (case_arm
                  pat_list: [{(--skip-objc-conformance)}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:DO_OBJC_CONFORMANCE_TESTS)
                          op: Equal
                          rhs: {(no)}
                          spids: [510]
                        )
                      ]
                      spids: [510]
                    )
                  ]
                  spids: [505 507 514 -1]
                )
                (case_arm
                  pat_list: [{(-) (Lit_Other "*")}]
                  action: [
                    (SimpleCommand
                      words: [{(echo)} {(DQ ("ERROR: Unknown option: ") (${ VSub_Number 1))}]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[531])]
                    )
                    (C {(printUsage)})
                    (C {(exit)} {(1)})
                  ]
                  spids: [517 519 543 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other "*")}]
                  action: [
                    (SimpleCommand
                      words: [{(echo)} {(DQ ("ERROR: Unknown argument: ") (${ VSub_Number 1))}]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[559])]
                    )
                    (C {(printUsage)})
                    (C {(exit)} {(1)})
                  ]
                  spids: [546 547 571 -1]
                )
              ]
              spids: [327 335 574]
            )
            (C {(shift)})
          ]
          spids: [324 579]
        )
    )
    (C {(cd)} {(DQ (${ VSub_Name ProtoRootDir))})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (DBracket expr:(LogicalNot child:(BoolUnary op_id:BoolUnary_f child:{(Makefile)})))
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:DO_AUTOGEN) op:Equal rhs:{(yes)} spids:[614])]
              spids: [614]
            )
          ]
          spids: [-1 611]
        )
      ]
      spids: [-1 617]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {(DQ (${ VSub_Name DO_AUTOGEN))}
                      right: {(DQ (yes))}
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(header)} {(DQ ("Running autogen & configure"))})
            (C {(./autogen.sh)})
            (C {(./configure)} 
              {(Lit_VarLike "CPPFLAGS=") 
                (DQ ("-mmacosx-version-min=10.9 -Wunused-const-variable -Wunused-function"))
              } {(Lit_VarLike "CXXFLAGS=") (DQ ("-Wnon-virtual-dtor -Woverloaded-virtual"))}
            )
          ]
          spids: [-1 640]
        )
      ]
      spids: [-1 669]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {(DQ (${ VSub_Name DO_CLEAN))}
                      right: {(DQ (yes))}
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(header)} {(DQ (Cleaning))})
            (C {(wrapped_make)} {(clean)})
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {(DQ (${ VSub_Name DO_XCODE_IOS_TESTS))}
                              right: {(DQ (yes))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:XCODEBUILD_CLEAN_BASE_IOS)
                          op: Equal
                          rhs: 
                            {
                              (ArrayLiteralPart
                                words: [
                                  {(xcodebuild)}
                                  {(-project)}
                                  {(objectivec/ProtocolBuffers_iOS.xcodeproj)}
                                  {(-scheme)}
                                  {(ProtocolBuffers)}
                                ]
                              )
                            }
                          spids: [730]
                        )
                      ]
                      spids: [730]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_GlobDEqual
                                      left: {(DQ (${ VSub_Name DO_XCODE_DEBUG))}
                                      right: {(DQ (yes))}
                                    )
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C 
                              {
                                (DQ 
                                  (BracedVarSub
                                    token: <VSub_Name XCODEBUILD_CLEAN_BASE_IOS>
                                    bracket_op: (WholeArray op_id:Lit_At)
                                    spids: [774 779]
                                  )
                                )
                              } {(-configuration)} {(Debug)} {(clean)}
                            )
                          ]
                          spids: [-1 770]
                        )
                      ]
                      spids: [-1 789]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_GlobDEqual
                                      left: {(DQ (${ VSub_Name DO_XCODE_RELEASE))}
                                      right: {(DQ (yes))}
                                    )
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C 
                              {
                                (DQ 
                                  (BracedVarSub
                                    token: <VSub_Name XCODEBUILD_CLEAN_BASE_IOS>
                                    bracket_op: (WholeArray op_id:Lit_At)
                                    spids: [816 821]
                                  )
                                )
                              } {(-configuration)} {(Release)} {(clean)}
                            )
                          ]
                          spids: [-1 812]
                        )
                      ]
                      spids: [-1 831]
                    )
                  ]
                  spids: [-1 727]
                )
              ]
              spids: [-1 834]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {(DQ (${ VSub_Name DO_XCODE_OSX_TESTS))}
                              right: {(DQ (yes))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:XCODEBUILD_CLEAN_BASE_OSX)
                          op: Equal
                          rhs: 
                            {
                              (ArrayLiteralPart
                                words: [
                                  {(xcodebuild)}
                                  {(-project)}
                                  {(objectivec/ProtocolBuffers_OSX.xcodeproj)}
                                  {(-scheme)}
                                  {(ProtocolBuffers)}
                                ]
                              )
                            }
                          spids: [860]
                        )
                      ]
                      spids: [860]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_GlobDEqual
                                      left: {(DQ (${ VSub_Name DO_XCODE_DEBUG))}
                                      right: {(DQ (yes))}
                                    )
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C 
                              {
                                (DQ 
                                  (BracedVarSub
                                    token: <VSub_Name XCODEBUILD_CLEAN_BASE_OSX>
                                    bracket_op: (WholeArray op_id:Lit_At)
                                    spids: [904 909]
                                  )
                                )
                              } {(-configuration)} {(Debug)} {(clean)}
                            )
                          ]
                          spids: [-1 900]
                        )
                      ]
                      spids: [-1 919]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (DBracket
                                  expr: 
                                    (BoolBinary
                                      op_id: BoolBinary_GlobDEqual
                                      left: {(DQ (${ VSub_Name DO_XCODE_RELEASE))}
                                      right: {(DQ (yes))}
                                    )
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C 
                              {
                                (DQ 
                                  (BracedVarSub
                                    token: <VSub_Name XCODEBUILD_CLEAN_BASE_OSX>
                                    bracket_op: (WholeArray op_id:Lit_At)
                                    spids: [946 951]
                                  )
                                )
                              } {(-configuration)} {(Release)} {(clean)}
                            )
                          ]
                          spids: [-1 942]
                        )
                      ]
                      spids: [-1 961]
                    )
                  ]
                  spids: [-1 857]
                )
              ]
              spids: [-1 964]
            )
          ]
          spids: [-1 692]
        )
      ]
      spids: [-1 966]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {(DQ (${ VSub_Name REGEN_DESCRIPTORS))}
                      right: {(DQ (yes))}
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(header)} {(DQ ("Regenerating the descriptor sources."))})
            (C {(./generate_descriptor_proto.sh)} {(-j)} {(DQ (${ VSub_Name NUM_MAKE_JOBS))})
          ]
          spids: [-1 989]
        )
      ]
      spids: [-1 1009]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {(DQ (${ VSub_Name CORE_ONLY))}
                      right: {(DQ (yes))}
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(header)} {(DQ ("Building core Only"))})
            (C {(wrapped_make)} {(-j)} {(DQ (${ VSub_Name NUM_MAKE_JOBS))})
          ]
          spids: [-1 1032]
        )
      ]
      else_action: [
        (C {(header)} {(DQ (Building))})
        (C {(wrapped_make)} {(-j)} {(DQ (${ VSub_Name NUM_MAKE_JOBS))} {(all)})
        (C {(wrapped_make)} {(-j)} {(DQ (${ VSub_Name NUM_MAKE_JOBS))} {(check)})
        (C {(cd)} {(conformance)})
        (C {(wrapped_make)} {(-j)} {(DQ (${ VSub_Name NUM_MAKE_JOBS))} {(test_cpp)})
        (C {(cd)} {(..)})
      ]
      spids: [1052 1122]
    )
    (C {(objectivec/generate_well_known_types.sh)} {(--check-only)} {(-j)} 
      {(DQ (${ VSub_Name NUM_MAKE_JOBS))}
    )
    (C {(header)} {(DQ ("Checking on the ObjC Runtime Code"))})
    (C {(objectivec/DevTools/pddm_tests.py)})
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (Pipeline
                  children: [
                    (C {(objectivec/DevTools/pddm.py)} {(--dry-run)} 
                      {(objectivec/) (Lit_Other "*") (.) (Lit_Other "[") (hm) (Lit_Other "]")} {(objectivec/Tests/) (Lit_Other "*") (.) (Lit_Other "[") (hm) (Lit_Other "]")}
                    )
                  ]
                  negated: True
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(echo)} {(DQ )})
            (C {(echo)} {(DQ ("Update by running:"))})
            (C {(echo)} 
              {(DQ ("   objectivec/DevTools/pddm.py objectivec/*.[hm] objectivec/Tests/*.[hm]"))}
            )
            (C {(exit)} {(1)})
          ]
          spids: [-1 1173]
        )
      ]
      spids: [-1 1200]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {(DQ (${ VSub_Name DO_XCODE_IOS_TESTS))}
                      right: {(DQ (yes))}
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:XCODEBUILD_TEST_BASE_IOS)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {(xcodebuild)}
                          {(-project)}
                          {(objectivec/ProtocolBuffers_iOS.xcodeproj)}
                          {(-scheme)}
                          {(ProtocolBuffers)}
                        ]
                      )
                    }
                  spids: [1226]
                )
              ]
              spids: [1226]
            )
            (Assignment
              keyword: Assign_Readonly
              pairs: [
                (assign_pair
                  lhs: (LhsName name:XCODE_VERSION_LINE)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (C {(xcodebuild)} {(-version)})
                                    (C {(grep)} 
                                      {(Xcode) (EscapedLiteralPart token:<Lit_EscapedChar "\\ ">)}
                                    )
                                  ]
                                  negated: False
                                )
                              ]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [1262 1274]
                        )
                      )
                    }
                  spids: [1260]
                )
              ]
              spids: [1258]
            )
            (Assignment
              keyword: Assign_Readonly
              pairs: [
                (assign_pair
                  lhs: (LhsName name:XCODE_VERSION)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name XCODE_VERSION_LINE>
                          suffix_op: 
                            (PatSub
                              pat: {("Xcode ")}
                              replace: {(SQ )}
                              do_all: False
                              do_prefix: False
                              do_suffix: False
                            )
                          spids: [1282 1287]
                        )
                      )
                    }
                  spids: [1280]
                )
              ]
              spids: [1278]
            )
            (Case
              to_match: {(DQ (${ VSub_Name XCODE_VERSION))}
              arms: [
                (case_arm
                  pat_list: [{(6.) (Lit_Other "*")}]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ 
                            (
"ERROR: Xcode 6.3/6.4 no longer supported for building, please use 8.0 or higher."
                            )
                          )
                        }
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[1317])]
                    )
                    (C {(exit)} {(10)})
                  ]
                  spids: [1305 1308 1326 -1]
                )
                (case_arm
                  pat_list: [{(7.) (Lit_Other "*")}]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {(DQ ("ERROR: The unittests include Swift code that is now Swift 3.0."))}
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[1341])]
                    )
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ 
                            (
"ERROR: Xcode 8.0 or higher is required to build the test suite, but the library works with Xcode 7.x."
                            )
                          )
                        }
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[1351])]
                    )
                    (C {(exit)} {(11)})
                  ]
                  spids: [1329 1332 1360 -1]
                )
                (case_arm
                  pat_list: [{(8.0) (Lit_Other "*")}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:XCODEBUILD_TEST_BASE_IOS)
                          op: PlusEqual
                          rhs: 
                            {
                              (ArrayLiteralPart
                                words: [
                                  {(-destination)}
                                  {(DQ ("platform=iOS Simulator,name=iPhone 4s,OS=9.0"))}
                                  {(-destination)}
                                  {(DQ ("platform=iOS Simulator,name=iPhone 7,OS=10.0"))}
                                  {(-destination)}
                                  {(DQ ("platform=iOS Simulator,name=iPad 2,OS=9.0"))}
                                  {(-destination)}
                                  {(DQ ("platform=iOS Simulator,name=iPad Pro (9.7 inch),OS=10.0"))}
                                ]
                              )
                            }
                          spids: [1373]
                        )
                      ]
                      spids: [1373]
                    )
                  ]
                  spids: [1363 1366 1420 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other "*")}]
                  action: [
                    (C {(echo)} 
                      {
                        (DQ ("Time to update the simulator targets for Xcode ") 
                          (${ VSub_Name XCODE_VERSION)
                        )
                      }
                    )
                    (C {(exit)} {(2)})
                  ]
                  spids: [1423 1425 1443 -1]
                )
              ]
              spids: [1294 1302 1446]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {(DQ (${ VSub_Name DO_XCODE_DEBUG))}
                              right: {(DQ (yes))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(header)} {(DQ ("Doing Xcode iOS build/tests - Debug"))})
                    (C 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name XCODEBUILD_TEST_BASE_IOS>
                            bracket_op: (WholeArray op_id:Lit_At)
                            spids: [1480 1485]
                          )
                        )
                      } {(-configuration)} {(Debug)} {(test)}
                    )
                  ]
                  spids: [-1 1469]
                )
              ]
              spids: [-1 1495]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {(DQ (${ VSub_Name DO_XCODE_RELEASE))}
                              right: {(DQ (yes))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(header)} {(DQ ("Doing Xcode iOS build/tests - Release"))})
                    (C 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name XCODEBUILD_TEST_BASE_IOS>
                            bracket_op: (WholeArray op_id:Lit_At)
                            spids: [1529 1534]
                          )
                        )
                      } {(-configuration)} {(Release)} {(test)}
                    )
                  ]
                  spids: [-1 1518]
                )
              ]
              spids: [-1 1544]
            )
            (C {(killall)} {(Simulator)})
          ]
          spids: [-1 1223]
        )
      ]
      spids: [-1 1555]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {(DQ (${ VSub_Name DO_XCODE_OSX_TESTS))}
                      right: {(DQ (yes))}
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:XCODEBUILD_TEST_BASE_OSX)
                  op: Equal
                  rhs: 
                    {
                      (ArrayLiteralPart
                        words: [
                          {(xcodebuild)}
                          {(-project)}
                          {(objectivec/ProtocolBuffers_OSX.xcodeproj)}
                          {(-scheme)}
                          {(ProtocolBuffers)}
                          {(-destination)}
                          {(DQ ("platform=OS X,arch=x86_64"))}
                        ]
                      )
                    }
                  spids: [1580]
                )
              ]
              spids: [1580]
            )
            (Assignment
              keyword: Assign_Readonly
              pairs: [
                (assign_pair
                  lhs: (LhsName name:XCODE_VERSION_LINE)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (CommandSubPart
                          command_list: 
                            (CommandList
                              children: [
                                (Pipeline
                                  children: [
                                    (C {(xcodebuild)} {(-version)})
                                    (C {(grep)} 
                                      {(Xcode) (EscapedLiteralPart token:<Lit_EscapedChar "\\ ">)}
                                    )
                                  ]
                                  negated: False
                                )
                              ]
                            )
                          left_token: <Left_CommandSub "$(">
                          spids: [1618 1630]
                        )
                      )
                    }
                  spids: [1616]
                )
              ]
              spids: [1614]
            )
            (Assignment
              keyword: Assign_Readonly
              pairs: [
                (assign_pair
                  lhs: (LhsName name:XCODE_VERSION)
                  op: Equal
                  rhs: 
                    {
                      (DQ 
                        (BracedVarSub
                          token: <VSub_Name XCODE_VERSION_LINE>
                          suffix_op: 
                            (PatSub
                              pat: {("Xcode ")}
                              replace: {(SQ )}
                              do_all: False
                              do_prefix: False
                              do_suffix: False
                            )
                          spids: [1638 1643]
                        )
                      )
                    }
                  spids: [1636]
                )
              ]
              spids: [1634]
            )
            (Case
              to_match: {(DQ (${ VSub_Name XCODE_VERSION))}
              arms: [
                (case_arm
                  pat_list: [{(6.) (Lit_Other "*")}]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ 
                            (
"ERROR: Xcode 6.3/6.4 no longer supported for building, please use 8.0 or higher."
                            )
                          )
                        }
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[1673])]
                    )
                    (C {(exit)} {(10)})
                  ]
                  spids: [1661 1664 1682 -1]
                )
                (case_arm
                  pat_list: [{(7.) (Lit_Other "*")}]
                  action: [
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {(DQ ("ERROR: The unittests include Swift code that is now Swift 3.0."))}
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[1697])]
                    )
                    (SimpleCommand
                      words: [
                        {(echo)}
                        {
                          (DQ 
                            (
"ERROR: Xcode 8.0 or higher is required to build the test suite, but the library works with Xcode 7.x."
                            )
                          )
                        }
                      ]
                      redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[1707])]
                    )
                    (C {(exit)} {(11)})
                  ]
                  spids: [1685 1688 1716 -1]
                )
              ]
              spids: [1650 1658 1719]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {(DQ (${ VSub_Name DO_XCODE_DEBUG))}
                              right: {(DQ (yes))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(header)} {(DQ ("Doing Xcode OS X build/tests - Debug"))})
                    (C 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name XCODEBUILD_TEST_BASE_OSX>
                            bracket_op: (WholeArray op_id:Lit_At)
                            spids: [1753 1758]
                          )
                        )
                      } {(-configuration)} {(Debug)} {(test)}
                    )
                  ]
                  spids: [-1 1742]
                )
              ]
              spids: [-1 1768]
            )
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobDEqual
                              left: {(DQ (${ VSub_Name DO_XCODE_RELEASE))}
                              right: {(DQ (yes))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (C {(header)} {(DQ ("Doing Xcode OS X build/tests - Release"))})
                    (C 
                      {
                        (DQ 
                          (BracedVarSub
                            token: <VSub_Name XCODEBUILD_TEST_BASE_OSX>
                            bracket_op: (WholeArray op_id:Lit_At)
                            spids: [1802 1807]
                          )
                        )
                      } {(-configuration)} {(Release)} {(test)}
                    )
                  ]
                  spids: [-1 1791]
                )
              ]
              spids: [-1 1817]
            )
          ]
          spids: [-1 1577]
        )
      ]
      spids: [-1 1819]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: 
                (DBracket
                  expr: 
                    (BoolBinary
                      op_id: BoolBinary_GlobDEqual
                      left: {(DQ (${ VSub_Name DO_OBJC_CONFORMANCE_TESTS))}
                      right: {(DQ (yes))}
                    )
                )
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(header)} {(DQ ("Running ObjC Conformance Tests"))})
            (C {(cd)} {(conformance)})
            (C {(wrapped_make)} {(-j)} {(DQ (${ VSub_Name NUM_MAKE_JOBS))} {(test_objc)})
            (C {(cd)} {(..)})
          ]
          spids: [-1 1842]
        )
      ]
      spids: [-1 1874]
    )
  ]
)