(CommandList
  children: [
    (C {(set)} {(-e)})
    (FuncDef
      name: usage
      body: 
        (BraceGroup
          children: [(C {(echo)} {(DQ ("Usage: -o file"))}) (C {(exit)} {(1)})]
          spids: [26]
        )
      spids: [22 25]
    )
    (AndOr
      children: [
        (C {(Lit_Other "[")} {($ VSub_Pound "$#")} {(Lit_Other "=")} {(0)} {(Lit_Other "]")})
        (C {(usage)})
      ]
      op_id: Op_DAmp
    )
    (While
      cond: [(C {(Lit_Other "[")} {($ VSub_Pound "$#")} {(-gt)} {(0)} {(Lit_Other "]")})]
      body: 
        (DoGroup
          children: [
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:flag)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [73]
                )
              ]
              spids: [73]
            )
            (Case
              to_match: {(DQ ($ VSub_Name "$flag"))}
              arms: [
                (case_arm
                  pat_list: [{(-o)}]
                  action: [
                    (AndOr
                      children: [
                        (C {(Lit_Other "[")} {($ VSub_Pound "$#")} {(-eq)} {(1)} {(Lit_Other "]")})
                        (C {(usage)})
                      ]
                      op_id: Op_DAmp
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:out)
                          op: Equal
                          rhs: {(DQ ($ VSub_Number "$2"))}
                          spids: [107]
                        )
                      ]
                      spids: [107]
                    )
                    (C {(mkdir)} {(-p)} 
                      {
                        (DQ 
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [(C {(dirname)} {($ VSub_Number "$2")})]
                              )
                            left_token: <Left_CommandSub "$(">
                            spids: [118 122]
                          )
                        )
                      }
                    )
                    (C {(shift)})
                  ]
                  spids: [88 89 129 -1]
                )
                (case_arm
                  pat_list: [{(-l) (Lit_Other "*")}]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:LIBS)
                          op: Equal
                          rhs: {(DQ ($ VSub_Name "$LIBS") (" ") ($ VSub_Number "$1"))}
                          spids: [137]
                        )
                      ]
                      spids: [137]
                    )
                    (C {(shift)})
                  ]
                  spids: [132 134 148 -1]
                )
                (case_arm
                  pat_list: [{(Lit_Other "*")}]
                  action: [
                    (C {(echo)} {(DQ ("Unknown option ") ($ VSub_Number "$1"))})
                    (C {(exit)} {(1)})
                  ]
                  spids: [151 152 -1 168]
                )
              ]
              spids: [79 85 168]
            )
            (C {(shift)})
          ]
          spids: [70 173]
        )
    )
    (AndOr
      children: [
        (C {(Lit_Other "[")} {(-z)} {(DQ ($ VSub_Name "$out"))} {(Lit_Other "]")})
        (C {(usage)})
      ]
      op_id: Op_DAmp
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:package)
          op: Equal
          rhs: 
            {
              (CommandSubPart
                command_list: (CommandList children:[(C {(basename)} {(DQ ($ VSub_Name "$out"))})])
                left_token: <Left_CommandSub "$(">
                spids: [192 198]
              )
            }
          spids: [191]
        )
      ]
      spids: [191]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:dir)
          op: Equal
          rhs: {(DQ (/src/) ($ VSub_Name "$package"))}
          spids: [201]
        )
      ]
      spids: [201]
    )
    (C {(mkdir)} {(-p)} {($ VSub_Name "$dir")})
    (C {(tar)} {(xf)} {(-)} {(-C)} {($ VSub_Name "$dir")})
    (Subshell
      child: 
        (CommandList
          children: [
            (C {(cd)} {($ VSub_Name "$dir")})
            (Assignment
              keyword: Assign_None
              pairs: [
                (assign_pair
                  lhs: (LhsName name:CFILES)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(find)} {(.)} {(-name)} {(SQ <"*.c">)})]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [238 248]
                      )
                    }
                  spids: [237]
                )
              ]
              spids: [237]
            )
            (C {(cc)} {(-static)} {(-O2)} {(-Wall)} {(-Werror)} {(-o)} {(../../) ($ VSub_Name "$out")} 
              {($ VSub_Name "$CFILES")} {($ VSub_Name "$LIBS")}
            )
          ]
        )
      spids: [229 270]
    )
    (C {(tar)} {(cf)} {(-)} {($ VSub_Name "$out")})
    (C {(exit)} {(0)})
  ]
)