(List (Com {[LIT_CHARS set]} {[LIT_CHARS -eu]}) (= scope= flags=0 words=[] bindings=[('GCC', {[DQ [LIT_CHARS /usr/bin/gcc]]})]) (= scope= flags=0 words=[] bindings=[('INSTALL_NAME_TOOL', {[DQ [LIT_CHARS /usr/bin/install_name_tool]]})]) (= scope= flags=0 words=[] bindings=[('LIBS', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('LIB_DIRS', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('RPATH', {[SQ ]})]) (= scope= flags=0 words=[] bindings=[('OUTPUT', {[SQ ]})]) (For i [{[DQ [VarSub @]]}]) (If (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub OUTPUT]]} {[DQ [LIT_CHARS 1]]}}) (= scope= flags=0 words=[] bindings=[('OUTPUT', {[VarSub i]})]) (DBracket {B2 BINARY_STRING_TILDE_EQUAL {[DQ [VarSub i]]} {[LIT_OTHER "^"] [LIT_CHARS -l] [LIT_CHARS "("] [LIT_CHARS .] [LIT_OTHER "*"] [LIT_CHARS ")"] [LIT_OTHER "$"]}}) (= scope= flags=0 words=[] bindings=[('LIBS', {[DQ [VarSub BASH_REMATCH bracket_op=(Index {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}})][LIT_CHARS " "][VarSub LIBS]]})]) (DBracket {B2 BINARY_STRING_TILDE_EQUAL {[DQ [VarSub i]]} {[LIT_OTHER "^"] [LIT_CHARS -L] [LIT_CHARS "("] [LIT_CHARS .] [LIT_OTHER "*"] [LIT_CHARS ")"] [LIT_OTHER "$"]}}) (= scope= flags=0 words=[] bindings=[('LIB_DIRS', {[DQ [VarSub BASH_REMATCH bracket_op=(Index {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}})][LIT_CHARS " "][VarSub LIB_DIRS]]})]) (DBracket {B2 BINARY_STRING_TILDE_EQUAL {[DQ [VarSub i]]} {[LIT_OTHER "^"] [LIT_CHARS -Wl] [LIT_COMMA ","] [LIT_CHARS -rpath] [LIT_COMMA ","] [\ LIT_ESCAPED_CHAR "\\$"] [LIT_CHARS ORIGIN/] [LIT_CHARS "("] [LIT_CHARS .] [LIT_OTHER "*"] [LIT_CHARS ")"] [LIT_OTHER "$"]}}) (= scope= flags=0 words=[] bindings=[('RPATH', {[VarSub BASH_REMATCH bracket_op=(Index {A Atom NODE_ARITH_WORD {[AS_NUM_LITERAL 1]}})]})]) (DBracket {B2 BINARY_STRING_EQUAL {[DQ [VarSub i]]} {[DQ [LIT_CHARS -o]]}}) (= scope= flags=0 words=[] bindings=[('OUTPUT', {[LIT_CHARS 1]})]) ) ) (Com {[VarSub GCC]} {[DQ [VarSub @]]}) (FunctionDef get_library_path [] (For libdir [{[VarSub LIB_DIRS]}]) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -f]} {[VarSub libdir] [LIT_CHARS /lib] [VarSub 1] [LIT_CHARS .so]} {[LIT_OTHER "]"]}) (Com {[LIT_CHARS echo]} {[DQ [VarSub libdir][LIT_CHARS /lib][VarSub 1][LIT_CHARS .so]]}) ) ) ) (FunctionDef get_realpath [] (List (= scope= flags=0 words=[] bindings=[('previous', {[DQ [VarSub 1]]})]) (= scope= flags=0 words=[] bindings=[('next', {[ComSub (Com {[LIT_CHARS readlink]} {[DQ [VarSub previous]]})]})]) (While (Com {[LIT_OTHER "["]} {[LIT_CHARS -n]} {[DQ [VarSub next]]} {[LIT_OTHER "]"]}) (List (= scope= flags=0 words=[] bindings=[('previous', {[DQ [VarSub next]]})]) (= scope= flags=0 words=[] bindings=[('next', {[ComSub (Com {[LIT_CHARS readlink]} {[DQ [VarSub previous]]})]})]) ) ) (Com {[LIT_CHARS echo]} {[DQ [VarSub previous]]}) ) ) (FunctionDef get_otool_path [] (Pipeline (Com {[LIT_CHARS get_realpath]} {[VarSub 1]}) (Com {[LIT_CHARS sed]} {[SQ ]}) ) ) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -n]} {[DQ [VarSub RPATH]]} {[LIT_OTHER "]"]}) (For lib [{[VarSub LIBS]}]) (List (= scope= flags=0 words=[] bindings=[('libpath', {[ComSub (Com {[LIT_CHARS get_library_path]} {[VarSub lib]})]})]) (If (Com {[LIT_OTHER "["]} {[LIT_CHARS -n]} {[DQ [VarSub libpath]]} {[LIT_OTHER "]"]}) (Com {[VarSub INSTALL_NAME_TOOL]} {[LIT_CHARS -change]} {[ComSub (Com {[LIT_CHARS get_otool_path]} {[DQ [VarSub libpath]]})]} {[DQ [LIT_CHARS "@loader_path/"][VarSub RPATH][LIT_CHARS /lib][VarSub lib][LIT_CHARS .so]]} {[DQ [VarSub OUTPUT]]}) ) ) ) ) )