(CommandList
  children: [
    (C {(set)} {(-eu)})
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:GCC) op:Equal rhs:{(/usr/bin/gcc)} spids:[86])]
      spids: [86]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:INSTALL_NAME_TOOL)
          op: Equal
          rhs: {(DQ (/usr/bin/install_name_tool))}
          spids: [89]
        )
      ]
      spids: [89]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:LIBS) op:Equal rhs:{(SQ )} spids:[95])]
      spids: [95]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:LIB_DIRS) op:Equal rhs:{(SQ )} spids:[97])]
      spids: [97]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:RPATH) op:Equal rhs:{(SQ )} spids:[99])]
      spids: [99]
    )
    (Assignment
      keyword: Assign_None
      pairs: [(assign_pair lhs:(LhsName name:OUTPUT) op:Equal rhs:{(SQ )} spids:[101])]
      spids: [101]
    )
    (ForEach
      iter_name: i
      iter_words: [{(DQ ($ VSub_At "$@"))}]
      do_arg_iter: False
      body: 
        (DoGroup
          children: [
            (If
              arms: [
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobEqual
                              left: {(DQ (${ VSub_Name OUTPUT))}
                              right: {(DQ (1))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:OUTPUT)
                          op: Equal
                          rhs: {($ VSub_Name "$i")}
                          spids: [142]
                        )
                      ]
                      spids: [142]
                    )
                  ]
                  spids: [-1 139]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_EqualTilde
                              left: {(DQ ($ VSub_Name "$i"))}
                              right: 
                                {(Lit_Other "^") (-l) ("(") (.) (Lit_Other "*") (")") (Lit_Other "$")}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:LIBS)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Name BASH_REMATCH>
                                  bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 1)}))
                                  spids: [176 181]
                                ) (" ") ($ VSub_Name "$LIBS")
                              )
                            }
                          spids: [174]
                        )
                      ]
                      spids: [174]
                    )
                  ]
                  spids: [146 167]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_EqualTilde
                              left: {(DQ ($ VSub_Name "$i"))}
                              right: 
                                {(Lit_Other "^") (-L) ("(") (.) (Lit_Other "*") (")") (Lit_Other "$")}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:LIB_DIRS)
                          op: Equal
                          rhs: 
                            {
                              (DQ 
                                (BracedVarSub
                                  token: <VSub_Name BASH_REMATCH>
                                  bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 1)}))
                                  spids: [217 222]
                                ) (" ") ($ VSub_Name "$LIB_DIRS")
                              )
                            }
                          spids: [215]
                        )
                      ]
                      spids: [215]
                    )
                  ]
                  spids: [187 208]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_EqualTilde
                              left: {(DQ ($ VSub_Name "$i"))}
                              right: 
                                {(Lit_Other "^") (-Wl) (Lit_Comma ",") (-rpath) (Lit_Comma ",") 
                                  (EscapedLiteralPart
                                    token: <Lit_EscapedChar "\\$">
                                  ) (ORIGIN/) ("(") (.) (Lit_Other "*") (")") (Lit_Other "$")
                                }
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:RPATH)
                          op: Equal
                          rhs: 
                            {
                              (BracedVarSub
                                token: <VSub_Name BASH_REMATCH>
                                bracket_op: (ArrayIndex expr:(ArithWord w:{(Lit_Digits 1)}))
                                spids: [262 267]
                              )
                            }
                          spids: [261]
                        )
                      ]
                      spids: [261]
                    )
                  ]
                  spids: [228 254]
                )
                (if_arm
                  cond: [
                    (Sentence
                      child: 
                        (DBracket
                          expr: 
                            (BoolBinary
                              op_id: BoolBinary_GlobEqual
                              left: {(DQ ($ VSub_Name "$i"))}
                              right: {(DQ (-o))}
                            )
                        )
                      terminator: <Op_Semi ";">
                    )
                  ]
                  action: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [(assign_pair lhs:(LhsName name:OUTPUT) op:Equal rhs:{(1)} spids:[294])]
                      spids: [294]
                    )
                  ]
                  spids: [270 287]
                )
              ]
              spids: [-1 298]
            )
          ]
          spids: [117 300]
        )
      spids: [111 115]
    )
    (C {(${ VSub_Name GCC)} {(DQ ($ VSub_At "$@"))})
    (FuncDef
      name: get_library_path
      body: 
        (BraceGroup
          children: [
            (ForEach
              iter_name: libdir
              iter_words: [{(${ VSub_Name LIB_DIRS)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other "[")} {(-f)} 
                                  {(${ VSub_Name libdir) (/lib) ($ VSub_Number "$1") (.so)} {(Lit_Other "]")}
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C {(echo)} {(DQ (${ VSub_Name libdir) (/lib) ($ VSub_Number "$1") (.so))})
                          ]
                          spids: [-1 354]
                        )
                      ]
                      spids: [-1 369]
                    )
                  ]
                  spids: [335 372]
                )
              spids: [329 333]
            )
          ]
          spids: [321]
        )
      spids: [315 320]
    )
    (FuncDef
      name: get_realpath
      body: 
        (BraceGroup
          children: [
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:previous)
                  op: Equal
                  rhs: {(DQ ($ VSub_Number "$1"))}
                  spids: [394]
                )
              ]
              spids: [392]
            )
            (Assignment
              keyword: Assign_Local
              pairs: [
                (assign_pair
                  lhs: (LhsName name:next)
                  op: Equal
                  rhs: 
                    {
                      (CommandSubPart
                        command_list: 
                          (CommandList
                            children: [(C {(readlink)} {(DQ (${ VSub_Name previous))})]
                          )
                        left_token: <Left_CommandSub "$(">
                        spids: [403 411]
                      )
                    }
                  spids: [402]
                )
              ]
              spids: [400]
            )
            (While
              cond: [
                (Sentence
                  child: (C {(Lit_Other "[")} {(-n)} {(DQ (${ VSub_Name next))} {(Lit_Other "]")})
                  terminator: <Op_Semi ";">
                )
              ]
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:previous)
                          op: Equal
                          rhs: {(DQ (${ VSub_Name next))}
                          spids: [432]
                        )
                      ]
                      spids: [432]
                    )
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:next)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(readlink)} {(DQ (${ VSub_Name previous))})]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [441 449]
                              )
                            }
                          spids: [440]
                        )
                      ]
                      spids: [440]
                    )
                  ]
                  spids: [429 452]
                )
            )
            (C {(echo)} {(DQ (${ VSub_Name previous))})
          ]
          spids: [389]
        )
      spids: [383 388]
    )
    (FuncDef
      name: get_otool_path
      body: 
        (BraceGroup
          children: [
            (Pipeline
              children: [
                (C {(get_realpath)} {($ VSub_Number "$1")})
                (C {(sed)} {(SQ <"s|^.*/bazel-out/|bazel-out/|">)})
              ]
              negated: False
            )
          ]
          spids: [475]
        )
      spids: [469 474]
    )
    (If
      arms: [
        (if_arm
          cond: [
            (Sentence
              child: (C {(Lit_Other "[")} {(-n)} {(DQ (${ VSub_Name RPATH))} {(Lit_Other "]")})
              terminator: <Op_Semi ";">
            )
          ]
          action: [
            (ForEach
              iter_name: lib
              iter_words: [{(${ VSub_Name LIBS)}]
              do_arg_iter: False
              body: 
                (DoGroup
                  children: [
                    (Assignment
                      keyword: Assign_None
                      pairs: [
                        (assign_pair
                          lhs: (LhsName name:libpath)
                          op: Equal
                          rhs: 
                            {
                              (CommandSubPart
                                command_list: 
                                  (CommandList
                                    children: [(C {(get_library_path)} {(${ VSub_Name lib)})]
                                  )
                                left_token: <Left_CommandSub "$(">
                                spids: [533 539]
                              )
                            }
                          spids: [532]
                        )
                      ]
                      spids: [532]
                    )
                    (If
                      arms: [
                        (if_arm
                          cond: [
                            (Sentence
                              child: 
                                (C {(Lit_Other "[")} {(-n)} {(DQ (${ VSub_Name libpath))} 
                                  {(Lit_Other "]")}
                                )
                              terminator: <Op_Semi ";">
                            )
                          ]
                          action: [
                            (C {(${ VSub_Name INSTALL_NAME_TOOL)} {(-change)} 
                              {
                                (CommandSubPart
                                  command_list: 
                                    (CommandList
                                      children: [(C {(get_otool_path)} {(DQ (${ VSub_Name libpath))})]
                                    )
                                  left_token: <Left_CommandSub "$(">
                                  spids: [566 574]
                                )
                              } {(DQ ("@loader_path/") (${ VSub_Name RPATH) (/lib) (${ VSub_Name lib) (.so))} 
                              {(DQ (${ VSub_Name OUTPUT))}
                            )
                          ]
                          spids: [-1 557]
                        )
                      ]
                      spids: [-1 595]
                    )
                  ]
                  spids: [529 598]
                )
              spids: [523 527]
            )
          ]
          spids: [-1 515]
        )
      ]
      spids: [-1 600]
    )
  ]
)