|  | #!/usr/bin/perl | 
|  | # | 
|  | # Scrub the variable fields from the normal trace2 output to | 
|  | # make testing easier. | 
|  |  | 
|  | use strict; | 
|  | use warnings; | 
|  |  | 
|  | my $float = '[0-9]*\.[0-9]+([eE][-+]?[0-9]+)?'; | 
|  |  | 
|  | # This code assumes that the trace2 data was written with bare | 
|  | # turned on (which omits the "<clock> <file>:<line>" prefix. | 
|  |  | 
|  | while (<>) { | 
|  | # Various messages include an elapsed time in the middle | 
|  | # of the message.  Replace the time with a placeholder to | 
|  | # simplify our HEREDOC in the test script. | 
|  | s/elapsed:$float/elapsed:_TIME_/g; | 
|  |  | 
|  | my $line = $_; | 
|  |  | 
|  | # we expect: | 
|  | #    start <argv0> [<argv1> [<argv2> [...]]] | 
|  | # | 
|  | # where argv0 might be a relative or absolute path, with | 
|  | # or without quotes, and platform dependent.  Replace argv0 | 
|  | # with a token for HEREDOC matching in the test script. | 
|  |  | 
|  | if ($line =~ m/^start/) { | 
|  | $line =~ /^start\s+(.*)/; | 
|  | my $argv = $1; | 
|  | $argv =~ m/(\'[^\']*\'|[^ ]+)\s+(.*)/; | 
|  | my $argv_0 = $1; | 
|  | my $argv_rest = $2; | 
|  |  | 
|  | print "start _EXE_ $argv_rest\n"; | 
|  | } | 
|  | elsif ($line =~ m/^cmd_path/) { | 
|  | # Likewise, the 'cmd_path' message breaks out argv[0]. | 
|  | # | 
|  | # This line is only emitted when RUNTIME_PREFIX is defined, | 
|  | # so just omit it for testing purposes. | 
|  | # print "cmd_path _EXE_\n"; | 
|  | } | 
|  | elsif ($line =~ m/^cmd_ancestry/) { | 
|  | # 'cmd_ancestry' is not implemented everywhere, so for portability's | 
|  | # sake, skip it when parsing normal. | 
|  | # | 
|  | # print "$line"; | 
|  | } | 
|  | else { | 
|  | print "$line"; | 
|  | } | 
|  | } |