(command.CommandList
  children: [
    (C {<set>} {<-e>})
    (command.ShFunction
      name: usage
      body: 
        (BraceGroup
          left: <Id.Lit_LBrace '{'>
          children: [
            (C {<echo>} {(DQ <'Usage: -o file'>)})
            (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          redirects: []
          right: <Id.Lit_RBrace '}'>
        )
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<Id.Lit_Equals '='>} {<0>} 
          {<Id.Lit_RBracket ']'>}
        )
        (C {<usage>})
      ]
    )
    (command.WhileUntil
      keyword: <Id.KW_While while>
      cond: 
        (condition.Shell
          commands: [
            (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-gt>} {<0>} {<Id.Lit_RBracket ']'>})
          ]
        )
      body: 
        (command.DoGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'flag='> name:flag)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number 1))}
                  spids: [73]
                )
              ]
              redirects: []
            )
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName flag))}
              arms: [
                (case_arm
                  pat_list: [{<-o>}]
                  action: [
                    (command.AndOr
                      ops: [Id.Op_DAmp]
                      children: [
                        (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-eq>} {<1>} 
                          {<Id.Lit_RBracket ']'>}
                        )
                        (C {<usage>})
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'out='> name:out)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_Number 2))}
                          spids: [107]
                        )
                      ]
                      redirects: []
                    )
                    (C {<mkdir>} {<-p>} 
                      {
                        (DQ 
                          (command_sub
                            left_token: <Id.Left_DollarParen '$('>
                            child: (C {<dirname>} {($ Id.VSub_Number 2)})
                            right: <Id.Eof_RParen _>
                          )
                        )
                      }
                    )
                    (C {<shift>})
                  ]
                  spids: [88 89 129 -1]
                )
                (case_arm
                  pat_list: [{<-l> <Id.Lit_Star '*'>}]
                  action: [
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'LIBS='> name:LIBS)
                          op: assign_op.Equal
                          rhs: {(DQ ($ Id.VSub_DollarName LIBS) <' '> ($ Id.VSub_Number 1))}
                          spids: [137]
                        )
                      ]
                      redirects: []
                    )
                    (C {<shift>})
                  ]
                  spids: [132 134 148 -1]
                )
                (case_arm
                  pat_list: [{<Id.Lit_Star '*'>}]
                  action: [
                    (C {<echo>} {(DQ <'Unknown option '> ($ Id.VSub_Number 1))})
                    (command.ControlFlow
                      token: <Id.ControlFlow_Exit exit>
                      arg_word: {<1>}
                    )
                  ]
                  spids: [151 152 -1 168]
                )
              ]
              redirects: []
            )
            (C {<shift>})
          ]
        )
      redirects: []
    )
    (command.AndOr
      ops: [Id.Op_DAmp]
      children: [
        (C {<Id.Lit_LBracket '['>} {<-z>} {(DQ ($ Id.VSub_DollarName out))} {<Id.Lit_RBracket ']'>})
        (C {<usage>})
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'package='> name:package)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_DollarParen '$('>
                child: (C {<basename>} {(DQ ($ Id.VSub_DollarName out))})
                right: <Id.Eof_RParen _>
              )
            }
          spids: [191]
        )
      ]
      redirects: []
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'dir='> name:dir)
          op: assign_op.Equal
          rhs: {(DQ <'/src/'> ($ Id.VSub_DollarName package))}
          spids: [201]
        )
      ]
      redirects: []
    )
    (C {<mkdir>} {<-p>} {($ Id.VSub_DollarName dir)})
    (C {<tar>} {<xf>} {<->} {<-C>} {($ Id.VSub_DollarName dir)})
    (command.Subshell
      child: 
        (command.CommandList
          children: [
            (C {<cd>} {($ Id.VSub_DollarName dir)})
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'CFILES='> name:CFILES)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: (C {<find>} {<.>} {<-name>} {(SQ <'*.c'>)})
                        right: <Id.Eof_RParen _>
                      )
                    }
                  spids: [237]
                )
              ]
              redirects: []
            )
            (C {<cc>} {<-static>} {<-O2>} {<-Wall>} {<-Werror>} {<-o>} 
              {<'../../'> ($ Id.VSub_DollarName out)} {($ Id.VSub_DollarName CFILES)} {($ Id.VSub_DollarName LIBS)}
            )
          ]
        )
      redirects: []
    )
    (C {<tar>} {<cf>} {<->} {($ Id.VSub_DollarName out)})
    (command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})
  ]
)