2004-01-24 Michael Chastain <mec.gnu@mindspring.com>
authorMichael Chastain <mec@google.com>
Sat, 24 Jan 2004 21:59:03 +0000 (21:59 +0000)
committerMichael Chastain <mec@google.com>
Sat, 24 Jan 2004 21:59:03 +0000 (21:59 +0000)
* lib/compiler.c: Add hp_cc_compiler and hp_aCC_compiler.
* lib/compiler.cc: Likewise.
* lib/gdb.exp (get_compiler_info): Always call gdb_compile to
get the right preprocessor.  Eval the output directly.  Remove
special tests for hp_cc_compiler and hp_aCC_compiler.  Remove
hp_f77_compiler and hp_f90_compiler completely.
(gdb_preprocess): Delete.
(get_compiler): Delete.

gdb/testsuite/ChangeLog
gdb/testsuite/lib/compiler.c
gdb/testsuite/lib/compiler.cc
gdb/testsuite/lib/gdb.exp

index 8a0e54fd96a03641ec274834707b13f548c42cb2..d857fcee1f388fa0ee217508f854bc192924d7dd 100644 (file)
@@ -1,3 +1,14 @@
+2004-01-24  Michael Chastain  <mec.gnu@mindspring.com>
+
+       * lib/compiler.c: Add hp_cc_compiler and hp_aCC_compiler.
+       * lib/compiler.cc: Likewise.
+       * lib/gdb.exp (get_compiler_info): Always call gdb_compile to
+       get the right preprocessor.  Eval the output directly.  Remove
+       special tests for hp_cc_compiler and hp_aCC_compiler.  Remove
+       hp_f77_compiler and hp_f90_compiler completely.
+       (gdb_preprocess): Delete.
+       (get_compiler): Delete.
+
 2004-01-24  Mark Kettenis  <kettenis@gnu.org>
 
        * gdb.base/charset.c, gdb.base/dump.c, gdb.base/huge.c: Include
index b0f557c1a5f7515fce344110b7057b93d946480b..b1f1f5d5f6291f4a746fad2ea2d91f547eb6ee30 100644 (file)
@@ -1,6 +1,6 @@
 /* This test file is part of GDB, the GNU debugger.
 
-   Copyright 1995, 1997, 1999, 2003 Free Software Foundation, Inc.
+   Copyright 1995, 1997, 1999, 2003, 2004 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
    Please email any bugs, comments, and/or additions to this file to:
    bug-gdb@prep.ai.mit.edu  */
 
-/* Often the behavior of any particular test depends upon what compiler was
-   used to compile the test.  As each test is compiled, this file is
-   preprocessed by the same compiler used to compile that specific test
-   (different tests might be compiled by different compilers, particularly
-   if compiled at different times), and used to generate a *.ci (compiler
-   info) file for that test.
+/* Sometimes the behavior of a test depends upon the compiler used to
+   compile the test program.  A test script can call get_compiler_info
+   to figure out the compiler version and test_compiler_info to test it.
 
-   I.E., when callfuncs is compiled, a callfuncs.ci file will be generated,
-   which can then be sourced by callfuncs.exp to give callfuncs.exp access
-   to information about the compilation environment.
+   get_compiler_info runs the preprocessor on this file and then eval's
+   the result.  This sets various symbols for use by test_compiler_info.
 
-   TODO:  It might be a good idea to add expect code that tests each
-   definition made with 'set" to see if one already exists, and if so
-   warn about conflicts if it is being set to something else.  */
+   TODO: make compiler_info a local variable for get_compiler_info and
+   test_compiler_info.
 
-/* This needs to be kept in sync with whatis.c and gdb.exp(get_compiler_info).
-   If this ends up being hairy, we could use a common header file.  */
+   TODO: all clients should use test_compiler_info and should not
+   use gcc_compiled, hp_cc_compiler, or hp_aCC_compiler.
 
-#if defined (__STDC__) || defined (_AIX)
-set signed_keyword_not_used 0
-#else
-set signed_keyword_not_used 1
-#endif
+   TODO: purge signed_keyword_not_used.  */
+
+set compiler_info ""
 
 #if defined (__GNUC__)
-set gcc_compiled __GNUC__
 set compiler_info [join {gcc __GNUC__ __GNUC_MINOR__ } -]
+set gcc_compiled __GNUC__
 #else
 set gcc_compiled 0
-set compiler_info ""
 #endif
 
-return 0
+#if defined (__HP_cc)
+set compiler_info [join {hpcc __HP_cc} -]
+set hp_cc_compiler __HP_cc
+#else
+set hp_cc_compiler 0
+#endif
+
+#if defined (__HP_aCC)
+set compiler_info [join {hpacc __HP_aCC} -]
+set hp_aCC_compiler __HP_aCC
+#else
+set hp_aCC_compiler 0
+#endif
+
+/* gdb.base/whatis.exp still uses this */
+#if defined (__STDC__) || defined (_AIX)
+set signed_keyword_not_used 0
+#else
+set signed_keyword_not_used 1
+#endif
index bbefeaabe988611570f381639afc3e9a30adca29..0c5eb663b969315d271493b54211841ba04fd0aa 100644 (file)
    Please email any bugs, comments, and/or additions to this file to:
    bug-gdb@prep.ai.mit.edu  */
 
-/* Often the behavior of any particular test depends upon what compiler was
-   used to compile the test.  As each test is compiled, this file is
-   preprocessed by the same compiler used to compile that specific test
-   (different tests might be compiled by different compilers, particularly
-   if compiled at different times), and used to generate a *.ci (compiler
-   info) file for that test.
+/* This file is exactly like compiler.c.  I could just use compiler.c if
+   I could be sure that every C++ compiler accepted extensions of ".c".  */
 
-   I.E., when callfuncs is compiled, a callfuncs.ci file will be generated,
-   which can then be sourced by callfuncs.exp to give callfuncs.exp access
-   to information about the compilation environment.
-
-   TODO:  It might be a good idea to add expect code that tests each
-   definition made with 'set" to see if one already exists, and if so
-   warn about conflicts if it is being set to something else.  */
+set compiler_info ""
 
 #if defined (__GNUC__)
-set gcc_compiled __GNUC__
 set compiler_info [join {gcc __GNUC__ __GNUC_MINOR__ } -]
+set gcc_compiled __GNUC__
 #else
 set gcc_compiled 0
-set compiler_info ""
 #endif
 
-return 0
+#if defined (__HP_cc)
+set compiler_info [join {hpcc __HP_cc} -]
+set hp_cc_compiler __HP_cc
+#else
+set hp_cc_compiler 0
+#endif
+
+#if defined (__HP_aCC)
+set compiler_info [join {hpacc __HP_aCC} -]
+set hp_aCC_compiler __HP_aCC
+#else
+set hp_aCC_compiler 0
+#endif
+
+/* gdb.base/whatis.exp still uses this */
+#if defined (__STDC__) || defined (_AIX)
+set signed_keyword_not_used 0
+#else
+set signed_keyword_not_used 1
+#endif
index 3f2938ef2be8300ec0d4fdec249832674ae950a9..9670c3479ebacbf2b1daa1cef9eb361a7784eb1a 100644 (file)
@@ -1,5 +1,5 @@
 # Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-# 2002, 2003
+# 2002, 2003, 2004
 # Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
@@ -1094,86 +1094,114 @@ proc skip_hp_tests {} {
     return $skip_hp
 }
 
-global compiler_info
-set compiler_info unknown
+set compiler_info              "unknown"
+set gcc_compiled               0
+set hp_cc_compiler             0
+set hp_aCC_compiler            0
+set signed_keyword_not_used    0
+
+# Figure out what compiler I am using.
+#
+# BINFILE is a "compiler information" output file.  This implementation
+# does not use BINFILE.
+#
+# ARGS can be empty or "C++".  If empty, "C" is assumed.
+#
+# There are several ways to do this, with various problems.
+#
+# [ gdb_compile -E $ifile -o $binfile.ci ]
+# source $binfile.ci
+#
+#   Single Unix Spec v3 says that "-E -o ..." together are not
+#   specified.  And in fact, the native compiler on hp-ux 11 (among
+#   others) does not work with "-E -o ...".  Most targets used to do
+#   this, and it mostly worked, because it works with gcc.
+#
+# [ catch "exec $compiler -E $ifile > $binfile.ci" exec_output ]
+# source $binfile.ci
+# 
+#   This avoids the problem with -E and -o together.  This almost works
+#   if the build machine is the same as the host machine, which is
+#   usually true of the targets which are not gcc.  But this code does
+#   not figure which compiler to call, and it always ends up using the C
+#   compiler.  Not good for setting hp_aCC_compiler.  Targets
+#   hppa*-*-hpux* and mips*-*-irix* used to do this.
+#
+# [ gdb_compile -E $ifile > $binfile.ci ]
+# source $binfile.ci
+#
+#   dejagnu target_compile says that it supports output redirection,
+#   but the code is completely different from the normal path and I
+#   don't want to sweep the mines from that path.  So I didn't even try
+#   this.
+#
+# set cppout [ gdb_compile $ifile "" preprocess $args quiet ]
+# eval $cppout
+#
+#   I actually do this for all targets now.  gdb_compile runs the right
+#   compiler, and TCL captures the output, and I eval the output.
+#
+#   Unfortunately, expect logs the output of the command as it goes by,
+#   and dejagnu helpfully prints a second copy of it right afterwards.
+#   So I turn off expect logging for a moment.
+#   
+# [ gdb_compile $ifile $ciexe_file executable $args ]
+# [ remote_exec $ciexe_file ]
+# [ source $ci_file.out ]
+#
+#   I could give up on -E and just do this.
+#   I didn't get desperate enough to try this.
+#
+# -- chastain 2004-01-06
 
 proc get_compiler_info {binfile args} {
-    # Create and source the file that provides information about the compiler
-    # used to compile the test case.
-    # Compiler_type can be null or c++. If null we assume c.
+    # For compiler.c and compiler.cc
     global srcdir
-    global subdir
-    # These two come from compiler.c.
-    global signed_keyword_not_used
-    global gcc_compiled
+
+    # I am going to play with the log to keep noise out.
+    global outdir
+    global tool
+
+    # These come from compiler.c or compiler.cc
     global compiler_info
+    global gcc_compiled
+    global hp_cc_compiler
+    global hp_aCC_compiler
+    global signed_keyword_not_used
 
-    if {![istarget "hppa*-*-hpux*"] && ![istarget "mips*-*-irix*"]} {
-       if { [llength $args] > 0 } {
-           if {$args == "c++"} {
-               if { [gdb_compile "${srcdir}/lib/compiler.cc" "${binfile}.ci" preprocess {}] != "" } {
-                   perror "Couldn't make ${binfile}.ci file"
-                   return 1;
-               }
-           }
-       } else {
-           if { [gdb_compile "${srcdir}/lib/compiler.c" "${binfile}.ci" preprocess {}] != "" } {
-               perror "Couldn't make ${binfile}.ci file"
-               return 1;
-           }
-       }
-    } else {
-       if { [llength $args] > 0 } {
-           if {$args == "c++"} {
-               if { [eval gdb_preprocess \
-                       [list "${srcdir}/lib/compiler.cc" "${binfile}.ci"] \
-                       $args] != "" } {
-                   perror "Couldn't make ${binfile}.ci file"
-                   return 1;
-               }
-           }
-       } elseif { $args != "f77" } {
-           if { [eval gdb_preprocess \
-                   [list "${srcdir}/lib/compiler.c" "${binfile}.ci"] \
-                   $args] != "" } {
-               perror "Couldn't make ${binfile}.ci file"
-               return 1;
-           }
-       }
+    # Choose which file to preprocess.
+    set ifile "${srcdir}/lib/compiler.c"
+    if { [llength $args] > 0 && [lindex $args 0] == "c++" } {
+       set ifile "${srcdir}/lib/compiler.cc"
     }
-    
-    uplevel \#0 { set gcc_compiled 0 }
 
-    if { [llength $args] == 0 || $args != "f77" } {
-        source ${binfile}.ci
+    # Run $ifile through the right preprocessor.
+    # Toggle gdb.log to keep the compiler output out of the log.
+    log_file
+    set cppout [ gdb_compile "${ifile}" "" preprocess [list "$args" quiet] ]
+    log_file -a "$outdir/$tool.log" 
+
+    # Source the output.
+    foreach cppline [ split "$cppout" "\n" ] {
+       if { ! [ regexp "^#" "$cppline" ] } {
+           if { ! [ regexp "^\[\n\r\t \]*$" "$cppline" ] } {
+               verbose "get_compiler_info: $cppline" 2
+               eval "$cppline"
+           }
+       }
     }
+    verbose -log "get_compiler_info: $compiler_info"
 
     # Most compilers will evaluate comparisons and other boolean
     # operations to 0 or 1.
     uplevel \#0 { set true 1 }
     uplevel \#0 { set false 0 }
 
-    uplevel \#0 { set hp_cc_compiler 0 }
-    uplevel \#0 { set hp_aCC_compiler 0 }
-    uplevel \#0 { set hp_f77_compiler 0 }
-    uplevel \#0 { set hp_f90_compiler 0 }
-    if { !$gcc_compiled && [istarget "hppa*-*-hpux*"] } {
-       # Check for the HP compilers
-       set compiler [lindex [split [get_compiler $args] " "] 0]
-       catch "exec what $compiler" output
-       if [regexp ".*HP aC\\+\\+.*" $output] {
-           uplevel \#0 { set hp_aCC_compiler 1 }
-           # Use of aCC results in boolean results being displayed as
-           # "true" or "false"
-           uplevel \#0 { set true true }
-           uplevel \#0 { set false false }
-       } elseif [regexp ".*HP C Compiler.*" $output] {
-           uplevel \#0 { set hp_cc_compiler 1 }
-       } elseif [regexp ".*HP-UX f77.*" $output] {
-           uplevel \#0 { set hp_f77_compiler 1 }
-       } elseif [regexp ".*HP-UX f90.*" $output] {
-           uplevel \#0 { set hp_f90_compiler 1 }
-       }
+    # Use of aCC results in boolean results being displayed as
+    # "true" or "false"
+    if { $hp_aCC_compiler } {
+      uplevel \#0 { set true true }
+      uplevel \#0 { set false false }
     }
 
     return 0;
@@ -1184,85 +1212,6 @@ proc test_compiler_info { compiler } {
     return [string match $compiler $compiler_info]
 }
 
-proc get_compiler {args} {
-    global CC CC_FOR_TARGET CXX CXX_FOR_TARGET F77_FOR_TARGET
-
-    if { [llength $args] == 0 
-        || ([llength $args] == 1 && [lindex $args 0] == "") } {
-        set which_compiler "c"
-    } else {
-        if { $args =="c++" } {
-            set which_compiler "c++"
-       } elseif { $args =="f77" } {
-           set which_compiler "f77"
-        } else {
-           perror "Unknown compiler type supplied to gdb_preprocess"
-           return ""
-        }
-    }
-
-    if [info exists CC_FOR_TARGET] {
-       if {$which_compiler == "c"} {
-           set compiler $CC_FOR_TARGET
-       }
-    }
-    if [info exists CXX_FOR_TARGET] {
-       if {$which_compiler == "c++"} {
-           set compiler $CXX_FOR_TARGET
-       }
-    }
-
-    if [info exists F77_FOR_TARGET] {
-       if {$which_compiler == "f77"} {
-           set compiler $F77_FOR_TARGET
-       }
-    }
-
-    if { ![info exists compiler] } {
-        if { $which_compiler == "c" } {
-           if {[info exists CC]} {
-               set compiler $CC
-           }
-       }
-        if { $which_compiler == "c++" } {
-           if {[info exists CXX]} {
-               set compiler $CXX
-           }
-       }
-       if {![info exists compiler]} {
-           set compiler [board_info [target_info name] compiler];
-           if { $compiler == "" } {
-               perror "get_compiler: No compiler found"
-               return ""
-           }
-       }
-    }
-
-    return $compiler
-}
-
-proc gdb_preprocess {source dest args} {
-    set compiler [get_compiler "$args"]
-    if { $compiler == "" } {
-       return 1
-    }
-
-    set cmdline "$compiler -E $source > $dest"
-
-    verbose "Invoking $compiler -E $source > $dest"
-    verbose -log "Executing on local host: $cmdline" 2
-    set status [catch "exec ${cmdline}" exec_output]
-
-    set result [prune_warnings $exec_output]
-    regsub "\[\r\n\]*$" "$result" "" result;
-    regsub "^\[\r\n\]*" "$result" "" result;
-    if { $result != "" } {
-        clone_output "gdb compile failed, $result"
-    }
-    return $result;
-}
-
 set gdb_wrapper_initialized 0
 
 proc gdb_wrapper_init { args } {