######################################################################## # # # This software is part of the ast package # # Copyright (c) 1989-2011 AT&T Intellectual Property # # and is licensed under the # # Eclipse Public License, Version 1.0 # # by AT&T Intellectual Property # # # # A copy of the License is available at # # http://www.eclipse.org/org/documents/epl-v10.html # # (with md5 checksum b35adb5213ca9657e911e9befb180842) # # # # Information and Software Systems Research # # AT&T Research # # Florham Park NJ # # # # Glenn Fowler # # # ######################################################################## : convert MAM dependency info to dag input global COMMAND := 'mamdag' matchstr $[shell {getopts '[-][123:xyz]' opt --xyz; echo 0$opt}] { 0123 { global ARGV0 := ""-a $COMMAND"" global USAGE := "$' [-? @(#)$Id: mamdag (AT&T Labs Research) 1998-04-01 $ ] '$USAGE_LICENSE$' [+NAME?mamdag - make abstract machine to dag dependency graph conversion filter] [+DESCRIPTION?\bmamdag\b reads MAM (Make Abstract Machine) target and prerequisite file descriptions from the standard input and writes a \bdag\b(1) description of the dependency graph on the standard output. Mamfiles are generated by the \b--mam\b option of \bnmake\b(1) and \bgmake\b(1).] [+?\bdag\b(1) is an obsolete predecessor to \bdot\b(1); new applications should use \bmamdot\b(1) and \bdot\b(1).] [+SEE ALSO?\bdag\b(1), \bdot\b(1), \bmamdot\b(1), \bgmake\b(1), \bnmake\b(1)] "' } * { global ARGV0 := ''"" global USAGE := ''"" } } proc usage { global OPTIND := '0' getopts $ARGV0 $USAGE OPT '-?' exit 2 } while getopts $ARGV0 "$USAGE" OPT { matchstr $OPT { * { usage } } } integer level=0 line=0 list[0]=all print .GR 7.50 10.0 print draw nodes as Box ';' while read op arg arg2 argx { global line := 'line+1' matchstr $op { [0-9]* { global op := $arg global arg := $arg2 global arg2 := $arg3 global arg3 := $argx global argx := '' } } matchstr $op { make { matchstr " $(list[level]) " { *" \"$arg\" "* { } * { list[level]="$(list[level]) \"$arg\"" } } global level := 'level+1' list[level]='"'$arg'"' } prev { matchstr " $(list[level]) " { *" \"$arg\" "* { } * { list[level]="$(list[level]) \"$arg\"" } } } done { matchstr $(list[level]) { *' '* { print $(list[level]) ';' } } if (( level <= 0 )) { print -u2 "$COMMAND: line $line: $op $arg: no matching make op" } else { global level := 'level-1' } } } } print .GE (CommandList children: [ (C {(Lit_Other ":")} {(convert)} {(MAM)} {(dependency)} {(info)} {(to)} {(dag)} {(input)}) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:COMMAND) op:Equal rhs:{(mamdag)} spids:[74])] spids: [74] ) (Case to_match: { (CommandSubPart command_list: (CommandList children: [ (Subshell child: (CommandList children: [ (Sentence child: (C {(getopts)} {(SQ <"[-][123:xyz]">)} {(opt)} {(--xyz)}) terminator: ) (C {(echo)} {(0) ($ VSub_Name "$opt")}) ] ) redirects: [(Redir op_id:Redir_Great fd:2 arg_word:{(/dev/null)} spids:[98])] spids: [80 96] ) ] ) left_token: spids: [79 100] ) } arms: [ (case_arm pat_list: [{(0123)}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:ARGV0) op: Equal rhs: {(DQ ("-a ") ($ VSub_Name "$COMMAND"))} spids: [107] ) ] spids: [107] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:USAGE) op: Equal rhs: { (SQ <"\n"> <"[-?\n"> <"@(#)$Id: mamdag (AT&T Labs Research) 1998-04-01 $\n"> <"]\n"> ) ($ VSub_Name "$USAGE_LICENSE") (SQ <"\n"> < "[+NAME?mamdag - make abstract machine to dag dependency graph conversion filter]\n" > <"[+DESCRIPTION?"> <" reads MAM (Make Abstract Machine) target and\n"> <"\tprerequisite file descriptions from the standard input and writes a\n"> <"\t"> <"(1) description of the dependency graph on the standard output.\n"> <"\tMamfiles are generated by the "> <--mam> <" option of "> <"(1) and\n"> <"\t"> <"(1).]\n"> <"[+?"> <"(1) is an obsolete predecessor to "> <"(1); new applications should\n"> <"\tuse "> <"(1) and "> <"(1).]\n"> <"[+SEE ALSO?"> <"(1), "> <"(1), "> <"(1), "> <"(1), "> <"(1)]\n"> ) } spids: [114] ) ] spids: [114] ) ] spids: [104 105 192 -1] ) (case_arm pat_list: [{(Lit_Other "*")}] action: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:ARGV0) op:Equal rhs:{(DQ )} spids:[197])] spids: [197] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:USAGE) op:Equal rhs:{(DQ )} spids:[202])] spids: [202] ) ] spids: [194 195 207 -1] ) ] spids: [77 102 209] ) (FuncDef name: usage body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:OPTIND) op:Equal rhs:{(0)} spids:[219])] spids: [219] ) (C {(getopts)} {($ VSub_Name "$ARGV0")} {(DQ ($ VSub_Name "$USAGE"))} {(OPT)} {(SQ <"-?">)}) (C {(exit)} {(2)}) ] spids: [216] ) spids: [212 215] ) (While cond: [(C {(getopts)} {($ VSub_Name "$ARGV0")} {(DQ ($ VSub_Name "$USAGE"))} {(OPT)})] body: (DoGroup children: [ (Case to_match: {($ VSub_Name "$OPT")} arms: [ (case_arm pat_list: [{(Lit_Other "*")}] action: [(C {(usage)})] spids: [266 267 272 -1] ) ] spids: [259 263 275] ) ] spids: [257 277] ) ) (C {(integer)} {(Lit_VarLike "level=") (0)} {(Lit_VarLike "line=") (0)}) (C {(list) (Lit_Other "[") (0) (Lit_Other "]") (Lit_Other "=") (all)}) (C {(print)} {(.GR)} {(7.50)} {(10.0)}) (C {(print)} {(draw)} {(nodes)} {(as)} {(Box)} {(SQ <";">)}) (While cond: [(C {(read)} {(op)} {(arg)} {(arg2)} {(argx)})] body: (DoGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:line) op: Equal rhs: {(line) (Lit_Other "+") (1)} spids: [331] ) ] spids: [331] ) (Case to_match: {($ VSub_Name "$op")} arms: [ (case_arm pat_list: [{(Lit_Other "[") (0-9) (Lit_Other "]") (Lit_Other "*")}] action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:op) op: Equal rhs: {($ VSub_Name "$arg")} spids: [350] ) ] spids: [350] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:arg) op: Equal rhs: {($ VSub_Name "$arg2")} spids: [354] ) ] spids: [354] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:arg2) op: Equal rhs: {($ VSub_Name "$arg3")} spids: [358] ) ] spids: [358] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:arg3) op: Equal rhs: {($ VSub_Name "$argx")} spids: [362] ) ] spids: [362] ) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:argx) op:Equal rhs:{(SQ )} spids:[366])] spids: [366] ) ] spids: [344 348 369 -1] ) ] spids: [337 341 372] ) (Case to_match: {($ VSub_Name "$op")} arms: [ (case_arm pat_list: [{(make)}] action: [ (Case to_match: { (DQ (" ") (BracedVarSub token: bracket_op: (ArrayIndex expr:(ArithVarRef name:level)) spids: [389 394] ) (" ") ) } arms: [ (case_arm pat_list: [ {(Lit_Other "*") (DQ (" ") (EscapedLiteralPart token:) ($ VSub_Name "$arg") (EscapedLiteralPart token:) (" ") ) (Lit_Other "*") } ] spids: [401 410 412 -1] ) (case_arm pat_list: [{(Lit_Other "*")}] action: [ (C {(list) (Lit_Other "[") (level) (Lit_Other "]") (Lit_Other "=") (DQ (BracedVarSub token: bracket_op: (ArrayIndex expr:(ArithVarRef name:level)) spids: [424 429] ) (" ") (EscapedLiteralPart token:) ($ VSub_Name "$arg") (EscapedLiteralPart token: ) ) } ) ] spids: [415 416 436 -1] ) ] spids: [385 398 439] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:level) op: Equal rhs: {(level) (Lit_Other "+") (1)} spids: [442] ) ] spids: [442] ) (C {(list) (Lit_Other "[") (level) (Lit_Other "]") (Lit_Other "=") (EscapedLiteralPart token:) ($ VSub_Name "$arg") (EscapedLiteralPart token:) } ) ] spids: [382 383 458 -1] ) (case_arm pat_list: [{(prev)}] action: [ (Case to_match: { (DQ (" ") (BracedVarSub token: bracket_op: (ArrayIndex expr:(ArithVarRef name:level)) spids: [468 473] ) (" ") ) } arms: [ (case_arm pat_list: [ {(Lit_Other "*") (DQ (" ") (EscapedLiteralPart token:) ($ VSub_Name "$arg") (EscapedLiteralPart token:) (" ") ) (Lit_Other "*") } ] spids: [480 489 491 -1] ) (case_arm pat_list: [{(Lit_Other "*")}] action: [ (C {(list) (Lit_Other "[") (level) (Lit_Other "]") (Lit_Other "=") (DQ (BracedVarSub token: bracket_op: (ArrayIndex expr:(ArithVarRef name:level)) spids: [503 508] ) (" ") (EscapedLiteralPart token:) ($ VSub_Name "$arg") (EscapedLiteralPart token: ) ) } ) ] spids: [494 495 515 -1] ) ] spids: [464 477 518] ) ] spids: [461 462 521 -1] ) (case_arm pat_list: [{(KW_Done done)}] action: [ (Case to_match: { (BracedVarSub token: bracket_op: (ArrayIndex expr:(ArithVarRef name:level)) spids: [529 534] ) } arms: [ (case_arm pat_list: [{(Lit_Other "*") (SQ <" ">) (Lit_Other "*")}] action: [ (C {(print)} { (BracedVarSub token: bracket_op: (ArrayIndex expr:(ArithVarRef name:level)) spids: [548 553] ) } {(SQ <";">)} ) ] spids: [539 544 -1 560] ) ] spids: [527 536 560] ) (If arms: [ (if_arm cond: [ (DParen child: (ArithBinary op_id: Arith_LessEqual left: (ArithVarRef name:level) right: (ArithWord w:{(Lit_Digits 0)}) ) ) ] action: [ (C {(print)} {(-u2)} { (DQ ($ VSub_Name "$COMMAND") (": line ") ($ VSub_Name "$line") (": ") ($ VSub_Name "$op") (" ") ($ VSub_Name "$arg") (": no matching make op") ) } ) ] spids: [-1 577] ) ] else_action: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:level) op: Equal rhs: {(level-1)} spids: [597] ) ] spids: [597] ) ] spids: [595 601] ) ] spids: [524 525 604 -1] ) ] spids: [375 379 607] ) ] spids: [329 609] ) ) (C {(print)} {(.GE)}) ] )