(command.CommandList
  children: [
    (command.ShFunction
      name: get_variable_value
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(Id.Lit_VarLike 'FILENAME=') ($ Id.VSub_Number '$1')})
            (C {(local)} {(Id.Lit_VarLike 'VARNAME=') ($ Id.VSub_Number '$2')})
            (command.Pipeline
              children: [
                (C {(awk)} 
                  {
                    (DQ ('\n') ('    BEGIN { start = 0; }\n') ('    /^') 
                      ($ Id.VSub_DollarName '$VARNAME') (' =/ { start = 1; }\n') ('    { if (start) { print ') 
                      (word_part.EscapedLiteral
                        token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:36)
                      ) ('0; } }\n') ('    /') 
                      (word_part.EscapedLiteral
                        token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:39)
                      ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\\\' span_id:40)) 
                      (word_part.EscapedLiteral
                        token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:41)
                      ) ('/ { next; }\n') ('    { start = 0; }\n') ('  ')
                    )
                  } {($ Id.VSub_DollarName '$FILENAME')}
                )
                (C {(sed)} {(DQ ('s/^') ($ Id.VSub_DollarName '$VARNAME') (' =//'))})
                (C {(sed)} 
                  {
                    (DQ ('s/[ ') 
                      (word_part.EscapedLiteral
                        token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:69)
                      ) (']//g')
                    )
                  }
                )
                (C {(grep)} {(-v)} 
                  {
                    (DQ ('^') 
                      (word_part.EscapedLiteral
                        token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:83)
                      ) (Id.Lit_Other '$')
                    )
                  }
                )
                (C {(grep)} {(-v)} {(DQ ('^') (Id.Lit_Other '$'))})
                (command.Simple
                  words: [{(sort)}]
                  more_env: [(env_pair name:LC_ALL val:{(C)} spids:[104])]
                )
                (C {(uniq)})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: get_header_files
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(get_variable_value)} {($ Id.VSub_At '$@')})
                (C {(grep)} {(SQ (Token id:Id.Lit_Chars val:'\\.h$' span_id:132))})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: get_source_files
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(get_variable_value)} {($ Id.VSub_At '$@')})
                (C {(grep)} {(DQ (cc) (Id.Lit_Other '$'))})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: get_proto_files_blacklisted
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(get_proto_files)} {($ Id.VSub_At '$@')})
                (C {(sed)} 
                  {
                    (SQ 
                      (Token
                        id: Id.Lit_Chars
                        val: '/^google\\/protobuf\\/unittest_enormous_descriptor.proto$/d'
                        span_id: 177
                      )
                    )
                  }
                )
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: get_proto_files
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (C {(get_variable_value)} {($ Id.VSub_At '$@')})
                (C {(grep)} {(DQ (pb.cc) (Id.Lit_Other '$'))})
                (C {(sed)} {(DQ (s/pb.cc/proto/))})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShFunction
      name: sort_files
      body: 
        (command.BraceGroup
          children: [
            (command.Pipeline
              children: [
                (command.ForEach
                  iter_name: FILE
                  iter_words: [{($ Id.VSub_At '$@')}]
                  do_arg_iter: F
                  body: (command.DoGroup children:[(C {(echo)} {($ Id.VSub_DollarName '$FILE')})])
                )
                (command.Simple
                  words: [{(sort)}]
                  more_env: [(env_pair name:LC_ALL val:{(C)} spids:[242])]
                )
                (C {(uniq)})
              ]
              negated: F
            )
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MAKEFILE)
          op: assign_op.Equal
          rhs: {(src/Makefile.am)}
          spids: [254]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {(Id.Lit_LBracket '[')} {(-f)} {(DQ ($ Id.VSub_DollarName '$MAKEFILE'))} 
          {(Id.Lit_RBracket ']')}
        )
        (command.BraceGroup
          children: [
            (C {(echo)} {(DQ ('Cannot find: ') ($ Id.VSub_DollarName '$MAKEFILE'))})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:281)
              arg_word: {(1)}
            )
          ]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:GZHEADERS)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:292)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_variable_value)} {($ Id.VSub_DollarName '$MAKEFILE')} {(GZHEADERS)})
                    ]
                  )
              )
            }
          spids: [291]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HEADERS)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:301)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_variable_value)} {($ Id.VSub_DollarName '$MAKEFILE')} 
                        {(nobase_include_HEADERS)}
                      )
                    ]
                  )
              )
            }
          spids: [300]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PUBLIC_HEADERS)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:310)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(sort_files)} {($ Id.VSub_DollarName '$GZHEADERS')} 
                        {($ Id.VSub_DollarName '$HEADERS')}
                      )
                    ]
                  )
              )
            }
          spids: [309]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LIBPROTOBUF_LITE_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:319)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ Id.VSub_DollarName '$MAKEFILE')} 
                        {(libprotobuf_lite_la_SOURCES)}
                      )
                    ]
                  )
              )
            }
          spids: [318]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LIBPROTOBUF_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:328)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ Id.VSub_DollarName '$MAKEFILE')} 
                        {(libprotobuf_la_SOURCES)}
                      )
                    ]
                  )
              )
            }
          spids: [327]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LIBPROTOC_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:337)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ Id.VSub_DollarName '$MAKEFILE')} 
                        {(libprotoc_la_SOURCES)}
                      )
                    ]
                  )
              )
            }
          spids: [336]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LITE_PROTOS)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:346)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_proto_files)} {($ Id.VSub_DollarName '$MAKEFILE')} 
                        {(protoc_lite_outputs)}
                      )
                    ]
                  )
              )
            }
          spids: [345]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PROTOS)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:355)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_proto_files)} {($ Id.VSub_DollarName '$MAKEFILE')} {(protoc_outputs)})
                    ]
                  )
              )
            }
          spids: [354]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:PROTOS_BLACKLISTED)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:364)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_proto_files_blacklisted)} {($ Id.VSub_DollarName '$MAKEFILE')} 
                        {(protoc_outputs)}
                      )
                    ]
                  )
              )
            }
          spids: [363]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:WKT_PROTOS)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:373)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_variable_value)} {($ Id.VSub_DollarName '$MAKEFILE')} 
                        {(nobase_dist_proto_DATA)}
                      )
                    ]
                  )
              )
            }
          spids: [372]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:COMMON_TEST_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:382)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ Id.VSub_DollarName '$MAKEFILE')} 
                        {(COMMON_TEST_SOURCES)}
                      )
                    ]
                  )
              )
            }
          spids: [381]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:COMMON_LITE_TEST_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:391)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ Id.VSub_DollarName '$MAKEFILE')} 
                        {(COMMON_LITE_TEST_SOURCES)}
                      )
                    ]
                  )
              )
            }
          spids: [390]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TEST_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:400)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ Id.VSub_DollarName '$MAKEFILE')} 
                        {(protobuf_test_SOURCES)}
                      )
                    ]
                  )
              )
            }
          spids: [399]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LITE_TEST_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:409)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ Id.VSub_DollarName '$MAKEFILE')} 
                        {(protobuf_lite_test_SOURCES)}
                      )
                    ]
                  )
              )
            }
          spids: [408]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LITE_ARENA_TEST_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:418)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ Id.VSub_DollarName '$MAKEFILE')} 
                        {(protobuf_lite_arena_test_SOURCES)}
                      )
                    ]
                  )
              )
            }
          spids: [417]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TEST_PLUGIN_SOURCES)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:427)
                command_list: 
                  (command.CommandList
                    children: [
                      (C {(get_source_files)} {($ Id.VSub_DollarName '$MAKEFILE')} 
                        {(test_plugin_SOURCES)}
                      )
                    ]
                  )
              )
            }
          spids: [426]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CMAKE_DIR)
          op: assign_op.Equal
          rhs: {(cmake)}
          spids: [446]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:EXTRACT_INCLUDES_BAT)
          op: assign_op.Equal
          rhs: {(cmake/extract_includes.bat.in)}
          spids: [449]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {(Id.Lit_LBracket '[')} {(-d)} {(DQ ($ Id.VSub_DollarName '$CMAKE_DIR'))} 
          {(Id.Lit_RBracket ']')}
        )
        (command.BraceGroup
          children: [
            (C {(echo)} {(DQ ('Cannot find: ') ($ Id.VSub_DollarName '$CMAKE_DIR'))})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:475)
              arg_word: {(1)}
            )
          ]
        )
      ]
    )
    (command.AndOr
      ops: [Id.Op_DPipe]
      children: [
        (C {(Id.Lit_LBracket '[')} {(-f)} {(DQ ($ Id.VSub_DollarName '$EXTRACT_INCLUDES_BAT'))} 
          {(Id.Lit_RBracket ']')}
        )
        (command.BraceGroup
          children: [
            (C {(echo)} {(DQ ('Cannot find: ') ($ Id.VSub_DollarName '$EXTRACT_INCLUDES_BAT'))})
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:505)
              arg_word: {(1)}
            )
          ]
        )
      ]
    )
    (command.ShFunction
      name: set_cmake_value
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(Id.Lit_VarLike 'FILENAME=') ($ Id.VSub_Number '$1')})
            (C {(local)} {(Id.Lit_VarLike 'VARNAME=') ($ Id.VSub_Number '$2')})
            (C {(local)} {(Id.Lit_VarLike 'PREFIX=') ($ Id.VSub_Number '$3')})
            (C {(shift)})
            (C {(shift)})
            (C {(shift)})
            (command.Simple
              words: [
                {(awk)}
                {(-v)}
                {(Id.Lit_VarLike 'values=') (DQ ($ Id.VSub_Star '$*'))}
                {(-v)}
                {(Id.Lit_VarLike 'prefix=') (DQ ($ Id.VSub_DollarName '$PREFIX'))}
                {
                  (DQ ('\n') ('    BEGIN { start = 0; }\n') ('    /^set') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:566)
                    ) ('(') ($ Id.VSub_DollarName '$VARNAME') ('/ {\n') ('      start = 1;\n') ('      print ') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:572)
                    ) ('0;\n') ('      len = split(values, vlist, ') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:575)
                    ) (' ') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:577)) (');\n') 
                    ('      for (i = 1; i <= len; ++i) {\n') ('        printf(') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:581)
                    ) ('  %s%s') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\\\' span_id:583)) (n) 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:585)
                    ) (', prefix, vlist[i]);\n') ('      }\n') ('      next;\n') ('    }\n') ('    start && /^') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:591)
                    ) (')/ {\n') ('      start = 0;\n') ('    }\n') ('    !start {\n') ('      print ') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:597)
                    ) ('0;\n') ('    }\n') ('  ')
                  )
                }
                {($ Id.VSub_DollarName '$FILENAME')}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:605)
                  fd: -1
                  arg_word: {(/tmp/) ($ Id.VSub_Dollar '$$')}
                )
              ]
            )
            (C {(cp)} {(/tmp/) ($ Id.VSub_Dollar '$$')} {($ Id.VSub_DollarName '$FILENAME')})
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:CMAKE_PREFIX)
          op: assign_op.Equal
          rhs: 
            {
              (DQ (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:627)) 
                ('{protobuf_source_dir}/src/')
              )
            }
          spids: [625]
        )
      ]
    )
    (C {(set_cmake_value)} {($ Id.VSub_DollarName '$CMAKE_DIR') (/libprotobuf-lite.cmake)} 
      {(libprotobuf_lite_files)} {($ Id.VSub_DollarName '$CMAKE_PREFIX')} {($ Id.VSub_DollarName '$LIBPROTOBUF_LITE_SOURCES')}
    )
    (C {(set_cmake_value)} {($ Id.VSub_DollarName '$CMAKE_DIR') (/libprotobuf.cmake)} 
      {(libprotobuf_files)} {($ Id.VSub_DollarName '$CMAKE_PREFIX')} {($ Id.VSub_DollarName '$LIBPROTOBUF_SOURCES')}
    )
    (C {(set_cmake_value)} {($ Id.VSub_DollarName '$CMAKE_DIR') (/libprotoc.cmake)} {(libprotoc_files)} 
      {($ Id.VSub_DollarName '$CMAKE_PREFIX')} {($ Id.VSub_DollarName '$LIBPROTOC_SOURCES')}
    )
    (C {(set_cmake_value)} {($ Id.VSub_DollarName '$CMAKE_DIR') (/tests.cmake)} {(lite_test_protos)} {(DQ )} 
      {($ Id.VSub_DollarName '$LITE_PROTOS')}
    )
    (C {(set_cmake_value)} {($ Id.VSub_DollarName '$CMAKE_DIR') (/tests.cmake)} {(tests_protos)} {(DQ )} 
      {($ Id.VSub_DollarName '$PROTOS_BLACKLISTED')}
    )
    (C {(set_cmake_value)} {($ Id.VSub_DollarName '$CMAKE_DIR') (/tests.cmake)} {(common_test_files)} 
      {($ Id.VSub_DollarName '$CMAKE_PREFIX')} {($ Id.VSub_DollarName '$COMMON_TEST_SOURCES')}
    )
    (C {(set_cmake_value)} {($ Id.VSub_DollarName '$CMAKE_DIR') (/tests.cmake)} 
      {(common_lite_test_files)} {($ Id.VSub_DollarName '$CMAKE_PREFIX')} {($ Id.VSub_DollarName '$COMMON_LITE_TEST_SOURCES')}
    )
    (C {(set_cmake_value)} {($ Id.VSub_DollarName '$CMAKE_DIR') (/tests.cmake)} {(tests_files)} 
      {($ Id.VSub_DollarName '$CMAKE_PREFIX')} {($ Id.VSub_DollarName '$TEST_SOURCES')}
    )
    (C {(set_cmake_value)} {($ Id.VSub_DollarName '$CMAKE_DIR') (/tests.cmake)} {(lite_test_files)} 
      {($ Id.VSub_DollarName '$CMAKE_PREFIX')} {($ Id.VSub_DollarName '$LITE_TEST_SOURCES')}
    )
    (C {(set_cmake_value)} {($ Id.VSub_DollarName '$CMAKE_DIR') (/tests.cmake)} 
      {(lite_arena_test_files)} {($ Id.VSub_DollarName '$CMAKE_PREFIX')} {($ Id.VSub_DollarName '$LITE_ARENA_TEST_SOURCES')}
    )
    (command.Simple
      words: [{(echo)} {(DQ ('mkdir include'))}]
      redirects: [
        (redir.Redir
          op: (Token id:Id.Redir_Great val:'>' span_id:753)
          fd: -1
          arg_word: {($ Id.VSub_DollarName '$EXTRACT_INCLUDES_BAT')}
        )
      ]
    )
    (command.Pipeline
      children: [
        (command.ForEach
          iter_name: HEADER
          iter_words: [{($ Id.VSub_DollarName '$PUBLIC_HEADERS')}]
          do_arg_iter: F
          body: 
            (command.DoGroup
              children: [
                (command.ShAssignment
                  pairs: [
                    (assign_pair
                      lhs: (sh_lhs_expr.Name name:HEADER_DIR)
                      op: assign_op.Equal
                      rhs: 
                        {
                          (command_sub
                            left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:770)
                            command_list: 
                              (command.CommandList
                                children: [(C {(dirname)} {($ Id.VSub_DollarName '$HEADER')})]
                              )
                          )
                        }
                      spids: [769]
                    )
                  ]
                )
                (command.WhileUntil
                  keyword: (Token id:Id.KW_While val:while span_id:777)
                  cond: [
                    (command.Sentence
                      child: 
                        (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} 
                          {(DQ ($ Id.VSub_DollarName '$HEADER_DIR'))} {(Id.Lit_Equals '=')} {(DQ (.))} {(Id.Lit_RBracket ']')}
                        )
                      terminator: (Token id:Id.Op_Semi val:';' span_id:794)
                    )
                  ]
                  body: 
                    (command.DoGroup
                      children: [
                        (command.Pipeline
                          children: [
                            (C {(echo)} {($ Id.VSub_DollarName '$HEADER_DIR')})
                            (C {(sed)} 
                              {
                                (DQ (s/) 
                                  (word_part.EscapedLiteral
                                    token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:809)
                                  ) (//) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\\\' span_id:811)) 
                                  (word_part.EscapedLiteral
                                    token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:812)
                                  ) (/g)
                                )
                              }
                            )
                          ]
                          negated: F
                        )
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:HEADER_DIR)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:818)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {(dirname)} {($ Id.VSub_DollarName '$HEADER_DIR')})
                                        ]
                                      )
                                  )
                                }
                              spids: [817]
                            )
                          ]
                        )
                      ]
                    )
                )
              ]
            )
        )
        (C {(sort)})
        (C {(uniq)})
        (command.Simple
          words: [
            {(sed)}
            {
              (DQ ('s/^/mkdir include') 
                (word_part.EscapedLiteral
                  token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:843)
                ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\\\' span_id:844)) (/)
              )
            }
          ]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_DGreat val:'>>' span_id:848)
              fd: -1
              arg_word: {($ Id.VSub_DollarName '$EXTRACT_INCLUDES_BAT')}
            )
          ]
        )
      ]
      negated: F
    )
    (command.ForEach
      iter_name: HEADER
      iter_words: [{($ Id.VSub_DollarName '$PUBLIC_HEADERS')}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:WINPATH)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:865)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (C {(echo)} {($ Id.VSub_DollarName '$HEADER')})
                                  (C {(sed)} {(SQ (Token id:Id.Lit_Chars val:'s;/;\\\\;g' span_id:875))})
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    }
                  spids: [864]
                )
              ]
            )
            (command.Simple
              words: [
                {(echo)}
                {
                  (DQ ('copy ') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:884)
                    ) ('{PROTOBUF_SOURCE_WIN32_PATH}') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:886)
                    ) (..) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\\\' span_id:888)) (src) 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:890)
                    ) ($ Id.VSub_DollarName '$WINPATH') (' include') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:893)
                    ) ($ Id.VSub_DollarName '$WINPATH')
                  )
                }
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_DGreat val:'>>' span_id:897)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$EXTRACT_INCLUDES_BAT')}
                )
              ]
            )
          ]
        )
    )
    (command.ShFunction
      name: set_bazel_value
      body: 
        (command.BraceGroup
          children: [
            (C {(local)} {(Id.Lit_VarLike 'FILENAME=') ($ Id.VSub_Number '$1')})
            (C {(local)} {(Id.Lit_VarLike 'VARNAME=') ($ Id.VSub_Number '$2')})
            (C {(local)} {(Id.Lit_VarLike 'PREFIX=') ($ Id.VSub_Number '$3')})
            (C {(shift)})
            (C {(shift)})
            (C {(shift)})
            (command.Simple
              words: [
                {(awk)}
                {(-v)}
                {(Id.Lit_VarLike 'values=') (DQ ($ Id.VSub_Star '$*'))}
                {(-v)}
                {(Id.Lit_VarLike 'prefix=') (DQ ($ Id.VSub_DollarName '$PREFIX'))}
                {
                  (DQ ('\n') ('    BEGIN { start = 0; }\n') ('    /# AUTOGEN') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:968)
                    ) ('(') ($ Id.VSub_DollarName '$VARNAME') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\\\' span_id:971)
                    ) (')/ {\n') ('      start = 1;\n') ('      print ') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:975)
                    ) ('0;\n') ('      # replace ') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:978)
                    ) ('0 with indent.\n') ('      sub(/#.*/, ') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:981)
                    ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:982)) (', ') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:984)
                    ) ('0)\n') ('      len = split(values, vlist, ') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:987)
                    ) (' ') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\"' span_id:989)) (');\n') 
                    ('      for (i = 1; i <= len; ++i) {\n') ('        printf(') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:993)
                    ) ('%s') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\\\' span_id:995)) 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:996)
                    ) ('%s%s') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\\\' span_id:998)) 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:999)
                    ) (',') (Id.Lit_Other '\\') (n) 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\"' span_id:1003)
                    ) (', ') (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\$' span_id:1005)) 
                    ('0, prefix, vlist[i]);\n') ('      }\n') ('      next;\n') ('    }\n') ('    start && /') (Id.Lit_Other '\\') (']/ {\n') 
                    ('      start = 0\n') ('    }\n') ('    !start {\n') ('      print ') 
                    (word_part.EscapedLiteral
                      token: (Token id:Id.Lit_EscapedChar val:'\\$' span_id:1017)
                    ) ('0;\n') ('    }\n') ('  ')
                  )
                }
                {($ Id.VSub_DollarName '$FILENAME')}
              ]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:1025)
                  fd: -1
                  arg_word: {(/tmp/) ($ Id.VSub_Dollar '$$')}
                )
              ]
            )
            (C {(cp)} {(/tmp/) ($ Id.VSub_Dollar '$$')} {($ Id.VSub_DollarName '$FILENAME')})
          ]
        )
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BAZEL_BUILD)
          op: assign_op.Equal
          rhs: {(./BUILD)}
          spids: [1042]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:BAZEL_PREFIX)
          op: assign_op.Equal
          rhs: {(DQ (src/))}
          spids: [1045]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (command.Sentence
              child: 
                (C {(Id.Lit_LBracket '[')} {(-f)} {(DQ ($ Id.VSub_DollarName '$BAZEL_BUILD'))} 
                  {(Id.Lit_RBracket ']')}
                )
              terminator: (Token id:Id.Op_Semi val:';' span_id:1061)
            )
          ]
          action: [
            (C {(set_bazel_value)} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {(protobuf_lite_srcs)} 
              {($ Id.VSub_DollarName '$BAZEL_PREFIX')} {($ Id.VSub_DollarName '$LIBPROTOBUF_LITE_SOURCES')}
            )
            (C {(set_bazel_value)} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {(protobuf_srcs)} 
              {($ Id.VSub_DollarName '$BAZEL_PREFIX')} {($ Id.VSub_DollarName '$LIBPROTOBUF_SOURCES')}
            )
            (C {(set_bazel_value)} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {(protoc_lib_srcs)} 
              {($ Id.VSub_DollarName '$BAZEL_PREFIX')} {($ Id.VSub_DollarName '$LIBPROTOC_SOURCES')}
            )
            (C {(set_bazel_value)} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {(lite_test_protos)} {(DQ )} 
              {($ Id.VSub_DollarName '$LITE_PROTOS')}
            )
            (C {(set_bazel_value)} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {(well_known_protos)} {(DQ )} 
              {($ Id.VSub_DollarName '$WKT_PROTOS')}
            )
            (C {(set_bazel_value)} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {(test_protos)} {(DQ )} 
              {($ Id.VSub_DollarName '$PROTOS')}
            )
            (C {(set_bazel_value)} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {(common_test_srcs)} 
              {($ Id.VSub_DollarName '$BAZEL_PREFIX')} {($ Id.VSub_DollarName '$COMMON_TEST_SOURCES')}
            )
            (C {(set_bazel_value)} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {(test_srcs)} 
              {($ Id.VSub_DollarName '$BAZEL_PREFIX')} {($ Id.VSub_DollarName '$TEST_SOURCES')}
            )
            (C {(set_bazel_value)} {($ Id.VSub_DollarName '$BAZEL_BUILD')} {(test_plugin_srcs)} 
              {($ Id.VSub_DollarName '$BAZEL_PREFIX')} {($ Id.VSub_DollarName '$TEST_PLUGIN_SOURCES')}
            )
          ]
          spids: [1050 1063]
        )
      ]
      else_action: [(C {(echo)} {(DQ ('Skipped BUILD file update.'))})]
    )
  ]
)