| # Copyright 2001, 2003, 2004, 2006, 2007, 2009 Free Software Foundation, Inc. |
| |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 3 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program; if not, write to the Free Software |
| # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. |
| |
| # Please email any bugs, comments, and/or additions to this file to: |
| # bug-dejagnu@prep.ai.mit.edu |
| |
| # Written by DJ Delorie <dj@redhat.com> |
| |
| if {![istarget "i*86-*-*"] && ![istarget "x86_64-*-mingw*"] } { |
| return |
| } |
| |
| if {![info exists WINDRES]} then { |
| return |
| } |
| |
| if {[which $WINDRES] == 0} then { |
| return |
| } |
| |
| set wr "$WINDRES --include-dir $srcdir/$subdir" |
| |
| if [file exists "$srcdir/../../winsup/w32api/include"] { |
| set wr "$wr --include-dir $srcdir/../../winsup/w32api/include" |
| } else { |
| send_log "\nWarning: Assuming windres can find the win32 headers\n\n" |
| } |
| |
| set res_list [lsort [glob -nocomplain $srcdir/$subdir/*.rc]] |
| |
| proc oneline { file } { |
| while { 1 } { |
| if { [gets $file line] == -1 } { |
| return "" |
| } |
| if [regexp "^ \[0-9a-z\]\[0-9a-z\]* " $line] { |
| return $line |
| } |
| } |
| } |
| |
| foreach res $res_list { |
| set sroot [file rootname $res] |
| set broot [file tail $sroot] |
| set done 0 |
| set cpp_opts "" |
| |
| set rc [open $res] |
| while { [gets $rc line] != -1 } { |
| if ![regexp "^(//|/\*|#)" $line] { |
| break |
| } |
| if [regexp "\[xp\]fail *(\[^ \]*)" $line junk sys] { |
| setup_xfail $sys |
| continue |
| } |
| if [regexp "cpparg *(\[^ \]*)" $line junk cppopt] { |
| set cpp_opts "--preprocessor-arg \"$cppopt\"" |
| continue |
| } |
| } |
| |
| verbose "$wr -J rc -O res $res tmpdir/$broot.res" 1 |
| catch "exec $wr $cpp_opts -J rc -O res $res tmpdir/$broot.res" err |
| |
| if ![string match "" $err] then { |
| send_log "$err\n" |
| verbose "$err" 1 |
| if [string match "*windows.h: No such file*" $err] then { |
| unsupported "windres/$broot (parse)" |
| } else { |
| fail "windres/$broot (parse)" |
| } |
| continue |
| } |
| pass "windres/$broot (parse)" |
| |
| set rc [open $res] |
| while { [gets $rc line] != -1 } { |
| if ![regexp "^(//|/\*|#)" $line] { |
| break |
| } |
| if [regexp "parse-only" $line] { |
| file delete "tmpdir/$broot.res" |
| set done 1 |
| break |
| } |
| if [regexp "\[xc\]fail *(\[^ \]*)" $line junk sys] { |
| setup_xfail $sys |
| continue |
| } |
| } |
| if { $done != 0 } { |
| continue |
| } |
| |
| verbose "$OBJDUMP -b binary -s tmpdir/$broot.res > tmpdir/$broot.dump" 1 |
| catch "exec $OBJDUMP -b binary -s tmpdir/$broot.res > tmpdir/$broot.dump" err |
| |
| if ![string match "" $err] then { |
| send_log "$err\n" |
| verbose "$err" 1 |
| fail "windres/$broot (compare)" |
| continue |
| } |
| |
| set pat [open "$sroot.rsd"] |
| set out [open "tmpdir/$broot.dump"] |
| set patline "foo" |
| |
| while { ![string match $patline ""] } { |
| set patline [oneline $pat] |
| set outline [oneline $out] |
| |
| if ![string match $patline $outline] { |
| send_log "< $patline\n" |
| send_log "> $outline\n" |
| fail "windres/$broot (compare)" |
| set done 1 |
| break |
| } |
| } |
| if { $done == 0 } { |
| pass "windres/$broot (compare)" |
| file delete "tmpdir/$broot.res" |
| file delete "tmpdir/$broot.dump" |
| } |
| } |