# APPLE LOCAL file
#   Copyright (C) 2005 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 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# GCC testsuite for symbol separation interaction,
# that uses the `dg.exp' driver.

# Load support procs.
load_lib gcc-dg.exp

# Initialize `dg'.
dg-init

# Get checksum (first field of BINCL and EXCL stab information 
proc get_checksum {input_file search_string} {
    global RESULT nshort

    # Regular expression to extract hexadecimal word
    set hexexp {[0-9a-fA-F]+}

    # Do nm on input_file and grep for search_string
    catch {exec nm -ap $input_file >& $input_file.nm}
    catch {exec grep "$search_string" $input_file.nm >& $input_file.grep}

    # Extract dummy-checksum from the grep result (first hexdecimal word)     
    # and save it in RESULT
    set file_h [open $input_file.grep r]
    while {[gets $file_h line] >= 0} {        # We expect only one line in file_h
        regexp $hexexp $line RESULT
    }
    close $file_h 

    # Clean up  
    catch { file delete "$input_file.nm" }
    catch { file delete "$input_file.grep" }

    # Return check sum
    return $RESULT
}

set old_dg_do_what_default "${dg-do-what-default}"

# Main loop.
foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.c]] {
    global runtests torture_without_loops dg-do-what-default nshort

    # If we're only testing specific files and this isn't one of them, skip it.
    if ![runtest_file_p $runtests $test] {
        continue
    }

    # [file tail name] returns part of name after last /
    set nshort "$subdir/[file tail $test]"
    set short_bname "[file rootname [file tail $test]]"
    set bname "[file rootname $test]"
    set bname_part_2 "$srcdir/$subdir/[file rootname [file tail $test]]_part_2.c"
    set short_bname_part_2 "[file rootname [file tail $test]]_part_2"
    set ss_exp_debug 0

    # We don't try to use the loop-optimizing options, since they are highly
    # unlikely to make any difference to CINFO.
    foreach flags "[list {-gstabs+ -gfull}]" {
        verbose "Testing $nshort, $flags" 1

        # Clean up
        catch { file delete "$bname.h" }
        catch { file delete "$bname.o" }
        catch { file delete "$bname.h.o" }

        if {$ss_exp_debug == 1} {
            puts "ss_exp_debug: various names"
            puts "ss_exp_debug bname:";       puts $bname
            puts "ss_exp_debug bname.ssh:";   puts $bname.ssh
            puts "ss_exp_debug test:";        puts $test
            puts "ss_exp_debug short_bname:"; puts $short_bname
        }

        # 1) compile foo.h to create foo.h.o
        if { [ file exists "$bname.ssh" ] } {

            # For the header files, the default is to make repository
            set dg-do-what-default assemble

            # Header files are supplied using .ssh extension, so that we can
            # identify candidates for makeing symbol repository. Get header copy
            # with .h here.
            file copy -force "$bname.ssh" "$short_bname.h"

            # Make repository
            # This will create two output files $short_bname.h.o and PCH
            dg-test -keep-output "$short_bname.h" $flags "-fsave-repository=$short_bname.h.o -x c-header"

            if { [ file exists "$short_bname.o" ] } {
                file rename -force "$short_bname.h.o" "$bname.h.o"
 		file rename -force "$short_bname.o" "$short_bname.h.gch"

                # Do nm on $bname.h.o and grep for "BINCL $bname.h"
                # Extract dummy-checksum from the grep result and save it in RESULT1
		set RESULT1 [get_checksum $bname.h.o "BINCL $short_bname.h"]

                if {$ss_exp_debug == 1} {
                    puts "ss_exp_debug: RESULT1"; puts $RESULT1
                }

                pass "$nshort $flags Make Repository"
            } else {
                set RESULT1 " "
                fail "$nshort $flags Make Repository"
            }

            if { [ file exists "$bname.h.o" ] } {

                # 2) compile foo.c to create foo.o
		file rename -force "$short_bname.h" "$short_bname.save.h"
                dg-test -keep-output $test $flags "-I. -Winvalid-pch"

                if { [ file exists "$short_bname.o" ] } {

                    # Do nm on $bname.o and grep for "EXCL $bname.h"
                    # Extract dummy-checksum from the grep result and save it in RESULT2
                    set RESULT2 [get_checksum $short_bname.o "EXCL $short_bname.h"]

                    if {$ss_exp_debug == 1} {
                        puts "ss_exp_debug: RESULT2 ??? "; puts $RESULT2
                    }

                    pass "$nshort $flags Use symbol repository"

                } else {
                    set RESULT2 " "
                    fail "$nshort $flags Use symbol repository"
                }

                if { [ file exists "$bname_part_2" ] } {
                    
                    # 3) compile foo_part_2.c to create foo_part_2.o
                    dg-test -keep-output "$bname_part_2" $flags "-I. "
                    if { [ file exists "$short_bname_part_2.o" ] } {


                        # Do nm on $bname_part_2.o and grep for "EXCL $bname.h"
                        # Extract dummy-checksum from the grep result and save it in RESULT3
                        set RESULT3 [get_checksum $short_bname_part_2.o "EXCL $bname.h"]

                        if {$ss_exp_debug == 1} {
                            puts "ss_exp_debug: RESULT3"; puts $RESULT3
                        }

                        pass "$nshort $flags Use symbol repository"

                    } else {
                        set RESULT3 " "
                        fail "$nshort $flags Use symbol repository"
                    }

                    # 4) Link foo.h.o and foo.o to create foo
                    set dg-do-what-default link
                    dg-test -keep-output "$bname.h.o" "$short_bname.o" ""

                    # 5) do 'nm |grep ' on final assembler and save result in RES4
                    # Do nm on $bname.out and grep for "EXCL $bname.h"
                    # Extract dummy-checksum from the grep result and save it in RESULT4
                    set RESULT4 [get_checksum $short_bname.h.exe "EXCL $bname.h"]

                    # Do nm on $bname.out and grep for "BINCL $bname.h"
                    # Extract dummy-checksum from the grep result and save it in RESULT5
                    set RESULT5 [get_checksum $short_bname.h.exe "BINCL $bname.h"]

                    if {$ss_exp_debug == 1} {
                        puts "ss_exp_debug: RESULT4"; puts $RESULT4
                        puts "ss_exp_debug: RESULT5"; puts $RESULT5
                    }

                    pass "$nshort $flags symbol separation: linking"

                } else {

                    # If we are not testing second part then set values so that comparison test succeeds
                    set RESULT3 $RESULT2
                    set RESULT4 $RESULT2
                    set RESULT5 $RESULT2
                    if {$ss_exp_debug == 1} {
                        puts "ss_exp_debug: RESULT3"; puts $RESULT3
                        puts "ss_exp_debug: RESULT4"; puts $RESULT4
                        puts "ss_exp_debug: RESULT5"; puts $RESULT5
                    }
                }

                # 6) Compare RES1 and RES2 and RES3 and RES4
                if { ( $RESULT1 == $RESULT2 )
                     && ( $RESULT1 == $RESULT3 ) 
                     && ( $RESULT1 == $RESULT4 ) } {
                    pass "$nshort $flags symbol separation valid use test"
                } else {
                    fail "$nshort $flags symbol separation valid use test"
                }
                if { ( $RESULT1 == $RESULT5 ) } {
                    pass "$nshort $flags symbol separation link test"
                } else {
                    fail "$nshort $flags symbol separation link test"
                }
		pass "$nshort $flags Make repository"
            } else {
                fail "$nshort $flags Make repository"
            }
        } else {

            # Normal test
            set dg-do-what-default compile
            dg-test -keep-output $test $flags "-I."
        }

    }

    # Clean up
    catch { file delete "$bname.h" }
    catch { file delete "$bname.o" }
    catch { file delete "$bname.h.o" }
}

set dg-do-what-default "$old_dg_do_what_default"

# All done.
dg-finish
