(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:MISC_FUNCTIONS_ARGS) op: Equal rhs: {(DQ ($ VSub_At '$@'))} spids: [39] ) ] spids: [39] ) (C {(shift)} {($ VSub_Pound '$#')}) (AndOr ops: [Op_DPipe] children: [ (C {(source)} {(DQ (${ VSub_Name PORTAGE_BIN_PATH) (/ebuild.sh))}) (ControlFlow token:<ControlFlow_Exit exit> arg_word:{(1)}) ] ) (FuncDef name: install_symlink_html_docs body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children:[(C {(___eapi_has_prefix_variables)})] negated:T) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:ED) op: Equal rhs: {(${ VSub_Name D)} spids: [84] ) ] spids: [82] ) ] spids: [16777215 79] ) ] spids: [16777215 90] ) (AndOr ops: [Op_DPipe] children: [(C {(cd)} {(DQ (${ VSub_Name ED))}) (C {(die)} {(DQ ('cd failed'))})] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ (${ VSub_Name DOC_SYMLINKS_DIR))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:mydocdir) op: Equal spids: [135] ) (assign_pair lhs: (LhsName name:docdir) op: Equal spids: [137] ) ] spids: [133] ) (ForEach iter_name: docdir iter_words: [ { (DQ (BracedVarSub token: <VSub_Name HTMLDOC_DIR> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: {(does) (Lit_Slash /) (not) (Lit_Slash /) (exist)} ) spids: [147 155] ) ) } {(DQ (${ VSub_Name PF) (/html))} {(DQ (${ VSub_Name PF) (/HTML))} {(DQ (${ VSub_Name P) (/html))} {(DQ (${ VSub_Name P) (/HTML))} ] do_arg_iter: F body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-d)} {(DQ (usr/share/doc/) (${ VSub_Name docdir))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:mydocdir) op: Equal rhs: {(DQ (/usr/share/doc/) (${ VSub_Name docdir))} spids: [211] ) ] spids: [211] ) ] spids: [16777215 208] ) ] spids: [16777215 220] ) ] spids: [188 223] ) spids: [145 186] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ (${ VSub_Name mydocdir))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:mysympath) op:Equal spids:[247])] spids: [245] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ (${ VSub_Name SLOT))} {(-o)} { (DQ (BracedVarSub token: <VSub_Name SLOT> suffix_op: (StringUnary op_id: VOp1_Percent arg_word: {(Lit_Slash /) ('*')} ) spids: [265 270] ) ) } {(Lit_Other '=')} {(DQ (0))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:mysympath) op: Equal rhs: { (DQ (${ VSub_Name DOC_SYMLINKS_DIR) (/) (${ VSub_Name CATEGORY) (/) (${ VSub_Name PN) ) } spids: [286] ) ] spids: [286] ) ] spids: [16777215 283] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:mysympath) op: Equal rhs: { (DQ (${ VSub_Name DOC_SYMLINKS_DIR) (/) (${ VSub_Name CATEGORY) (/) (${ VSub_Name PN) (-) (BracedVarSub token: <VSub_Name SLOT> suffix_op: (StringUnary op_id: VOp1_Percent arg_word: {(Lit_Slash /) ('*')} ) spids: [319 324] ) ) } spids: [305] ) ] spids: [305] ) ] spids: [302 328] ) (C {(einfo)} { (DQ ('Symlinking ') (${ VSub_Name mysympath) (' to the HTML documentation') ) } ) (C {(dodir)} {(DQ (${ VSub_Name DOC_SYMLINKS_DIR) (/) (${ VSub_Name CATEGORY))} ) (C {(dosym)} {(DQ (${ VSub_Name mydocdir))} {(DQ (${ VSub_Name mysympath))}) ] spids: [16777215 242] ) ] spids: [16777215 370] ) ] spids: [16777215 130] ) ] spids: [16777215 373] ) ] spids: [69] ) spids: [65 68] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:READLINK_F_WORKS) op:Equal rhs:{(DQ )} spids:[381])] spids: [381] ) (FuncDef name: canonicalize body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id:BoolUnary_z child:{(${ VSub_Name READLINK_F_WORKS)}) ) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_GlobDEqual left: { (CommandSubPart command_list: (CommandList children: [ (SimpleCommand words: [{(readlink)} {(-f)} {(--)} {(/../)}] redirects: [ (Redir op: <Redir_Great '2>'> fd: 2 arg_word: {(/dev/null)} ) ] ) ] ) left_token: <Left_CommandSub '$('> spids: [413 424] ) } right: {(DQ (/))} ) ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:READLINK_F_WORKS) op: Equal rhs: {(true)} spids: [439] ) ] spids: [439] ) ] spids: [16777215 436] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:READLINK_F_WORKS) op: Equal rhs: {(false)} spids: [446] ) ] spids: [446] ) ] spids: [443 450] ) ] spids: [16777215 406] ) ] spids: [16777215 453] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(${ VSub_Name READLINK_F_WORKS)}) terminator: <Op_Semi ';'> ) ] action: [ (C {(readlink)} {(-f)} {(--)} {(DQ ($ VSub_At '$@'))}) (ControlFlow token:<ControlFlow_Return return>) ] spids: [16777215 464] ) ] spids: [16777215 481] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:f) op: Equal rhs: {($ VSub_Number '$1')} spids: [487] ) (assign_pair lhs:(LhsName name:b) op:Equal spids:[490]) (assign_pair lhs:(LhsName name:n) op:Equal rhs:{(10)} spids:[492]) (assign_pair lhs: (LhsName name:wd) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(pwd)})]) left_token: <Left_CommandSub '$('> spids: [496 498] ) } spids: [495] ) ] spids: [485] ) (WhileUntil keyword: <KW_While while> cond: [ (Sentence child: (DParen child: (ArithBinary op_id: Arith_Great left: (UnaryAssign op_id:Node_PostDMinus child:(LhsName name:n)) right: (ArithWord w:{(Lit_Digits 0)}) ) spids: [503 513] ) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (WhileUntil keyword: <KW_While while> cond: [ (Sentence child: (DBracket expr: (LogicalAnd left: (BoolBinary op_id: BoolBinary_GlobEqual left: { (BracedVarSub token: <VSub_Name f> suffix_op: (Slice begin: (ArithUnary op_id: Node_UnaryMinus child: (ArithWord w:{(Lit_Digits 1)}) ) ) spids: [523 529] ) } right: {(/)} ) right: (BoolBinary op_id: BoolBinary_gt left: { (BracedVarSub token: <VSub_Name f> prefix_op: VSub_Pound spids: [537 540] ) } right: {(1)} ) ) ) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:f) op: Equal rhs: { (BracedVarSub token: <VSub_Name f> suffix_op: (StringUnary op_id: VOp1_Percent arg_word: {(Lit_Slash /)} ) spids: [553 557] ) } spids: [552] ) ] spids: [552] ) ] spids: [549 560] ) ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:b) op: Equal rhs: { (BracedVarSub token: <VSub_Name f> suffix_op: (StringUnary op_id: VOp1_DPound arg_word: {('*') (Lit_Slash /)} ) spids: [564 569] ) } spids: [563] ) ] spids: [563] ) (AndOr ops: [Op_DPipe] children: [ (SimpleCommand words: [ {(cd)} { (DQ (BracedVarSub token: <VSub_Name f> suffix_op: (StringUnary op_id: VOp1_Percent arg_word: {(DQ (${ VSub_Name b))} ) spids: [575 583] ) ) } ] redirects: [(Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})] ) (ControlFlow token:<ControlFlow_Break break>) ] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalNot child: (BoolUnary op_id:BoolUnary_L child:{(${ VSub_Name b)}) ) ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:f) op: Equal rhs: { (CommandSubPart command_list: (CommandList children:[(C {(pwd)} {(-P)})]) left_token: <Left_CommandSub '$('> spids: [613 617] ) } spids: [612] ) ] spids: [612] ) (C {(echo)} { (DQ (BracedVarSub token: <VSub_Name f> suffix_op: (StringUnary op_id: VOp1_Percent arg_word: {(Lit_Slash /)} ) spids: [623 627] ) (/) (${ VSub_Name b) ) } ) (C {(cd)} {(DQ (${ VSub_Name wd))}) (ControlFlow token: <ControlFlow_Return return> arg_word: {(0)} ) ] spids: [16777215 609] ) ] spids: [16777215 649] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:f) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(readlink)} {(DQ (${ VSub_Name b))})] ) left_token: <Left_CommandSub '$('> spids: [653 661] ) } spids: [652] ) ] spids: [652] ) ] spids: [516 664] ) ) (C {(cd)} {(DQ (${ VSub_Name wd))}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [389] ) spids: [385 388] ) (FuncDef name: prepcompress body: (BraceGroup children: [ (Assignment keyword: Assign_Local flags: [-a] pairs: [ (assign_pair lhs:(LhsName name:include) op:Equal spids:[694]) (assign_pair lhs:(LhsName name:exclude) op:Equal spids:[696]) (assign_pair lhs:(LhsName name:incl_d) op:Equal spids:[698]) (assign_pair lhs:(LhsName name:incl_f) op:Equal spids:[700]) ] spids: [690] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs:(LhsName name:f) op:Equal spids:[705]) (assign_pair lhs:(LhsName name:g) op:Equal spids:[707]) (assign_pair lhs:(LhsName name:i) op:Equal spids:[709]) (assign_pair lhs:(LhsName name:real_f) op:Equal spids:[711]) (assign_pair lhs:(LhsName name:real_d) op:Equal spids:[713]) ] spids: [703] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children:[(C {(___eapi_has_prefix_variables)})] negated:T) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:ED) op: Equal rhs: {(${ VSub_Name D)} spids: [728] ) ] spids: [726] ) ] spids: [16777215 723] ) ] spids: [16777215 734] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:real_d) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(canonicalize)} {(DQ (${ VSub_Name ED))})] ) left_token: <Left_CommandSub '$('> spids: [743 751] ) } spids: [742] ) ] spids: [742] ) (ForExpr init: (BinaryAssign op_id: Arith_Equal left: (LhsName name:i) right: (ArithWord w:{(Lit_Digits 0)}) ) cond: (ArithBinary op_id: Arith_Less left: (ArithVarRef name:i) right: (ArithWord w: { (BracedVarSub token: <VSub_Name PORTAGE_DOCOMPRESS> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [769 775] ) } ) ) update: (UnaryAssign op_id:Node_PostDPlus child:(LhsName name:i)) body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:real_f) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(canonicalize)} { (DQ (${ VSub_Name ED) (BracedVarSub token: <VSub_Name PORTAGE_DOCOMPRESS> bracket_op: (ArrayIndex expr:(ArithVarRef name:i)) spids: [796 801] ) ) } ) ] ) left_token: <Left_CommandSub '$('> spids: [789 803] ) } spids: [788] ) ] spids: [788] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:f) op: Equal rhs: { (BracedVarSub token: <VSub_Name real_f> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {(DQ (${ VSub_Name real_d))} ) spids: [807 815] ) } spids: [806] ) ] spids: [806] ) (If arms: [ (if_arm cond: [ (AndOr ops: [Op_DAmp] children: [ (DBracket expr: (BoolBinary op_id: BoolBinary_GlobNEqual left: {(${ VSub_Name real_f)} right: {(DQ (${ VSub_Name f))} ) ) (DBracket expr: (LogicalOr left: (BoolUnary op_id:BoolUnary_d child:{(${ VSub_Name real_f)}) right: (BoolUnary op_id: BoolUnary_f child: {(${ VSub_Name real_f)} ) ) ) ] ) ] action: [ (C {(include) (Lit_Other '[') (BracedVarSub token: <VSub_Name include> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [862 868] ) (Lit_Other ']') (Lit_Other '=') (BracedVarSub token: <VSub_Name f> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: {(Lit_Slash /)} ) spids: [871 875] ) } ) ] spids: [16777215 857] ) (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_ge left: {(${ VSub_Name i)} right: {(3)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(ewarn)} {(DQ ('prepcompress:'))} { (DQ ("ignoring nonexistent path '") (BracedVarSub token: <VSub_Name PORTAGE_DOCOMPRESS> bracket_op: (ArrayIndex expr:(ArithVarRef name:i)) spids: [906 911] ) ("'") ) } ) ] spids: [878 893] ) ] spids: [16777215 916] ) ] spids: [785 919] ) ) (ForExpr init: (BinaryAssign op_id: Arith_Equal left: (LhsName name:i) right: (ArithWord w:{(Lit_Digits 0)}) ) cond: (ArithBinary op_id: Arith_Less left: (ArithVarRef name:i) right: (ArithWord w: { (BracedVarSub token: <VSub_Name PORTAGE_DOCOMPRESS_SKIP> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [937 943] ) } ) ) update: (UnaryAssign op_id:Node_PostDPlus child:(LhsName name:i)) body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:real_f) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(canonicalize)} { (DQ (${ VSub_Name ED) (BracedVarSub token: <VSub_Name PORTAGE_DOCOMPRESS_SKIP> bracket_op: (ArrayIndex expr:(ArithVarRef name:i)) spids: [964 969] ) ) } ) ] ) left_token: <Left_CommandSub '$('> spids: [957 971] ) } spids: [956] ) ] spids: [956] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:f) op: Equal rhs: { (BracedVarSub token: <VSub_Name real_f> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {(DQ (${ VSub_Name real_d))} ) spids: [975 983] ) } spids: [974] ) ] spids: [974] ) (If arms: [ (if_arm cond: [ (AndOr ops: [Op_DAmp] children: [ (DBracket expr: (BoolBinary op_id: BoolBinary_GlobNEqual left: {(${ VSub_Name real_f)} right: {(DQ (${ VSub_Name f))} ) ) (DBracket expr: (LogicalOr left: (BoolUnary op_id:BoolUnary_d child:{(${ VSub_Name real_f)}) right: (BoolUnary op_id: BoolUnary_f child: {(${ VSub_Name real_f)} ) ) ) ] ) ] action: [ (C {(exclude) (Lit_Other '[') (BracedVarSub token: <VSub_Name exclude> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1030 1036] ) (Lit_Other ']') (Lit_Other '=') (BracedVarSub token: <VSub_Name f> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: {(Lit_Slash /)} ) spids: [1039 1043] ) } ) ] spids: [16777215 1025] ) (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_ge left: {(${ VSub_Name i)} right: {(1)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(ewarn)} {(DQ ('prepcompress:'))} { (DQ ("ignoring nonexistent path '") (BracedVarSub token: <VSub_Name PORTAGE_DOCOMPRESS_SKIP> bracket_op: (ArrayIndex expr:(ArithVarRef name:i)) spids: [1074 1079] ) ("'") ) } ) ] spids: [1046 1061] ) ] spids: [16777215 1084] ) ] spids: [953 1087] ) ) (ForExpr init: (BinaryAssign op_id: Arith_Equal left: (LhsName name:i) right: (ArithBinary op_id: Arith_Minus left: (ArithWord w: { (BracedVarSub token: <VSub_Name include> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1115 1121] ) } ) right: (ArithWord w:{(Lit_Digits 1)}) ) ) cond: (ArithBinary op_id: Arith_GreatEqual left: (ArithVarRef name:i) right: (ArithWord w:{(Lit_Digits 0)}) ) update: (UnaryAssign op_id:Node_PostDMinus child:(LhsName name:i)) body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:f) op: Equal rhs: { (BracedVarSub token: <VSub_Name include> bracket_op: (ArrayIndex expr:(ArithVarRef name:i)) spids: [1146 1151] ) } spids: [1145] ) ] spids: [1145] ) (ForEach iter_name: g iter_words: [ { (DQ (BracedVarSub token: <VSub_Name include> bracket_op: (WholeArray op_id:Lit_At) spids: [1161 1166] ) ) } ] do_arg_iter: F body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name f)} right: { (DQ (BracedVarSub token: <VSub_Name g> suffix_op: (StringUnary op_id: VOp1_Percent arg_word: {(Lit_Slash /)} ) spids: [1184 1188] ) ) (/) (Lit_Other '*') } ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(unset)} {(include) (Lit_Other '[') (i) (Lit_Other ']')}) (ControlFlow token: <ControlFlow_Continue continue> arg_word: {(2)} ) ] spids: [16777215 1196] ) ] spids: [16777215 1212] ) ] spids: [1170 1215] ) spids: [1159 1168] ) (ForEach iter_name: g iter_words: [ { (DQ (BracedVarSub token: <VSub_Name exclude> bracket_op: (WholeArray op_id:Lit_At) spids: [1225 1230] ) ) } ] do_arg_iter: F body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalOr left: (BoolBinary op_id: BoolBinary_GlobEqual left: {(${ VSub_Name f)} right: {(DQ (${ VSub_Name g))} ) right: (BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name f)} right: { (DQ (BracedVarSub token: <VSub_Name g> suffix_op: (StringUnary op_id: VOp1_Percent arg_word: {(Lit_Slash /)} ) spids: [1262 1266] ) ) (/) (Lit_Other '*') } ) ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(unset)} {(include) (Lit_Other '[') (i) (Lit_Other ']')}) (ControlFlow token: <ControlFlow_Continue continue> arg_word: {(2)} ) ] spids: [16777215 1274] ) ] spids: [16777215 1290] ) ] spids: [1234 1293] ) spids: [1223 1232] ) ] spids: [1142 1296] ) ) (ForExpr init: (BinaryAssign op_id: Arith_Equal left: (LhsName name:i) right: (ArithBinary op_id: Arith_Minus left: (ArithWord w: { (BracedVarSub token: <VSub_Name exclude> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1319 1325] ) } ) right: (ArithWord w:{(Lit_Digits 1)}) ) ) cond: (ArithBinary op_id: Arith_GreatEqual left: (ArithVarRef name:i) right: (ArithWord w:{(Lit_Digits 0)}) ) update: (UnaryAssign op_id:Node_PostDMinus child:(LhsName name:i)) body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:f) op: Equal rhs: { (BracedVarSub token: <VSub_Name exclude> bracket_op: (ArrayIndex expr:(ArithVarRef name:i)) spids: [1350 1355] ) } spids: [1349] ) ] spids: [1349] ) (ForEach iter_name: g iter_words: [ { (DQ (BracedVarSub token: <VSub_Name exclude> bracket_op: (WholeArray op_id:Lit_At) spids: [1365 1370] ) ) } ] do_arg_iter: F body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name f)} right: { (DQ (BracedVarSub token: <VSub_Name g> suffix_op: (StringUnary op_id: VOp1_Percent arg_word: {(Lit_Slash /)} ) spids: [1388 1392] ) ) (/) (Lit_Other '*') } ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(unset)} {(exclude) (Lit_Other '[') (i) (Lit_Other ']')}) (ControlFlow token: <ControlFlow_Continue continue> arg_word: {(2)} ) ] spids: [16777215 1400] ) ] spids: [16777215 1416] ) ] spids: [1374 1419] ) spids: [1363 1372] ) (ForEach iter_name: g iter_words: [ { (DQ (BracedVarSub token: <VSub_Name include> bracket_op: (WholeArray op_id:Lit_At) spids: [1429 1434] ) ) } ] do_arg_iter: F body: (DoGroup children: [ (AndOr ops: [Op_DAmp] children: [ (DBracket expr: (BoolBinary op_id: BoolBinary_GlobDEqual left: {(${ VSub_Name f)} right: { (DQ (BracedVarSub token: <VSub_Name g> suffix_op: (StringUnary op_id: VOp1_Percent arg_word: {(Lit_Slash /)} ) spids: [1450 1454] ) ) (/) (Lit_Other '*') } ) ) (ControlFlow token: <ControlFlow_Continue continue> arg_word: {(2)} ) ] ) ] spids: [1438 1468] ) spids: [1427 1436] ) (C {(unset)} {(exclude) (Lit_Other '[') (i) (Lit_Other ']')}) ] spids: [1346 1479] ) ) (ForEach iter_name: f iter_words: [ { (DQ (BracedVarSub token: <VSub_Name include> bracket_op: (WholeArray op_id:Lit_At) spids: [1494 1499] ) ) } ] do_arg_iter: F body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id: BoolUnary_d child: {(${ VSub_Name ED) (${ VSub_Name f)} ) ) terminator: <Op_Semi ';'> ) ] action: [ (C {(incl_d) (Lit_Other '[') (BracedVarSub token: <VSub_Name incl_d> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1527 1533] ) (Lit_Other ']') (Lit_Other '=') (${ VSub_Name f) } ) ] spids: [16777215 1522] ) ] else_action: [ (C {(incl_f) (Lit_Other '[') (BracedVarSub token: <VSub_Name incl_f> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1546 1552] ) (Lit_Other ']') (Lit_Other '=') (${ VSub_Name f) } ) ] spids: [1541 1560] ) ] spids: [1503 1563] ) spids: [1492 1501] ) (AndOr ops: [Op_DAmp] children: [ (DBracket expr: (BoolBinary op_id: BoolBinary_gt left: { (BracedVarSub token: <VSub_Name incl_d> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1577 1583] ) } right: {(0)} ) ) (C {(ecompressdir)} {(--limit)} { (BracedVarSub token: <VSub_Name PORTAGE_DOCOMPRESS_SIZE_LIMIT> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(0)}) spids: [1597 1601] ) } {(--queue)} { (DQ (BracedVarSub token: <VSub_Name incl_d> bracket_op: (WholeArray op_id:Lit_At) spids: [1606 1611] ) ) } ) ] ) (AndOr ops: [Op_DAmp] children: [ (DBracket expr: (BoolBinary op_id: BoolBinary_gt left: { (BracedVarSub token: <VSub_Name incl_f> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1617 1623] ) } right: {(0)} ) ) (C {(ecompress)} {(--queue)} { (DQ (BracedVarSub token: <VSub_Name incl_f> bracket_op: (WholeArray op_id:Lit_At) suffix_op: (PatSub pat: {} replace: {(${ VSub_Name ED)} do_all: F do_prefix: T do_suffix: F ) spids: [1638 1649] ) ) } ) ] ) (AndOr ops: [Op_DAmp] children: [ (DBracket expr: (BoolBinary op_id: BoolBinary_gt left: { (BracedVarSub token: <VSub_Name exclude> prefix_op: VSub_Pound bracket_op: (WholeArray op_id:Lit_At) spids: [1655 1661] ) } right: {(0)} ) ) (C {(ecompressdir)} {(--ignore)} { (DQ (BracedVarSub token: <VSub_Name exclude> bracket_op: (WholeArray op_id:Lit_At) spids: [1676 1681] ) ) } ) ] ) (ControlFlow token:<ControlFlow_Return return> arg_word:{(0)}) ] spids: [687] ) spids: [683 686] ) (FuncDef name: install_qa_check body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs:(LhsName name:d) op:Equal spids:[1701]) (assign_pair lhs:(LhsName name:f) op:Equal spids:[1703]) (assign_pair lhs:(LhsName name:i) op:Equal spids:[1705]) (assign_pair lhs:(LhsName name:qa_var) op:Equal spids:[1707]) (assign_pair lhs:(LhsName name:x) op:Equal spids:[1709]) (assign_pair lhs:(LhsName name:paths) op:Equal spids:[1711]) (assign_pair lhs: (LhsName name:qa_checks) op: Equal rhs: {(ArrayLiteralPart)} spids: [1713] ) (assign_pair lhs: (LhsName name:checks_run) op: Equal rhs: {(ArrayLiteralPart)} spids: [1717] ) ] spids: [1699] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children:[(C {(___eapi_has_prefix_variables)})] negated:T) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:EPREFIX) op: Equal rhs: {(EmptyPart)} spids: [1734] ) (assign_pair lhs: (LhsName name:ED) op: Equal rhs: {(${ VSub_Name D)} spids: [1736] ) ] spids: [1732] ) ] spids: [16777215 1729] ) ] spids: [16777215 1742] ) (AndOr ops: [Op_DPipe] children: [(C {(cd)} {(DQ (${ VSub_Name ED))}) (C {(die)} {(DQ ('cd failed'))})] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:paths) op: Equal rhs: { (ArrayLiteralPart words: [ {(DQ (${ VSub_Name PORTAGE_OVERRIDE_EPREFIX)) (/usr/local/lib/install-qa-check.d) } {(DQ (${ VSub_Name PORTAGE_OVERRIDE_EPREFIX)) (/usr/lib/install-qa-check.d) } ] ) } spids: [1768] ) ] spids: [1768] ) (ForEach iter_name: d iter_words: [ { (DQ (BracedVarSub token: <VSub_Name PORTAGE_ECLASS_LOCATIONS> bracket_op: (WholeArray op_id:Lit_At) spids: [1815 1820] ) ) } ] do_arg_iter: F body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:paths) op: PlusEqual rhs: { (ArrayLiteralPart words: [{(DQ (${ VSub_Name d)) (/metadata/install-qa-check.d)}] ) } spids: [1827] ) ] spids: [1827] ) ] spids: [1824 1842] ) spids: [1813 1822] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:paths) op: PlusEqual rhs: { (ArrayLiteralPart words: [ {(DQ (${ VSub_Name PORTAGE_OVERRIDE_EPREFIX)) (/usr/lib/portage/install-qa-check.d) } {(DQ (${ VSub_Name PORTAGE_BIN_PATH)) (/install-qa-check.d)} ] ) } spids: [1846] ) ] spids: [1846] ) (ForEach iter_name: d iter_words: [ { (DQ (BracedVarSub token: <VSub_Name paths> bracket_op: (WholeArray op_id:Lit_At) spids: [1889 1894] ) ) } ] do_arg_iter: F body: (DoGroup children: [ (ForEach iter_name: f iter_words: [{(DQ (${ VSub_Name d)) (/) (Lit_Other '*')}] do_arg_iter: F body: (DoGroup children: [ (AndOr ops: [Op_DAmp] children: [ (DBracket expr: (BoolUnary op_id:BoolUnary_f child:{(${ VSub_Name f)}) ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:qa_checks) op: PlusEqual rhs: { (ArrayLiteralPart words: [ { (DQ (BracedVarSub token: <VSub_Name f> suffix_op: (StringUnary op_id: VOp1_DPound arg_word: {('*') (Lit_Slash /)} ) spids: [1935 1940] ) ) } ] ) } spids: [1931] ) ] spids: [1931] ) ] ) ] spids: [1916 1946] ) spids: [1906 1914] ) ] spids: [1898 1949] ) spids: [1887 1896] ) (WhileUntil keyword: <KW_While while> cond: [ (Sentence child: (C {(read)} {(-r)} {(-d)} {(SQ )} {(f)}) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (ForEach iter_name: d iter_words: [ { (DQ (BracedVarSub token: <VSub_Name paths> bracket_op: (WholeArray op_id:Lit_At) spids: [1989 1994] ) ) } ] do_arg_iter: F body: (DoGroup children: [ (AndOr ops: [Op_DAmp] children: [ (DBracket expr: (BoolUnary op_id: BoolUnary_f child: {(${ VSub_Name d) (/) (${ VSub_Name f)} ) ) (ControlFlow token: <ControlFlow_Break break> ) ] ) ] spids: [1998 2020] ) spids: [1987 1996] ) (Subshell child: (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_IN_INSTALL_QA_CHECK) op: Equal rhs: {(1)} spids: [2043] ) ] spids: [2043] ) (AndOr ops: [Op_DPipe] children: [ (C {(source)} {(DQ (${ VSub_Name d) (/) (${ VSub_Name f))}) (C {(eerror)} { (DQ ('Post-install QA check ') (${ VSub_Name f) (' failed to run')) } ) ] ) ] ) spids: [2032 2072] ) ] spids: [1975 2075] ) redirects: [ (Redir op: <Redir_Less '<'> fd: 16777215 arg_word: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(printf)} {(DQ ('%s') (Lit_Other '\\') (0))} { (DQ (BracedVarSub token: <VSub_Name qa_checks> bracket_op: (WholeArray op_id:Lit_At) spids: [2089 2094] ) ) } ) (SimpleCommand words: [{(sort)} {(-u)} {(-z)}] more_env: [(env_pair name:LC_ALL val:{(C)} spids:[2099])] ) ] negated: F ) ] ) left_token: <Left_ProcSubIn '<('> spids: [2079 2107] ) } ) ] ) (C {(export)} {(STRIP_MASK)}) (C {(prepall)}) (AndOr ops: [Op_DAmp] children: [(C {(___eapi_has_docompress)}) (C {(prepcompress)})] ) (C {(ecompressdir)} {(--dequeue)}) (C {(ecompress)} {(--dequeue)}) (If arms: [ (if_arm cond: [ (Sentence child: (SimpleCommand words: [{(type)} {(-P)} {(scanelf)}] redirects: [(Redir op:<Redir_Great '>'> fd:16777215 arg_word:{(/dev/null)})] ) terminator: <Op_Semi ';'> ) ] action: [ (C {(rm)} {(-f)} (BracedWordTree parts: [ (DQ ($ VSub_Name '$PORTAGE_BUILDDIR')) (/build-info/NEEDED) (BracedAltPart words:[{} {(.ELF.2)}]) ] ) ) (Pipeline children: [ (C {(scanelf)} {(-qyRF)} {(SQ <'%a;%p;%S;%r;%n'>)} {(DQ (${ VSub_Name D))}) (BraceGroup children: [ (WhileUntil keyword: <KW_While while> cond: [ (Sentence child: (SimpleCommand words: [{(read)} {(-r)} {(l)}] more_env: [(env_pair name:IFS val:{(EmptyPart)} spids:[2208])] ) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:arch) op: Equal rhs: { (BracedVarSub token: <VSub_Name l> suffix_op: (StringUnary op_id: VOp1_DPercent arg_word: {(';*')} ) spids: [2221 2225] ) } spids: [2220] ) ] spids: [2220] ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:l) op: Equal rhs: { (BracedVarSub token: <VSub_Name l> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {('*;')} ) spids: [2229 2233] ) } spids: [2228] ) ] spids: [2228] ) (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:obj) op: Equal rhs: { (DQ (/) (BracedVarSub token: <VSub_Name l> suffix_op: (StringUnary op_id: VOp1_DPercent arg_word: {(';*')} ) spids: [2239 2243] ) ) } spids: [2236] ) ] spids: [2236] ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:l) op: Equal rhs: { (BracedVarSub token: <VSub_Name l> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {('*;')} ) spids: [2248 2252] ) } spids: [2247] ) ] spids: [2247] ) (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:soname) op: Equal rhs: { (BracedVarSub token: <VSub_Name l> suffix_op: (StringUnary op_id: VOp1_DPercent arg_word: {(';*')} ) spids: [2256 2260] ) } spids: [2255] ) ] spids: [2255] ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:l) op: Equal rhs: { (BracedVarSub token: <VSub_Name l> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {('*;')} ) spids: [2264 2268] ) } spids: [2263] ) ] spids: [2263] ) (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:rpath) op: Equal rhs: { (BracedVarSub token: <VSub_Name l> suffix_op: (StringUnary op_id: VOp1_DPercent arg_word: {(';*')} ) spids: [2272 2276] ) } spids: [2271] ) ] spids: [2271] ) terminator: <Op_Semi ';'> ) (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:l) op: Equal rhs: { (BracedVarSub token: <VSub_Name l> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {('*;')} ) spids: [2280 2284] ) } spids: [2279] ) ] spids: [2279] ) terminator: <Op_Semi ';'> ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(DQ (${ VSub_Name rpath))} {(Lit_Other '=')} {(DQ (' - '))} {(Lit_Other ']')} ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:rpath) op: Equal rhs: {(DQ )} spids: [2305] ) ] spids: [2305] ) ] ) (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:needed) op: Equal rhs: { (BracedVarSub token: <VSub_Name l> suffix_op: (StringUnary op_id: VOp1_DPercent arg_word: {(';*')} ) spids: [2311 2315] ) } spids: [2310] ) ] spids: [2310] ) terminator: <Op_Semi ';'> ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:l) op: Equal rhs: { (BracedVarSub token: <VSub_Name l> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {('*;')} ) spids: [2319 2323] ) } spids: [2318] ) ] spids: [2318] ) (SimpleCommand words: [ {(echo)} {(DQ (${ VSub_Name obj) (' ') (${ VSub_Name needed))} ] redirects: [ (Redir op: <Redir_DGreat '>>'> fd: 16777215 arg_word: {(DQ (${ VSub_Name PORTAGE_BUILDDIR)) (/build-info/NEEDED) } ) ] ) (SimpleCommand words: [ {(echo)} { (DQ (BracedVarSub token: <VSub_Name arch> suffix_op: (Slice begin:(ArithWord w:{(Lit_Digits 3)})) spids: [2351 2355] ) (';') (${ VSub_Name obj) (';') (${ VSub_Name soname) (';') (${ VSub_Name rpath) (';') (${ VSub_Name needed) ) } ] redirects: [ (Redir op: <Redir_DGreat '>>'> fd: 16777215 arg_word: {(DQ (${ VSub_Name PORTAGE_BUILDDIR)) (/build-info/NEEDED.ELF.2) } ) ] ) ] spids: [2217 2384] ) ) ] spids: [2204] ) ] negated: F ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ (${ VSub_Name QA_SONAME_NO_SYMLINK))} {(Lit_Other ']')} ) (SimpleCommand words: [{(echo)} {(DQ (${ VSub_Name QA_SONAME_NO_SYMLINK))}] redirects: [ (Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(DQ (${ VSub_Name PORTAGE_BUILDDIR)) (/build-info/QA_SONAME_NO_SYMLINK) } ) ] ) ] ) (If arms: [ (if_arm cond: [ (Sentence child: (AndOr ops: [Op_DAmp] children: [ (C {(has)} {(binchecks)} {(${ VSub_Name RESTRICT)}) (C {(Lit_Other '[')} {(-s)} { (DQ (${ VSub_Name PORTAGE_BUILDDIR) (/build-info/NEEDED.ELF.2)) } {(Lit_Other ']')} ) ] ) terminator: <Op_Semi ';'> ) ] action: [ (C {(eqawarn)} { (DQ ( 'QA Notice: RESTRICT=binchecks prevented checks on these ELF files:' ) ) } ) (C {(eqawarn)} { (DQ (CommandSubPart command_list: (CommandList children: [ (WhileUntil keyword: <KW_While while> cond: [ (Sentence child: (C {(read)} {(-r)} {(x)}) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:x) op: Equal rhs: { (BracedVarSub token: <VSub_Name x> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {('*;')} ) spids: [2482 2486] ) } spids: [2481] ) ] spids: [2481] ) terminator: <Op_Semi ';'> ) (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:x) op: Equal rhs: { (BracedVarSub token: <VSub_Name x> suffix_op: (StringUnary op_id: VOp1_DPercent arg_word: {(';*')} ) spids: [2491 2495] ) } spids: [2490] ) ] spids: [2490] ) terminator: <Op_Semi ';'> ) (Sentence child: (C {(echo)} { (DQ (BracedVarSub token: <VSub_Name x> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {(${ VSub_Name EPREFIX)} ) spids: [2502 2508] ) ) } ) terminator: <Op_Semi ';'> ) ] spids: [2479 2513] ) redirects: [ (Redir op: <Redir_Less '<'> fd: 16777215 arg_word: {(DQ (${ VSub_Name PORTAGE_BUILDDIR)) (/build-info/NEEDED.ELF.2) } ) ] ) ] ) left_token: <Left_CommandSub '$('> spids: [2469 2523] ) ) } ) ] spids: [16777215 2456] ) ] spids: [16777215 2527] ) ] spids: [16777215 2167] ) ] spids: [16777215 2530] ) (AndOr ops: [Op_DPipe] children: [ (C {(rm)} {(-f)} (BracedWordTree parts: [ (DQ (${ VSub_Name ED)) (/usr/share/info/dir) (BracedAltPart words:[{} {(.gz)} {(.bz2)}]) ] ) ) (C {(die)} {(DQ ('rm failed!'))}) ] ) ] spids: [1696] ) spids: [1692 1695] ) (FuncDef name: postinst_qa_check body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs:(LhsName name:d) op:Equal spids:[2575]) (assign_pair lhs:(LhsName name:f) op:Equal spids:[2577]) (assign_pair lhs:(LhsName name:paths) op:Equal spids:[2579]) (assign_pair lhs: (LhsName name:qa_checks) op: Equal rhs: {(ArrayLiteralPart)} spids: [2581] ) ] spids: [2573] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children:[(C {(___eapi_has_prefix_variables)})] negated:T) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:EPREFIX) op: Equal rhs: {(EmptyPart)} spids: [2598] ) (assign_pair lhs: (LhsName name:EROOT) op: Equal rhs: {(${ VSub_Name ROOT)} spids: [2600] ) ] spids: [2596] ) ] spids: [16777215 2593] ) ] spids: [16777215 2606] ) (AndOr ops: [Op_DPipe] children: [(C {(cd)} {(DQ (${ VSub_Name EROOT))}) (C {(die)} {(DQ ('cd failed'))})] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:paths) op: Equal rhs: { (ArrayLiteralPart words: [ {(DQ (${ VSub_Name PORTAGE_OVERRIDE_EPREFIX)) (/usr/local/lib/postinst-qa-check.d) } {(DQ (${ VSub_Name PORTAGE_OVERRIDE_EPREFIX)) (/usr/lib/postinst-qa-check.d) } ] ) } spids: [2632] ) ] spids: [2632] ) (ForEach iter_name: d iter_words: [ { (DQ (BracedVarSub token: <VSub_Name PORTAGE_ECLASS_LOCATIONS> bracket_op: (WholeArray op_id:Lit_At) spids: [2679 2684] ) ) } ] do_arg_iter: F body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:paths) op: PlusEqual rhs: { (ArrayLiteralPart words: [{(DQ (${ VSub_Name d)) (/metadata/postinst-qa-check.d)}] ) } spids: [2691] ) ] spids: [2691] ) ] spids: [2688 2706] ) spids: [2677 2686] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:paths) op: PlusEqual rhs: { (ArrayLiteralPart words: [ {(DQ (${ VSub_Name PORTAGE_OVERRIDE_EPREFIX)) (/usr/lib/portage/postinst-qa-check.d) } {(DQ (${ VSub_Name PORTAGE_BIN_PATH)) (/postinst-qa-check.d)} ] ) } spids: [2710] ) ] spids: [2710] ) (ForEach iter_name: d iter_words: [ { (DQ (BracedVarSub token: <VSub_Name paths> bracket_op: (WholeArray op_id:Lit_At) spids: [2753 2758] ) ) } ] do_arg_iter: F body: (DoGroup children: [ (ForEach iter_name: f iter_words: [{(DQ (${ VSub_Name d)) (/) (Lit_Other '*')}] do_arg_iter: F body: (DoGroup children: [ (AndOr ops: [Op_DAmp] children: [ (DBracket expr: (BoolUnary op_id:BoolUnary_f child:{(${ VSub_Name f)}) ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:qa_checks) op: PlusEqual rhs: { (ArrayLiteralPart words: [ { (DQ (BracedVarSub token: <VSub_Name f> suffix_op: (StringUnary op_id: VOp1_DPound arg_word: {('*') (Lit_Slash /)} ) spids: [2799 2804] ) ) } ] ) } spids: [2795] ) ] spids: [2795] ) ] ) ] spids: [2780 2810] ) spids: [2770 2778] ) ] spids: [2762 2813] ) spids: [2751 2760] ) (WhileUntil keyword: <KW_While while> cond: [ (Sentence child: (C {(read)} {(-r)} {(-d)} {(SQ )} {(f)}) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (ForEach iter_name: d iter_words: [ { (DQ (BracedVarSub token: <VSub_Name paths> bracket_op: (WholeArray op_id:Lit_At) spids: [2853 2858] ) ) } ] do_arg_iter: F body: (DoGroup children: [ (AndOr ops: [Op_DAmp] children: [ (DBracket expr: (BoolUnary op_id: BoolUnary_f child: {(${ VSub_Name d) (/) (${ VSub_Name f)} ) ) (ControlFlow token: <ControlFlow_Break break> ) ] ) ] spids: [2862 2884] ) spids: [2851 2860] ) (Subshell child: (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:_IN_INSTALL_QA_CHECK) op: Equal rhs: {(1)} spids: [2907] ) ] spids: [2907] ) (AndOr ops: [Op_DPipe] children: [ (C {(source)} {(DQ (${ VSub_Name d) (/) (${ VSub_Name f))}) (C {(eerror)} { (DQ ('Post-postinst QA check ') (${ VSub_Name f) (' failed to run')) } ) ] ) ] ) spids: [2896 2936] ) ] spids: [2839 2939] ) redirects: [ (Redir op: <Redir_Less '<'> fd: 16777215 arg_word: { (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(printf)} {(DQ ('%s') (Lit_Other '\\') (0))} { (DQ (BracedVarSub token: <VSub_Name qa_checks> bracket_op: (WholeArray op_id:Lit_At) spids: [2953 2958] ) ) } ) (SimpleCommand words: [{(sort)} {(-u)} {(-z)}] more_env: [(env_pair name:LC_ALL val:{(C)} spids:[2963])] ) ] negated: F ) ] ) left_token: <Left_ProcSubIn '<('> spids: [2943 2971] ) } ) ] ) ] spids: [2570] ) spids: [2566 2569] ) (FuncDef name: install_mask body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:root) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [2985] ) ] spids: [2983] ) (C {(shift)}) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:install_mask) op: Equal rhs: {(DQ ($ VSub_Star '$*'))} spids: [2996] ) ] spids: [2994] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:shopts) op: Equal rhs: {($ VSub_Hyphen '$-')} spids: [3017] ) ] spids: [3015] ) (C {(set)} {(-o)} {(noglob)}) (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:no_inst) op:Equal spids:[3030])] spids: [3028] ) (ForEach iter_name: no_inst iter_words: [{(${ VSub_Name install_mask)}] do_arg_iter: F body: (DoGroup children: [ (C {(set)} {(Lit_Other '+') (o)} {(noglob)}) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (LogicalOr left: (BoolUnary op_id: BoolUnary_e child: {(DQ (${ VSub_Name root)) (/) (${ VSub_Name no_inst)} ) right: (LogicalOr left: (BoolUnary op_id: BoolUnary_L child: {(DQ (${ VSub_Name root)) (/) (${ VSub_Name no_inst)} ) right: (BoolBinary op_id: BoolBinary_GlobNEqual left: {(DQ (${ VSub_Name root)) (/) (${ VSub_Name no_inst)} right: { (CommandSubPart command_list: (CommandList children: [ (C {(echo)} {(DQ (${ VSub_Name root)) (/) (${ VSub_Name no_inst) } ) ] ) left_token: <Left_CommandSub '$('> spids: [3121 3133] ) } ) ) ) ) terminator: <Op_Semi ';'> ) ] action: [ (AndOr ops: [Op_DPipe] children: [ (C {(__quiet_mode)}) (C {(einfo)} {(DQ ('Removing ') (${ VSub_Name no_inst))}) ] ) (SimpleCommand words: [ {(rm)} {(-Rf)} {(DQ (${ VSub_Name root)) (/) (${ VSub_Name no_inst)} ] redirects: [ (Redir op: <Redir_GreatAnd '>&'> fd: 16777215 arg_word: {(/dev/null)} ) ] ) ] spids: [16777215 3139] ) ] spids: [16777215 3174] ) (Pipeline children: [ (SimpleCommand words: [ {(find)} {(DQ (${ VSub_Name root))} {(EscapedLiteralPart token:<Lit_EscapedChar '\\('>)} {(-path)} {(DQ (${ VSub_Name no_inst))} {(-or)} {(-name)} {(DQ (${ VSub_Name no_inst))} {(EscapedLiteralPart token:<Lit_EscapedChar '\\)'>)} {(-print0)} ] redirects: [(Redir op:<Redir_Great '2>'> fd:2 arg_word:{(/dev/null)})] ) (SimpleCommand words: [{(sort)} {(-z)}] more_env: [(env_pair name:LC_ALL val:{(C)} spids:[3240])] ) (WhileUntil keyword: <KW_While while> cond: [ (Sentence child: (C {(read)} {(-r)} {(-d)} {(SQ )}) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (AndOr ops: [Op_DPipe] children: [ (C {(__quiet_mode)}) (C {(einfo)} { (DQ ('Removing /') (BracedVarSub token: <VSub_Name REPLY> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {(${ VSub_Name root)} ) spids: [3274 3280] ) ) } ) ] ) (SimpleCommand words: [{(rm)} {(-Rf)} {(DQ (${ VSub_Name REPLY))}] redirects: [ (Redir op: <Redir_GreatAnd '>&'> fd: 16777215 arg_word: {(/dev/null)} ) ] ) ] spids: [3263 3298] ) ) ] negated: F ) ] spids: [3044 3302] ) spids: [3038 3042] ) (C {(set)} {(Lit_Other '+') (o)} {(noglob)}) (C {(set)} {(-) (${ VSub_Name shopts)}) ] spids: [2980] ) spids: [2976 2979] ) (FuncDef name: preinst_mask body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ (${ VSub_Name D))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(eerror)} {(DQ (${ VSub_Name FUNCNAME) (': D is unset'))}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [16777215 3349] ) ] spids: [16777215 3367] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children:[(C {(___eapi_has_prefix_variables)})] negated:T) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:ED) op: Equal rhs: {(${ VSub_Name D)} spids: [3383] ) ] spids: [3381] ) ] spids: [16777215 3378] ) ] spids: [16777215 3389] ) (C {(cd)} {(DQ (${ VSub_Name T))}) (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:f) op:Equal spids:[3417])] spids: [3415] ) (ForEach iter_name: f iter_words: [{(man)} {(info)} {(doc)}] do_arg_iter: F body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(has)} {(no) (${ VSub_Name f)} {($ VSub_Name '$FEATURES')}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:INSTALL_MASK) op: Equal rhs: { (DQ (${ VSub_Name INSTALL_MASK) (' /usr/share/') (${ VSub_Name f)) } spids: [3451] ) ] spids: [3451] ) ] spids: [16777215 3448] ) ] spids: [16777215 3463] ) ] spids: [3433 3466] ) spids: [3425 3431] ) (C {(install_mask)} {(DQ (${ VSub_Name ED))} {(DQ (${ VSub_Name INSTALL_MASK))}) (If arms: [ (if_arm cond: [ (Sentence child: (AndOr ops: [Op_DPipe Op_DPipe] children: [ (C {(has)} {(nodoc)} {($ VSub_Name '$FEATURES')}) (C {(has)} {(noman)} {($ VSub_Name '$FEATURES')}) (C {(has)} {(noinfo)} {($ VSub_Name '$FEATURES')}) ] ) terminator: <Op_Semi ';'> ) ] action: [ (SimpleCommand words: [{(rmdir)} {(DQ (${ VSub_Name ED) (usr/share))}] redirects: [(Redir op:<Redir_AndGreat '&>'> fd:16777215 arg_word:{(/dev/null)})] ) ] spids: [16777215 3515] ) ] spids: [16777215 3532] ) ] spids: [3331] ) spids: [3327 3330] ) (FuncDef name: preinst_sfperms body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ (${ VSub_Name D))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(eerror)} {(DQ (${ VSub_Name FUNCNAME) (': D is unset'))}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [16777215 3559] ) ] spids: [16777215 3577] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children:[(C {(___eapi_has_prefix_variables)})] negated:T) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:ED) op: Equal rhs: {(${ VSub_Name D)} spids: [3593] ) ] spids: [3591] ) ] spids: [16777215 3588] ) ] spids: [16777215 3599] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(has)} {(sfperms)} {($ VSub_Name '$FEATURES')}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:i) op:Equal spids:[3621])] spids: [3619] ) (Pipeline children: [ (C {(find)} {(DQ (${ VSub_Name ED))} {(-type)} {(f)} {(-perm)} {(-4000)} {(-print0)}) (WhileUntil keyword: <KW_While while> cond: [ (Sentence child: (C {(read)} {(-r)} {(-d)} { (SingleQuotedPart left: <Left_DollarSingleQuote "$'"> tokens: [<Char_OneChar '\\0'>] spids: [3654 3656] ) } {(i)} ) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(find)} {(DQ ($ VSub_Name '$i'))} {(-perm)} {(-2000)} ) ] ) left_token: <Left_CommandSub '$('> spids: [3672 3682] ) ) } {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(ebegin)} { (DQ ('>>> SetUID and SetGID: [chmod o-r] /') (BracedVarSub token: <VSub_Name i> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {(${ VSub_Name ED)} ) spids: [3696 3702] ) ) } ) (C {(chmod)} {(o-r)} {(DQ ($ VSub_Name '$i'))}) (C {(eend)} {($ VSub_QMark '$?')}) ] spids: [16777215 3689] ) ] else_action: [ (C {(ebegin)} { (DQ ('>>> SetUID: [chmod go-r] /') (BracedVarSub token: <VSub_Name i> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {(${ VSub_Name ED)} ) spids: [3727 3733] ) ) } ) (C {(chmod)} {(go-r)} {(DQ ($ VSub_Name '$i'))}) (C {(eend)} {($ VSub_QMark '$?')}) ] spids: [3720 3751] ) ] spids: [3662 3754] ) ) ] negated: F ) (Pipeline children: [ (C {(find)} {(DQ (${ VSub_Name ED))} {(-type)} {(f)} {(-perm)} {(-2000)} {(-print0)}) (WhileUntil keyword: <KW_While while> cond: [ (Sentence child: (C {(read)} {(-r)} {(-d)} { (SingleQuotedPart left: <Left_DollarSingleQuote "$'"> tokens: [<Char_OneChar '\\0'>] spids: [3787 3789] ) } {(i)} ) terminator: <Op_Semi ';'> ) ] body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(find)} {(DQ ($ VSub_Name '$i'))} {(-perm)} {(-4000)} ) ] ) left_token: <Left_CommandSub '$('> spids: [3805 3815] ) ) } {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [(C {(true)})] spids: [16777215 3822] ) ] else_action: [ (C {(ebegin)} { (DQ ('>>> SetGID: [chmod o-r] /') (BracedVarSub token: <VSub_Name i> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {(${ VSub_Name ED)} ) spids: [3843 3849] ) ) } ) (C {(chmod)} {(o-r)} {(DQ ($ VSub_Name '$i'))}) (C {(eend)} {($ VSub_QMark '$?')}) ] spids: [3836 3867] ) ] spids: [3795 3870] ) ) ] negated: F ) ] spids: [16777215 3616] ) ] spids: [16777215 3873] ) ] spids: [3541] ) spids: [3537 3540] ) (FuncDef name: preinst_suid_scan body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ (${ VSub_Name D))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(eerror)} {(DQ (${ VSub_Name FUNCNAME) (': D is unset'))}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [16777215 3900] ) ] spids: [16777215 3918] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children:[(C {(___eapi_has_prefix_variables)})] negated:T) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:ED) op: Equal rhs: {(${ VSub_Name D)} spids: [3934] ) ] spids: [3932] ) ] spids: [16777215 3929] ) ] spids: [16777215 3940] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(has)} {(suidctl)} {($ VSub_Name '$FEATURES')}) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:i) op: Equal spids: [3962] ) (assign_pair lhs: (LhsName name:sfconf) op: Equal spids: [3964] ) (assign_pair lhs: (LhsName name:x) op: Equal spids: [3966] ) ] spids: [3960] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:sfconf) op: Equal rhs: {(${ VSub_Name PORTAGE_CONFIGROOT) (etc/portage/suidctl.conf)} spids: [3969] ) ] spids: [3969] ) (C {(addwrite)} {(DQ (${ VSub_Name sfconf))}) (C {(__vecho)} {(DQ ('>>> Performing suid scan in ') (${ VSub_Name ED))}) (ForEach iter_name: i iter_words: [ { (CommandSubPart command_list: (CommandList children: [ (C {(find)} {(DQ (${ VSub_Name ED))} {(-type)} {(f)} {(EscapedLiteralPart token:<Lit_EscapedChar '\\('>)} {(-perm)} {(-4000)} {(-o)} {(-perm)} {(-2000)} {(EscapedLiteralPart token:<Lit_EscapedChar '\\)'>)} ) ] ) left_token: <Left_CommandSub '$('> spids: [4013 4040] ) } ] do_arg_iter: F body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-s)} {(DQ (${ VSub_Name sfconf))} {(Lit_Other ']')} ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:install_path) op: Equal rhs: {(/) (BracedVarSub token: <VSub_Name i> suffix_op: (StringUnary op_id: VOp1_Pound arg_word: {(${ VSub_Name ED)} ) spids: [4066 4072] ) } spids: [4064] ) ] spids: [4064] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(grep)} {(-q)} { (DQ ('^') (${ VSub_Name install_path) (EscapedLiteralPart token: <Lit_EscapedChar '\\$'> ) ) } {(DQ (${ VSub_Name sfconf))} ) terminator: <Op_Semi ';'> ) ] action: [ (C {(__vecho)} { (DQ ('- ') (${ VSub_Name install_path) (' is an approved suid file') ) } ) ] spids: [16777215 4097] ) ] else_action: [ (C {(__vecho)} { (DQ ('>>> Removing sbit on non registered ') (${ VSub_Name install_path) ) } ) (SimpleCommand words: [{(sleep)} {(1.5)}] more_env: [(env_pair name:LC_ALL val:{(C)} spids:[4124])] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ls_ret) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(ls)} {(-ldh)} {(DQ (${ VSub_Name i))}) ] ) left_token: <Left_CommandSub '$('> spids: [4133 4143] ) } spids: [4132] ) ] spids: [4132] ) (C {(chmod)} {(ugo-s)} {(DQ (${ VSub_Name i))}) (AndOr ops: [Op_DPipe] children: [ (SimpleCommand words: [ {(grep)} { (DQ ('^#') (${ VSub_Name install_path) (Lit_Other '$') ) } {(DQ (${ VSub_Name sfconf))} ] redirects: [ (Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(/dev/null)} ) ] ) (BraceGroup children: [ (C {(__vecho)} { (DQ ('>>> Appending commented out entry to ') (${ VSub_Name sfconf) (' for ') (${ VSub_Name PF) ) } ) (SimpleCommand words: [ {(echo)} { (DQ ('## ') (BracedVarSub token: <VSub_Name ls_ret> suffix_op: (StringUnary op_id: VOp1_Percent arg_word: {(${ VSub_Name ED) ('*')} ) spids: [4200 4207] ) (${ VSub_Name install_path) ) } ] redirects: [ (Redir op: <Redir_DGreat '>>'> fd: 16777215 arg_word: {(DQ (${ VSub_Name sfconf))} ) ] ) (SimpleCommand words: [ {(echo)} {(DQ ('#') (${ VSub_Name install_path))} ] redirects: [ (Redir op: <Redir_DGreat '>>'> fd: 16777215 arg_word: {(DQ (${ VSub_Name sfconf))} ) ] ) ] spids: [4179] ) ] ) ] spids: [4111 4251] ) ] spids: [16777215 4061] ) ] else_action: [ (C {(__vecho)} { (DQ ('suidctl feature set but you are lacking a ') (${ VSub_Name sfconf) ) } ) ] spids: [4254 4267] ) ] spids: [4043 4270] ) spids: [4012 4041] ) ] spids: [16777215 3957] ) ] spids: [16777215 4273] ) ] spids: [3882] ) spids: [3878 3881] ) (FuncDef name: preinst_selinux_labels body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-z)} {(DQ (${ VSub_Name D))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(eerror)} {(DQ (${ VSub_Name FUNCNAME) (': D is unset'))}) (ControlFlow token:<ControlFlow_Return return> arg_word:{(1)}) ] spids: [16777215 4300] ) ] spids: [16777215 4318] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(has)} {(selinux)} {(${ VSub_Name FEATURES)}) terminator: <Op_Semi ';'> ) ] action: [ (If arms: [ (if_arm cond: [ (Sentence child: (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-f)} {(/selinux/context)} {(-o)} {(-f)} {(/sys/fs/selinux/context)} {(Lit_Other ']')} ) (C {(Lit_Other '[')} {(-x)} {(/usr/sbin/setfiles)} {(-a)} {(-x)} {(/usr/sbin/selinuxconfig)} {(Lit_Other ']')} ) ] ) terminator: <Op_Semi ';'> ) ] action: [ (C {(__vecho)} {(DQ ('>>> Setting SELinux security labels'))}) (AndOr ops: [Op_DPipe] children: [ (Subshell child: (CommandList children: [ (Sentence child: (AndOr ops: [Op_DPipe] children: [ (C {(eval)} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(/usr/sbin/selinuxconfig)})] ) left_token: <Left_CommandSub '$('> spids: [4398 4400] ) ) } ) (C {(die)} { (DQ ('Failed to determine SELinux policy paths.')) } ) ] ) terminator: <Op_Semi ';'> ) (C {(addwrite)} {(/selinux/context)}) (C {(addwrite)} {(/sys/fs/selinux/context)}) (C {(/usr/sbin/setfiles)} {(-F)} {(DQ (${ VSub_Name file_contexts_path))} {(-r)} {(DQ (${ VSub_Name D))} {(DQ (${ VSub_Name D))} ) ] ) spids: [4392 4452] ) (C {(die)} {(DQ ('Failed to set SELinux security labels.'))}) ] ) ] spids: [16777215 4382] ) ] else_action: [(C {(__vecho)} {(DQ ('!!! Unable to set SELinux security labels'))})] spids: [4463 4481] ) ] spids: [16777215 4332] ) ] spids: [16777215 4484] ) ] spids: [4282] ) spids: [4278 4281] ) (FuncDef name: __dyn_package body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:PROOT) op:Equal spids:[4498])] spids: [4496] ) (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children:[(C {(___eapi_has_prefix_variables)})] negated:T) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:EPREFIX) op: Equal rhs: {(EmptyPart)} spids: [4514] ) (assign_pair lhs: (LhsName name:ED) op: Equal rhs: {(${ VSub_Name D)} spids: [4516] ) ] spids: [4512] ) ] spids: [16777215 4509] ) ] spids: [16777215 4522] ) (AndOr ops: [Op_DPipe] children: [(C {(cd)} {(DQ (${ VSub_Name T))}) (C {(die)})] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id:BoolUnary_n child:{(${ VSub_Name PKG_INSTALL_MASK)}) ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:PROOT) op: Equal rhs: {(${ VSub_Name T) (/packaging/)} spids: [4566] ) ] spids: [4566] ) (AndOr ops: [Op_DPipe] children: [ (C {(rm)} {(-rf)} {(DQ (${ VSub_Name PROOT))}) (C {(die)} {(DQ ('failed removing stale package tree'))}) ] ) (AndOr ops: [Op_DPipe] children: [ (C {(cp)} {(-pPR)} { (CommandSubPart command_list: (CommandList children: [ (AndOr ops: [Op_DAmp] children: [ (Pipeline children: [(C {(cp)} {(--help)}) (C {(grep)} {(-qs)} {(-e-l)})] negated: F ) (C {(echo)} {(-l)}) ] ) ] ) left_token: <Left_CommandSub '$('> spids: [4604 4622] ) } {(DQ (${ VSub_Name D))} {(DQ (${ VSub_Name PROOT))} ) (C {(die)} {(DQ ('failed creating packaging tree'))}) ] ) (C {(install_mask)} { (DQ (BracedVarSub token: <VSub_Name PROOT> suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /)}) spids: [4653 4657] ) (${ VSub_Name EPREFIX) (/) ) } {(DQ (${ VSub_Name PKG_INSTALL_MASK))} ) ] spids: [16777215 4563] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:PROOT) op: Equal rhs: {(${ VSub_Name D)} spids: [4674] ) ] spids: [4674] ) ] spids: [4671 4680] ) (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:tar_options) op:Equal rhs:{(DQ )} spids:[4686])] spids: [4684] ) (AndOr ops: [Op_DAmp] children: [ (DBracket expr: (BoolBinary op_id: BoolBinary_GlobEqual left: {($ VSub_Name '$PORTAGE_VERBOSE')} right: {(1)} ) ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tar_options) op: PlusEqual rhs: {(DQ (' -v'))} spids: [4703] ) ] spids: [4703] ) ] ) (AndOr ops: [Op_DAmp Op_DAmp] children: [ (C {(has)} {(xattr)} {(${ VSub_Name FEATURES)}) (DBracket expr: (BoolBinary op_id: BoolBinary_GlobDEqual left: { (CommandSubPart command_list: (CommandList children: [ (SimpleCommand words: [{(tar)} {(--help)}] redirects: [ (Redir op: <Redir_Great '2>'> fd: 2 arg_word: {(/dev/null)} ) ] ) ] ) left_token: <Left_CommandSub '$('> spids: [4721 4729] ) } right: {(Lit_Other '*') (--xattrs) (Lit_Other '*')} ) ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tar_options) op: PlusEqual rhs: {(DQ (' --xattrs'))} spids: [4741] ) ] spids: [4741] ) ] ) (C {(export)} {(Lit_VarLike 'SANDBOX_ON=') (DQ (0))}) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-z)} {(DQ (${ VSub_Name PORTAGE_BINPKG_TMPFILE))} {(Lit_Other ']')} ) (C {(die)} {(DQ ('PORTAGE_BINPKG_TMPFILE is unset'))}) ] ) (AndOr ops: [Op_DPipe] children: [ (C {(mkdir)} {(-p)} { (DQ (BracedVarSub token: <VSub_Name PORTAGE_BINPKG_TMPFILE> suffix_op: (StringUnary op_id:VOp1_Percent arg_word:{(Lit_Slash /) ('*')}) spids: [4791 4796] ) ) } ) (C {(die)} {(DQ ('mkdir failed'))}) ] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-z)} {(DQ (${ VSub_Name PORTAGE_COMPRESSION_COMMAND))} {(Lit_Other ']')} ) (C {(die)} {(DQ ('PORTAGE_COMPRESSION_COMMAND is unset'))}) ] ) (Pipeline children: [ (C {(tar)} {($ VSub_Name '$tar_options')} {(-cf)} {(-)} {($ VSub_Name '$PORTAGE_BINPKG_TAR_OPTS')} {(-C)} {(DQ (${ VSub_Name PROOT))} {(.)} ) (SimpleCommand words: [{($ VSub_Name '$PORTAGE_COMPRESSION_COMMAND')} {(-c)}] redirects: [ (Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(DQ ($ VSub_Name '$PORTAGE_BINPKG_TMPFILE'))} ) ] ) ] negated: F ) (C {(assert)} { (DQ ("failed to pack binary package: '") ($ VSub_Name '$PORTAGE_BINPKG_TMPFILE') ("'")) } ) (SimpleCommand words: [ { (DQ (BracedVarSub token: <VSub_Name PORTAGE_PYTHON> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: {(Lit_Slash /) (usr) (Lit_Slash /) (bin) (Lit_Slash /) (python)} ) spids: [4887 4896] ) ) } {(DQ ($ VSub_Name '$PORTAGE_BIN_PATH')) (/xpak-helper.py)} {(recompose)} {(DQ ($ VSub_Name '$PORTAGE_BINPKG_TMPFILE'))} {(DQ ($ VSub_Name '$PORTAGE_BUILDDIR') (/build-info))} ] more_env: [ (env_pair name: PYTHONPATH val: { (BracedVarSub token: <VSub_Name PORTAGE_PYTHONPATH> suffix_op: (StringUnary op_id: VTest_ColonHyphen arg_word: {(${ VSub_Name PORTAGE_PYM_PATH)} ) spids: [4876 4882] ) } spids: [4875] ) ] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {($ VSub_QMark '$?')} {(-ne)} {(0)} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(rm)} {(-f)} {(DQ (${ VSub_Name PORTAGE_BINPKG_TMPFILE))}) (C {(die)} {(DQ ('Failed to append metadata to the tbz2 file'))}) ] spids: [16777215 4931] ) ] spids: [16777215 4952] ) (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:md5_hash) op:Equal rhs:{(DQ )} spids:[4957])] spids: [4955] ) (If arms: [ (if_arm cond: [ (Sentence child: (SimpleCommand words: [{(type)} {(md5sum)}] redirects: [ (Redir op: <Redir_AndGreat '&>'> fd: 16777215 arg_word: {(/dev/null)} ) ] ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:md5_hash) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [ (C {(md5sum)} {(DQ (${ VSub_Name PORTAGE_BINPKG_TMPFILE))}) ] ) left_token: <Left_CommandSub '$('> spids: [4977 4985] ) } spids: [4976] ) ] spids: [4976] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:md5_hash) op: Equal rhs: { (BracedVarSub token: <VSub_Name md5_hash> suffix_op: (StringUnary op_id:VOp1_DPercent arg_word:{(' *')}) spids: [4989 4993] ) } spids: [4988] ) ] spids: [4988] ) ] spids: [16777215 4973] ) (if_arm cond: [ (Sentence child: (SimpleCommand words: [{(type)} {(md5)}] redirects: [ (Redir op: <Redir_AndGreat '&>'> fd: 16777215 arg_word: {(/dev/null)} ) ] ) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:md5_hash) op: Equal rhs: { (CommandSubPart command_list: (CommandList children: [(C {(md5)} {(DQ (${ VSub_Name PORTAGE_BINPKG_TMPFILE))})] ) left_token: <Left_CommandSub '$('> spids: [5011 5019] ) } spids: [5010] ) ] spids: [5010] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:md5_hash) op: Equal rhs: { (BracedVarSub token: <VSub_Name md5_hash> suffix_op: (StringUnary op_id:VOp1_DPound arg_word:{('* ')}) spids: [5023 5027] ) } spids: [5022] ) ] spids: [5022] ) ] spids: [4996 5007] ) ] spids: [16777215 5030] ) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(-n)} {(DQ (${ VSub_Name md5_hash))} {(Lit_Other ']')}) (SimpleCommand words: [{(echo)} {(${ VSub_Name md5_hash)}] redirects: [ (Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(DQ (${ VSub_Name PORTAGE_BUILDDIR)) (/build-info/BINPKGMD5)} ) ] ) ] ) (C {(__vecho)} {(DQ ('>>> Done.'))}) (AndOr ops: [Op_DAmp] children: [ (DBracket expr: (BoolUnary op_id:BoolUnary_n child:{(${ VSub_Name PKG_INSTALL_MASK)}) ) (C {(rm)} {(-rf)} {(DQ (${ VSub_Name PROOT))}) ] ) (C {(cd)} {(DQ (${ VSub_Name PORTAGE_BUILDDIR))}) (AndOr ops: [Op_DPipe] children: [ (SimpleCommand redirects: [ (Redir op: <Redir_DGreat '>>'> fd: 16777215 arg_word: {(DQ ($ VSub_Name '$PORTAGE_BUILDDIR') (/.packaged))} ) ] ) (C {(die)} {(DQ ('Failed to create ') ($ VSub_Name '$PORTAGE_BUILDDIR') (/.packaged))}) ] ) ] spids: [4493] ) spids: [4489 4492] ) (FuncDef name: __dyn_spec body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:sources_dir) op: Equal rhs: {(${ VSub_Name T) (/rpmbuild/SOURCES)} spids: [5140] ) ] spids: [5138] ) (C {(mkdir)} {(-p)} {(DQ (${ VSub_Name sources_dir))}) (Assignment keyword: Assign_Declare flags: [-a] pairs: [ (assign_pair lhs: (LhsName name:tar_args) op: Equal rhs: {(ArrayLiteralPart words:[{(DQ (${ VSub_Name EBUILD))}])} spids: [5162] ) ] spids: [5158] ) (AndOr ops: [Op_DAmp] children: [ (DBracket expr: (BoolUnary op_id:BoolUnary_d child:{(${ VSub_Name FILESDIR)}) ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:tar_args) op: Equal rhs: { (ArrayLiteralPart words: [{(DQ (${ VSub_Name EBUILD))} {(DQ (${ VSub_Name FILESDIR))}] ) } spids: [5184] ) ] spids: [5184] ) ] ) (AndOr ops: [Op_DPipe] children: [ (C {(tar)} {(czf)} {(DQ (${ VSub_Name sources_dir) (/) (${ VSub_Name PF) (.tar.gz))} { (DQ (BracedVarSub token: <VSub_Name tar_args> bracket_op: (WholeArray op_id:Lit_At) spids: [5218 5223] ) ) } ) (C {(die)} {(DQ ('Failed to create base rpm tarball.'))}) ] ) (SimpleCommand words: [{(cat)}] redirects: [ (HereDoc op: <Redir_DLess '<<'> fd: 16777215 here_begin: {(__END1__)} here_end_span_id: 5304 stdin_parts: [ ('Summary: ') (${ VSub_Name DESCRIPTION) ('\n') ('Name: ') (${ VSub_Name PN) ('\n') ('Version: ') (${ VSub_Name PV) ('\n') ('Release: ') (${ VSub_Name PR) ('\n') ('License: GPL\n') ('Group: portage/') (${ VSub_Name CATEGORY) ('\n') ('Source: ') (${ VSub_Name PF) ('.tar.gz\n') ('%description\n') (${ VSub_Name DESCRIPTION) ('\n') ('\n') (${ VSub_Name HOMEPAGE) ('\n') ('\n') ('%prep\n') ('%setup -c\n') ('\n') ('%build\n') ('\n') ('%install\n') ('\n') ('%clean\n') ('\n') ('%files\n') ('/\n') ] ) (Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(${ VSub_Name PF) (.spec)} ) ] ) ] spids: [5135] ) spids: [5131 5134] ) (FuncDef name: __dyn_rpm body: (BraceGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (Pipeline children:[(C {(___eapi_has_prefix_variables)})] negated:T) terminator: <Op_Semi ';'> ) ] action: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:EPREFIX) op: Equal rhs: {(EmptyPart)} spids: [5328] ) ] spids: [5326] ) ] spids: [16777215 5323] ) ] spids: [16777215 5331] ) (AndOr ops: [Op_DPipe] children: [(C {(cd)} {(DQ (${ VSub_Name T))}) (C {(die)} {(DQ ('cd failed'))})] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:machine_name) op: Equal rhs: { (BracedVarSub token: <VSub_Name CHOST> suffix_op: (StringUnary op_id:VOp1_DPercent arg_word:{('-*')}) spids: [5355 5359] ) } spids: [5354] ) ] spids: [5352] ) (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:dest_dir) op: Equal rhs: {(${ VSub_Name T) (/rpmbuild/RPMS/) (${ VSub_Name machine_name)} spids: [5364] ) ] spids: [5362] ) (C {(addwrite)} {(DQ (${ VSub_Name RPMDIR))}) (C {(__dyn_spec)}) (AndOr ops: [Op_DPipe] children: [ (SimpleCommand words: [ {(rpmbuild)} {(-bb)} {(--clean)} {(--nodeps)} {(--rmsource)} {(DQ (${ VSub_Name PF) (.spec))} {(--buildroot)} {(DQ (${ VSub_Name D))} {(--target)} {(DQ (${ VSub_Name CHOST))} ] more_env: [(env_pair name:HOME val:{(${ VSub_Name T)} spids:[5386])] ) (C {(die)} {(DQ ('Failed to integrate rpm spec file'))}) ] ) (AndOr ops: [Op_DPipe] children: [ (C {(install)} {(-D)} { (DQ (${ VSub_Name dest_dir) (/) (${ VSub_Name PN) (-) (${ VSub_Name PV) (-) (${ VSub_Name PR) (.) (${ VSub_Name machine_name) (.rpm) ) } { (DQ (${ VSub_Name RPMDIR) (/) (${ VSub_Name CATEGORY) (/) (${ VSub_Name PN) (-) (${ VSub_Name PV) (-) (${ VSub_Name PR) (.rpm) ) } ) (C {(die)} {(DQ ('Failed to move rpm'))}) ] ) ] spids: [5313] ) spids: [5309 5312] ) (FuncDef name: die_hooks body: (BraceGroup children: [ (AndOr ops: [Op_DAmp] children: [ (DBracket expr: (BoolUnary op_id: BoolUnary_f child: {($ VSub_Name '$PORTAGE_BUILDDIR') (/.die_hooks)} ) ) (ControlFlow token:<ControlFlow_Return return>) ] ) (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:x) op:Equal spids:[5523])] spids: [5521] ) (ForEach iter_name: x iter_words: [{($ VSub_Name '$EBUILD_DEATH_HOOKS')}] do_arg_iter: F body: (DoGroup children: [ (SimpleCommand words: [{($ VSub_Name '$x')}] redirects: [(Redir op:<Redir_GreatAnd '>&'> fd:16777215 arg_word:{(2)})] ) ] spids: [5536 5545] ) spids: [5531 5534] ) (SimpleCommand redirects: [ (Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(DQ ($ VSub_Name '$PORTAGE_BUILDDIR') (/.die_hooks))} ) ] ) ] spids: [5504] ) spids: [5500 5503] ) (FuncDef name: success_hooks body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:x) op:Equal spids:[5567])] spids: [5565] ) (ForEach iter_name: x iter_words: [{($ VSub_Name '$EBUILD_SUCCESS_HOOKS')}] do_arg_iter: F body: (DoGroup children:[(C {($ VSub_Name '$x')})] spids:[5580 5586]) spids: [5575 5578] ) ] spids: [5562] ) spids: [5558 5561] ) (FuncDef name: install_hooks body: (BraceGroup children: [ (Assignment keyword: Assign_Local pairs: [ (assign_pair lhs: (LhsName name:hooks_dir) op: Equal rhs: {(DQ (${ VSub_Name PORTAGE_CONFIGROOT) (etc/portage/hooks/install))} spids: [5600] ) ] spids: [5598] ) (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:fp) op:Equal spids:[5611])] spids: [5609] ) (Assignment keyword: Assign_Local pairs: [(assign_pair lhs:(LhsName name:ret) op:Equal rhs:{(0)} spids:[5616])] spids: [5614] ) (C {(shopt)} {(-s)} {(nullglob)}) (ForEach iter_name: fp iter_words: [{(DQ (${ VSub_Name hooks_dir)) (/) (Lit_Other '*')}] do_arg_iter: F body: (DoGroup children: [ (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-x)} {(DQ ($ VSub_Name '$fp'))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(DQ ($ VSub_Name '$fp'))}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ret) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Pipe left: (ArithWord w:{($ VSub_Name '$ret')}) right: (ArithWord w:{($ VSub_QMark '$?')}) ) spids: [5667 5676] ) } spids: [5666] ) ] spids: [5666] ) ] spids: [16777215 5658] ) ] spids: [16777215 5679] ) ] spids: [5642 5682] ) spids: [5632 5640] ) (C {(shopt)} {(-u)} {(nullglob)}) (ControlFlow token:<ControlFlow_Return return> arg_word:{($ VSub_Name '$ret')}) ] spids: [5595] ) spids: [5591 5594] ) (FuncDef name: eqatag body: (BraceGroup children:[(C {(__eqatag)} {(DQ (${ VSub_At '@'))})] spids:[5703]) spids: [5699 5702] ) (If arms: [ (if_arm cond: [ (Sentence child: (C {(Lit_Other '[')} {(-n)} {(DQ (${ VSub_Name MISC_FUNCTIONS_ARGS))} {(Lit_Other ']')}) terminator: <Op_Semi ';'> ) ] action: [ (C {(__source_all_bashrcs)}) (AndOr ops: [Op_DAmp] children: [ (C {(Lit_Other '[')} {(DQ ($ VSub_Name '$PORTAGE_DEBUG'))} {(Lit_Other '=') (Lit_Other '=')} {(DQ (1))} {(Lit_Other ']')} ) (C {(set)} {(-x)}) ] ) (ForEach iter_name: x iter_words: [{(${ VSub_Name MISC_FUNCTIONS_ARGS)}] do_arg_iter: F body: (DoGroup children:[(C {(${ VSub_Name x)})] spids:[5771 5779]) spids: [5765 5769] ) (C {(unset)} {(x)}) (AndOr ops: [Op_DAmp] children: [ (DBracket expr: (BoolUnary op_id:BoolUnary_n child:{($ VSub_Name '$PORTAGE_EBUILD_EXIT_FILE')}) ) (SimpleCommand redirects: [ (Redir op: <Redir_Great '>'> fd: 16777215 arg_word: {(DQ ($ VSub_Name '$PORTAGE_EBUILD_EXIT_FILE'))} ) ] ) ] ) (If arms: [ (if_arm cond: [ (Sentence child: (DBracket expr: (BoolUnary op_id: BoolUnary_n child: {($ VSub_Name '$PORTAGE_IPC_DAEMON')} ) ) terminator: <Op_Semi ';'> ) ] action: [ (DBracket expr: (LogicalNot child: (BoolUnary op_id:BoolUnary_s child:{($ VSub_Name '$SANDBOX_LOG')}) ) ) (C {(DQ ($ VSub_Name '$PORTAGE_BIN_PATH')) (/ebuild-ipc)} {(ControlFlow_Exit exit)} {($ VSub_QMark '$?')} ) ] spids: [16777215 5816] ) ] spids: [16777215 5840] ) ] spids: [16777215 5732] ) ] spids: [16777215 5842] ) (C {(Lit_Other ':')}) ] )