On 1/12/2015 2:49 PM, Tobias Burnus wrote: > Joel Sherrill wrote: >> run.txt is the cut and paste of the log file which reflects DejaGNU's >> view of the run. > Which means that it hopefully matches every bit of the original output > and that no editor interferes by adding or removing line breaks. > > >> Additionally, I think you are right that the "*** EXIT code 0" also >> causes problems with the pattern. >> Details below but this is standard DejaGNU output when the target >> doesn't return >> an exit code. > Good to know. If the pattern is known, one can add it to the pattern. > > >>> Can you try the following: >>> >>> a) Replace the pattern by "1 2 3(\n|\r\r\n|\r)" (twice), note the >>> duplicated "\r" >>> b) Remove the "dg-output "\$" line >>> >>> [Best would be if you could try them also separately.] My bet would be >>> that doing (a) and (b) will succeed, while only (a) and (b) will fail. >>> >>> >>> If using (a) [alone or together with (b)] works, you should really find >>> out what inserts the "\r", especially as it does not appear if you >>> manually run the program. "\r\r\n" is definitely not a pattern I would >>> like to see in the test file. >> I assume the file in question is >> gcc/gcc/testsuite/gfortran.dg/g77/f77-edit-x-out.f > Yes. > >> (a) alone didn't make it pass. >> (b) alone didn't make it pass. >> (a) and (b) together did not make it pass >> >> Does this file get copied or something else during the process that >> would eliminate edits having an impact? > I don't think so. Too bad that it didn't seem to help. > >> Is there an easy way to take out.txt and just force it against this >> .exp pattern? > Well, you could try whether PERL is able to match it, i.e. something > like "cat file | perl ..." if you manage to get the exact output into a > file (esp. with the right number of \r and \n, including the last line). > I don't know whether that's really identical but it should come close to > how DejaGNU matches the pattern. > > Example - I use printf instead of a file: > > printf '1 2 3\n1 2 3\n\n*** EXIT code 0' \ > | perl -e '$in = join("", <STDIN>); if ($in =~ m/^1 2 3(\n|\r\n|\r)1 > 2 3(\n|\r\n|\r)((\n|\r\n|\r)\*\*\* EXIT code 0)?$/s) { print > "matched\n" } else { print "not matched\n" };' That was very close.
cat out.txt | \ perl -e '$in = join("", <STDIN>); if ($in =~ m/^1 2 3(\n|\r\n|\r)1 2 3(\n|\r\n|\r)((\n|\r\n|\r)\*\*\* EXIT code 0)(\n|\r\n|\r)?$/s) { print "matched\n" } else { print "not matched\n" };' I think I mainly fixed the first line to have two spaces between the 2 and 3 and added another the EOL pattern at the end. That just leaves translating that back into DejaGNU/Expect. :) > Tobias -- Joel Sherrill, Ph.D. Director of Research & Development joel.sherr...@oarcorp.com On-Line Applications Research Ask me about RTEMS: a free RTOS Huntsville AL 35805 Support Available (256) 722-9985