(CommandList
  children: [
    (FuncDef
      name: die
      body: 
        (BraceGroup
          children: [
            (SimpleCommand
              words: [{(echo)} {(DQ ($ VSub_At "$@"))}]
              redirects: [(Redir op_id:Redir_GreatAnd fd:1 arg_word:{(2)} spids:[17])]
            )
            (C {(exit)} {(1)})
          ]
          spids: [8]
        )
      spids: [3 7]
    )
    (AndOr
      children: [
        (C {(test)} {(-d)} {(autoconf)})
        (AndOr
          children: [(C {(test)} {(-f)} {(autoconf/configure.ac)}) (C {(cd)} {(autoconf)})]
          op_id: Op_DAmp
        )
      ]
      op_id: Op_DAmp
    )
    (AndOr
      children: [
        (C {(test)} {(-f)} {(configure.ac)})
        (C {(die)} {(DQ ("Can't find 'autoconf' dir; please cd into it first"))})
      ]
      op_id: Op_DPipe
    )
    (Pipeline
      children: [
        (C {(autoconf)} {(--version)})
        (SimpleCommand
          words: [{(egrep)} {(SQ <"2\\.[56][0-9]">)}]
          redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/dev/null)} spids:[73])]
        )
      ]
      negated: False
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(test)} {($ VSub_QMark "$?")} {(-ne)} {(0)})
              terminator: <Op_Semi ";">
            )
          ]
          action: [(C {(die)} {(DQ ("Your autoconf was not detected as being 2.5x or 2.6x"))})]
          spids: [-1 89]
        )
      ]
      spids: [-1 98]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:cwd)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(pwd)})])
                left_token: <Left_Backtick "`">
                spids: [101 103]
              )
            }
          spids: [100]
        )
      ]
      spids: [100]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(test)} {(-d)} {(../../../autoconf/m4)})
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(cd)} {(../../../autoconf/m4)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:llvm_m4)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(pwd)})])
                        left_token: <Left_Backtick "`">
                        spids: [124 126]
                      )
                    }
                  spids: [123]
                )
              ]
              spids: [123]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:llvm_src_root)
                  op: Equal
                  rhs: {(../..)}
                  spids: [129]
                )
              ]
              spids: [129]
            )
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:llvm_obj_root)
                  op: Equal
                  rhs: {(../..)}
                  spids: [133]
                )
              ]
              spids: [133]
            )
            (C {(cd)} {($ VSub_Name "$cwd")})
          ]
          spids: [-1 115]
        )
        (if_arm
          cond: [
            (Sentence
              child: (C {(test)} {(-d)} {(../../llvm/autoconf/m4)})
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (C {(cd)} {(../../llvm/autoconf/m4)})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:llvm_m4)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: (CommandList children:[(C {(pwd)})])
                        left_token: <Left_Backtick "`">
                        spids: [160 162]
                      )
                    }
                  spids: [159]
                )
              ]
              spids: [159]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:llvm_src_root) op:Equal rhs:{(..)} spids:[165])]
              spids: [165]
            )
            (Assignment
              keyword: Assign_None
              pairs: [(assign_pair lhs:(LhsName name:llvm_obj_root) op:Equal rhs:{(..)} spids:[169])]
              spids: [169]
            )
            (C {(cd)} {($ VSub_Name "$cwd")})
          ]
          spids: [141 151]
        )
      ]
      else_action: [
        (While
          cond: [(Sentence child:(C {(true)}) terminator:<Op_Semi ";">)]
          body: 
            (DoGroup
              children: [
                (C {(echo)} {(DQ ("LLVM source root not found."))})
                (C {(read)} {(-p)} {(DQ ("Enter full path to LLVM source:"))} {(REPLY)})
                (If
                  arms: [
                    (if_arm
                      cond: [
                        (Sentence
                          child: (C {(test)} {(-d)} {(DQ ($ VSub_Name "$REPLY") (/autoconf/m4))})
                          terminator: <Op_Semi ";">
                        )
                      ]
                      action: [
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:llvm_src_root)
                              op: Equal
                              rhs: {(DQ ($ VSub_Name "$REPLY"))}
                              spids: [224]
                            )
                          ]
                          spids: [224]
                        )
                        (Assignment
                          keyword: Assign_None
                          pairs: [
                            (assign_pair
                              lhs: (LhsName name:llvm_m4)
                              op: Equal
                              rhs: {(DQ ($ VSub_Name "$REPLY") (/autoconf/m4))}
                              spids: [230]
                            )
                          ]
                          spids: [230]
                        )
                        (C {(read)} {(-p)} 
                          {(DQ ("Enter full path to LLVM objects (empty for same as source):"))} {(REPLY)}
                        )
                        (If
                          arms: [
                            (if_arm
                              cond: [
                                (Sentence
                                  child: (C {(test)} {(-d)} {(DQ ($ VSub_Name "$REPLY"))})
                                  terminator: <Op_Semi ";">
                                )
                              ]
                              action: [
                                (Assignment
                                  keyword: Assign_None
                                  pairs: [
                                    (assign_pair
                                      lhs: (LhsName name:llvm_obj_root)
                                      op: Equal
                                      rhs: {(DQ ($ VSub_Name "$REPLY"))}
                                      spids: [263]
                                    )
                                  ]
                                  spids: [263]
                                )
                              ]
                              spids: [-1 260]
                            )
                          ]
                          else_action: [
                            (Assignment
                              keyword: Assign_None
                              pairs: [
                                (assign_pair
                                  lhs: (LhsName name:llvm_obj_root)
                                  op: Equal
                                  rhs: {(DQ ($ VSub_Name "$llvm_src_root"))}
                                  spids: [272]
                                )
                              ]
                              spids: [272]
                            )
                          ]
                          spids: [269 278]
                        )
                        (ControlFlow token:<ControlFlow_Break break>)
                      ]
                      spids: [-1 221]
                    )
                  ]
                  spids: [-1 284]
                )
              ]
              spids: [186 287]
            )
        )
      ]
      spids: [177 289]
    )
    (C {(cp)} {(configure.ac)} {(configure.bak)})
    (SimpleCommand
      words: [
        {(sed)}
        {(-e)}
        {
          (DQ ("s#^LLVM_SRC_ROOT=.*#LLVM_SRC_ROOT=") 
            (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) ($ VSub_Name "$llvm_src_root") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) ("#")
          )
        }
        {(-e)}
        {
          (DQ ("s#^LLVM_OBJ_ROOT=.*#LLVM_OBJ_ROOT=") 
            (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) ($ VSub_Name "$llvm_obj_root") (EscapedLiteralPart token:<Lit_EscapedChar "\\\"">) ("#")
          )
        }
        {(configure.bak)}
      ]
      redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(configure.ac)} spids:[326])]
    )
    (C {(echo)} {(DQ ("Regenerating aclocal.m4 with aclocal"))})
    (C {(rm)} {(-f)} {(aclocal.m4)})
    (AndOr
      children: [
        (C {(aclocal)} {(-I)} {($ VSub_Name "$llvm_m4")} {(-I)} {(DQ ($ VSub_Name "$llvm_m4") (/..))})
        (C {(die)} {(DQ ("aclocal failed"))})
      ]
      op_id: Op_DPipe
    )
    (C {(echo)} {(DQ ("Regenerating configure with autoconf"))})
    (AndOr
      children: [
        (C {(autoconf)} {(--warnings) (Lit_Other "=") (all)} {(-o)} {(../configure)} {(configure.ac)})
        (C {(die)} {(DQ ("autoconf failed"))})
      ]
      op_id: Op_DPipe
    )
    (C {(cd)} {(..)})
    (C {(exit)} {(0)})
  ]
)