(command.CommandList children: [ (command.Simple blame_tok:<set> more_env:[] words:[{<set>} {<-e>}] redirects:[] do_fork:T) (command.ShAssignment left: <Id.Lit_VarLike 'RUN_INSTALL_NAME_TOOL='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'RUN_INSTALL_NAME_TOOL='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'RUN_INSTALL_NAME_TOOL='> name: RUN_INSTALL_NAME_TOOL ) op: assign_op.Equal rhs: {<1>} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.AndOr children: [ (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-eq>} {<3>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <-I>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_DAmp _>] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <shift> more_env: [] words: [{<shift>}] redirects: [] do_fork: T ) (command.ShAssignment left: <Id.Lit_VarLike 'RUN_INSTALL_NAME_TOOL='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'RUN_INSTALL_NAME_TOOL='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'RUN_INSTALL_NAME_TOOL='> name: RUN_INSTALL_NAME_TOOL ) op: assign_op.Equal rhs: (rhs_word__Empty) ) ] redirects: [] ) ] spids: [146 178] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '#')} {<-ne>} {<2>} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} {(DQ <'usage: '> (${ Id.VSub_Number 0) <' [-I] FRAMEWORK DESTINATION_DIR'>)} ] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [189 203] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'FRAMEWORK='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'FRAMEWORK='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'FRAMEWORK='> name:FRAMEWORK) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 1))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'DESTINATION_DIR='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'DESTINATION_DIR='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DESTINATION_DIR='> name:DESTINATION_DIR) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 2))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'FRAMEWORK_NAME='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'FRAMEWORK_NAME='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'FRAMEWORK_NAME='> name:FRAMEWORK_NAME) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <basename> more_env: [] words: [{<basename>} {(DQ (${ Id.VSub_Name FRAMEWORK))}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name FRAMEWORK_NAME> var_name: FRAMEWORK_NAME suffix_op: (suffix_op.Slice begin: (arith_expr.Unary op_id: Id.Node_UnaryMinus child: {<Id.Lit_Digits 10>} ) ) right: <Id.Arith_RBrace _> ) ) } {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <.framework>)} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ (${ Id.VSub_Number 0) <': '> (${ Id.VSub_Name FRAMEWORK_NAME) <' does not end in .framework'> ) } ] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [266 291] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'FRAMEWORK_NAME_NOEXT='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'FRAMEWORK_NAME_NOEXT='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'FRAMEWORK_NAME_NOEXT='> name: FRAMEWORK_NAME_NOEXT ) op: assign_op.Equal rhs: { (DQ (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name FRAMEWORK_NAME> var_name: FRAMEWORK_NAME suffix_op: (suffix_op.Slice begin: {<Id.Lit_Digits 0>} length: { (word_part.ArithSub left: <Id.Left_DollarDParen '$(('> anode: (arith_expr.Binary op_id: Id.Arith_Minus left: { (BracedVarSub left: <Id.Left_DollarBrace '${'> token: <Id.VSub_Name FRAMEWORK_NAME> var_name: FRAMEWORK_NAME prefix_op: <Id.VSub_Pound '#'> right: <Id.Right_DollarBrace '}'> ) } right: {<Id.Lit_Digits 10>} ) right: <Id.Right_DollarDParen _> ) } ) right: <Id.Arith_RBrace _> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'VERSIONS='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'VERSIONS='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'VERSIONS='> name:VERSIONS) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name FRAMEWORK) <'/Versions'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'CURRENT_VERSION_LINK='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'CURRENT_VERSION_LINK='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'CURRENT_VERSION_LINK='> name: CURRENT_VERSION_LINK ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name VERSIONS) <'/Current'>)} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'CURRENT_VERSION_ID='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'CURRENT_VERSION_ID='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'CURRENT_VERSION_ID='> name:CURRENT_VERSION_ID) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Simple blame_tok: <readlink> more_env: [] words: [{<readlink>} {(DQ (${ Id.VSub_Name VERSIONS) <'/Current'>)}] redirects: [] do_fork: T ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'CURRENT_VERSION='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'CURRENT_VERSION='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'CURRENT_VERSION='> name:CURRENT_VERSION) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name VERSIONS) <'/'> (${ Id.VSub_Name CURRENT_VERSION_ID))} ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-e>} { (DQ (${ Id.VSub_Name CURRENT_VERSION) <'/'> (${ Id.VSub_Name FRAMEWORK_NAME_NOEXT) ) } {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <echo> more_env: [] words: [ {<echo>} { (DQ (${ Id.VSub_Number 0) <': '> (${ Id.VSub_Name FRAMEWORK_NAME) <' does not contain a dylib'> ) } ] redirects: [(Redir op:<Id.Redir_GreatAnd '>&'> loc:(redir_loc.Fd fd:1) arg:{<2>})] do_fork: T ) (command.ControlFlow keyword:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [388 410] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'DESTINATION='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'DESTINATION='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'DESTINATION='> name:DESTINATION) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name DESTINATION_DIR) <'/'> (${ Id.VSub_Name FRAMEWORK_NAME))} ) ] redirects: [] ) (command.Simple blame_tok: <mkdir> more_env: [] words: [{<mkdir>} {<-p>} {(DQ (${ Id.VSub_Name DESTINATION_DIR))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <rsync> more_env: [] words: [ {<rsync>} {<-acC>} {<--delete>} {<--exclude>} {<Headers>} {<--exclude>} {<PrivateHeaders>} {<--include>} {(SQ <'*.so'>)} {(DQ (${ Id.VSub_Name CURRENT_VERSION) <'/'>)} {(DQ (${ Id.VSub_Name DESTINATION))} ] redirects: [] do_fork: T ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.DBracket left: <Id.KW_DLeftBracket '[['> expr: (bool_expr.Unary op_id: Id.BoolUnary_n child: {(DQ (${ Id.VSub_Name RUN_INSTALL_NAME_TOOL))} ) right: <Id.Lit_DRightBracket ']]'> redirects: [] ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.ShAssignment left: <Id.Lit_VarLike 'FRAMEWORK_DYLIB='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'FRAMEWORK_DYLIB='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'FRAMEWORK_DYLIB='> name: FRAMEWORK_DYLIB ) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name DESTINATION) <'/'> (${ Id.VSub_Name FRAMEWORK_NAME_NOEXT))} ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'LC_ID_DYLIB_OLD='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'LC_ID_DYLIB_OLD='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'LC_ID_DYLIB_OLD='> name: LC_ID_DYLIB_OLD ) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <otool> more_env: [] words: [{<otool>} {<-l>} {(DQ (${ Id.VSub_Name FRAMEWORK_DYLIB))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [ {<grep>} {<-A10>} {(DQ <'^ *cmd LC_ID_DYLIB'> <Id.Lit_Dollar '$'>)} ] redirects: [] do_fork: T ) (command.Simple blame_tok: <grep> more_env: [] words: [{<grep>} {<-m1>} {(DQ <'^ *name'>)}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [ {<sed>} {<-Ee>} {(SQ <'s/^ *name (.*) \\(offset [0-9]+\\)$/\\1/'>)} ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _> <Id.Op_Pipe _> <Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'VERSION_PATH='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'VERSION_PATH='> lhs: (sh_lhs_expr.Name left:<Id.Lit_VarLike 'VERSION_PATH='> name:VERSION_PATH) op: assign_op.Equal rhs: { (DQ <'/Versions/'> (${ Id.VSub_Name CURRENT_VERSION_ID) <'/'> (${ Id.VSub_Name FRAMEWORK_NAME_NOEXT) ) } ) ] redirects: [] ) (command.ShAssignment left: <Id.Lit_VarLike 'LC_ID_DYLIB_NEW='> pairs: [ (AssignPair left: <Id.Lit_VarLike 'LC_ID_DYLIB_NEW='> lhs: (sh_lhs_expr.Name left: <Id.Lit_VarLike 'LC_ID_DYLIB_NEW='> name: LC_ID_DYLIB_NEW ) op: assign_op.Equal rhs: { (DQ (CommandSub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (command.Simple blame_tok: <echo> more_env: [] words: [{<echo>} {(DQ (${ Id.VSub_Name LC_ID_DYLIB_OLD))}] redirects: [] do_fork: T ) (command.Simple blame_tok: <sed> more_env: [] words: [ {<sed>} {<-Ee>} { (DQ <'s%'> (${ Id.VSub_Name VERSION_PATH) <Id.Lit_Dollar '$'> <'%/'> (${ Id.VSub_Name FRAMEWORK_NAME_NOEXT) <'%'> ) } ] redirects: [] do_fork: T ) ] ops: [<Id.Op_Pipe _>] ) right: <Id.Eof_RParen _> ) ) } ) ] redirects: [] ) (command.If if_kw: <Id.KW_If if> arms: [ (IfArm keyword: <Id.KW_If if> cond: (condition.Shell commands: [ (command.Sentence child: (command.Simple blame_tok: <Id.Lit_LBracket '['> more_env: [] words: [ {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Name LC_ID_DYLIB_NEW))} {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ (${ Id.VSub_Name LC_ID_DYLIB_OLD))} {<Id.Lit_RBracket ']'>} ] redirects: [] do_fork: T ) terminator: <Id.Op_Semi _> ) ] ) then_kw: <Id.KW_Then then> action: [ (command.Simple blame_tok: <install_name_tool> more_env: [] words: [ {<install_name_tool>} {<-id>} {(DQ (${ Id.VSub_Name LC_ID_DYLIB_NEW))} {(DQ (${ Id.VSub_Name FRAMEWORK_DYLIB))} ] redirects: [] do_fork: T ) ] spids: [666 689] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] spids: [502 517] ) ] else_action: [] fi_kw: <Id.KW_Fi fi> redirects: [] ) ] )