(command.CommandList children: [ (C {<Id.KW_Set set>} {<-e>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RUN_INSTALL_NAME_TOOL) op: assign_op.Equal rhs: {<1>} spids: [143] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.AndOr ops: [Id.Op_DAmp] children: [ (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-eq>} {<3>} {<Id.Lit_RBracket ']'>} ) (C {<Id.Lit_LBracket '['>} {(DQ (${ Id.VSub_Number 1))} {<Id.Lit_Equals '='>} {(DQ <-I>)} {<Id.Lit_RBracket ']'>} ) ] ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<shift>}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:RUN_INSTALL_NAME_TOOL) op: assign_op.Equal rhs: (word.Empty) spids: [184] ) ] ) ] spids: [146 178] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_Pound '$#')} {<-ne>} {<2>} {<Id.Lit_RBracket ']'>}) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple 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 token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [189 203] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FRAMEWORK) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 1))} spids: [238] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DESTINATION_DIR) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Number 2))} spids: [245] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FRAMEWORK_NAME) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<basename>} {(DQ (${ Id.VSub_Name FRAMEWORK))}) ) ) } spids: [253] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} { (DQ (braced_var_sub token: <Id.VSub_Name FRAMEWORK_NAME> suffix_op: (suffix_op.Slice begin: (arith_expr.Unary op_id: Id.Node_UnaryMinus child: {<Id.Lit_Digits 10>} ) ) ) ) } {<Id.KW_Bang '!'> <Id.Lit_Equals '='>} {(DQ <.framework>)} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple 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 token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [266 291] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FRAMEWORK_NAME_NOEXT) op: assign_op.Equal rhs: { (DQ (braced_var_sub token: <Id.VSub_Name FRAMEWORK_NAME> suffix_op: (suffix_op.Slice begin: {<Id.Lit_Digits 0>} length: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: { (braced_var_sub token: <Id.VSub_Name FRAMEWORK_NAME> prefix_op: (Id.VSub_Pound) ) } right: {<Id.Lit_Digits 10>} ) ) } ) ) ) } spids: [318] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:VERSIONS) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name FRAMEWORK) <'/Versions'>)} spids: [343] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CURRENT_VERSION_LINK) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name VERSIONS) <'/Current'>)} spids: [351] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CURRENT_VERSION_ID) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (C {<readlink>} {(DQ (${ Id.VSub_Name VERSIONS) <'/Current'>)}) ) ) } spids: [359] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:CURRENT_VERSION) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name VERSIONS) <'/'> (${ Id.VSub_Name CURRENT_VERSION_ID))} spids: [373] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {<Id.KW_Bang '!'>} {<-e>} { (DQ (${ Id.VSub_Name CURRENT_VERSION) <'/'> (${ Id.VSub_Name FRAMEWORK_NAME_NOEXT)) } {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (command.Simple 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 token:<Id.ControlFlow_Exit exit> arg_word:{<1>}) ] spids: [388 410] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DESTINATION) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name DESTINATION_DIR) <'/'> (${ Id.VSub_Name FRAMEWORK_NAME))} spids: [438] ) ] ) (C {<mkdir>} {<-p>} {(DQ (${ Id.VSub_Name DESTINATION_DIR))}) (C {<rsync>} {<-acC>} {<--delete>} {<--exclude>} {<Headers>} {<--exclude>} {<PrivateHeaders>} {<--include>} {(SQ <'*.so'>)} {(DQ (${ Id.VSub_Name CURRENT_VERSION) <'/'>)} {(DQ (${ Id.VSub_Name DESTINATION))} ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (command.DBracket expr: (bool_expr.Unary op_id: Id.BoolUnary_n child: {(DQ (${ Id.VSub_Name RUN_INSTALL_NAME_TOOL))} ) ) terminator: <Id.Op_Semi _> ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FRAMEWORK_DYLIB) op: assign_op.Equal rhs: {(DQ (${ Id.VSub_Name DESTINATION) <'/'> (${ Id.VSub_Name FRAMEWORK_NAME_NOEXT))} spids: [556] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LC_ID_DYLIB_OLD) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<otool>} {<-l>} {(DQ (${ Id.VSub_Name FRAMEWORK_DYLIB))}) (C {<grep>} {<-A10>} {(DQ <'^ *cmd LC_ID_DYLIB'> <Id.Lit_Other '$'>)}) (C {<grep>} {<-m1>} {(DQ <'^ *name'>)}) (C {<sed>} {<-Ee>} {(SQ <'s/^ *name (.*) \\(offset [0-9]+\\)$/\\1/'>)}) ] negated: F ) ) ) } spids: [568] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:VERSION_PATH) op: assign_op.Equal rhs: { (DQ <'/Versions/'> (${ Id.VSub_Name CURRENT_VERSION_ID) <'/'> (${ Id.VSub_Name FRAMEWORK_NAME_NOEXT) ) } spids: [618] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LC_ID_DYLIB_NEW) op: assign_op.Equal rhs: { (DQ (command_sub left_token: <Id.Left_DollarParen '$('> child: (command.Pipeline children: [ (C {<echo>} {(DQ (${ Id.VSub_Name LC_ID_DYLIB_OLD))}) (C {<sed>} {<-Ee>} { (DQ <'s%'> (${ Id.VSub_Name VERSION_PATH) <Id.Lit_Other '$'> <'%/'> (${ Id.VSub_Name FRAMEWORK_NAME_NOEXT) <'%'> ) } ) ] negated: F ) ) ) } spids: [631] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {<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 ']'>} ) terminator: <Id.Op_Semi _> ) ] action: [ (C {<install_name_tool>} {<-id>} {(DQ (${ Id.VSub_Name LC_ID_DYLIB_NEW))} {(DQ (${ Id.VSub_Name FRAMEWORK_DYLIB))} ) ] spids: [666 689] ) ] ) ] spids: [502 517] ) ] ) ] )