--- /dev/null
+The primary maintainer and creator of DejaGnu is Rob Savoye.
+ rob@welcomehome.org
+ www.welcomehome.org/rob.html
+
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+\f
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ 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
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
--- /dev/null
+2001-01-24 Fernando Nasser <fnasser@redhat.com>
+
+ From Gabriel Dos Reis <gdr@codesourcery.com>
+ * lib/dg.exp (dg-trim-dirname): New function.
+ (dg-test): Use it to rip directory-name out of file name.
+
+2001-01-20 Ben Elliston <bje@redhat.com>
+
+ * runtest.exp (usage): Replace --mail in usage output.
+ * doc/runtest.1: Re-document --mail option, which was erroneously
+ removed from this man page in 1994.
+
+2001-01-19 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * lib/target.exp (prune_warnings): Avoid ``.*'' in NetBSD warnings
+ pattern.
+
+2001-01-15 Ben Elliston <bje@redhat.com>
+
+ * lib/framework.exp (record_test): Invoke a user-defined procedure
+ if one is named in local_record_procs($type).
+
+2001-01-12 Richard Earnshaw <rearnsha@arm.com>
+
+ * target.exp (prune_warnings): Prune warnings from NetBSD linker.
+
+2000-11-29 Drew Moseley <dmoseley@redhat.com>
+
+ * baseboards/xscale-cygmon.exp: New file for xscale board testing.
+
+2000-10-19 Michael Snyder <msnyder@cleaver.cygnus.com>
+
+ * baseboards/linux-gdbserver.exp: New file.
+ * baseboards/linux-libremote.exp: New file.
+
+2000-08-14 Jimmy Guo <guo@cup.hp.com>
+
+ * runtest.exp: Eliminate from test_top_dirs entries that
+ are subdirectories of other entries, to avoid redundant
+ testing on *.exp files in these subdirectories.
+
+2000-08-14 Jimmy Guo <guo@cup.hp.com>
+
+ * runtest.exp: Reapply part of the backed out change to
+ runtest.exp -- handle multiple directories in TCL variables
+ dir_to_run and cmdline_dir_to_run.
+
+2000-08-04 Geoff Keating <geoffk@cygnus.com>
+
+ Back out this change:
+
+ * lib/utils.exp: Add support for a -maxdepth <n>
+ option to limit find to <n> directories deep.
+ * runtest.exp: Handle multiple directories in TCL variables
+ dir_to_run and cmdline_dir_to_run; limit *.exp find to
+ one directory level to avoid foo/bar/baz.exp getting tested
+ twice (when ${dir} is 'foo', and when ${dir} is 'foo/bar').
+
+2000-08-02 Jimmy Guo <guo@hpcleara.cup.hp.com>
+
+ * lib/target.exp (default_target_compile,default_target_assemble,
+ default_link): Remove env() interface for *_FOR_TARGET TCL vars.
+
+ * lib/framework.exp (setup_xfail): Relax PRMS string pattern
+ to allow a more general bug ID specification (without '-').
+
+ * lib/utils.exp: Add support for a -maxdepth <n>
+ option to limit find to <n> directories deep.
+ * runtest.exp: Handle multiple directories in TCL variables
+ dir_to_run and cmdline_dir_to_run; limit *.exp find to
+ one directory level to avoid foo/bar/baz.exp getting tested
+ twice (when ${dir} is 'foo', and when ${dir} is 'foo/bar').
+
+ * runtest.exp: Cleanup reference to $env(MULTIPASS) and
+ $env(PASS). These were added by HP but unused since.
+
+ * lib/framework.exp (pass): make compiler_conditional_xfail_data
+ a global, corresponding to a recent change to 'proc fail'.
+
+2000-07-21 Frank Ch. Eigler <fche@redhat.com>
+
+ * example/Makefile.am (SUBDIRS): Remove to prevent automatic recursion
+ into `calc'.
+ (all-local): Add at least `calc' building back.
+ * example/Makefile.in: Regenerated.
+
+Fri Jul 21 16:01:43 2000 Andrew Cagney <cagney@b1.cygnus.com>
+
+ From 2000-04-25 Felix Lee <flee@cygnus.com>:
+ * baseboards/tx39-sim.exp: Use idt, not dve linker script. Delete
+ misleading comments and null statements.
+
+2000-07-08 Angela Marie Thomas <angela@cygnus.com>
+
+ * lib/framework.exp: Use compiler_conditional_xfail_data as a global
+ rather than assuming it's set in the level above us.
+
+Fri Jun 9 09:10:48 2000 Catherine Moore <clm@cygnus.com>
+
+ * lib/libgloss.exp (proc_get_multilibs): Handle multilib
+ pathnames for ports that have defined MULTILIB_EXTRA_OPTS.
+
+Sun Jun 4 12:59:06 2000 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * lib/target.exp (reboot_target): Don't reboot target twice.
+
+Wed May 3 19:41:07 2000 Andrew Cagney <cagney@b1.cygnus.com>
+
+ From Felix Lee <flee@cygnus.com>:
+ * example/calc/Makefile.in (install-info): Add target.
+
+Fri Apr 21 13:33:36 2000 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * example/calc/Makefile.in: Add target info.
+
+Tue Apr 18 15:49:00 2000 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * Makefile.am (SUBDIRS): Add directory example.
+ * Makefile.in: Re-generate.
+
+2000-04-10 Tom Tromey <tromey@cygnus.com>
+
+ * lib/target.exp (default_target_compile): Put sources before
+ $add_flags unless building an object file.
+
+Thu Dec 16 18:27:47 1999 Anthony Green <green@cygnus.com>
+
+ * lib/target.exp: Put the source file after options, for
+ compatibility with libtool.
+
+Fri Mar 31 00:15:54 2000 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ * runtest (expectbin): After choosing expectbin, try
+ $expectbin-bld.sh and use it instead.
+
+Wed Mar 29 16:13:46 2000 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ * lib/target.exp (prune_warnings): Discard not-implemented
+ warnings from libgloss/libnosys non-functional functions.
+
+Thu Feb 17 20:24:21 2000 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * baseboards/d10v.exp (gdb_init_command): Force register DMAP2 to
+ 0x2000 so that the d10v VM matches the simulator.
+
+2000-02-15 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ * lib/target.exp: Strip warnings about dangerous functions.
+
+1999-12-14 Geoff Keating <geoffk@cygnus.com>
+
+ * baseboards/rom68k-idp.exp: Don't pass -nostdlib to the IDP
+ boards when using ELF, they need crtbegin and crtend.
+
+1999-11-09 Jason Molenda (jsm@bugshack.cygnus.com)
+
+ * config.guess: Copy current top-level config.guess down to
+ the dejagnu/ subdir. The dejagnu automake configuation should
+ probably be changed to grab the top-level config.guess instead
+ of the random one in this dir.
+
+1999-11-04 Nick Clifton <nickc@cygnus.com>
+
+ * baseboards/arm-sim.exp: Underscore no longer needed for arm-pe
+ ports.
+
+Tue Oct 12 11:44:53 1999 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * lib/libgloss.exp (process_multilib_options): Add support for
+ generic gdb variable option - ``gdb:VARIABLE=VALUE''.
+
+1999-09-28 Angela Marie Thomas <angela@cygnus.com>
+
+ * lib/rsh.exp (rsh_download, rsh_upload): Use rcp_prog if set.
+
+1999-09-15 Stan Shebs <shebs@andros.cygnus.com>
+
+ * baseboards/d10v.exp: Request disable of X- and Z-packets
+ from GDB, all D10V boards respond incorrectly to these.
+
+1999-08-31 Doug Evans <devans@casey.cygnus.com>
+
+ * lib/target.exp (default_link): New local proc only--Ls.
+ Use it to pick out -L arguments in $ldflags.
+ Strip -Wl, from $ldscript.
+
+1999-07-12 Felix Lee <flee@cygnus.com>
+
+ * config/i960.exp: complain if 'sx' not found.
+
+1999-07-12 Drew Moseley <dmoseley@cygnus.com>
+
+ * baseboards/strongarm-cygmon.exp: Rename the StrongARM boards as
+ follows:
+ EBIX-DB -> SA-IOP
+ EBSA285 -> EBSA-285
+ BRUTUS -> SA1100DP
+ SA1100-MULTIMEDIA -> SA1100MM
+
+1999-06-08 Fernando Nasser <fnasser@totem.to.cygnus.com>
+
+ * lib/framework.exp (record_test): Remove weird recursion and
+ make sure exit_status is properly set to 1.
+
+1999-06-08 Felix Lee <flee@cygnus.com>
+
+ * lib/telnet.exp (telnet_open): need to match '(Advanced or Simple)'
+
+1999-06-06 Felix Lee <flee@cygnus.com>
+
+ * lib/utils.exp (getdirs): When -all, return parents of
+ subdirectories too.
+
+1999-06-03 Fernando Nasser <fnasser@totem.to.cygnus.com>
+
+ * lib/remote.exp (standard_send): Add -- to protect strings that
+ start with a '-'; also added a verbose 3 statement with the send
+ command that is being issued.
+
+Fri May 21 17:36:56 1999 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * lib/target.exp: Don't import CC_FOR_TARGET, CXX_FOR_TARGET or
+ F77_FOR_TARGET from environment.
+
+Thu May 20 10:28:23 1999 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * lib/target.exp: Do not import CFLAGS_FOR_TARGET,
+ LDFLAGS_FOR_TARGET and ASFLAGS_FOR_TARGET from external
+ environment. GNUMAKE in conjunction with the top level Makefile
+ will set/export these variables according to the needs of the
+ target libraries. Such a configuration may not be applicable to
+ testsuites.
+
+1999-05-17 Keith Seitz <keiths@cygnus.com>
+
+ * baseboards/mcore-elf.exp: New file.
+ * baseboards/mcore-pe.exp: New file.
+ * baseboards/mcore-sim.exp: Don't run gdb's float tests
+ and increase timeout.
+
+1999-05-09 Nick Clifton <nickc@cygnus.com>
+
+ * baseboards/mcore-moto-sim.exp: New file: Support Motorola's
+ proprietry MCore simulator.
+
+1999-05-07 Stan Shebs <shebs@andros.cygnus.com>
+
+ From HP's WDB group:
+ * lib/target.exp: Add ability to pick CC_FOR_TARGET,
+ CFLAGS_FOR_TARGET, etc from env vars, add ability to use HP F77
+ compiler.
+
+1999-05-05 Stan Shebs <shebs@andros.cygnus.com>
+
+ * lib/utils.exp (getdirs): Add option -all to get subdirs too.
+
+1999-05-05 Jason Merrill <jason@yorick.cygnus.com>
+
+ * baseboards/sparclite-sim.exp: Set needs_status_wrapper.
+ * baseboards/sparclite-sim-le.exp: Likewise.
+
+1999-05-05 Angela Marie Thomas <angela@cygnus.com>
+
+ * baseboards/strongarm-cygmon.exp: Use "boardtype" instead of "name"
+ to avoid variable name clash in lib/target.exp. Add support for
+ ebsa and ebix boards.
+
+1999-05-04 Stan Shebs <shebs@andros.cygnus.com>
+
+ Finer control over test runs, from HP's WDB group:
+ * runtest.exp: Look for MULTIPASS in env also, define variable or
+ env var PASS to choose particular pass in multipass, search for
+ subdirs recursively, and if ignoredirs is set, skip over those
+ directories.
+ (--directory): New argument to limit test running to
+ a single directory.
+ (usage): Document, fix tabbing.
+
+Mon May 3 11:14:37 1999 Jim Wilson <wilson@cygnus.com>
+
+ * config/dos.exp (dos_load): Look for cygwin1.dll in addition to
+ cygwin.dll. New variable dll_name for use in download command.
+ * lib/libgloss.exp (winsup_include_flags): Change windows to windows.h.
+
+1999-04-27 Felix Lee <flee@cygnus.com>
+
+ * testsuite/runtest.all/stats.exp: make sure tmpdir is set
+
+ * baseboards/Makefile.am: deleted.
+ * config/Makefile.am: deleted.
+ * lib/Makefile.am: deleted.
+ * configure.in: delete references to the above.
+ * Makefile.am: install things correctly.
+
+ * testsuite/Makefile.am: set DEJATOOL.
+
+ * configure, Makefile.in, */Makefile.in: regenerated.
+
+ * runtest.exp: fix location of config.guess.
+
+1999-04-26 Felix Lee <flee@cygnus.com>
+
+ * lib/libgloss.exp (libgloss_link_flags): remove bogus -L flag.
+
+1999-04-23 Angela Marie Thomas <angela@cygnus.com>
+
+ * baseboards/cf.exp: gdb protocol is case-sensitive.
+
+1999-04-19 Nick Clifton <nickc@cygnus.com>
+
+ * baseboards/Makefile.am (boards): Add mcore-sim.exp
+
+1999-04-13 Angela Marie Thomas <angela@cygnus.com>
+
+ * baseboards/sh-hms-sim.exp: Pass "-m 18" to standalone sim.
+
+1999-04-08 Nick Clifton <nickc@cygnus.com>
+
+ * baseboards/mcore-sim.exp: New file: Definitions for MCore
+ simulator support.
+
+1999-04-07 Michael Meissner <meissner@cygnus.com>
+
+ * baseboards/d30v-sim.exp (cflags): Add -Wa,-C to suppress
+ warnings about symbols being the same as registers.
+
+Fri Apr 2 13:13:51 1999 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+
+ * lib/target.exp (prune_warnings): Ignore cc1, cc1plus warnings when
+ called with -g and -mabi=32.
+
+1999-03-28 Angela Marie Thomas <angela@cygnus.com>
+
+ * baseboards/x86-cygmon.exp: New file.
+
+1999-03-19 Gavin Romig-Koch <gavin@cygnus.com>
+
+ * lib/libgloss.exp (get_multilibs): Handle MULTILIB_MATCHES.
+
+1999-03-18 James Ingham <jingham@cygnus.com>
+
+ * baseboards/strongarm-cygmon.exp: Add a baseboard for the
+ strongARM boards.
+
+Fri Mar 12 14:01:31 1999 Jim Wilson <wilson@cygnus.com>
+
+ * baseboards/d10v-sim.exp, baseboards/d10v.exp (ldflags): Add
+ libgloss_link_flags.
+ * lib/libgloss.exp (libgloss_link_flags): Map d10v to libnosys.
+
+1999-03-12 Nick Clifton <nickc@cygnus.com>
+
+ * baseboards/arm-sim.exp: Set timeout to 800.
+
+1999-03-01 Jim Wilson <wilson@cygnus.com>
+
+ * baseboards/cf.exp: New file for coldfire.
+ * config/cfdbug.exp: Likewise.
+ * config/base68k.exp (base68k_ld): Don't call remote_binary if
+ no_binary_mode set. Send return and wait for prompt before sending
+ download command.
+
+Sun Feb 28 23:26:36 1999 Geoffrey Noer <noer@cygnus.com>
+
+ * configure.in: AC_EXEEXT, not AM_EXEEXT. Require Autoconf 2.13.
+ * aclocal.m4: Regenerate.
+ * configure: Regenerate.
+
+1999-02-25 Felix Lee <flee@cygnus.com>
+
+ * config/dos.exp (dos_send): rewrite. add short delay.
+
+1999-02-18 Nick Clifton <nickc@cygnus.com>
+
+ * baseboards/arm-sim.exp: Disable uses_underscores for COFF
+ targets as the linker now works correctly.
+
+1999-02-11 Nick Clifton <nickc@cygnus.com>
+
+ * lib/remote.exp (proc remote_exec): Display timeout in log
+ message.
+
+ * lib/target.exp (proc default_target_compile): Add support for
+ timeout option.
+
+ * baseboards/arm-sim.exp: Set gcc,timeout to 500.
+
+1999-02-10 Nick Clifton <nickc@cygnus.com>
+
+ * config/dos.exp: Fix typo: need_status_wrapper ->
+ needs_status_wrapper.
+
+1999-02-09 Nick Clifton <nickc@cygnus.com>
+
+ * baseboards/arm-sim.exp: Enable uses_underscores for the COFF
+ based targets.
+
+1999-02-06 Felix Lee <flee@cygnus.com>
+
+ * runtest.exp: Don't trap SEGV.
+
+Fri Feb 5 15:43:59 1999 Jeffrey A Law (law@cygnus.com)
+
+ * lib/target.exp (prune_warnings): Prune +vcompatwarnings output
+ from the HP linker.
+
+1999-02-02 Felix Lee <flee@cygnus.com>
+
+ * lib/libgloss.exp (find_nm): new function.
+
+1999-01-31 Felix Lee <flee@cygnus.com>
+
+ * Makefile.am: Add cygnus option. Add doc to SUBDIRS
+ * doc/Makefile.am: Add cygnus option. Add info_TEXINFOS.
+ * Makefile.in, */Makefile.in: Regenerated.
+
+1999-01-29 Felix Lee <flee@cygnus.com>
+
+ * baseboards/fr30-cygmon.exp: New file.
+
+ * config/gdb_stub.exp (gdb_stub_load): Fix another typo.
+
+Fri Jan 29 17:16:25 1999 Edith Epstein <eepstein@sophia.cygnus.com>
+
+ * lib/remote.exp: Added check for value of $outp.
+
+ * lib/target.exp: Ignore some hppa specific warning messages. Added
+ checks for CC_FOR_TARGET and CXX_FOR_TARGET. Check for redirection
+ and optimization flags.
+
+1999-01-26 Frank Ch. Eigler <fche@cygnus.com>
+
+ * configure.in: Define BOARDS/CONFIG for automake.
+ * baseboards/Makefile.am: Use $(boards) for public files.
+ * config/Makefile.am: Use $(config) for public files.
+
+ * configure: Regenerated.
+ * Makefile.in: Regenerated.
+ * doc/Makefile.in: Regenerated.
+ * baseboards/Makefile.in: Regenerated.
+ * config/Makefile.in: Regenerated.
+ * example/Makefile.in: Regenerated.
+ * lib/Makefile.in: Regenerated.
+
+ * testsuite/aclocal.m4: Deleted obsolete file.
+ * testsuite/configure.in: Deleted obsolete file.
+
+Sun Jan 17 17:11:52 1999 Jeffrey A Law (law@cygnus.com)
+
+ * lib/target.exp (prune_warnings): Ignore osf4 NFS messages.
+
+Fri Jan 15 14:19:31 1999 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+
+ * lib/libgloss.exp (get_multilibs): Multilib directories can
+ contain '=', too.
+
+Thu Jan 14 00:10:25 1999 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+
+ * lib/target.exp (prune_warnings): Ignore -g not supported
+ warnings. Ignore o32 as warning when called with -O3 (IRIX 6).
+
+1999-01-07 Felix Lee <flee@cygnus.com>
+
+ * runtest.exp (setup_target_hook): add missing globals.
+
+1998-12-31 Felix Lee <flee@cygnus.com>
+
+ * config/dos.exp (dos_spawn): ignore optional args.
+
+ * lib/ftp.exp (ftp_upload): ftp error messages vary.
+
+1998-12-30 Rob Savoye <rob@chinadoll.welcomehome.org>
+
+ * doc/{overview,user,ref},sgml: New manual in DocBook format. This
+ includes most of the old manual, but is tottally up to date.
+ * /doc/Makefile.am, baseboards/Makefile.am, config/Makefile.am,
+ example/Makefile.am, lib/Makefile.am, Makefile.am,
+ testsuite/Makefile.am: New Makefiles for automake support.
+ * /doc/Makefile.in, baseboards/Makefile.in, config/Makefile.in,
+ example/Makefile.in, lib/Makefile.in, Makefile.in,
+ testsuite/Makefile.in: New Makefiles for autoconf as generated by
+ automake.
+ * runtest.exp: Look for config.guess in a libexec directory.
+ * config.guess: Add so it gets installed correctly.
+ * Most Files: Update copyright message, add 1998 and 1999.
+
+1998-10-19 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * lib/rsh.exp(rsh_exec): Check the board info before blindly
+ setting RSH to remsh.
+ * lib/remote.exp(remote_reboot): Don't close the shell connection,
+ or all the remote procedures stop working.
+
+1998-12-29 Ken Raeburn <raeburn@cygnus.com>
+
+ * lib/framework.exp (istarget): Do string compare on first
+ argument, not tcl list containing first argument, against actual
+ target name.
+
+1998-12-29 Felix Lee <flee@cygnus.com>
+
+ * runtest.exp: option --a=b=c wasn't handled right.
+
+ * lib/ftp.exp (ftp_download): ftp error messages vary.
+
+Fri Dec 18 21:48:25 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/gdb-comm.exp(quit_gdb): Don't close connection to the
+ host if it's remote.
+ (gdb_comm_go_idle): The "No exec file" prompt has mysteriously
+ changed; detect either.
+
+1998-12-11 Felix Lee <flee@cygnus.com>
+
+ * contrib/test-tool: diagnostic if no test summary,
+ and add summary headers, in case of multiple test runs.
+
+ * contrib/test-tool: don't print location of log file if it's not
+ really there.
+
+1998-12-10 Felix Lee <flee@cygnus.com>
+
+ * lib/remote.exp (remote_download): in the non-remote case, try to
+ make the copy writable as well as readable.
+
+1998-12-09 Felix Lee <flee@cygnus.com>
+
+ * contrib/test-tool: spit out test summary first.
+
+1998-12-07 James E Wilson <wilson@wilson-pc.cygnus.com>
+
+ * baseboards/i960-sim.exp: New file.
+
+Thu Dec 3 14:03:27 1998 Dave Brolley <brolley@cygnus.com>
+
+ * baseboards/fr30-elf.exp: New file.
+ * baseboards/fr30-sim.exp: New file.
+
+1998-11-30 Gavin Romig-Koch <gavin@cygnus.com>
+
+ * lib/libgloss.exp (get_multilibs): Multilib options can contain '='.
+
+1998-11-27 Felix Lee <flee@cygnus.com>
+
+ * config/gdb-comm.exp (gdb_comm_reload): give up after N reboot
+ failures.
+
+Mon Nov 23 10:19:06 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * lib/target.exp (prune_warnings): Kill NFS server not responding
+ warnings too.
+
+1998-11-18 Jim Wilson <wilson@cygnus.com>
+
+ * baseboards/tx39-dve.exp: Add cygmon support.
+
+1998-11-05 Jim Wilson <wilson@cygnus.com>
+
+ * baseboards/vx960.exp (cflags): Set to -mca if cpu is I960CA.
+ * config/vxworks.exp (vxworks_unld): Don't run unld if os is
+ vxworks5.0.
+ (vxworks_load): Sed out carriage returns.
+
+Thu Oct 15 16:33:01 1998 Doug Evans <devans@canuck.cygnus.com>
+
+ * lib/remote.exp (remote_spawn): Properly pass trailing args
+ to call_remote.
+
+Tue Oct 13 21:04:04 1998 Felix Lee <flee@cygnus.com>
+
+ * config/vxworks.exp: grok preload_obj_flags. recognize
+ "Operation Fault" messages from the board. increase reboot_delay
+ so we don't interrupt the countdown-to-autoboot
+ * i960glue.c: add missing file.
+
+Mon Oct 12 20:08:06 1998 Mark Alexander <marka@cygnus.com>
+
+ * baseboards/danlite-elf.exp: New file.
+
+1998-10-11 Michael Meissner <meissner@cygnus.com>
+
+ * baseboards/powerpc{,le}-sim.exp (needs_status_wrapper): Don't
+ set, normal exit returns the appropriate status.
+
+Thu Oct 8 13:49:04 1998 Doug Evans <devans@canuck.cygnus.com>
+
+ * lib/standard.exp (${tool}_load): Clear up argument order.
+
+ * config/sim.exp: Fix typo in inpfile computation.
+
+ * lib/remote.exp (remote_spawn): Pass $args to call_remote.
+
+Fri Oct 2 00:02:51 1998 Tom Tromey <tromey@cygnus.com>
+
+ * config/unix.exp (unix_load): Pass `--' to verbose when
+ displaying program output.
+ * lib/remote.exp (standard_load): Pass `--' to verbose when
+ displaying program output.
+
+1998-09-29 Felix Lee <flee@cygnus.com>
+
+ * config/gdb_stub.exp: watch for the exitcodes generated by the
+ testglue wrapper. workaround for failing to hit _exit breakpoint.
+
+1998-09-18 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * testsuite/runtest.all/options.exp: Also pass --srcdir to the
+ child runtest being tested, so it doesn't try to execute the
+ config files.
+
+Thu Sep 17 18:03:16 1998 Christopher Faylor <cgf@cygnus.com>
+
+ * runtest.exp: Allow // at beginning of path spec since
+ this is a valid Windows (Posix?) construction.
+
+Tue Sep 15 17:06:17 1998 Nick Clifton <nickc@cygnus.com>
+
+ * config/gdb-comm.exp: Catch RDI_open failure.
+
+Mon Sep 14 20:00:57 1998 Michael Snyder <msnyder@cleaver.cygnus.com>
+
+ * baseboards/m68k-emc.exp: New file.
+ * config/m68k-emc.exp: New file.
+
+1998-09-12 Michael Meissner <meissner@cygnus.com>
+
+ * baseboards/powerpc{,le}-sim.exp: Call process_multilib_options
+ so multilib tests can be run.
+
+Fri Sep 4 09:26:47 1998 Nick Clifton <nickc@cygnus.com>
+
+ * lib/utils.exp (proc prune): Initialise $tmp to an empty list.
+
+Mon Aug 31 13:43:47 1998 Tom Tromey <tromey@cygnus.com>
+
+ * lib/libgloss.exp (find_gcj): Renamed from find_gjavac; compiler
+ now named `gcj'.
+
+Tue Aug 25 13:31:18 1998 Anthony Green <green@cygnus.com>
+
+ * lib/libgloss.exp (find_gjavac): New function.
+
+1998-08-25 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * lib/framework.exp(check_conditional_xfail): Add spaces to the
+ search pattern, so it doesn't match just part of an option.
+
+1998-08-24 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * runtest: Update copyright date.
+ * runtest.exp: Add compiler_flags as a new global variable.
+ * lib/framework.exp: Add new proc, check_conditional_xfail. This
+ is like xfail, only it looks in all the compiler options for
+ options to determine the actual test result state.
+ (pass,fail): If there is a conditional xfail setup, check the
+ condition to determine the actual test result state.
+ * lib/target.exp(default_target_compile): Set the global
+ compiler_opts to the compiler flags used to invoke the compiler.
+
+Sat Aug 1 08:02:15 1998 Mark Alexander <marka@cygnus.com>
+
+ * config/mn10200-eval.exp: New file.
+ * baseboards/mn10200-cygmon.exp: New file.
+
+Wed Jul 8 11:41:21 1998 Jeffrey A Law (law@cygnus.com)
+
+ * baseboards/mn10200-sim.exp: Update for recent mn10200 newlib/libgloss
+ changes.
+
+Fri Jun 5 11:29:26 1998 Felix Lee <flee@cygnus.com>
+
+ * config/gdb_stub.exp (gdb_stub_load): fix typo
+
+Thu Jun 4 14:16:32 1998 Felix Lee <flee@zog.cygnus.com>
+
+ * config/gdb_stub.exp (gdb_stub_wait): watch for "Program exited",
+ which may happen on segv or similar.
+ (gdb_stub_start,gdb_stub_wait): need to save exit_brnum and
+ abort_brnum.
+ (gdb_stub_ld): delete old breakpoints when loading a new program.
+ (gdb_stub_spawn): return the right result.
+
+ * baseboards/d10v-sim.exp: add process_multilib_options.
+
+Tue Jun 2 01:51:47 1998 Mark Alexander <marka@cygnus.com>
+
+ * baseboards/sparclite-sim-le.exp: New file.
+
+Mon Jun 1 00:15:34 1998 Angela Marie Thomas (angela@cygnus.com)
+
+ * config/sim.exp (spawn_sim): Pass sim,options to the standalone
+ simulator if set.
+ * baseboards/sparclite-sim.exp: Set sim,options and
+ gdb,target_sim_options.
+
+Mon Jun 1 01:40:26 1998 Felix Lee <flee@zog.cygnus.com>
+
+ * runtest.exp(iterate_target_variants_two): concat multiple globs
+ correctly.
+
+Tue May 26 17:56:57 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/dos.exp(dos_send): Handle text without newlines
+ properly.
+
+Sun May 17 17:08:46 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/sh-hms-sim.exp: Need to pass "18" to the target sim
+ command in GDB.
+
+ * baseboards/sparclite-sim.exp: Need to pass "-sparclite" to the
+ target sim command in GDB.
+
+Thu May 14 12:03:36 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(remote_exec): Add optional timeout
+ parameter. Move local execution code to...
+ (local_exec): New procedure.
+
+Wed May 13 18:41:23 1998 John Metzler <jmetzler@cygnus.com>
+
+ * runtest.exp (main) : Add printout of schedule of variations
+
+Fri May 8 14:36:49 1998 Doug Evans <devans@canuck.cygnus.com>
+
+ * baseboards/basic-sim.exp (find_sim): Check $SIM first.
+ (setup_sim): Rename arg `name' to `subdir_name'. Print message
+ of simulator found.
+
+Tue Apr 28 14:12:01 1998 Mark Alexander <marka@cygnus.com>
+
+ * lib/libgloss.exp (libgloss_link_flags): Recognize sparc86x target.
+
+Sun Apr 19 09:29:44 1998 Mark Alexander <marka@cygnus.com>
+
+ * baseboards/sparclite-sim.exp: New file.
+
+Tue Apr 14 09:55:37 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/telnet.exp: Look for "VxWorks Boot"; be a bit more picky about
+ looking for "account name" prompt.
+
+Mon Apr 6 13:14:52 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/ddb-ether.exp(remote_wait): If we see "Exception Cause"
+ from the board, reboot it.
+
+Thu Apr 2 18:22:33 1998 Jim Wilson <wilson@cygnus.com>
+
+ * lib/target.exp (prune_warning): Extend regexp for Irix6 warnings
+ to handle all 3 linker names.
+
+Thu Apr 2 15:39:38 1998 Felix Lee <flee@zog.cygnus.com>
+
+ * config/sim.exp(sim_spawn): code for remote host was wrong.
+
+Tue Mar 31 00:31:53 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/dos.exp: Disable GDB interrupt tests if we're testing
+ on a DOS host.
+
+Mon Mar 30 23:44:19 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/dos.exp(dos_send): Don't send string if we've already
+ sent it once.
+
+Thu Mar 26 11:34:18 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(remote_exec): Need to look at the result from
+ wait if we used spawn.
+
+Wed Mar 25 22:20:25 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(remote_exec): More attempts at working around
+ tcl/expect's inadequacies in dealing with processes.
+
+1998-03-25 Brendan Kehoe <brendan@cygnus.com>
+
+ * contrib/test-g++: Only do the libg++ tests if the directory exists.
+
+Wed Mar 25 12:24:25 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/basic-sim.exp(find_sim): Search for the sim rather than
+ assuming tool_root_dir points to the right place.
+
+Tue Mar 24 16:07:51 1998 Stu Grossman <grossman@bhuna.cygnus.co.uk>
+
+ * configure doc/configure example/configure example/calc/configure
+ testsuite/configure: Regenerate with autoconf 2.12.1 to fix shell
+ issues for NT native builds.
+
+Sun Mar 15 23:25:06 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/target.exp(default_target_compile): If the compiler produced
+ no output and the compiler execution failed, return a string
+ signifying this. (This is the wrong fix, but...)
+
+ * lib/remote.exp(remote_exec): Don't append arbitary strings to
+ the output from the program; callers must check the exit status.
+ Also, when killing a runaway process, try sending a SIGINT before
+ sending a SIGTERM (may help to terminate gcc properly).
+
+Mon Mar 9 01:54:39 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(remote_exec): Use spawn directly, rather than
+ trying to potentially manage multiple spawn processes on the same
+ host.
+
+Sun Mar 8 21:40:40 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(remote_exec): Use remote_spawn and remote_wait
+ if the machine is local.
+
+Fri Mar 6 23:28:59 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/sparclite-cygmon.exp: New file.
+
+Wed Mar 4 18:05:46 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/basic-sim.exp(find_sim): Don't search tool_root_dir
+ because it's always the root of the tree.
+ (setup_sim): Don't pass tool_root_dir to find_sim.
+
+Tue Mar 3 00:08:53 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/unix.exp: Tell the benchmark code to use alarms.
+ * baseboards/basic-sim.exp(find_sim): Use tool_root_dir.
+ * baseboards/i960-cyclone.exp: Ditto.
+ * baseboards/op50n.exp: Ditto.
+ * baseboards/rom68k-idp.exp: Ditto.
+ * baseboards/sparclet-aout.exp: Ditto.
+
+Mon Mar 2 21:54:30 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/utils.exp(runtest_file_p): Be a bit more lenient about
+ what files we match.
+
+ * lib/telnet.exp: Clean up regexps.
+
+ * lib/target.exp(default_target_compile): Use tool_root_dir.
+ (target_link, default_link): New functions.
+
+ * lib/remote.exp: Wrap close statements with catch.
+
+ * lib/framework.exp(cleanup): Remove unused global declaration.
+
+ * config/unix.exp(unix_load): Unset LD_LIBRARY_PATH and
+ SHLIB_PATH after loading.
+
+ * config/sim.exp(sim_spawn, sim_wait): New functions.
+
+ * config/i960.exp(i960_spawn, i960_wait): New functions.
+ (i960_load): Use spawn and wait.
+
+ * config/gdb-comm.exp: Use tool_root_dir instead of objdir.
+ * config/ddb.exp: Ditto.
+
+ * config/gdb_stub.exp: Use tool_root_dir.
+ (gdb_stub_spawn, gdb_stub_wait): New functions.
+ (gdb_stub_load): Use spawn and wait.
+
+ * config/dos.exp(dos_send): Send strings one line at a time.
+ (dos_file): Delete files using del instead of rm.
+
+ * config/ddb-ether.exp(ddb_ether_spawn, ddb_ether_wait): New functions.
+
+ * config/cygmon.exp: Set send_initial_cr.
+
+ * runtest.exp: Must process tool_root_dir option in multiple
+ places (should be fixed!)
+
+Mon Feb 23 09:08:43 1998 Mark Alexander <marka@cygnus.com>
+
+ * baseboards/mn10300-sim.exp: Use libgloss when compiling/linking,
+ and new linker script sim.ld when linking.
+ * baseboards/mn10300-cygmon.exp: New file for MN10300 Cygmon.
+ * config/mn10300-eval.exp: New file for MN10300 eval board.
+
+Thu Feb 19 18:23:17 1998 John Metzler <jmetzler@cygnus.com>
+
+ * baseboards/mips64vr4100-sim.exp
+ Defines simulated test target for mips46vr4100-*-elf
+
+Wed Feb 18 15:29:12 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/libgloss.exp: Use tool_root_dir instead of base_dir or
+ objdir when searching for uninstalled libraries or executables.
+
+ * runtest.exp(tool_root_dir): New variable.
+
+Sat Feb 14 15:06:25 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/vxworks.exp(${board}_init): If we don't get useful info
+ from the 'p' command in the VxWorks boot ROM, reboot the board.
+ (vxworks_exec): Check more closely for problems executing the
+ testcase.
+
+Mon Feb 9 16:48:55 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/libgloss.exp(get_multilibs): If the compiler doesn't exist,
+ return nothing.
+ (find_ld): New function.
+
+ * config/powerpc-bug.exp: New file.
+
+ * baseboards/powerpc-bug.exp: Load the generic powerpc-bug
+ configuration.
+
+Mon Feb 2 15:44:10 1998 Bob Manson <manson@charmed.cygnus.com>
+
+ * contrib/test-tool (patterns): Glob pattern to match log files.
+ Add appropriate glob for new logfile naming scheme.
+
+Sun Feb 1 14:29:16 1998 Joseph H. Buehler <jhpb@sarto.gaithersburg.md.us>
+
+ * runtest: Handle finding runtest.exp better automounted
+ environments.
+
+Mon Jan 19 10:37:13 1998 Mark Alexander <marka@cygnus.com>
+
+ * config/dve.exp: New file to support Densan boards.
+ * baseboards/tx39-sim.exp: New file to support TX39 simulator.
+ * baseboards/tx39-dve.exp: New file to support Densan TX39 board.
+
+Tue Jan 13 01:21:14 1998 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * lib/libgloss.exp: Handle setting of LD_LIBRARY_PATH/SHLIB_PATH
+ when testing with installed libraries.
+
+1998-01-12 Brendan Kehoe <brendan@cygnus.com>
+
+ * contrib/test-tool (todayname): Refer to and use ChangeLog.egcs
+ instead of ChangeLog.fsf.
+
+Mon Jan 5 17:25:25 1998 Michael Meissner <meissner@cygnus.com>
+
+ * baseboards/d30v-sim.exp ({c,ld}flags): Set libgloss flags in
+ addition to newlib flags.
+
+Sun Dec 28 11:06:49 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Makefile.in: Change "gxx_includedir" to "gxx_include_dir".
+
+Tue Dec 23 14:46:44 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/gdb-comm.exp(gdb_comm_load): Use "signal 0" instead of
+ continue. Check for testcase_timeout board feature to determine
+ how long we wait before we decide the testcase has gone into
+ an infinite loop.
+
+ * baseboards/cygmon.exp: Set shell_prompt and send_initial_cr.
+
+ * lib/libgloss.exp(libgloss_link_flags): Add case for sparc64.
+
+ * baseboards/usparc-cygmon.exp: New file.
+
+Sat Dec 13 18:43:16 1997 Michael Meissner <meissner@cygnus.com>
+
+ * baseboards/d30v-sim.exp (ldflags): Fix typo.
+
+Thu Dec 11 20:23:28 1997 Jeffrey A Law (law@cygnus.com)
+
+ * config/unix.exp (unix_load): Set LD_LIBRARY_PATH and SHLIB_PATH
+ for native tests if ld_library_path is defined.
+ * lib/libgloss.exp (g++_link_flags): Build up ld_library_path.
+ (libstdc++_link_flags): Likewise.
+
+Thu Dec 11 12:35:12 1997 Michael Meissner <meissner@cygnus.com>
+
+ * baseboards/d30v-sim.exp (ldflags): Also set stack to end of
+ default 8 meg external area.
+
+Wed Dec 10 16:11:47 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/gdb-comm.exp(gdb_comm_load): Add more possible error
+ messages.
+
+ * lib/remote.exp(standard_close): Make sure we close both file
+ descriptors, if there are two.
+
+Wed Dec 10 14:35:05 1997 Michael Meissner <meissner@cygnus.com>
+
+ * baseboards/d30v-sim.exp (ldflags): Add -mextmem to allow testing
+ larger tests.
+
+Tue Dec 9 21:38:03 1997 Fred Fish <fnf@cygnus.com>
+
+ * lib/libgloss.exp (get_multilibs): Use previously set value
+ of "target_board" rather than "board", since it may not exist.
+
+Tue Dec 9 10:54:34 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(standard_wait): We have to call wait, even though
+ it can't possibly work.
+
+Mon Dec 8 11:55:33 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(remote_spawn): Use -leaveopen.
+ (standard_wait): If we used -leaveopen, call close ourselves.
+ (standard_close): Ditto.
+
+ * lib/libgloss.exp(get_multilibs): Remove bogus tests for board
+ variable. Only set the board's multitop variable if we didn't
+ get an explicit list of multilib options to use.
+
+Sun Dec 7 08:29:40 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(remote_spawn): Fix typo.
+ (standard_wait): If the process was created with a pipeline, we
+ have to use close instead of wait.
+
+Fri Dec 5 14:21:18 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(remote_spawn): If the "spawn -open" command
+ fails, clean up after the command we just spawned.
+
+Thu Dec 4 11:32:06 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(remote_open): Use catch.
+
+Tue Dec 2 22:44:42 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(remote_close): Move close statement after we
+ determine the PID. Look at fileid_pid feature.
+ (remote_spawn): If we're invoking a pipeline, stash the PID we
+ get in the board's fileid_pid feature.
+
+Sun Nov 30 19:09:49 1997 Jeffrey A Law (law@cygnus.com)
+
+ * lib/target.exp (prune_warning): Prune some unwanted warnings
+ from the HP assembler and gcc when using the HP assembler.
+
+Fri Nov 28 10:42:30 1997 Michael Meissner <meissner@cygnus.com>
+
+ * baseboards/d30v-sim.exp: Re-enable trampolines.
+
+Tue Nov 25 09:24:13 1997 Michael Meissner <meissner@cygnus.com>
+
+ * baseboards/d30v-sim.exp: Re-enable using label values.
+
+Mon Nov 24 09:56:20 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/cygmon.exp, baseboards/cygmon.exp,
+ baseboards/msparc-cygmon.exp: New files.
+
+ * config/i960.exp: Don't call perror.
+
+Sun Nov 16 20:55:59 1997 Michael Meissner <meissner@cygnus.com>
+
+ * baseboards/d30v-sim.exp: Turn off trampolines and label values
+ temporarily.
+
+Thu Nov 13 22:51:42 1997 Michael Meissner <meissner@cygnus.com>
+
+ * baseboards/d30v-sim.exp: New file for d30v support.
+
+Wed Nov 12 23:45:48 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/unix.exp(unix_load): Call remote_spawn and remote_wait
+ instead of using exec.
+
+ * lib/remote.exp(remote_wait): Use $dest, not host.
+
+Tue Nov 4 17:39:58 1997 Jim Wilson <wilson@cygnus.com>
+
+ * lib/target.exp (default_target_compile): Put math library
+ before linker script.
+
+Sun Oct 26 20:00:34 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/base68k.exp(base68k_wait): New procedure.
+ (base68k_load): Use remote_spawn and remote_wait.
+
+Sat Oct 25 21:48:36 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/base68k.exp(base68k_spawn): New procedure.
+
+Fri Oct 24 10:55:17 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/gdb-comm.exp: Add missing -re. If we get an EXIT message
+ from the remote system, we know that we've exited gdb.
+
+ * lib/remote.exp(standard_wait): Keep the timer running even if we
+ get output from the remote program.
+
+ * config/dos.exp(dos_wait): Ditto.
+
+Fri Oct 17 22:20:35 1997 Jeffrey A Law (law@cygnus.com)
+
+ * lib/libgloss.exp (find_g77): No longer need --driver stuff.
+
+Wed Oct 15 21:13:39 1997 Philippe De Muyter <phdm@macqel.be>
+
+ * runtest (mypath): Scan $PATH to set mypath if $0 does not give it.
+
+Mon Oct 13 11:09:09 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/base68k.exp(base68k_load): Don't call exp_continue
+ outside of an expect statement.
+
+Sun Oct 12 21:29:28 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.in: Replace datadir with dejadatadir throughout.
+
+Mon Oct 6 10:52:25 1997 Jeffrey A Law (law@cygnus.com)
+
+ * lib/libgloss.exp (find_g77): New function.
+
+Fri Oct 3 14:13:30 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/vr4100-ddb.exp: Fix start addresses.
+
+ * config/vxworks.exp: Remove 'set timeout' statements.
+
+ * runtest.exp: Always output board name of target.
+
+Tue Sep 30 15:35:03 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/arm-sim.exp: No longer uses underscores.
+ * baseboards/arm-ice.exp: Ditto.
+
+Tue Sep 30 12:47:19 1997 Doug Evans <dje@canuck.cygnus.com>
+
+ * lib/remote.exp (standard_file, cmp): Ensure file exists before
+ computing file size.
+
+Sun Sep 28 14:30:52 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/powerpc-sim.exp: The simulator directory is
+ named "ppc", not "powerpc".
+
+ * config/mips-idt.exp: Set the "syn-garbage-limit" gdb
+ value to 0.
+
+Sat Sep 27 22:11:45 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/libgloss.exp(get_multilibs): Return the multilib directory
+ that matches closest to the specified set of options.
+
+Fri Sep 26 10:20:56 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/libgloss.exp(find_binutils_prog): Changed from find_objdump.
+
+ * lib/remote.exp(remote_load): Use objcopy instead of objdump.
+
+Thu Sep 25 10:54:55 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/h8300.exp: Use global prefix_dir instead of
+ explicitly putting a pathname in the file.
+ * baseboards/i386-bozo.exp: Ditto.
+ * baseboards/i960-cyclone.exp: Ditto.
+
+Wed Sep 24 13:06:47 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/ddb.exp: Close the connection to the board after we've
+ initialized it.
+
+ * testglue.c: Add support for atexit() and _exit() if VXWORKS
+ is defined.
+
+ * lib/libgloss.exp(build_wrapper): Define VXWORKS if is_vxworks
+ target feature is set.
+
+ * config/vxworks.exp: Set is_vxworks and gdb,nosignals target
+ features.
+
+Tue Sep 23 17:56:43 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(remote_load): If is_simulator board feature is
+ set, don't try to cache executables for this target.
+
+ * baseboards/basic-sim.exp: Set is_simulator board feature.
+
+Thu Sep 18 20:31:57 1997 Jeffrey A Law (law@cygnus.com)
+
+ * lib/libgloss.exp (libio_include_flags): If we can't find
+ _G_config.h, look for iostream.list in the same directory.
+
+1997-09-18 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * contrib/test-tool: Put all of the failure stuff up above the
+ pass stuff.
+
+Tue Sep 16 22:15:20 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(remote_load): Skip all the caching code if the
+ REMOTELOAD_CACHE env variable isn't set. Use objdump to get only
+ the executable contents, so we avoid problems with timestamps in
+ the executable.
+ (remote_expect): Check remote_suppress_flag instead of
+ suppress_flag.
+
+ * config/tic80.exp: Set gdb,use_breakpoint_for_stub. Don't
+ bother skipping the float tests, as the gdb stub now traps
+ FPU errors.
+ * config/dos.exp: If there is a timeout, try to interrupt
+ the remote job.
+ (dos_interrupt_job): Return a null string on success.
+ (dos_copy_download): Make the files on the destination world-writable
+ as well.
+ (dos_copy_upload): Ditto.
+
+Fri Sep 12 11:10:42 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * testsuite/runtest.all/options.exp: Commented out failing strace
+ test--test is probably failing because of a TCL8 interaction.
+
+Thu Sep 11 18:13:11 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/tic80-board.exp: Added support for running gdb.
+
+ * config/dos.exp(dos_exec): Add support for an output file.
+
+ * lib/remote.exp(remote_load): Only cache executables that
+ pass. Allow use of a checksum program in place of caching the
+ entire executable.
+
+ * lib/libgloss.exp(find_objdump): New procedure.
+
+ * config/gdb_stub.exp: Don't loop forever in gdb_stub_ld.
+ (gdb_stub_retry_ld): New procedure.
+
+Wed Sep 10 12:58:11 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/tic80.exp: Add new procedure tic80_ld. Call
+ tic80_ld from tic80_load. Add settings for gdb testing.
+
+ * lib/remote.exp: Add missing quotes around eval arguments.
+
+Tue Sep 9 14:45:24 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/tic80.exp: Remove bogus call to "fix" program.
+ Add timeout to remote_wait.
+
+Tue Sep 9 11:40:01 1997 Doug Evans <dje@canuck.cygnus.com>
+
+ * config/arc.exp: New file.
+ * baseboards/arc-sim.exp: New file.
+
+Fri Sep 5 15:17:38 1997 Jeffrey A Law (law@cygnus.com)
+
+ * lib/libgloss.exp (get_multilibs): Search for "libraries" directory
+ as the toplevel multilib directory too.
+ (libstdc++_link_flags, libstdc++_include_flags): New functions.
+
+Wed Sep 3 16:55:52 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(standard_file): cmp now returns 0 on "files
+ identical", some other value if the files are different.
+
+ * baseboards/sh-hms-sim.exp: Need to pass -mieee when building
+ testcases that rely on IEEE-compliant behavior.
+ * baseboards/sh-hms.exp: Ditto.
+
+ * lib/remote.exp(remote_load): Remove spurious debug output.
+ Use "remote_file cmp" instead of invoking cmp directly.
+ (standard_file): Added cmp operation to compare two binary
+ files.
+
+ * lib/libgloss.exp: Add dwarf2 target variant.
+
+ * lib/target.exp: Make sure the CC_FOR_TARGET variable overrides
+ any default compiler.
+
+Tue Sep 2 18:28:53 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/gdb_stub.exp: Detect gratuitous change to sparclet
+ gdb target mode.
+
+ * lib/remote.exp(remote_expect): Added timeout setting.
+
+Tue Sep 2 16:39:21 1997 Doug Evans <dje@canuck.cygnus.com>
+
+ * dg.exp (dg-test): New arg -keep-output.
+
+Wed Aug 27 13:16:32 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/vxworks.exp: Set the gdb_prompt target feature to be
+ (vxgdb).
+
+Fri Aug 22 13:24:58 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/vxworks.exp: Check for negative values from the "value ="
+ return string. If preload_obj is a target feature, load the
+ specified object file after a reboot.
+
+Thu Aug 21 18:06:20 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/vx4300.exp: New file.
+
+Wed Aug 13 12:57:53 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * lib/target.exp (prune_warnings): Generalize alpha ld warning.
+ Also handle IRIX 6 linker "I give up" message.
+
+Tue Aug 12 21:44:58 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/framework.exp(clone_output): Don't use lindex on things that
+ aren't really lists.
+
+Mon Aug 11 20:51:08 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(remote_expect): Nasty ugliness to work around
+ change in behavior of lrange in tcl8.
+
+Sat Aug 9 00:59:47 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * config/netware.exp (${board}_init): Change ld.new to ld-new.
+
+Wed Aug 6 18:41:24 1997 Jason Merrill <jason@yorick.cygnus.com>
+
+ * lib/libgloss.exp (libio_include_flags): Look for _G_config.h, not
+ libio.a.
+
+Wed Aug 6 00:41:46 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * lib/libgloss.exp (find_gas): Look for as-new, not as.new.
+
+Sat Aug 2 20:44:55 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/gdb-comm.exp: Look for "Program exited with" exit status,
+ even though this should *never* appear (we're setting a breakpoint
+ in _exit and abort, duh).
+
+Fri Aug 1 15:56:06 1997 Felix Lee <flee@yin.cygnus.com>
+
+ * runtest.exp: "runtest gcc.c-torture/execute/execute.exp" didn't
+ work because expected global vars weren't set.
+
+Wed Jul 30 09:05:41 1997 Felix Lee <flee@yin.cygnus.com>
+
+ * lib/ftp.exp (ftp_download): and needed an -re flag. and changed
+ "Timeout" to "421", to catch other premature disconnects.
+
+Wed Jul 30 00:15:04 1997 Felix Lee <flee@cygnus.com>
+
+ * lib/ftp.exp (ftp_download): "Timeout ..." pattern wasn't listed
+ early enough to ever get matched.
+
+Mon Jul 28 21:20:59 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/libgloss.exp(get_multilibs): Iterate through the list of
+ compiler-specified options looking for a match, rather than
+ farting around with regexps.
+
+Mon Jul 28 15:28:09 1997 Felix Lee <flee@cygnus.com>
+
+ * lib/ftp.exp (ftp_upload): return localfilename, not
+ remotefilename.
+
+Mon Jul 28 15:28:09 1997 Felix Lee <flee@cygnus.com>
+
+ * config/base68k.exp (base68k_ld): need global objdir.
+
+Tue Jul 22 10:24:54 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * runtest.exp: More cleanups for setting isremote board feature.
+ Leave the previous setting alone if the board already has one.
+
+ * lib/framework.exp(is_remote): Add debugging info.
+
+ * lib/remote.exp(remote_spawn): If the local spawn fails, return
+ -1 instead of falling through.
+
+Mon Jul 21 14:30:01 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/target.exp(list_targets): Deleted, no longer meaningful.
+ (default_target_compile): Use warning instead of perror when
+ download fails. Delete an existing a.out object file if we're
+ running on a remote host.
+
+ * lib/libgloss.exp(libgloss_ld): Deleted, not used.
+
+ * config/dos.exp(dos_copy_download): If the local file doesn't
+ exist, don't try to download it.
+
+ * runtest.exp: Change tests for setting isremote board feature.
+ We assume the board is remote unless the name is the same as
+ the local hostname or we're defining the build board.
+
+Wed Jul 16 12:45:30 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/dos.exp(dos_copy_upload): If the remote file doesn't
+ exist, don't try to upload it.
+
+ * baseboards/basic-sim.exp: Don't transform the simulator name
+ using the target alias if no_transform_name is set on the host.
+
+ * lib/kermit.exp: Don't try to unset the file descriptor if it
+ isn't set.
+
+Mon Jul 7 12:01:54 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/m32r-sim.exp(ldflags): Use libgloss_link_flags, not
+ libgloss_include_flags.
+ * baseboards/m32r-elf.exp: Ditto.
+
+Sat Jul 5 18:42:52 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/libgloss.exp(libgloss_link_flags): Add sparclet->sparc CPU
+ mapping. (This needs to be fixed.)
+
+Thu Jul 3 15:34:21 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/ddb.exp: Use base68k instead of gdb-comm.
+
+ * stub-loader.c: Renamed from sparclet-loader.c.
+ * config/gdb_stub.exp: Refer to stub-loader.c now.
+
+Tue Jul 1 17:48:43 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * runtest.exp: Allow boards_dir to be a list of directories to
+ search for board descriptions.
+
+Mon Jun 30 19:12:14 1997 Stan Shebs <shebs@andros.cygnus.com>
+
+ * baseboards/arm-ice.exp: Board doesn't do I/O, signals,
+ or call functions from GDB.
+
+Mon Jun 30 18:32:44 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/arm-ice.exp: New file.
+ * baseboards/arm-ice.exp: New file.
+
+Sun Jun 29 22:12:51 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/arm-sim.exp: New file.
+
+ * lib/libgloss.exp(process_multilib_options): Added pe object format.
+
+ * baseboards/armpe-sim.exp: Removed file.
+
+Sat Jun 28 13:37:27 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/gdb_stub.exp: Use gdb_opts feature instead of a random
+ check if the host is remote.
+
+ * runtest.exp: Use the no_transform_name feature instead of
+ looking for a specific host triplet.
+
+ * baseboards/*-sim.exp: Use load_base_board_description, not
+ load_board_description.
+
+ * lib/target.exp(default_target_compile): If we're compiling
+ with the C++ compiler, include g++_include_flags and
+ g++_link_flags as appropriate.
+
+Fri Jun 27 15:17:12 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ (load_board_description): Set the board feature isremote if the
+ board appears to be remote.
+ Call setup_build_hook with the local hostname.
+
+ * lib/target.exp(push_build): New procedure.
+
+ * lib/framework.exp(is_remote): Detect if the board name specified
+ is the name of the build or host, and handle appropriately.
+
+ * lib/remote.exp(check_for_board_status): Be a bit more aggressive
+ about stripping trailing CRLFs.
+
+ * config/dos.exp(dos_exec): Add support for an input file.
+ (dos_load): Pass program arguments and input file to remote_exec.
+
+Wed Jun 25 20:01:37 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/target.exp(target_compile): Always add the target's cflags
+ spec. Use find_g++ to find a compiler if we've been asked to use a
+ C++ compiler.
+
+ * lib/remote.exp(remote_spawn): Wrap open and spawn
+ statements with catch.
+
+ * lib/libgloss.exp(g++_link_flags): Add -L options to point to the
+ correct libiberty and librx directories.
+ (find_g++): New routine.
+
+ * lib/kermit.exp: Loosen up the regexp matching the connect
+ string.
+
+ * lib/ftp.exp: Look for a "Timeout after..." message from
+ ftp.
+
+ * config/sparclet.exp: The gdb prompt is "gdbslet".
+
+ * config/gdb_stub.exp: If running on a remote host, add --command
+ gdbinit to the gdb command line. Use the gdb_is_running target
+ feature to keep track of whether or not we started gdb. Replace
+ errors with warnings in many cases.
+ (gdb_stub_load): Always set a breakpoint on exit if the
+ target feature always_break_exit is set. Retry the testcase
+ if it times out.
+ (gdb_stub_close): New routine.
+
+ * baseboards/sparclet-aout.exp: varargs and label values
+ apparently don't work. Always set a breakpoint at
+ exit() even if we can break at _exit instead.
+
+ * sparclet-loader.c: Add global variable "remote_debug"
+ initialized to 0.
+
+ * runtest.exp: If running on a DOS host, don't canonicalize
+ the tool names.
+
+ * config/i386-bozo.exp(${board}_reboot): Return 1.
+
+Mon Jun 23 14:55:13 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/gdb_stub.exp: Clean up a few regexps. Check for either
+ the breakpoint function name (preferred) or the breakpoint number.
+
+Sun Jun 22 12:31:02 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(standard_file): Add dirname, join, and absolute
+ operators.
+ (unix_clean_filename): New procedure.
+
+ * runtest.exp(lookfor_file): Call 'remote_file build dirname'
+ instead of appending "/..".
+
+ * lib/framework.exp(is_remote): Really fix the problem with
+ "unix/cpu=v8" this time. Minor cleanups.
+
+Wed Jun 18 21:21:00 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/ddb-ether.exp(ddb_ether_try): Fix typo.
+
+Tue Jun 17 16:18:00 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/base68k.exp: Wait for an entire line before appending
+ it to the result buffer.
+ (base68k_load): Check every optional argument, and don't allow
+ any (yet). Use -re in front of regular expressions.
+
+ * lib/framework.exp(is_remote): Strip off any variant info from
+ the board name before determining if the board is remote.
+
+Tue Jun 17 02:32:07 1997 Bob Manson <manson@farmer>
+
+ * config/gdb-comm.exp(gdb_comm_load): Check for parameters we don't
+ support, and return UNSUPPORTED as appropriate. Don't set a
+ breakpoint in exit if we can set one in _exit.
+ * config/gdb_stub.exp: Ditto.
+
+Mon Jun 16 16:07:32 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/dos.exp(dos_wait): Add timeout parameter.
+
+ * lib/remote.exp(remote_expect): Add timeout parameter.
+ (remote_wait): Ditto.
+ (standard_wait): Ditto. Also give up if the program outputs
+ more than 512,000 bytes.
+
+ * config/vxworks.exp: Use timeout parameter instead of setting
+ timeout variable.
+ * config/dos.exp: Ditto.
+ * config/ddb.exp: Ditto.
+ * lib/mondfe.exp: Ditto.
+ * lib/rlogin.exp: Ditto.
+ * lib/telnet.exp: Ditto.
+ * config/base68k.exp: Ditto.
+ * config/i386-bozo.exp: Ditto.
+ * config/gdb-comm.exp: Ditto.
+ * config/gdb_stub.exp: Ditto.
+ * config/i960.exp: Ditto.
+ * config/ddb-ether.exp: Ditto.
+ * config/sim.exp: Ditto.
+
+Fri Jun 13 19:54:24 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * contrib/test-tool: Default to assuming a standard tree
+ structure. Don't die if we don't have a previous file to
+ diff against--diff against /dev/null instead.
+
+ * config/m32r.exp: Misc fixes.
+
+ * config/m32r-stub.exp: New file.
+
+ * config/gdb_stub.exp: Download the loader program to the host
+ before we try to load it.
+
+ * config/dos.exp: Move the cygwin exception check to a point
+ earlier in the expect sequence.
+ (dos_copy_upload): New routine.
+
+Thu Jun 12 19:05:21 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * testglue.c (write_int): write_int takes two args.
+
+ * lib/target.exp(target_compile): Must insert spaces when
+ appending flags.
+
+ * lib/remote.exp(remote_reboot): Print a message stating that
+ the board is being rebooted.
+
+ * config/dos.exp(dos_exec): Call remote_wait instead of
+ doing it ourselves.
+ (dos_wait): Minor cleanups.
+
+Wed Jun 11 10:07:10 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/dos.exp: Look for "cygwin except" string and reboot
+ the board if we see it. Make sure we get output from the
+ right place.
+ (dos_exec): We always need to return a result list.
+
+ * lib/target.exp(target_compile): Strip extra newlines/CRs from
+ the start of the compiler output.
+
+ * config/dos.exp: Make sure we can have multiple spawned commands
+ open to the board without reusing the same batch file name. Use
+ the new conninfo board feature to hold the name of the batch file
+ being used for the current connection.
+ (dos_interrupt_job): New procedure.
+
+ * config/tic80.exp, baseboards/tic80-board.exp: New files.
+
+ * lib/remote.exp(remote_swap_conn): New procedure.
+ (remote_pop_conn,remote_push_conn): The conninfo board feature
+ is used to store data specific to the current connection; make
+ sure we update it correctly when we push and pop connections.
+
+Fri Jun 6 14:24:36 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/gdb-comm.exp: Fix typo (missing call to list).
+
+ * lib/libgloss.exp(g++_link_flags): Put spaces in appropriate
+ places. If we don't have a multilib pathname to use, try
+ global $objdir instead.
+ (g++_include_flags): Don't bother checking to see if the libraries
+ are there, just look for the source directories.
+
+Thu Jun 5 18:09:55 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/ddb.exp: Fix typo.
+
+ * lib/remote.exp(remote_close): Use nasty ugly shell stuff to kill
+ the program being closed.
+ (remote_expect): Make sure expect fails if there isn't a
+ connection open to the requested board.
+
+ * lib/libgloss.exp(winsup_include_flags,winsup_link_flags): New
+ functions.
+
+ * baseboards/dos.exp: Fix link flags and prompt regexp.
+
+ * config/dos.exp(dos_load): New function.
+
+Tue Jun 3 12:04:15 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/unix.exp: Add call to process_multilib_options.
+
+ * runtest.exp: Clean up target iteration expansion.
+
+ * testglue.c: Add #ifndef NO_UNISTD_H test.
+
+ * config/vxworks.exp: Try to boot the system into the desired OS.
+
+ * lib/telnet.exp(telnet_open): Remove the option of passing
+ the port #. If the first optional argument is "raw", return
+ immediately rather than trying to look for a shell prompt.
+
+ * lib/util-defs.exp: Remove expect_before statement.
+
+ * config/gdb-comm.exp(gdb_comm_add_breakpoints): Check for "No
+ symbol table" message from gdb.
+
+ * config/vxworks.exp(*_load): Don't set global exec_output
+ variable. We return a list of two members, the first containing
+ the pass/fail string, and the second containing the output
+ from the executable.
+ * lib/dg.exp(dg-test): Ditto.
+
+ * config/rom68k.exp: Fix shell_prompt value (add a space at the
+ end).
+
+ * baseboards/h8300.exp: Put back magic linker script brain-damage.
+
+ * baseboards/mips-sim.exp: Check for ecoff object file format,
+ and use idtecoff.ld instead of idt.ld.
+
+ * config/dos.exp(dos_wait): Wait for a shell prompt from
+ the board before returning.
+
+ * config/i960.exp: Detect if the board starts spewing nonsense,
+ and reboot it if it does.
+ * config/base68k.exp: Ditto. Also tighten up the checks for
+ a shell prompt.
+
+ * lib/remote.exp: Add a bit more debugging output. Use -9 when
+ killing the process.
+
+Mon Jun 2 09:50:33 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(standard_close): Check the return value from
+ catch. Fix quoting on the after command.
+
+ * baseboards/rom68k-idp.exp: Look for a.out object file format.
+
+ * baseboards/vr4300-sim.exp: Look for ecoff object file format.
+ * baseboards/vr4300-ddb.exp: Ditto.
+ * baseboards/mips-idt.exp: Ditto.
+
+ * lib/libgloss.exp: Set the board's obj_format feature according
+ to the specified object file format. Handle "stabs" variant.
+
+ * baseboards/i960-cyclone.exp: Mark the board as being unreliable.
+
+ * config/i960.exp: Check for a couple of common failure modes and
+ reboot the board as needed. Also reboot if the testcase fails and
+ the board is marked as "unreliable".
+
+Sun Jun 1 16:48:30 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/base68k.exp: Add base68k_ld procedure. Clean up a few
+ regexps.
+
+ * baseboards/rom68k-idp-aout.exp: We need to pass the load offset
+ to gdb's load command.
+
+ * baseboards/rom68k-idp.exp: Use -msoft-float by default.
+
+ * lib/telnet.exp: If dont_wait_for_prompt is set, don't bother
+ trying to get a prompt back before returning.
+
+ * config/i960.exp(${board}_init): Send several CRs in order to get
+ a prompt from the board (fun with autobaud). Set
+ dont_wait_for_prompt. Clear exec_output.
+
+Sat May 31 00:29:33 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/base68k.exp: Handle various errors more gracefully.
+
+ * config/dos.exp(dos_start_command): Flush any pending output
+ before sending the new command to be run. Make regexp for
+ prompt more strict.
+
+ * contrib/test-tool: Add support for compressed log files.
+ (Can't compress ChangeLog files yet.)
+
+Fri May 30 15:08:15 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/libgloss.exp(build_wrapper): New procedure.
+
+ * config/base68k.exp: Check for use_vma_offset target feature.
+ Make sure we keep in sync with the remote target.
+
+ * baseboards/rom68k-idp-aout.exp: Try using objcopy again.
+ Make sure we link with -N.
+
+ * testglue.c: Handle m68k-aout specially.
+
+Thu May 29 19:57:47 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * testglue.c: Include sys/unistd.h.
+
+ * lib/telnet.exp: Use $connhost correctly.
+
+ * lib/remote.exp(remote_wait, remote_raw_wait, standard_wait): New
+ procedures.
+
+ * config/sim.exp(sim_load): Use remote_wait to wait on the
+ spawned child.
+
+ * config/dos.exp(dos_spawn): Make sure we can return an exit
+ status from the spawned command.
+ (dos_wait): New procedure.
+
+Thu May 29 15:08:07 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/rom68k-idp-aout.exp: Status wrapper seems to be
+ working in devo.
+
+Wed May 28 12:34:28 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/sparc64-sim.exp: New file.
+
+ * baseboards/vx68k.exp: New file.
+
+ * lib/libgloss.exp(newlib_link_flags): Also look for the linker
+ script directory that's part of ld, and include it if it
+ exists.
+
+Tue May 27 20:00:01 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/libgloss.exp(libgloss_link_flags): If we're building
+ for a powerpc target, the cpu is rs6000, not powerpc.
+
+Sat May 24 11:31:26 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/gdb-comm.exp: Strip off "Continuing." response
+ from gdb. Set the height and width to 0 so GDB doesn't
+ try to scroll.
+
+Fri May 23 12:02:29 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/i960-cyclone.exp: It's noargs now.
+
+ * lib/remote.exp(call_remote): Make sure we set the
+ board's database name entry if we tried to load it.
+
+ * lib/libgloss.exp(process_multilib_options): Look for aout and
+ elf board variants, and set is_aout/is_elf as appropriate.
+
+ * lib/targetdb.exp(set_currtarget_info,unset_currtarget_info):
+ New functions.
+
+ * config/gdb-comm.exp: Check for gdb_sect_offset target feature;
+ if it's set, adjust the sections in the executable with the
+ .sect command.
+
+ * config/i386-bozo.exp: New file.
+ * baseboards/i386-bozo.exp: New file.
+
+Thu May 22 15:24:48 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/op50n.exp: Set gdb,timeout to 9 minutes.
+
+ * config/base68k.exp: Display the output from the board in
+ verbose mode.
+
+ * config/proelf.exp: Use base68k to load programs instead of
+ GDB.
+
+ * baseboards/hppa-proelf.exp: Renamed to baseboards/op50n.exp.
+
+ * lib/libgloss.exp: Make sure we don't include the libio
+ stdio directory.
+
+Wed May 21 22:58:05 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/i960-cyclone.exp: Link with i960.ld linker
+ script.
+
+Tue May 20 19:03:54 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/sim.exp: Check for magic CHILDKILLED nonsense from
+ wait.
+
+Mon May 19 13:07:01 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/i960-cyclone.exp: New file.
+ * config/i960.exp: New file.
+
+Tue May 20 17:55:39 1997 Jeffrey A Law (law@cygnus.com)
+
+ * config/sim.exp: Set "slow_simulator".
+
+Tue May 20 08:54:55 1997 Jeffrey A Law (law@cygnus.com)
+
+ * baseboards/*: Change "gdb,noargs" to just "noargs".
+
+Mon May 19 13:07:01 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/telnet.exp: Backquote the braces in "VxWorks Boot"
+ correctly this time.
+
+ * lib/remote.exp: Use catch to wrap exp_pid calls.
+
+Sat May 17 21:44:08 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(standard_close): Don't wait forever on close; if
+ it's a process, give it a SIGTERM after 10 seconds.
+ (remote_spawn): Make sure stderr and stdout all go to the same
+ place.
+
+Sat May 17 19:10:36 1997 Fred Fish <fnf@cygnus.com>
+
+ * Makefile.in (install): Add missing ';' to datadir for...done.
+
+Fri May 16 23:30:27 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/powerpc-sim.exp: Can't call functions from within
+ GDB.
+
+Wed May 14 20:59:11 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/libgloss.exp: Add spaces before options passed to
+ the compiler.
+
+Fri May 16 10:11:54 1997 Jeffrey A Law (law@cygnus.com)
+
+ * baseboards/mn10200-sim.exp: Remove redundant setting of
+ "cflags".
+ * baseboards/mn10300-sim.exp: Likewise.
+
+Thu May 15 14:26:20 1997 Mike Meissner <meissner@cygnus.com>
+
+ * baseboards/tic80-sim.exp (gcc,no_varargs): Set to 1, the TIC80
+ doesn't support varargs.
+
+Tue May 13 11:51:06 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * Makefile.in (install): Take out errant semicolon.
+
+Mon May 12 21:48:52 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/libgloss.exp(find_gas): New procedure.
+
+ * lib/target.exp(default_target_compile): Look for
+ CC_FOR_TARGET and CFLAGS_FOR_TARGET global variables.
+ (target_assemble,default_target_assemble): New procedures.
+
+Thu May 8 21:53:03 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * runtest.exp: Add more informative startup messages describing
+ the various files that are being loaded.
+ (setup_target_hook): Give a warning if a target board is the local
+ machine and a "non-native" test is being run; check if the user
+ has set their DEJAGNU variable.
+
+Tue May 6 14:27:11 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * runtest.exp(lookfor_file): Use .. instead of [file dirname].
+
+Mon May 5 22:06:14 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/vxsparc.exp: New file.
+
+ * config/vxworks.exp: Look for [VxWorks Boot] prompt.
+ * lib/telnet.exp: Ditto.
+
+Fri May 2 15:19:00 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(remote_spawn): Add new argument for readonly
+ or writeonly processes, and use open to create a pipeline when
+ it is given.
+ * config/sim.exp(sim_load): Use it.
+
+Fri May 2 10:47:40 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/tic80-sim.exp: New file.
+
+Thu May 1 14:42:51 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/d10v.exp: Set gdb,short_int.
+ * baseboards/d10v-sim.exp: Ditto.
+ * baseboards/h8300.exp: Ditto.
+ * baseboards/h8300-sim.exp: Ditto.
+
+ * lib/remote.exp(remote_download): Ignore "files are identical"
+ error from cp.
+
+ * testglue.c: Renamed from test-glue.c.
+
+Tue Apr 29 17:42:22 1997 Jeffrey A Law (law@cygnus.com)
+
+ * baseboards/h8300-sim.exp: Remove magic linker script braindamage.
+ Set gdb,noinferiorio, gdb/noresults, gcc,stacksize and no_long_long.
+ * baseboards/h8300.exp: Similarly.
+
+Tue Apr 29 12:56:53 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/rlogin.exp: Misc cleanups.
+
+ * lib/libgloss.exp(g++_include_flags): Don't skip if native. We're
+ also building multilib versions of the libraries now, so don't
+ pass a null argument to get_multilibs.
+ (g++_link_flags): Ditto.
+
+Mon Apr 28 12:14:27 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/telnet.exp: Default to /usr/kerberos/bin/telnet if it
+ exists.
+
+ * lib/target.exp(target_compile): Add use_at target feature, to
+ support using the @file syntax of GCC on a go32 host.
+
+ * lib/rlogin.exp(rlogin_open): Don't try to open a connection if
+ we already have one open. Use hostname and shell_prompt features of
+ target. Remove gratuitous $type variable. Don't use $board here.
+ Don't die if we get Kerberos login failures; the destination may
+ not support kerberos.
+ (rlogin_spawn): New function.
+
+ * lib/libgloss.exp(g++_include_flags): Use spaces in
+ appropriate places when appending flags.
+
+Fri Apr 25 19:03:55 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/sim.exp(sim_load): Stop using bash/ulimit. If an input
+ file is supplied, feed it into the simulator using
+ remote_transmit.
+
+Thu Apr 24 14:37:01 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/libgloss.exp(g++_include_flags): Make sure libg++/src
+ is part of the include path.
+
+ * lib/telnet.exp(telnet_open): Look for "simple or advanced"
+ prompt from ataman. Use $connhost instead of $hostname
+ correctly. Check for hostname feature of target machine.
+
+Fri Apr 18 16:43:39 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/sh-hms.exp: Set exit_statuses_bad.
+
+ * lib/telnet.exp: Handle more unexpected responses from telnet.
+ Don't give a warning if we don't get a prompt back after sending
+ the escape character.
+
+ * config/gdb-comm.exp: Check for SIGTRAP; retry if we get one.
+ Also reboot if the program gets any other signal. Check for
+ exit_statuses_bad on the target.
+
+ * config/base68k.exp: Retry if we didn't get a real exit status.
+
+Thu Apr 10 20:04:14 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/h8300.exp: The board is unreliable, make sure failing
+ commands get retried.
+
+ * Makefile.in: Make sure we copy in any .c stub files.
+
+ * config/dos.exp: Use the pid as part of the file in /tmp;
+ delete the file after we're done. Don't create the file
+ locally until we're ready to download it (in case we're
+ being called recursively).
+
+Thu Apr 10 14:35:02 1997 Jeffrey A Law (law@cygnus.com)
+
+ * baseboards/mn10300-sim.c: The mn10300 can perform inferior
+ function calls.
+
+Wed Apr 2 19:35:13 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/h8300.exp: Add appropriate references to linker
+ scripts. Set noinferiorio, and noresults.
+
+Sun Mar 30 00:25:59 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/ddb-ether.exp: Check for "Exception Cause" from the
+ monitor, and also retry 3 times on "invalid executable" message.
+
+ * config/ddb.exp: Add timeout section. Reboot the
+ board if we can't get any sort of a prompt.
+
+ * config/dos.exp(dos_exec): Return an error status
+ when the connection fails to the remote host. Retry
+ connecting several times, and also call remote_reboot
+ as appropriate.
+
+ * lib/ftp.exp: Check return value from ftp_open.
+
+Sat Mar 29 00:42:59 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/*.exp: General cleanup, yet again. Take
+ advantage of the new target variant support.
+
+ * runtest.exp: Fix everyone's favorite bug; now it says
+ "interrupted by user" instead of "segmentation violation"
+ when ^C is pressed.
+
+ * baseboards/vr4300-ddb.exp: Set gdb,noargs and gdb,nosignals.
+
+ * config/dos.exp: Increase timeout on program execution
+ to 5 minutes. Pass target alias to initialization
+ script. Don't delete the remote batch file.
+
+Thu Mar 27 01:38:35 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/framework.exp(is_remote): Use current_target_name, not
+ current_target.
+
+ * baseboards/m32r-sim.exp: Don't set unnecessary options here.
+
+ * lib/target.exp(default_target_compile): Add ldscript
+ option.
+
+ * config/gdb_stub.exp: Check for netport as well as serial. Use
+ gdb,start_symbol as appropriate.
+
+Wed Mar 26 16:45:42 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * runtest.exp(process_target_variants,iterate_target_variants): New
+ procedures, called as part of building up the list of targets
+ to test.
+
+ * lib/libgloss.exp(process_multilib_options,add_multilib_option): New
+ procedures.
+
+ * baseboards/*.exp: Call process_multilib_options instead of setting
+ multilib_flags directly.
+
+Wed Mar 26 16:04:48 1997 Doug Evans <dje@canuck.cygnus.com>
+
+ * baseboards/m32r-sim.exp (multilib_flags): Test all code models.
+
+Wed Mar 26 13:55:19 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/a29k-udi.exp: Don't use libio.
+
+Tue Mar 25 15:22:24 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/libgloss.exp(libgloss_link_flags): Always add a -L
+ pointing to the libgloss source directory, if it exists.
+
+ * lib/telnet.exp(telnet_binary): Thanks, HPsUX.
+ * lib/rsh.exp:(rsh_exec) Likewise, I'm sure.
+
+Mon Mar 24 22:20:18 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/dos.exp: Grab the exit status from the command we
+ executed.
+
+Sat Mar 22 13:07:52 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/mondfe.exp: General cleanups; don't be quite so
+ picky about when a prompt should appear (the last
+ step may not always be clearing the BSS section).
+
+ * config/gdb-comm.exp: Check for response when setting
+ baud rate.
+
+ * config/udi.exp: Don't be quite so picky when checking
+ for "Halt instruction encountered".
+
+ * testsuite/runtest.all/*.test: $srcdir/$subdir, not
+ $srcdir$subdir.
+
+Fri Mar 21 17:36:29 1997 Michael Meissner <meissner@cygnus.com>
+
+ * baseboards/d10v-sim.exp (sim_time_limit): Bump the default time
+ limit to 10 minutes, since gcc.c-torture/execute/920501-6.c takes
+ quite a while to do 64 bit arithmetic on a 16 bit host.
+
+Fri Mar 21 01:02:39 1997 Jeffrey A Law (law@cygnus.com)
+
+ * baseboards/mn10300-sim.exp: The mn10300 can't perform
+ inferior function calls yet.
+
+Thu Mar 20 22:45:18 1997 Jeffrey A Law (law@cygnus.com)
+
+ * testsuite/runtest.all/options.exp: Remove "baud" test.
+
+Tue Mar 18 15:15:16 1997 Jeffrey A Law (law@cygnus.com)
+
+ * baseboards/mn10300-sim.exp: Various updates from mn10200-sim.exp.
+
+Mon Mar 17 15:11:03 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * testsuite/runtest.all/stats-sub.exp: Add missing brace.
+
+ * config/sim.exp: If bash isn't in the user's path, then use spawn
+ and expect to try and catch cases where the simulator has gone
+ into an infinite loop.
+
+Thu Mar 13 11:59:52 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * runtest.exp: If running on multiple targets, output a summary
+ for each target. Use log_and_exit instead of log_summary.
+
+ * lib/framework.exp: Use an array (test_count) instead of
+ separate variables for each pass/fail/xpass/... count.
+ (log_and_exit, init_testcounts,incr_count): New procedures.
+
+ * lib/debugger.exp: Call log_and_exit instead of log_summary.
+
+ * lib/libgloss.exp(get_multilibs): Use -all. Substitute " -"
+ with " ", not the null string.
+
+Thu Mar 13 11:21:56 1997 Angela Marie Thomas (angela@cygnus.com)
+
+ * baseboards/mips-lsi-sim{,-EL,-sf,-sfEL}.exp: New files.
+
+Wed Mar 12 16:37:03 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/h8300-sim.exp: Add noargs and nosignals.
+ * baseboards/h8300.exp: Ditto.
+
+Tue Mar 11 17:17:43 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/gdb-comm.exp: If we're talking to a remote host,
+ download the executable being loaded before starting GDB.
+ Check for the gdb_opts feature of the host.
+ (gdb_comm_leave): New procedure. If we're talking to a
+ remote host, always start and exit gdb for each download.
+
+ * config/dos.exp: Use remote_expect.
+
+ * config/ddb.exp: If we're talking to a remote host, don't
+ try to init the prompt.
+
+ * baseboards/vr4300-ddb.exp: Don't link in libio.
+
+ * baseboards/vr4100-ddb.exp: Don't link in libio. Do use
+ -msoft-float "just in case".
+
+ * baseboards/sh-hms.exp: We need to pass in the -L options
+ for the libgloss directories so we find the linker scripts.
+
+ * baseboards/dos.exp: Make sure --command gdbinit is passed
+ to gdb.
+
+ * runtest.exp: Prefer target_alias over target_install.
+ * baseboards/basic-sim.exp: Ditto.
+
+Sat Mar 8 12:01:04 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/mn10200-sim.exp: Fix comment.
+
+ * baseboards/sh-hms.exp: Include libgloss so we can find
+ the linker scripts.
+
+ * baseboards/sh-hms-sim.exp: Ditto.
+
+ * config/vxworks.exp: Add additional error checking cases. Remove
+ unused procedure "vxworks_transform_path".
+
+Fri Mar 7 13:53:35 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/vr5000-ddb.exp: Add configury for nullstone.
+ * baseboards/vr4300-ddb.exp: Ditto.
+
+ * config/ddb-ether.exp(ddb_ether_ld): New routine.
+ (ddb_ether_try): Use ddb_ether_ld.
+ (ddb_ether_load): Make sure we return "fail" at the end of the loop.
+
+ * config/bug.exp: Use set_board_info.
+
+ * baseboards/vr4300-sim.exp: Use mips-sim as a base configuration.
+
+ * config/gdb_stub.exp: Use remote_expect.
+
+ * lib/remote.exp(remote_ld, remote_raw_ld, remote_push_conn,
+ remote_pop_conn): New routines.
+
+Thu Mar 6 09:34:39 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/ddb-ether.exp: Use remote_expect and remote_send.
+ * config/vxworks.exp: Ditto.
+
+ * runtest.exp: Remove --baud and --connect options, no longer
+ functional.
+ (setup_target_hook): Use the hostname of the local machine when
+ searching for a board file, if a board wasn't specified with
+ --host_board.
+
+Wed Mar 5 09:37:55 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/base68k.exp: Use $dest instead of target, and remote_send
+ and remote_expect.
+
+ * lib/framework.exp(clone_output): If $sum_file is null, don't try
+ to write to the file.
+
+ * config/ddb-ether.exp(ddb_ether_try): Add -re to regexp pattern.
+
+ * baseboards/mips-sim.exp: New file.
+
+ * runtest.exp: Move loading the libraries and the
+ tool initialization file before the start of the
+ file. Allow the tool to add additional options to runtest.
+ (transform): target_install is now a list kept as part of the
+ board description. Search the list for the current target alias;
+ if found, use in preference to the default target_install entry.
+
+ * lib/targetdb.exp(set_board_info,unset_board_info): New procedures.
+
+ * baseboards/*.exp: Use set_board_info instead of setting entries
+ in the board_info array directly. Also, some general cleanup,
+ removal of useless entries, etc.
+
+Tue Mar 4 22:58:37 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/vr5000-ddb.exp: Set gdb,nosignals and gdb,noargs.
+
+Tue Mar 4 14:43:50 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/powerpc-sim.exp: Set gdb,nosignals.
+
+Mon Mar 3 12:38:28 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/base68k.exp(base68k_load): Send an extra CRLF pair.
+
+ * lib/telnet.exp(telnet_binary): Only send a linefeed to telnet
+ after the command. Don't send an extra CRLF pair after the
+ command.
+
+ * config/ddb-ether.exp: Minor cleanups.
+
+ * lib/remote.exp(remote_expect): New procedure.
+
+Fri Feb 28 17:04:11 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/vr5000.exp: Use ddb-ether, as it's faster.
+
+ * baseboards/vr5000-ddb.exp: Use ddb.ld. Add setup info for
+ nullstone. Mark it as unreliable, as it gets random SIGFPEs.
+
+ * runtest.exp(setup_target_hook): Call perror instead of error.
+
+ * config/ddb-ether.exp: New file.
+
+Thu Feb 27 12:58:01 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/rom68k-idp.exp: Set gdb,noargs gdb,nosignals
+ and gdb,noresults.
+
+ * config/vr5000.exp,baseboards/vr5000-ddb.exp: New files.
+
+ * config/ddb.exp(${board}_init): Don't go into a recursive
+ tailspin.
+
+ * config/gdb-comm.exp(quit_gdb): New procedure.
+ (gdb_comm_load): Use it. Check for board feature
+ "unreliable". If the testcase times out, try rebooting the board
+ and reexecuting before deciding that the testcase is going into an
+ infinite loop.
+
+ * lib/rsh.exp(rsh_exec): Explicitly call sh.
+
+ * lib/telnet.exp(telnet_open): Make sure we wait for the telnet to
+ exit after closing it.
+
+ * test-glue.c: Include stdio.h and string.h.
+
+ * lib/remote.exp(standard_load): program args are in 0, input
+ is in 1.
+
+ * config/vxworks.exp(vxworks_open): Use password, not passwd.
+Sun Feb 23 14:32:34 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/telnet.exp(telnet_open): Add "catch" to the exp_send command
+ after telnet gets a connection refused.
+
+ * lib/framework.exp(record_test): Add global variable pf_prefix,
+ which contains a string that will be prefixed to every pass/fail
+ message.
+
+ * runtest.exp(runtest): Pass the name of the expect script to
+ the tool init function.
+
+ * baseboards/rom68k-idp.exp: Don't include libio.
+
+Sat Feb 22 21:02:01 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/telnet.exp(telnet_binary): Wait for a prompt after sending
+ the telnet escape character.
+
+Fri Feb 21 13:46:45 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * Makefile.in (install): Install the baseboards and config
+ .exp files.
+
+ * config/vxworks.exp: General cleanup and restructuring.
+ Added vxworks_exec.
+
+Thu Feb 20 17:17:08 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/vxworks.exp(vxworks_ld): Unload modules after testing them.
+ Check the results from remote_open; reboot the target if needed.
+
+ * lib/remote.exp(remote_download): Check the result code from "cp".
+
+Wed Feb 19 16:19:04 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/vr4300-sim.exp: Not "setup_sim vr4300", it's
+ mips.
+
+ * config/gdb-comm.exp: Use warning instead of perror in several
+ places.
+
+Wed Feb 19 09:36:06 1997 Michael Meissner <meissner@cygnus.com>
+
+ * baseboards/powerpc-bug{,1}.exp: New files for dealing with
+ PPCBUG monitor on ports 0 and 1.
+
+ * baseboards/powerpc-sim.exp (needs_status_wrapper): Delete,
+ simulator can return exit statuses correctly.
+
+Mon Feb 17 16:52:37 1997 Michael Meissner <meissner@cygnus.com>
+
+ * baseboards/d10v-sim.exp (needs_status_wrapper): Delete,
+ simulator can return exit statuses correctly.
+ (sim_time_limit): Delete, simulator can take more than 10 seconds
+ on some tests.
+
+Thu Feb 13 15:59:28 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * runtest.exp(runtest): Record number of seconds it took to
+ run the testcase.
+
+ * lib/framework.exp(log_summary): Log finish time.
+
+ * lib/remote.exp(check_for_board_status): If $result ends up being
+ empty, don't crash. Also, be a bit more lax about what we're
+ removing from the result being processed.
+
+Thu Feb 13 13:17:19 1997 Michael Meissner <meissner@cygnus.com>
+
+ * baseboards/d10v{,-sim}.exp: D10v has small stack, no trampoline
+ support, and can't do labels as values.
+
+Tue Feb 11 12:54:17 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/mondfe.exp: Use mondfe,name instead of remote_host.
+
+ * config/gdb_stub.exp: Remove bogus global declaration.
+
+ * lib/target.exp(default_target_compile): Append -lm at the end of
+ the argument list, so it is linked in as appropriate.
+
+Tue Feb 11 11:01:33 1997 Jeffrey A Law (law@cygnus.com)
+
+ * baseboards/mn10200-sim.exp: Remove gdb,cannot_call_functions.
+
+ * lib/remote.exp (remote_exec): Send PARGS to exec, not ARGS.
+
+ * lib/remote.exp (remote_exec): OUTP comes from argument 2, not
+ argument 1!
+
+Mon Feb 10 16:40:27 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/vxworks.exp: Return $shell_id like we should.
+
+ * baseboards/d10v.exp: Fix.
+
+ * lib/telnet.exp: Don't be quite so verbose.
+
+ * lib/remote.exp(standard_send): Quote the string being sent
+ correctly.
+ (standard_transmit): Change a few verbose message levels.
+
+ * config/dos.exp: Return the result of remote_raw_send.
+ * config/vxworks.exp: Ditto.
+
+Sun Feb 9 20:58:53 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/rom68k-idp.exp: Use objcopy by default, as
+ otherwise gdb won't work with srecords.
+ * baseboards/rom68k-idp-aout.exp: Output srecords directly.
+
+Sat Feb 8 13:40:38 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/libgloss.exp(libio_include_flags): Use the correct
+ binary directory when including _G_config.h.
+
+ * baseboards/mips-idt.exp: Add -nostdlib. Use idt.ld, not
+ pmon.ld.
+
+ * lib/remote.exp(standard_send): Use catch. Return a success
+ or fail status. Don't use error, use perror.
+
+ * config/vr4100.exp, config/ddb.exp: New files.
+
+ * config/gdb-comm.exp: Try reopening 4 times before failing,
+ rather than just once. Also, if we get a valid status result
+ from the board, use it instead of trying to check the exit
+ code passed to exit().
+
+ * lib/telnet.exp(telnet_open): Don't send the initial cr until
+ we've seen the "Escape character is..." line from telnet. Also,
+ if we got an unexpected EOF from telnet, wait 5 seconds before
+ trying again.
+
+Fri Feb 7 13:22:43 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * runtest.exp: Add --tool_exec and --tool_opt options. Clean
+ up the help messages to correspond with reality a bit better.
+
+ * lib/target.exp(prune_warnings): Merge in all the various
+ random versions of prune_system_crud and prune_warnings.
+ Nuke prune_system_crud without prejudice; replace with calls
+ to prune_warnings.
+
+ * lib/dg.exp: Use prune_warnings instead of prune_system_crud.
+
+Fri Feb 7 09:41:40 1997 Jeffrey A Law (law@cygnus.com)
+
+ * baseboards/mn10200-sim.exp: Set gdb,noresults gdb,noinferiorio
+ and no_double.
+
+Thu Feb 6 13:08:50 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp(remote_download): When copying to a local file,
+ make sure the copied file has read permissions for other.
+
+ * baseboards/vx960.exp: New file.
+
+ * config/vxworks.exp: Fix.
+
+ * lib/libgloss.exp(get_multilibs): If a list of multilib options
+ is specified, don't return the cached multilib path.
+
+Wed Feb 5 22:08:03 1997 Jeffrey A Law (law@cygnus.com)
+
+ * baseboards/mn10200-sim.exp: Random cleanups.
+ Set gdb,noargs gdb,nosignals and gdb,cannot_call_functions.
+
+Tue Feb 4 21:43:39 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * baseboards/sh-hms.exp: Set gcc,stack_size as well.
+
+ * config/gdb-comm.exp: Add gdb_run_command target feature.
+
+ * baseboards/a29k-udi.exp: Use gcc,stack_size instead of
+ defining STACK_SIZE.
+ * baseboards/armpe-sim.exp: Ditto.
+ * baseboards/mn10200-sim.exp: Ditto.
+ * baseboards/sh-hms-sim.exp: Ditto.
+
+Tue Feb 4 15:51:21 1997 Jim Wilson <wilson@cygnus.com>
+
+ * baseboards/sh-hms-sim.exp (cflags): Add -DSTACK_SIZE=16384.
+
+Mon Feb 3 12:30:02 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/remote.exp: Be a little be more lenient about what matches
+ the exit code returned from the board.
+
+ * baseboards/rom68k-idp-aout.exp: Fix.
+
+ * lib/telnet.exp: Added send_initial_cr board feature.
+ Make sure we respawn telnet if it dies.
+ * config/base68k.exp: Set it.
+ (base68k_load): Set exec_output. If we get a timeout from the
+ board, this is now considered to be a failure.
+
+ * baseboards/sh-hms.exp: This is now the baseboard for a SH board,
+ not the simulator.
+
+ * baseboards/sh-hms-sim.exp: New file.
+ * config/sh.exp: New file.
+ * baseboards/m32r-sim.exp: New file.
+
+Mon Feb 3 07:54:04 1997 Jeffrey A Law (law@cygnus.com)
+
+ * baseboards/mn10200-sim.exp: Add -DSTACK_SIZE=4096 to cflags.
+ Set no_long_long for this target.
+
+Sun Feb 2 15:29:09 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/libgloss.exp(find_gcc): Don't be quite so choosy about
+ the name of the compiler. But, make sure we look in all the
+ right places.
+
+ * lib/remote.exp(standard_close): Return 0.
+
+ * lib/mondfe.exp(mondfe_close): Return 0 if the connection is
+ already closed.
+
+Sun Feb 2 17:47:09 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * lib/target.exp: Only mention the compiler exit status if it is
+ non-zero.
+
+Sun Feb 2 00:00:39 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/dos.exp: Use $shell_prompt, not $prompt.
+ * config/netware.exp: Ditto.
+ * lib/rlogin.exp: Ditto.
+ * lib/rsh.exp: Ditto.
+ * lib/telnet.exp: Ditto.
+ * lib/tip.exp: Ditto.
+
+Sat Feb 1 12:38:05 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/unix.exp: It's $dest, not $targetname.
+
+ * runtest.exp: Add global variable boards_dir, which will
+ point to the directory containing the board description
+ files referred to by site.exp.
+
+ * lib/target.exp: Always log output from the compile.
+
+Sat Feb 1 10:36:05 1997 Ian Lance Taylor <ian@cygnus.com>
+
+ * lib/libgloss.exp (libgloss_link_flags): Add slash at the end of
+ the -B option.
+
+Fri Jan 31 11:36:12 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/gdb-comm.exp: Use $spawn_id consistently in expect.
+ Grab output from the board and stuff it into exec_output;
+ also check for status output from the status wrapper.
+
+ * baseboards/vr4300-ecoff-sim.exp: New file.
+
+ * baseboards/mips64-sim.exp: It's basic-sim, not basic-sim.exp.
+
+ * lib/target.exp(default_target_compile): If we end up with no
+ compiler, or if we can't find it and we're compiling locally, give
+ an error and return.
+
+ * lib/libgloss.exp(get_multilibs): If the host is remote, or if we
+ have no compiler, or it can't be found, don't look for multilibs.
+ (find_gcc): Don't even check to see if the compiler exists.
+ (libio_include_flags): Don't bother looking for the include dir if we
+ haven't got libio.a.
+
+Thu Jan 30 11:48:29 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * lib/libgloss.exp(get_multilibs): Options can be all caps too.
+
+ * config/gdb-comm.exp: Remove spurious quote. (Thanks, TCL!)
+ Add dest parameter to gdb_comm_reload calls.
+ Remind me not to reuse code (go_idle).
+
+ * runtest.exp(setup_target_hook): Use the non-generic name of
+ the host when searching for a host-specific target description.
+ (load_board_description): Use append correctly.
+
+ * baseboards/sparclite-coff.exp: New file.
+
+ * config/gdb_stub.exp: Add generic support for GDB stub targets
+ (derived from sparclet.exp).
+ * config/sparclet.exp: Use it.
+ * config/slite.exp: Use it.
+
+ * config/gdb-comm.exp: Rename the rest of the routines while
+ I'm at it.
+
+ * baseboards/d10v-sim.exp: Set gdb,nosignals and gdb,noargs.
+
+ * config/gdb-comm.exp: Change gdb_reload to gdb_comm_reload,
+ gdb_file_cmd to gdb_comm_file_cmd and gdb_add_breakpoint to
+ gdb_comm_add_breakpoint.
+
+ * baseboards/d10v.exp: It's d10v-elf.
+ * baseboards/d10v-sim.exp: Ditto.
+
+ * config/dos.exp: Check for errors when opening a connection.
+
+ * runtest.exp: Remove the slash after $srcdir when generating $subdir.
+
+ * config/m32r.exp: Use load_generic_config, not load_config.
+ * config/proelf.exp: Ditto.
+
+ * runtest.exp(transform): Add missing global declaration.
+
+ * lib/remote.exp(remote_reboot): Call ${board}_init after we
+ reboot the board.
+ (call_remote): If we're not working on a raw connection, look for a
+ protocol specified by the board description and use it.
+
+ * config/unix.exp: Replace ${board} with unix, and set the board's
+ protocol to unix.
+
+ * config/udi.exp: Replace ${board} with udi, and set the board's
+ protocol to udi.
+
+ * config/sim.exp: Replace ${board} with sim, and set the board's
+ protocol to sim.
+
+ * config/dos.exp: Replace ${board} with dos, and set the board's
+ protocol to dos.
+
+ * runtest.exp(load_generic_config): Don't set the generic name of
+ the board if it already has one.
+
+ * config/gdb-comm.exp: Remove definition of ${board}_init, and move
+ initialization to gdb_comm_start. Change $prompt to $gdb_prompt.
+ Look to see if the destination board has defined gdb_prompt, and use
+ it. Change ${board} to gdb_comm, and set the board's protocol as
+ gdb_comm.
+
+ * baseboards/armpe-sim.exp: Fix typo; it's "needs_status_wrapper".
+ * baseboards/d10v-sim.exp: Ditto.
+ * baseboards/vr4300.exp: Ditto.
+ * baseboards/sparclet-aout.exp: Ditto.
+ * baseboards/sh-hms.exp: Ditto.
+ * baseboards/mn10300-sim.exp: Ditto.
+ * baseboards/mn10200-sim.exp: Ditto.
+ * baseboards/m32r-elf.exp: Ditto.
+ * baseboards/h8300.exp: Ditto.
+ * baseboards/h8300-sim.exp: Ditto.
+ * baseboards/vr4300-ddb.exp: Ditto
+ * baseboards/vr4300-ddbecoff.exp: Ditto.
+
+Thu Jan 30 00:00:48 1997 Angela Marie Thomas (angela@cygnus.com)
+
+ * baseboards/vr4300-ddb*: New files.
+
+Wed Jan 29 14:19:53 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ * config/sim.exp: Log which simulator is being run.
+
+ * {baseboards,config}/h8300.exp: New files.
+
+ * baseboards/vr4300.exp: Don't need to set generic_name anymore,
+ this is done by load_generic_config.
+ * baseboards/m32r-elf.exp: Ditto.
+ * baseboards/unix.exp: Ditto.
+ * baseboards/v850-sim.exp: Ditto.
+ * baseboards/vr4300-sim.exp: Ditto.
+
+ * config/vr4300.exp: It's load_generic_config now; don't need the
+ .exp suffix either.
+ * config/bug.exp: Ditto.
+ * config/mips-idt.exp: Ditto.
+ * config/rom68k.exp: Ditto.
+
+ * config/gdb-comm.exp(go_idle): Set shell_id before doing an
+ send/expect. Use "remote_send host" instead of send.
+ (gdb_comm_start): GDB and prompt are globals; declare them so.
+ (${board}_load): need to give a boardname to board_info.
+
+ * lib/remote.exp(remote_exec): Add logging.
+
+Wed Jan 29 00:19:01 1997 Bob Manson <manson@charmed.cygnus.com>
+
+ Major revisions for cross-testing and remote hosted testing.
+
+ * runtest.exp: Remove several global variables, including variables
+ that describe target info; this is now kept in the board_info
+ array. Add new options --host_board and --target_board. Remove
+ --name option.
+ (search_and_load_file): New routine.
+ (lookfor_file): New routine.
+ (load_lib): Use search_and_load_file.
+ (setup_target_hook, setup_host_hook): New routines.
+ (load_generic_config, load_tool_target_config, load_tool_init,
+ load_board_description, load_base_board_description): New routines.
+ (runtest): New routine, code moved from main loop.
+
+ * site.tmpl: Update using new format of site.exp.
+
+ * lib/dg.exp(dg-init): Remove call to ${tool}_init, this is now done
+ by runtest.exp.
+ (dg-test): Change the format of the results returned from
+ ${tool}-dg-test to include the output from the test.
+
+ * lib/framework.exp(is_remote): New routine.
+
+ * lib/libgloss.exp: Add libgloss_{link,include}_flags,
+ newlib_{link,include}_flags, libio_{link_include}_flags,
+ g++_{link,include}_flags.
+
+ * lib/remote.exp: Major rewrite. Add remote_* functions,
+ move telnet, rlogin, ftp, kermit, et al to separate files.
+
+ * lib/target.exp(set_target_info, compile, archive, ranlib,
+ link_objects, execute_anywhere, getprompt, make): Deleted.
+ (push_target,push_config,pop_config,pop_target): Don't copy
+ the entries around, just change the name.
+ (target_compile, default_target_compile, reboot_target): New routines.
+
+Fri Jan 3 12:30:07 1997 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * site.tmpl (powerpc*-*-eabi*): Add sample entry.
+
+Thu Dec 12 18:11:24 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * lib/utils.exp (diff): Set list_a and list_b to null so diffing
+ empty files works.
+ * lib/framework.exp (unknown): Set the exit status before calling
+ log_summary.
+
+Thu Dec 5 10:24:27 1996 Fred Fish <fnf@rtl.cygnus.com>
+
+ * runtest.exp: Fix an indentation glitch. Before running a new
+ test case clear any pending errcnt so that the first test in the
+ new test case won't become a spurious "unresolved" test.
+
+Mon Dec 2 21:55:22 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * lib/utils.exp (diff): Notice the file dofferences even if the
+ file lengths are the same.
+ * lib/remote.exp (rsh_exec): Work with both csh and sh.
+ * lib/target.exp (execute_anywhere): Print an error message if
+ START & END aren't found rather than core dump.
+
+Fri Oct 18 20:54:10 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * lib/target.exp (prune_warnings): Fix typo in sunos pattern.
+
+Thu Oct 3 16:00:52 1996 Jason Molenda (crash@godzilla.cygnus.co.jp)
+
+ * doc/Makefile.in (clean): Move config.log to distclean.
+ * example/calc/Makefile.in (clean): Move config.log to distclean.
+ * testsuite/Makefile.in (clean): Move config.log to distclean.
+
+Wed Oct 2 17:46:15 1996 Jason Molenda (crash@godzilla.cygnus.co.jp)
+
+ * Makefile.in (distclean): Remove config.cache
+ * doc/Makefile.in (clean): Remove config.log
+ * example/calc/Makefile.in (clean): Remove config.log
+
+Wed Oct 2 16:59:24 1996 Jason Molenda (crash@godzilla.cygnus.co.jp)
+
+ * testsuite/Makefile.in (clean): Remove config.log.
+
+Mon Sep 30 11:23:25 1996 Tom Tromey <tromey@cygnus.com>
+
+ * configure: Regenerated.
+ * aclocal.m4 (CY_AC_PATH_TKLIB): Typo fix.
+
+Fri Sep 27 12:17:35 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * contrib/test-tool (todayname): Add some echos around the "Here is"
+ lines.
+
+Thu Sep 26 17:09:00 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * contrib/test-tool: For g++, also track ChangeLog.fsf.
+
+Fri Aug 30 10:35:12 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * contrib/test-tool: Don't use cp -p if not supported.
+ Fix first call to grep to extract PASS/FAIL/Ufoo messages.
+
+Fri Aug 23 22:58:56 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * lib/libgloss.exp(libgloss_cflags): Convert the mips part of the
+ target triplet to just "mips", so the libgloss stuff can be found.
+
+Fri Aug 23 13:46:30 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * Makefile.in (configure): Delete dependencies.
+ (config.status): Depend on configure.
+ * example/Makefile.in: Likewise.
+ * testsuite/Makefile.in: Likewise.
+
+Thu Aug 15 16:38:52 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * lib/libgloss.exp (libgloss_flags): Add trailing slash to -B we
+ added.
+ (newlib_flags): Likewise.
+
+Mon Aug 12 16:07:21 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * lib/libgloss.exp(libgloss_cflags): Convert the hppa part of the
+ target triplet to just "pa", so the libgloss stuff can be found.
+
+Thu Aug 8 17:07:52 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * lib/libgloss.exp(libgloss_flags): Don't look in new config info,
+ just use CFLAGS & LDFLAGS as they're set as the default variables
+ by the config code.
+
+ * lib/libgloss.exp(libgloss_flags): Look for the srcdir too, so we
+ can find the linker script when libgloss isn't installed yet.
+
+Thu Aug 8 15:54:59 1996 Tom Tromey <tromey@charmed.cygnus.com>
+
+ * lib/remote.exp (telnet): Don't exp_send directly after a spawn.
+ Make line-termination-matching regexp more strict. Use "expect",
+ not "catch expect". Loop terminates when prompt is found.
+ login/password check no longer matches everything.
+
+Tue Aug 6 21:08:37 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * lib/libgloss.exp(get_multilibs): New proc to run gcc
+ --print-multi-lib and to parse out the path and option info.
+ (libgloss_flags,newlib_flags): Use get_multilibs, and set the
+ -B and -L paths right based on the -m options passed to the cross
+ compiler.
+
+Wed Jul 31 15:21:08 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * lib/libgloss.exp: Don't return an empty linker script name with
+ -T.
+
+Thu Jul 25 15:19:32 1996 Jason Molenda (crash@godzilla.cygnus.co.jp)
+
+ * runtest: Add another place to look for runtest.exp.
+
+Wed Jul 24 15:41:21 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * runtest.exp: Accept "0-9_-" as legit characters for variable
+ names defined on the command line.
+
+Thu Jul 11 12:45:38 1996 Jason Molenda (crash@godzilla.cygnus.co.jp)
+
+ * runtest: Find runtest.exp in $(prefix)/share, not $(prefix)/lib.
+
+Mon Jul 8 16:05:57 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * contrib/test-tool: Update gcc/g++ testing directory.
+
+Tue Jun 25 10:21:24 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * runtest.exp (load_file): Catch errors in "file exists".
+
+Mon Jun 24 17:26:20 1996 Jason Molenda (crash@godzilla.cygnus.co.jp)
+
+ * Makefile.in (bindir, libdir, datadir, infodir, includedir): Use
+ autoconf-set values.
+ (docdir): Removed.
+ * configure.in (AC_PREREQ): autoconf 2.5 or higher.
+ * configure: Rebuilt.
+ * doc/Makefile.in (VPATH, mandir, infodir, INSTALL_PROGRAM,
+ INSTALL_DATA): Use autoconf set values.
+ * doc/configure.in (AC_PREREQ): autoconf 2.5 or higher.
+ * doc/configure: Rebuilt.
+ * example/Makefile.in (bindir, libdir, datadir, mandir, infodir,
+ includedir): Use autoconf set values.
+ (docdir): Removed.
+ * example/configure.in (AC_PREREQ): autoconf 2.5 or higher.
+ * example/configure: Rebuilt.
+ * example/calc/configure.in (AC_PREREQ): autoconf 2.5 or higher.
+ * example/calc/configure: Rebuilt.
+ * testsuite/configure.in (AC_PREREQ): autoconf 2.5 or higher.
+ * testsuite/configure: Rebuilt.
+ * testsuite/aclocal.m4: New. Include ../aclocal.m4.
+
+Wed Jun 12 14:18:09 1996 Tom Tromey <tromey@thepub.cygnus.com>
+
+ * configure: Regenerated.
+ * aclocal.m4 (CY_AC_PATH_TCLH, CY_AC_PATH_TKH): Use odd names to
+ avoid name clashes with SunOS headers.
+
+Tue Jun 4 17:53:16 1996 Gordon Irlam <gordoni@snuffle.cygnus.com>
+
+ * install-sh: Add MIT copyright. Fix typo.
+
+Fri May 31 14:09:32 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * QuickRef.ps: Removed.
+
+Tue May 28 13:03:48 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * testsuite/configure: Regenerated.
+ * configure: Regenerated.
+ * aclocal.m4 (CY_AC_PATH_TCLH): Don't use AC_TRY_RUN.
+ (CY_AC_PATH_TKH): Don't use AC_TRY_RUN.
+
+Tue May 21 11:40:41 1996 Doug Evans <dje@seba.cygnus.com>
+
+ * aclocal.m4 (CY_AC_PATH_TCLH): Guess Tcl version if cross compiling.
+ * testsuite/configure: Regenerated.
+
+Tue May 14 15:38:04 1996 Mark Alexander <marka@andros.cygnus.com>
+
+ * lib/target.exp (compile): Use append instead of lappend
+ to prevent cflags from being surrounded by curly braces.
+
+Wed Apr 10 13:29:15 1996 Jeffrey A Law (law@cygnus.com)
+
+ * site.tmpl (h8300*-*-*): Define STACK_SIZE and NO_LONG_LONG.
+
+Mon Apr 8 16:21:15 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * testsuite/Makefile.in (configure): Removed bogus tab.
+
+Tue Feb 20 19:43:47 1996 Doug Evans <dje@charmed.cygnus.com>
+
+ * runtest.exp (main loop): Handle a=b=c in $MULTIPASS.
+
+Fri Feb 2 10:25:32 1996 Jeffrey A Law (law@cygnus.com)
+
+ * site.tmpl (hppa*-*-proelf*): Update.
+
+ * lib/target.exp (compile): Add a space before appending $arg
+ to $options.
+
+Thu Feb 1 22:48:15 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * framework.exp (perror, warning): Add an errno global so the
+ error message is from a subroutine is accessible to the calling
+ proc.
+ * remote.exp (rlogin, telnet, rsh): Trap various kerberos message
+ when kinit is needed.
+ * testsuite/runtest.all/libs.exp: Trap untested, unsupported,
+ warnings, and errors too.
+ * testsuite/runtest.all/remote.exp: Look for kerberos messages so
+ those come up untested, rather than failures. This is only cause
+ we're testing by connecting to the localhost.
+
+Mon Jan 29 08:49:14 1996 Doug Evans <dje@canuck.cygnus.com>
+
+ * lib/dg.exp (dg-format-linenum): dg-linenum-format is global.
+
+Sun Jan 28 13:28:12 1996 Doug Evans <dje@charmed.cygnus.com>
+
+ * lib/dg.exp (dg-test): Update to handle new results from ${tool}_load.
+
+Sat Jan 27 13:04:58 1996 Doug Evans <dje@charmed.cygnus.com>
+
+ From Anthony Green <green@cygnus.com>.
+ * lib/dg.exp (dg-do-what-default, dg-interpreter-batch-mode,
+ dg-linenum-format): New globals.
+ (dg-format-linenum): New proc.
+ (dg-{error,warning,bogus}): Call dg-format-linenum.
+ (dg-test): Set dg-do-what to ${dg-do-what-default}.
+ Use ${dg-linenum-format} in trimming line number field.
+ Don't scan for excess errors or delete output file if testing an
+ interpreter.
+
+ * lib/dg.exp (${tool}-dg-test): Delete default_flags and libs args.
+ (dg-extra-tool-flags): Renamed from dg-default-tool-flags.
+ (dg-runtest): Delete libs arg.
+ (dg-test): Likewise. Merge ${tool_flags} ${dg-extra-tool-flags} when
+ calling ${tool}-dg-test.
+
+Thu Jan 18 19:51:11 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * lib/remote.exp: All tcp/ip connection procs now are consistant
+ with each other. The all take (optionall) "target" or "host" and
+ establish a connection using the config array. plus they all do
+ three retries on each connection.
+ * runtest.exp: Minor formatting changes.
+ * lib/target.exp: Fix a few config bugs.
+ * testsuite/runtest.all/{remote,target}.exp: New test cases for
+ remote.exp and target.exp.
+
+Wed Jan 17 11:32:21 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * testsuite/Makefile.in (check): Find Tcl library directory.
+
+Tue Jan 16 11:11:44 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * testsuite/runtest.all/{remotelib,targetlib,utilslib,framelib}.exp:
+ Removed.
+ * testsuite/runtest.all/{clone_output,config,utils}.test: New
+ files for testing DejaGnu's library procs without runtest. These
+ all run standalone, as well as under DejaGnu.
+ * testsuite/runtest.all/libs.exp: Run standalone DejaGnu tests.
+
+Mon Jan 15 18:16:07 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * tcl-mode.el: Updated to version 1.49.
+
+Thu Jan 11 12:26:06 1996 Michael Meissner <meissner@tiktok.cygnus.com>
+
+ * runtest.exp (--help): Fix --build description.
+
+Thu Jan 11 10:08:14 1996 Tom Tromey <tromey@creche.cygnus.com>
+
+ * testsuite/configure.in: Macro now called CY_AC_PATH_TCLH.
+ * testsuite/configure: Regenerated.
+
+ Changes in sync with expect:
+ * configure.in (ENABLE_GDBTK): Use CY_AC_PATH_TCL and
+ CY_AC_PATH_TK.
+ * aclocal.m4: Replaced with version from expect.
+ * configure: Regenerated.
+
+Fri Jan 5 19:57:06 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * testsuite/lib/libsupp.exp: New support file for testing
+ DejaGnu's libraries.
+ * testsuite/runtest.all/
+ framelib.exp,remotelib.exp,targetlib.exp,utilslib.exp: New test
+ drivers, one for each library.
+ * testsuite/runtest.all/options.exp: Create mini config file so
+ the test cases still work.
+
+Thu Jan 4 22:51:46 1996 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * doc/dejagnu.texi: Add new sections on all the new librry
+ routines. Rewrite config section, lots of other editing changes.
+
+Wed Dec 20 00:49:16 1995 Jeffrey A Law (law@cygnus.com)
+
+ * lib/utils.exp (prune_system_crud): Discard warning about
+ lack of exception sections from osf linker.
+
+Mon Dec 11 09:31:55 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * contrib/test-tool: Use TMPDIR if set.
+
+Fri Dec 1 20:58:03 1995 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * doc/Makefile.in: Don't include the expect and tcl texinfo files
+ anymore, they're incredibly out of date.
+ * doc/dejagnu.texi: Updates for version 1.3.
+
+Wed Nov 29 17:33:22 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * lib/utils.exp (prune_system_crud): Discard warning about g++ not
+ supporting -g with DWARF.
+
+Wed Nov 29 12:47:22 1995 Rob Savoye <rob@chinadoll.cygnus.com>
+
+ * lib/libgloss.exp: Look for newlib and libgloss with the new
+ configure path so stuff fully links again.
+
+Wed Nov 22 13:15:05 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * lib/utils.exp (prune_system_crud): Discard -g -O warnings from
+ native compilers on OSF/1 and SunOS.
+
+Thu Nov 2 14:50:23 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * runtest.exp: Set host_triplet to $build_triplet if it doesn't
+ exist.
+
+Thu Oct 19 21:34:55 1995 Fred Fish <fnf@cygnus.com>
+
+ * doc/Makefile.in, example/Makefile.in: Remove extraneous tabs
+ from otherwise empty line. Confuses older non-GNU versions of "make".
+
+Tue Oct 17 12:11:40 1995 Jim Wilson <wilson@chestnut.cygnus.com>
+
+ * lib/libgloss.exp (newlib_flags): Delete msoft-float support.
+ Pass a -B option instead of a -L option. Add a -I option for the
+ machine dependent header files.
+
+Mon Oct 16 13:27:27 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * lib/target.exp (execute_anywhere): Use -log argument to verbose
+ to eliminate duplicate messages in log file.
+
+Fri Oct 6 20:44:05 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * lib/libgloss.exp (newlib_flags, libgloss_flags): Just return the
+ options so they work if gcc is in your path for a canadaian cross.
+ * lib/remote.exp: Use "current" as an index into the target array
+ rather than "target". Remove the need to
+ target_info(current,prompt).
+ * lib/target.exp (prune_warnings): Filter out the other warning we
+ can safely ignore. Also strip out "\r" characters added by a
+ remote command.
+ (remote_open) Look for output between START and END rather than a
+ prompt.
+
+Fri Sep 29 12:36:43 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * lib/targets.exp (prune_warnings): Only check for ld.so warning
+ on sunos systems. Check against host, not target.
+ * lib/debugger.exp:
+ * runtest.exp: Set target_abbrev to default to "unix" rather than
+ "-unset-".
+
+Wed Sep 27 10:10:48 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * lib/targets.exp (prune_warnings): Remove certain host specific
+ warnings from the compiler and linker.
+ (compile,archive,ranlib): Use prune_warnings, and make comp_output
+ a global incase the final error message is wanted to display.
+
+Tue Sep 26 23:58:16 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * lib/framework.exp (warning, perror): Take an optional numeric
+ value to set the count to. A "0" effectively resets after the
+ message so it doesn't have side effects on unrelated tests.
+
+Fri Sep 22 13:02:00 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * runtest.exp (srcdir): Mark trailing '/' as deprecated,
+ and append it outside the main loop.
+
+Wed Sep 20 13:25:40 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * Makefile.in (maintainer-clean): New synonym for realclean. Run
+ target in subdirectories before current directory.
+ * example/Makefile.in (maintainer-clean): Likewise.
+ * doc/Makefile.in (maintainer-clean): New synonym for realclean.
+ * example/calc/Makefile.in (maintainer-clean): Likewise.
+ * testsuite/Makefile.in (maintainer-clean): Likewise.
+
+Wed Sep 20 11:28:09 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * testsuite/runtest.all/subdirs*: Add subdirs and bogus test files
+ to use for testing the getdirs and find procs.
+ * testsuite/runtest.all/libs.exp: New test driver for library
+ procs.
+
+Tue Sep 19 16:58:57 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * lib/remote.exp (remote_open): If we can't find netdata in the
+ path, return a shell_id of -1.
+
+Mon Sep 18 10:24:51 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * lib/utils.exp (getdir): Stip out CVS, RCS, and a few other
+ directories we don't need.
+
+ * runtest.exp: Get $tool dirs first, then process the subdirs.
+ * lib/utils.exp (getdir,find): Search for directories and files
+ the old way.
+
+ * testsuite/runtest.all/options.exp: Fix broken options and add
+ tests for new options.
+
+Sat Sep 9 16:14:55 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * lib/vxworks.exp (vxworks_spawn): Add `global checktask'.
+
+Sat Sep 9 08:54:01 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * lib/utils.exp: (diff) Fix to return correct value. Also make the
+ output clearer for the differences found, and scan the whole file.
+
+Fri Sep 8 13:57:44 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * lib/remote.exp (download): Use verbose, not puts, when saying
+ how many lines we downloaded.
+
+Thu Sep 7 10:56:41 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * lib/utils.exp (find): Fix so it doesn't get duplicate
+ directories.
+
+Wed Sep 6 20:51:40 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * lib/libgloss.exp: New file. Find linker scripts and search paths
+ for the linker for libgloss supported targets.
+ * lib/framework.exp: Set default output file to testrun.sum and
+ testrun.log if --tool wasn't specified.
+ * lib/remote.exp: Change from "current" to "target" for
+ target_info index.
+
+Tue Sep 5 22:05:52 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * runtest.exp: Extract the vaules for *_cpu, *_vendor, and *_os
+ from the config triplets. Tweak a few comments. Init files can now
+ also be named $target_os.exp.
+ * lib/target.exp: Add procs to find libgloss so we can produce a
+ fully linked executable. Tweak a few comments, fixed push_target.
+
+Thu Aug 31 21:16:08 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * lib/utils.exp: (getdirs) now ignores directories named CVS, RCS,
+ and SCCS.
+ * runtest.exp: --tool is now optional. init files can also be
+ named using the target_os part of target_triplet
+
+Thu Aug 31 02:52:57 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * runtest.exp: Don't set target_triplet if already set.
+
+Wed Aug 30 21:34:16 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * runtest.exp: Use $*_triplet rather than $arg_*_triplet so
+ configfile settings don't get trashed.
+
+ * runtest.exp: Fix argument processing for --host, --build, and
+ --target.
+
+Mon Aug 28 23:39:17 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * lib/target.exp: New file containing most of the new config code.
+ * lib/framework.exp: Fix ishost, istarget, isnative to use new
+ config subsystem. Add is3way, isbuild.
+ * lib/utils.exp: Add diff, setenv, getenv, unsetenv procs that
+ function like the Unix commands of the same name.
+ * lib/remote.exp: Add support to use the new config subsystem.
+ * runtest.exp: Add support for handling the new config subsystems.
+
+Fri Aug 4 15:37:55 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * lib/dg.exp (dg-test): Also watch for unsupported from
+ ${tool}-dg-prune.
+
+Wed Aug 2 21:36:10 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * lib/dg.exp (dg-test): Watch for untested/unresolved markers
+ from ${tool}-dg-prune.
+
+ * runtest.exp (init section): Delete host, target.
+ Document host_triplet, target_triplet, target_alias.
+
+Tue Aug 1 11:34:46 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * runtest.exp (target_abbrev): Provide initial value in case
+ $DEJAGNU not set and global config file doesn't exist.
+
+Fri Jul 28 11:43:59 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * lib/vxworks.exp (checktask): New variable, default to `fp'.
+ (vxworks_spawn): Use it.
+
+ * lib/vx29k.exp: Delete file.
+
+Fri Jul 28 00:24:40 1995 Jeffrey A. Law <law@rtl.cygnus.com>
+
+ * site.tmpl: Make gdbserver the default for cross tests;
+ no easy way to make it conditional on lynx here.
+
+Thu Jul 27 16:21:05 1995 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * config/{mh-linux, mh-sysv4}: Removed.
+
+ * Makefile.in (configure): Removed rule that automatically
+ rebuilds configure script. Users might not have autoconf.
+ * configure.in: Use AC_PROG_CC instead of AC_SUBST, but still
+ set CC to ${CC-cc} before that as per cygnus conventions.
+ * configure: Regenerated with autoconf 2.4.2.
+
+Wed Jul 26 19:41:56 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
+
+ * lib/vx29k.exp: Copy of vxworks.exp, but without `filesys:' and
+ using the `tt' command instead of `fp'.
+
+Wed May 10 18:33:21 1995 Stu Grossman (grossman@andros.cygnus.com)
+
+ * site.tmpl: Create rule for Oki targets. Make Winbond rule more
+ specific.
+
+Wed May 10 14:50:12 1995 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * lib/bug.exp (bug_load): send two carriage returns to leave
+ s-record download mode.
+ (bug_execute): set exec_output.
+
+Thu May 4 11:48:12 1995 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * lib/remote.exp (remote_open): If $reboot is set, call
+ reboot_hook proc if it exists.
+ Added experimental new connect type "netdata".
+
+Wed May 3 15:40:55 1995 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * runtest.exp: Redo argument parsing so that arguments of the form
+ --foo=bar are processed correctly.
+
+Sat Apr 29 12:59:18 1995 Doug Evans <dje@chestnut.cygnus.com>
+
+ * lib/dg.exp: New file.
+
+ * runtest.exp (verbose): New option -log.
+
+Wed Apr 26 12:40:23 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * runtest.exp (main loop): Set multipass_name.
+ * lib/framework.exp (record_test): Print multipass_name if not empty.
+
+ * lib/framework.exp (record_test): Handle UNTESTED, UNRESOLVED,
+ and UNSUPPORTED.
+ (untested, unresolved, unsupported): Call record_test.
+ * lib/util-defs.exp: Whitespace and verbosity cleanup.
+ * testsuite/Makefile.in (site.exp): Set tmpdir.
+ (realclean): rm -rf tmpdir.
+ * testsuite/config/default.exp: Whitespace cleanup.
+ * testsuite/runtest.all/options.exp: Likewise.
+ * testsuite/runtest.all/stats.exp: New file.
+ * testsuite/runtest.all/stats-sub.exp: New file.
+
+ * runtest.exp: Parse --tool in time for config files to use it.
+
+Mon Apr 24 14:15:21 1995 Stu Grossman (grossman@andros.cygnus.com)
+
+ * site.tmpl: Re-install hppro config lost in previous change.
+
+Mon Apr 24 11:29:51 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * runtest.exp (multipass): New global.
+ (main loop): Make multiple passes if MULTIPASS set.
+ (VAR= processing): Allow A=b=c.
+
+Sun Apr 23 10:29:37 1995 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * site.tmpl: Revert last change, GDB isn't the only program that
+ uses dejagnu for testing.
+
+Fri Apr 21 15:46:42 1995 Stu Grossman (grossman@rtl.cygnus.com)
+
+ * site.tmpl: Change configs for monitor-based GDB targets to use
+ common startup file.
+
+Fri Apr 21 12:16:56 1995 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * lib/remote.exp (kermit, rlogin, rsh, telnet, tip): Don't set
+ connectmode.
+ (telnet): Send "\r\n" before attempting to match prompt.
+ (remote_open): split apart $netport into host and port,
+ and pass those values to the telnet proc.
+
+Wed Apr 19 17:30:40 1995 Stu Grossman (grossman@cygnus.com)
+
+ * site.tmpl: Add support for m68k-cpu32bug-coff.
+
+Sat Apr 15 17:44:57 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * lib/utils.exp (prune_system_crud): Only define if not already
+ defined.
+
+Tue Mar 28 17:45:37 1995 Stu Grossman (grossman@cygnus.com)
+
+ * site.tmpl: Add nosignals flag to indicate targets that can't
+ use signals. Change a bunch of append commands to set commands.
+
+Tue Mar 28 15:50:44 1995 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * lib/remote.exp (remote_open, remote_close): New procs.
+ (download): changed to not convert contents of file to
+ s-records, as file is already supposed to contain s-records.
+
+Fri Mar 24 15:40:39 1995 Stu Grossman (grossman@cygnus.com)
+
+ * site.tmpl: Add m68k-est-coff.
+
+Fri Mar 24 13:44:52 1995 Jim Kingdon (kingdon@lioth.cygnus.com)
+
+ * doc/dejagnu.texi (Posix): Remove 3 words accidentally repeated.
+
+Thu Mar 23 22:12:07 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * aclocal.m4: Split AC_PATH_T* into two pieces, one for headers
+ and one for libraries.
+ * testuite/configure.in: Use CY_PATH_TCLH so we don't get a
+ warning looking for the libraries.
+
+Wed Mar 22 21:04:26 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * testuite/configure.in: Use CY_PATH_TCL so we can set TCL_LIBRARY
+ right and run the selftests with a freshly built expect.
+ * aclocal.m4: New support for autoconf.
+ * configure.in, doc/configure.in: Use AC_PROG_INSTALL.
+ * Makefile.in, doc/Makefile.in: Use mkinstalldirs and a BSD style
+ install program.
+ * mkinstalldirs, install-sh: Borrowed from autoconf to install
+ without using special Cygnus install program.
+ * testsuite/Makefile.in: Take out a bogus dependacy for exp_test.
+
+Tue Mar 21 09:18:15 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * lib/vxworks.exp (vxworks_transform_path): New proc.
+ (vxworks_ld): Clarify return codes. Call vxworks_transform_path
+ on argument. Handle preset passwords. Clean up main loop.
+ (vxworks_spawn): Clarify return codes. Poll board until program
+ exits. Watch for AbOrT abort() marker. Only print remaining buffer
+ contents on failure.
+
+ * contrib/test-tool: Watch for framework errors that prevent
+ $tool.sum from being created.
+
+ * runtest.exp: Treat $DEJAGNU as a global config file (which it is).
+ Don't exit if there isn't a global config file, just warn the user.
+ Error if $DEJAGNU is defined but file doesn't exist.
+
+Sun Mar 19 12:01:06 1995 J.T. Conklin (jtc@rtl.cygnus.com)
+
+ * runtest.exp: Don't use site.tmpl as a global config file. It is
+ only useful as an example.
+
+Fri Mar 17 14:41:26 1995 Mike Stump <mrs@cygnus.com>
+
+ * contrib/test-tool: Don't include expected failures in the tests
+ that now fail, but worked before section.
+
+Thu Mar 16 16:52:23 1995 Mike Stump <mrs@cygnus.com>
+
+ * contrib/test-tool: Treat expected failure to unexpected failure
+ as a test that still doesn't work.
+
+Thu Mar 16 11:29:57 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * Makefile.in, example/Makefile.in, example/calc/Makefile.in,
+ testsuite/Makefile.in, doc/Makefile.in: Don't rebuild the
+ configure scripts automatically. Change how recursion works. Add
+ .PHONY targets.
+
+Wed Mar 15 16:07:25 1995 Stu Grossman (grossman@cygnus.com)
+
+ * site.tmpl (m68k-*-coff): Add config for talking to IDP board.
+
+Wed Mar 15 16:32:41 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * Makefile.in, example/Makefile.in, example/calc/Makefile.in,
+ testsuite/Makefile.in, doc/Makefile.in: Add rules to rebuild the
+ configure scripts.
+
+Tue Mar 14 20:24:19 1995 Rob Savoye <rob@darkstar.cygnus.com>
+
+ * configure, example/configure, example/calc/configure,
+ testsuite/configure, doc/configure: New autoconf scripts.
+ * configure.in, example/configure.in, example/calc/configure.in,
+ testsuite/configure.in, doc/configure.in: Rewritten to be autoconf
+ based.
+ * Makefile.in, example/Makefile.in, example/calc/Makefile.in,
+ testsuite/Makefile.in, doc/Makefile.in: Rewritten to use autconf
+ variables.
+
+Fri Mar 10 06:57:53 1995 Jim Kingdon (kingdon@lioth.cygnus.com)
+
+ * contrib/test-tool: Only call date once and put the result in a
+ variable. This should help behavior when run around midnight.
+
+Tue Mar 7 11:49:59 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * contrib/test-tool (testdir): binutils tests are in `.'.
+
+Tue Feb 28 09:46:42 1995 Jim Kingdon (kingdon@lioth.cygnus.com)
+
+ * doc/dejagnu.texi (Posix): Clarify discussion of expected
+ failures. Add note about what POSIX requires with respect to
+ UNRESOLVED. Editorial changes (e.g. samp -> code).
+
+Tue Feb 21 22:46:52 1995 Brendan Kehoe (brendan@lisa.cygnus.com)
+
+ * contrib/test-tool (tool): If we're testing g++, also do a make
+ check for each of libg++, libio, and libstdc++.
+
+Fri Feb 17 14:06:50 1995 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * lib/vxworks.exp (vxworks_ld): Update pattern used to match a
+ successful load.
+
+Fri Feb 10 10:25:53 1995 Jim Kingdon (kingdon@lioth.cygnus.com)
+
+ * contrib/test-tool: Put errors and warnings into the output.
+
+Mon Feb 6 16:34:51 1995 Ian Lance Taylor <ian@cygnus.com>
+
+ * runtest.exp (transform): Return a name based on target_alias,
+ not on target_triplet.
+ (target_alias): Default to target_triplet, not host_triplet.
+
+Thu Feb 2 11:29:49 1995 Jim Kingdon (kingdon@lioth.cygnus.com)
+
+ * lib/framework.exp (setup_xfail): Clear xfail_prms. Before this
+ change, if setup_xfail was called without a PRMS number,
+ xfail_prms would have a value from the previous (completely
+ unrelated, perhaps even for a different target) setup_xfail.
+
+Tue Jan 24 11:23:40 1995 J.T. Conklin (jtc@rtl.cygnus.com)
+
+ * doc/runtest.1: Fix typos and formatting bugs.
+
+Wed Jan 11 13:09:22 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * contrib/test-tool: Treat expected things as "pass" only if
+ -expectedpass given.
+
+Fri Jan 6 10:57:12 1995 Doug Evans <dje@canuck.cygnus.com>
+
+ * contrib/test-tool: Pass 3 -v's to runtest. Don't pass -a.
+ Save output in test-$tool.log if -keepoutput given.
+
+Fri Dec 30 12:46:06 1994 Ian Lance Taylor <ian@sanguine.cygnus.com>
+
+ * runtest.exp: catch takes only two arguments; quote accordingly.
+
+Sun Dec 4 01:14:49 1994 Doug Evans <dje@canuck.cygnus.com>
+
+ * contrib/test-tool: Handle gas, gld, and binutils.
+ Treat XFAIL as PASS, XPASS as FAIL.
+ Always pass options to `comm' as first argument.
+
+ * lib/remote.exp (*): Rename `retries' to `tries'.
+ (rsh): Mark as deprecated.
+ (rcp_download): Distinguish between failure and success in verbose
+ message. Call proc verbose, don't use global.
+ (rsh_exec): New proc.
+
+ * lib/framework.exp (warning_threshold, perror_threshold): New vars.
+ (record_test): Use them.
+ (reset_vars): Reset them.
+ (get_warning_threshold, set_warning_threshold): New procs.
+
+Mon Nov 14 00:21:05 1994 Doug Evans <dje@canuck.cygnus.com>
+
+ * lib/framework.exp: Lots of formatting cleanup.
+ (unknown): Delete unnecessary calls to close_logs, cleanup, exit.
+ (warning, perror): errorInfo is global.
+ (note): New proc.
+
+ * runtest.exp: Document perror vs send_error quandary.
+ (unresolvedcnt): Initialize.
+ (configfile): Use consistently in place of site.exp.
+ (verbose): Call clone_output instead of perror.
+ (load_file): New proc.
+ (argument parsing): Always call send_error for error messages.
+ (all loading of files, except testcases): Consistently exit if tcl
+ error occurs.
+ (all loading of files): Consistently handle errorInfo.
+ (main loop): Delete useless test for $test_name == "".
+
+Wed Nov 2 08:49:06 1994 Doug Evans <dje@canuck.cygnus.com>
+
+ * lib/udi.exp (shell_id): Delete.
+ (mondfe): Delete unneeded global's. Delete references to `shell_id'.
+ (mondfe_download): New argument `shell_id'.
+ Move verbose messages to level 2. Tighten up pattern matching on
+ text coming back from target. Don't set `timeout'. Only log
+ expect buffer contents if connection failed.
+ (exit_mondfe): Delete unneeded global's. New argument `shell_id'.
+ (exit_montip): Likewise.
+ * lib/remote.exp (telnet): Use -gl for shell prompt pattern.
+ (rlogin, rsh): Likewise.
+ (exit_remote_shell): Delete nilpotent resetting of `shell_id'.
+
+Fri Oct 28 10:38:41 1994 Rob Savoye (rob@cygnus.com)
+
+ * runtest: Make it an error if runtest.exp doesn't exist.
+
+Fri Oct 21 23:15:27 1994 Doug Evans <dje@canuck.cygnus.com>
+
+ * lib/utils.exp (prune_system_crud): Fix ld.so pattern to catch
+ multiple occurrences in a row.
+
+Fri Oct 14 17:26:38 1994 Doug Evans <dje@canuck.cygnus.com>
+
+ * runtest.exp (test_name): Delete unnecessary initialization.
+ * lib/framework.exp (clone_output): Reformat comment.
+ (reset_vars): Delete `test_name'.
+ (log_summary): Delete `tool.sum'.
+ (cleanup): Fix comment.
+ (record_test): New (internal) proc (taken from pass/fail).
+ Test `warncnt',`errcnt' before `xfail_flag'.
+ Don't incr `passcnt' prematurely.
+ (pass, fail, xpass, xfail): Call it.
+ (untested, unresolved, unsupported): Don't call xfail.
+ * lib/utils.exp (grep): Don't pass trailing ".*" to regexp.
+ (prune_system_crud): New proc.
+
+Fri Oct 7 19:19:12 1994 Doug Evans (dje@canuck.cygnus.com)
+
+ * lib/utils.exp (runtest_file_p): Add support for glob style
+ expressions.
+
+Mon Sep 26 12:03:16 1994 Doug Evans (dje@canuck.cygnus.com)
+
+ * runtest: Handle relative paths in $0.
+
+Sun Sep 25 16:51:11 1994 Doug Evans (dje@canuck.cygnus.com)
+
+ * runtest.exp: Add more docs on complexity of argument parsing.
+ Parse --host, --objdir, --srcdir, --target, and --verbose before
+ sourcing any config files. Don't let config files override --host
+ and --target. Don't call `verbose' until it's useful. Call
+ config.guess after $objdir/site.exp has been sourced.
+ Delete unused variable `match'. Reword verbose message for --name.
+ Delete existence check of `host_triplet' and `target_triplet'.
+
+Sat Sep 24 14:23:49 1994 Doug Evans (dje@cygnus.com)
+
+ * runtest.exp: Lots of whitespace cleanup. Update copyright.
+ Exit with nonzero status for illegal arguments and if we can't
+ determine the host.
+ (verbose): Add two new arguments (-n, --).
+ * lib/remote.exp: Formatting cleanup.
+ (exit_remote_shell): Add a note about `shell_id'.
+ * lib/udi.exp: Formatting cleanup.
+ (mondfe): Send message when trying to connect.
+ Watch and print more error messages coming from `mondfe'.
+ (mondfe_download): Use "verbose -n" so the pretty dots appear on
+ one line. Fix regexp in "Clear.*BSS section" message.
+
+Tue Sep 13 10:51:47 1994 Doug Evans (dje@canuck.cygnus.com)
+
+ * lib/framework.exp (log_summary): Clean up code that handles
+ `testcnt'.
+ (xfail, unsupported, untested): Don't set `exit_status',
+ these aren't errors.
+
+ * runtest.exp: Sort options in --help.
+
+Mon Sep 12 12:25:22 1994 Doug Evans (dje@canuck.cygnus.com)
+
+ * runtest.exp: Delete special handling of *.[Ccso] arguments.
+ Accept new argument: foo.exp[=arg(s)].
+ (all_runtests): New global.
+ (runtests): Records arguments for each .exp script.
+ (main test loop): Move setting of srcdir out of loop.
+ Set up `runtests' for each script.
+ * lib/utils.exp (find): Remove unnecessary "\n" in verbose message.
+ (runtest_file_p): New proc.
+
+Wed Sep 7 10:41:33 1994 Doug Evans (dje@canuck.cygnus.com)
+
+ * runtest.exp (verbose): Handle leading -'s in message.
+
+Mon Jul 18 11:16:02 1994 J.T. Conklin (jtc@phishhead.cygnus.com)
+
+ * lib/vxworks.exp: no need to use system, stty is an expect
+ builtin and can be called directly.
+
+Thu Jun 30 15:23:19 1994 J.T. Conklin (jtc@phishhead.cygnus.com)
+
+ * lib/bug.exp: replaced "rm -foreach" with "rm -f".
+
+Tue Jun 14 12:38:44 1994 David J. Mackenzie (djm@rtl.cygnus.com)
+
+ * doc/dejagnu.texi: Fix a few typos and omissions.
+
+Tue Jun 7 13:55:30 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * Makefile.in (mostlyclean, realclean): New targets.
+ * doc/Makefile.in, example/Makefile.in: Likewise.
+ * example/calc/Makefile.in, testsuite/Makefile.in: Likewise.
+
+Mon Apr 25 17:11:30 1994 Bill Cox (bill@cygnus.com)
+
+ * Makefile.in: Add FSF standard comment block.
+ * example/calc/Makefile.in: Define and use EXPECT and
+ RUNTEST variables, so 'make check' will use tools in the
+ current objdir tree if they're present.
+ * lib/remote.exp: Add rcp_download proc, to download a
+ file using remote 'cp'. This was first used for the
+ Lynx cross-host tests.
+ * testsuite/Makefile.in: Update copyright date.
+ * testsuite/runtest.all/options.exp: Update copyright date.
+
+Wed Apr 13 18:05:44 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
+
+ * runtest: Pass ${1+"$@"} instead of "$@", because many shells
+ incorrectly pass an empty string when no arguments were specified.
+
+Wed Apr 13 11:46:11 1994 Bill Cox (bill@cygnus.com)
+
+ * lib/remote.exp (rcp_download): New proc for using 'rcp'
+ to download (used first for Lynx cross-testing).
+
+Tue Apr 12 13:27:15 1994 Stan Shebs (shebs@andros.cygnus.com)
+
+ * Makefile.in (TCLIBRARY): Define and use.
+
+Wed Mar 9 13:08:54 1994 Doug Evans (dje@canuck.cygnus.com)
+
+ * runtest.exp: Misc. formatting/typo cleanups.
+ Process ~/.dejagnurc and $base_dir/site.exp before command line
+ options and clarify search order of all config files.
+ Clean up verbose output for -v, -srcdir, -host, and -target options.
+
+Mon Feb 14 20:37:10 1994 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * runtest.exp: Re-write init file search/loading code.
+
+Tue Feb 8 19:27:07 1994 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * runtest.exp: Move transform from lib/utils.exp so it can be used
+ in config files.
+
+Thu Jan 20 20:05:39 1994 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * runtest.exp: findfile: New proc to be used in config files.
+
+Tue Jan 18 14:46:12 1994 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * runtest.exp: Fix so things don't bomb if whoami doesn't exist.
+
+Mon Jan 17 15:26:50 1994 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * lib/framework.exp (setup_xfail): Re-write so it works correctly
+ with numbers in the config string.
+
+Mon Jan 10 21:29:08 1994 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * lib/framework.exp: Create exp_continue if it doesn't exist.
+ * runtest.exp: Don't try to print errorInfo unless it exists.
+
+Tue Jan 4 16:01:40 1994 Rob Savoye (rob@rtl.cygnus.com)
+
+ * All files: Updated to 1.1.3. This version works with Tcl7.3 and
+ Expect5.2.
+
+Sat Jan 1 19:53:40 1994 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * lib/framework.exp: Fixed log_summary to cleanup all the way.
+ setup_xfail now only use canonical names, catch errors from
+ sourcing $tool_exit and $tool_version.
+ * runtest.exp: Changed the order of sourcing init files. Removed
+ all references to target_alias or host_alias. uses target and host
+ triplet only, uses config.guess to get a host type.
+
+Thu Dec 23 18:26:24 1993 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * runtest (debug): Add an environment variable DEJAGNULIBS to
+ point to where runtest.exp and the rest live.
+
+Wed Dec 15 20:38:49 1993 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * runtest.exp: Fix signal handling so only one ^C is required and
+ it actually exists after printing the summary.
+
+Fri Dec 3 20:58:27 1993 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * runtest.exp: Only consider a TCL_ERROR to be a sign of a problem
+ worth handling. This is when sourcing the test case.
+
+Thu Dec 2 14:16:20 1993 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * runtest.exp: If the verbose level is greater than 2, display
+ debugging output to the screen.
+
+Wed Dec 1 16:04:08 1993 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * runtest.exp: Change error handling to use the return from
+ "catch" rather than depending on errorInfo.
+
+Fri Nov 19 15:08:34 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * site.tmpl: Add LDFLAGS "-r" to vxworks targets.
+
+Mon Nov 15 19:43:28 1993 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * lib/debugger.exp: Add dumpvars which dumps the values of
+ variables specified by a regular expression.Add dumpvars
+ which dumps the body of procedures specified by a regular
+ expression.
+ * Makefile.in: Install site.exp as only config file.
+ * runtest.exp: look for site.tmpl in $srcdir, not site.exp in
+ $objdir.
+ * lib/framework.exp: Make istarget and isnative procs use
+ $target_alias rather than target_triplet.
+ * lib/framework.exp: Make warning and perror keep count. Have
+ pass or fail procs check, and change to unresolved.
+
+Mon Nov 15 10:20:42 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * runtest.exp: corrected a few typos in the comments. Added
+ test for getting user name from the environment first. Now
+ checks for USER and the LOGNAME. If unable to get the logname
+ from the environment, then try whoami and who am i
+
+Thu Nov 4 13:38:32 1993 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * runtest: Use sed rather than expr to get the execution path and
+ the runtest name cause expr doesn't seem to work portably on all
+ machines.
+
+Wed Nov 3 11:27:34 1993 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * Makefile.in, configure.in: Install and build with new config
+ system.
+ * config/mt-*: Set default connection parameters and name
+ transformation.
+ * lib/framework.exp: Change "error" proc to "perror" so I can use
+ Tcl's builtin error handling.
+ * runtest.exp: Re-write error handling so it's now real
+ descriptive with errors and misses nothing. Add support for new
+ config file system. Up version number to 1.1.
+ * runtest: General cleanup. Add support for passing the config
+ name down to runtest.exp.
+
+Sat Oct 16 07:47:38 1993 David J. Mackenzie (djm@thepub.cygnus.com)
+
+ * doc/runtest.1: Fix typos in font changes (\fi where \fI was meant).
+
+Wed Oct 13 11:00:55 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * runtest.exp: insert missing space
+ * lib/framework.exp: made proc verbose work as expected. Now will
+ display a message if the level is = or > than the verbose level.
+ * lib/utils.exp: replaced if $verbose>X then { send_user "foo\n" }
+ stuff with the verbose "foo" X proc call
+
+Mon Oct 11 17:11:37 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * runtest.exp: fixed stupid scoping bugs.
+
+Mon Oct 11 16:26:25 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * runtest.exp: fixed "$test_result" bug, and minor reformatting
+ changes to help make the file more readable
+
+Sat Oct 9 18:43:31 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
+
+ * configure.in: recognize mips*- instead of mips-
+
+Mon Sep 27 21:09:26 1993 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * lib/bug.exp: Add new file for procs related to "bug" boot
+ monitor.
+
+Wed Sep 22 21:01:43 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * lib/framework.exp: Added m68k-idp-* to target list.
+ * configure.in: Added m68k-idp-* to target list.
+ * config/mt-m68k-abug-aout: Fixed objobjcopy to be objcopy.
+ * config/mt-m68k-abug-coff: Fixed objobjcopy to be objcopy.
+
+Wed Sep 22 12:10:34 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * lib/framework.exp: Folded in test counting mechanism.
+
+Tue Sep 21 19:41:07 1993 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * lib/vxworks.exp: Added a vxworks_spawn proc to execute tasks.
+
+Mon Sep 20 21:28:23 1993 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * lib/vxworks.exp: Prompt user for password if the default login
+ fails.
+
+Mon Sep 13 11:30:37 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * runtest.exp: add global testcnt variable.
+ * lib/framework.exp: add testcnt mechanism. Gives a total
+ number of testcases run in summary. incremented by the
+ pass/fail/etc procs. Also added a "Tool version" string
+ in the summary.
+
+Thu Sep 9 12:37:27 1993 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * lib/utils.exp: Added new procs for pwd{} and absolute{}.
+ * lib/utils.exp: Removed pwd{} proc, added a download{} proc.
+
+Mon Sep 6 12:55:54 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * lib/utils.exp: fixed scoping problem of missing ""'s
+ nasty little bugger. broken since the start.
+
+Fri Sep 3 16:47:07 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * lib/framework.exp: Added support for the h8/500.
+
+Fri Sep 03 10:42:12 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * configure.in: (h8300-*-*) (h8300h-*-*) (h8500-*-*) targets added.
+
+ * config/mt-h8300hms: new file for h8300-hitachi-hms support.
+ * config/mt-h8500hms: new file for h8500-hitachi-hms support.
+ * config/mt-h8300hhms: new file for h8300h-hitachi-hms support.
+
+Tue Aug 31 16:57:12 1993 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * lib/utils.exp: Add a proc to kill process started within the
+ current shell session.
+
+Sun Aug 29 23:10:35 1993 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * lib/remote.exp: wait after exiting the remote shell.
+
+Sun Aug 15 22:27:23 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * lib/framework.exp: Numeric column in summary line up and only
+ print if the sub total is greater than zero.
+
+Tue Jul 20 15:32:51 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * lib/framework.exp: Added code for initial POSIX (PCTS) support.
+
+Mon Jul 19 09:31:48 1993 Jeffrey Wheat (cassidy@cygnus.com)
+
+ * remote.exp: Added a supplied patch to allow specifing a port
+ to the telnet command.
+
+Mon Jul 12 17:54:58 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest.exp: Remove support for command line options to use "++"
+ as a prefix. Also removed all the old code for the --diff option.
+ The --debug option can now be abbreviated to just -d.
+
+Sun Jul 11 20:49:49 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest.exp: Exit after printing the version numbers.
+ * lib/utils.exp: Ignore extraneous words in the argument passed.
+
+Thu Jul 8 07:17:17 1993 Doug Evans (dje@canuck.cygnus.com)
+
+ * lib/framework.exp: Add support for the h8/300.
+
+Tue Jun 29 15:04:05 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest: Added Dje's patch so the shell stops stripping out the
+ quotes from the command line.
+
+Sun Jun 13 21:05:25 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest.exp: Remove runtests option. Use any valid file name on
+ the command line instead.
+ * runtest: Add support for the Tcl debugger from the command line.
+
+Thu May 27 20:01:51 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * Makefile.in: Make the release image of the testsuites from the
+ special stubs.
+
+Sun May 23 18:40:01 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest.exp: Don't flag successful return codes as errors.
+ * runtest: Don't look for expect binary anymore.
+
+Tue May 11 17:31:29 1993 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * runtest: Pass "--" to $expectbin.
+
+Fri May 7 08:19:37 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (FLAGS_TO_PASS): Added CC, CFLAGS, LDFLAGS, RUNTEST,
+ RUNTESTFLAGS.
+ * example/Makefile.in (FLAGS_TO_PASS): Was being used, but was
+ never defined.
+ * example/calc/Makefile.in: (CFLAGS): Removed -I arguments.
+ (.c.o): Use required -I arguments.
+ (PROG): Pass CFLAGS to CC.
+
+Tue May 4 22:51:06 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest.exp: load_lib exits if it can't find the file. It also
+ finds library files if srcdir = .
+
+Tue Apr 27 08:59:32 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (FLAGS_TO_PASS): Define.
+
+Fri Apr 23 13:12:27 1993 Mike Werner (mtw@deneb.cygnus.com)
+
+ * lib/framework.exp:
+ Made cosmetic changes to procedure "diff_logs".
+
+Wed Apr 21 18:05:30 1993 Rob Savoye (rob@cygnus.com)
+
+ * runtest: Looks in $rootme/../../expect and $rootme/../expect and
+ if there is one, it uses that to run runtest.exp.
+
+Wed Apr 21 12:34:10 1993 Mike Werner (mtw@deneb.cygnus.com)
+
+ * runtest.exp:
+ Changed how -diff and -mail affect the printing and
+ mailing of logs.
+ * lib/framwork.exp:
+ Changed format of the output of the diff log. Made
+ minor changes to "diff_logs" to acommodate the changes
+ to runtest.exp (above).
+
+Mon Apr 19 18:45:10 1993 Mike Werner (mtw@deneb.cygnus.com)
+
+ * runtest.exp:
+ Added the ability to specify, as an option parameter, the name
+ of the previous summary log to diff against. Added a call to
+ "close_logs" to the signal handlers. Enabled -mail option.
+ Cleaned up some comments.
+ * lib/framework.exp:
+ Added procedure "mail_file" for mailing test log summaries.
+ Removed support for automatically generating log file names with
+ embedded time/date stamps. Cleaned up "diff_logs".
+
+Sun Apr 18 19:54:17 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest.exp: Fixed so signal trapping now works again. Cleaned
+ up configuration stuff and how it finds the site.exp file.
+ * Makefile.in: Remove unneeded macro definitions.
+
+Fri Apr 16 15:11:52 1993 Mike Werner (mtw@deneb.cygnus.com)
+
+ * lib/framework.exp:
+ Added the procedures "diff_logs", "open_logs", and "close_logs".
+ Changed the name of the procedure "sum" to "log_summary".
+ Changed the name of the procedure "alldone" to "cleanup".
+ "Cleanup", formerly "alldone", no longer exits; runtest
+ explicitly exits.
+ * runtest.exp:
+ Now calls "open_logs", "close_logs", and "diff_logs" to do the
+ respective goodies. We also now make explicit calls to "cleanup"
+ and exit. Enabled --diff command line option which when used
+ will cause a call to the procedure "diff_logs".
+
+Sun Apr 11 17:17:20 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * Makefile.in: Removed runtest target. Cleaned up install
+ procedure.
+ * runtest.exp: No longer uses --config option.
+ * runtest: New bourne shell script to start runtest.exp.
+
+Thu Apr 8 18:12:24 1993 Mike Werner (mtw@deneb.cygnus.com)
+
+ * lib/utils.exp: the list of directories returned by getdirs now
+ contains only directories that allow read permission.
+
+Wed Apr 7 18:30:45 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest.exp: Now looks for init files by ${target_os}.exp as
+ well as ${target_os}-${tool}.exp.
+ * config/mt-*: Added macros for COPY and DEMANGLE, new
+ binutils.
+
+Fri Apr 2 12:23:22 1993 Mike Werner (mtw@deneb.cygnus.com)
+
+ * lib: relocated old-dejagnu.exp to devo/gcc/testsuite/lib
+
+Mon Mar 29 14:59:23 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * framework.exp: Added tests for spectra.
+
+Thu Mar 25 14:16:54 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest.exp: Fixed command line option processing. Now
+ things like CFLAGS="-v -a" should work.
+
+Thu Mar 25 12:40:50 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * lib/udi.exp (mondfe): Return -1 on failure. Don't remove *_soc
+ files.
+ (mondfe_download): Fixed invalid expect usage which could never
+ have worked.
+
+Wed Mar 24 14:11:46 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest.exp: Added --target and --host for specifying the config
+ strings. The old --target is now --name.
+ * lib/framework.exp: Moved all the host/target naming stuff from
+ runtests.exp.
+ * runtest.exp: Fixed bug so CFLAGS="-v" works. I changed the way
+ the verbose pattern works in $argv.
+
+Tue Mar 23 08:48:09 1993 Fred Fish (fnf@cygnus.com)
+
+ * configure.in: Use host makefile fragment config/mh-sysv4
+ on *-*-sysv4* configurations.
+ * config/mh-sysv4: New host makefile fragment for SVR4 systems.
+
+Mon Mar 22 23:26:58 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * Makefile.in: add dvi, check and installcheck targets
+
+ * doc/Makefile.in: add defines for MAKEINFO, TEXI2DVI
+
+Sun Mar 21 17:44:11 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest.exp: New command line option --ignore. Ignore any tests
+ specified this way.
+ * lib/framework.exp: Now uses puts send_error of send_user for
+ some procs. Now warnings and errors go to stderr, and can
+ be redirected. They still go to the logs.
+
+Tue Mar 16 18:07:56 1993 Rob Savoye (rob at poseidon.cygnus.com)
+
+ * runtest.exp: Finds site.exp file with new install.
+ * Makefile.in: Installs much better.
+
+Tue Mar 9 08:17:04 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (MAKEOVERRIDES): Set to be empty.
+
+Mon Mar 8 17:40:41 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * lib/vrtx.exp: Spectra shell procedures.
+
+Mon Mar 8 19:26:41 1993 Fred Fish (fnf@cygnus.com)
+
+ * Makefile.in, config/{mt-a29k-udi, mt-frwcom-aout, mt-i386-aout,
+ mt-i960-nindy, mt-i960-vx, mt-m68k-abug-aout, mt-m68k-abug-coff,
+ mt-m68k-aout, mt-m68k-coff, mt-m68k-vx, mt-mips, mt-sparc-aout,
+ mt-sparc-vx, mt-sparclite} (GDBFLAGS): The default is -nx, to not
+ load whatever random '.gdbinit' file might happen to be in the
+ directory where the dejagnu tests are run. If tests require
+ a specific init file, they should load them explicitly.
+
+Sun Mar 7 15:16:42 1993 Rob Savoye (rob@cygnus.com)
+
+ * runtest.exp, Makefile.in: Now sets default for objdir.
+
+Sun Feb 28 15:30:00 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest.exp: Now find site.exp in a path list. Also now supports
+ using a short config file in each directory to override options.
+ * Makefile.in, configure.in: Removed link for lib directory. Added
+ doc as a subdir, runtest and site.exp now built as a dependancy,
+ rather than by configure.
+
+Thu Feb 25 11:07:30 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * config/mt-mips: New file for mt-idt-ecoff target.
+ * configure.in (mips-idt-ecoff): New target; uses mt-mips.
+ * runtest.exp: If mips-idt-ecoff, set target_abbrev to mips.
+ * runtest.exp: Print any error produced by ${tool_init}.
+ * lib/remote.exp (kermit): Made work.
+
+Mon Feb 22 17:11:18 1993 Mike Werner (mtw@poseidon.cygnus.com)
+
+ * configure.in: Removed unneccesary code from configure.in
+
+Mon Feb 22 07:54:03 1993 Mike Werner (mtw@poseidon.cygnus.com)
+
+ * devo/dejagnu: made modifications to framework, etc., to allow
+ it to work properly given the reorganization of deja-gnu and the
+ relocation of the testcases from deja-gnu to a "tool" subdirectory.
+
+Sun Feb 21 11:15:22 1993 Mike Werner (mtw@poseidon.cygnus.com)
+
+ * devo/dejagnu: Initial creation of devo/dejagnu.
+ Migrated dejagnu testcases and support files for testing software
+ tools to reside as subdirectories, currently called "testsuite",
+ within the directory of the software tool. Migrated all programs,
+ support libraries, etc. beloging to dejagnu proper from
+ devo/deja-gnu to devo/dejagnu. These files were moved "as is"
+ with no modifications. The changes to these files which will
+ allow them to configure, build, and execute properly will be made
+ in a future update.
+
+Wed Feb 17 10:51:13 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * gdb.t02/whatis.exp, gdb.t03/ptype.exp: Remove expected failures
+ for mips-*-* that now work (gcc was fixed to distinguish int and
+ long in COFF debugging output).
+
+Tue Feb 16 17:31:54 1993 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t21/demangle.exp (test_gnu_style_demangling,
+ test_cfront_style_demangling): Add tests for some cases that
+ involve const that were previously broken.
+
+Mon Feb 15 14:09:33 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * gdb.t00/default.exp (attach, core-file, r, run, target core):
+ Add more error messages used by cross gdb.
+
+Fri Feb 12 11:17:05 1993 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t21/demangle.exp: Add yet more cfront demangling tests.
+
+Thu Feb 11 12:23:53 1993 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t21/demangle.exp: Add new demangling tests, for various
+ gnu and cfront patterns, that match recent bug fixes.
+ * configure.in (configdirs): Add gdb.t23.
+ * gdb.t23/ {Makefile.in, configure.in, in-gdbme.cc,
+ templates.exp}: New test case to testing templates. Currently
+ contains just the framework, but no tests.
+ * gdb.t21/demangle.exp (demangle): Fix proc so that demangling
+ failures don't trigger two failure reports, one erroneously
+ indicating the cause as a timeout.
+ * gdb.t21/demangle.exp (various): Print number of correct
+ demanglings when suppressing remaining tests.
+ * gdb.t21/demangle.exp (test_cfront_style_demangling):
+ New test for cfront style demangling.
+ * gdb.t21/demangle.exp (do_test): Call cfront style demangling
+ test.
+
+Wed Feb 10 18:28:40 1993 Stu Grossman (grossman at cygnus.com)
+
+ * gdb.t11/list.exp (list filename:function; wrong filename not
+ rejected): Revise expected failure profile. All systems are
+ expected to fail.
+
+Mon Feb 8 21:25:47 1993 Stu Grossman (grossman at cygnus.com)
+
+ * gdb.t00/help.exp (help set): Look for prompt on next line to
+ prevent timeout error.
+ * gdb.t11/list.exp (list filename:function; wrong filename not
+ rejected): Document expected failure for general case. Set
+ expected failure for sunos.
+
+Wed Feb 3 09:42:14 1993 Mike Stump (mrs@rtl.cygnus.com)
+
+ * g++.niklas, configure.in: Add some test cases from Niklas.
+
+Mon Feb 1 18:40:27 1993 Mike Werner (mtw@rtl.cygnus.com)
+
+ * code_quality.exp, compile.exp, execute.exp, noncompile.exp,
+ special.exp, unsorted.exp: added "unset subdir_created".
+
+Fri Jan 29 14:20:11 1993 Mike Werner (mtw@rtl.cygnus.com)
+
+ * Makefile.in (install): changed the sed command, which creates
+ $(target-alias)-runtest, to have the installed
+ $(target-alias)-runtest call $(bindir)/runtest.exp instead of
+ $(srcdir)/runtest.exp . This worked earlier but was broken by a
+ change to $(EXPECT) .
+
+Thu Jan 28 14:24:56 1993 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in (info, install-info): Deleted extraneous @'s.
+
+Thu Jan 28 08:29:57 1993 Fred Fish (fnf@cygnus.com)
+
+ * Makefile.in (CC_FOR_TARGET, CFLAGS, CXX_FOR_TARGET, CXXFLAGS,
+ CXX, GCC_FOR_TARGET, FLAGS_TO_PASS): Match definitions in
+ upper level devo/Makefile.in.
+ * config/mt-unix (EXPECT): Remove definition, it is set by
+ Makefile.in to use the latest built version.
+ * Makefile.in (CHILL_FOR_TARGET, CHILLFLAGS, CHILL_LIB): Match
+ definitions in upper level devo/Makefile.in.
+
+Wed Jan 27 21:48:15 1993 Fred Fish (fnf@cygnus.com)
+
+ * Makefile.in (clean): Test if directory exists before trying
+ to run submake in it.
+ * gdb.t00/teststrategy.exp: Add cases that work when gdb is
+ compiled with ALIGN_STACK_ON_STARTUP defined. Fix "print foo"
+ expected output to match current gdb. Fix tests for finding
+ pathname to gdb executable to use the TCL "file" command.
+ * gdb.t20/classes.exp: Change error when binfile does not
+ exist to be a simple fail instead.
+ * tcl.tests/Makefile.in (tcltest): Use CC_FOR_TARGET.
+ * tcl.tests/Makefile.in (Makefile): Add target.
+ * gdb.t30/chexp.exp: Set up expected failure for printing
+ uninitialized convenience variables.
+ * gdb.t31/chillvars.exp: Set up expected failure for references
+ to string4, which chill compiler doesn't handle yet. Add tests
+ for string repetition operator.
+ * gdb.t31/in-gdbme.ch: Comment out string4, not handled yet.
+
+Mon Jan 25 15:12:41 1993 Mike Werner (mtw@rtl.cygnus.com)
+
+ * gcc.unsorted/unsorted.exp
+ gcc.special/special.exp
+ gcc.noncompile/noncompile.exp
+ gcc.execute/execute.exp
+ gcc.compile/compile.exp
+ gcc.code_quality/code_quality.exp:
+ Modified to properly find source code for the test cases,
+ create the appropriate subdirectories to hold the compiled
+ testcases, and delete the subdirectories when finished.
+
+Thu Jan 21 18:05:54 1993 Mike Werner (mtw@rtl.cygnus.com)
+
+ * Makefile.in: cosmetic changes.
+ * gcc.code_quality/code_quality.exp: repalced a "source xxx"
+ with a "load_lib xxx".
+ * gcc.compile/compile.exp: replaced a "source xxx" with a
+ "load_lib xxx".
+
+Thu Jan 21 08:03:16 1993 Fred Fish (fnf@cygnus.com)
+
+ * Makefile.in (CC, CXX): Change to CC_FOR_TARGET, CXX_FOR_TARGET.
+ * Makefile.in (FLAGS_TO_PASS): Add AR_FOR_TARGET, CC_FOR_tARGET
+ CXX_FOR_TARGET, RANLIB_FOR_TARGET.
+ * {gdb.t00, gdb.t01, gdb.t02, gdb.t03, gdb.t04, gdb.t05, gdb.t06,
+ gdb.t07, gdb.t08, gdb.t09, gdb.t10, gdb.t11, gdb.t12, gdb.t13,
+ gdb.t15, gdb.t16, gdb.t20, gdb.t21, gdb.t22}/Makefile.in:
+ Add Makefile target, dependencies, and rules, replace CC with
+ CC_FOR_TARGET and CXX with CXX_FOR_TARGET.
+ * gdb.t03/ptype.exp: Add tests for string constants and array
+ constants.
+ * gdb.t16/printcmds.exp: Add tests for string constants and array
+ constants.
+ * Makefile.in (CHILL): Change to CHILL_FOR_TARGET.
+ * Makefile.in (FLAGS_TO_PASS): Add CHILL_FOR_TARGET.
+ * {gdb.t30, gdb.t31}/Makefile.in: Add Makefile target, dependencies,
+ and rules. Replace CHILL with CHILL_FOR_TARGET.
+ * gdb.t31/chillvars.exp: Set print address off, add tests for
+ strings.
+ * gdb.t31/in-gdbme.ch: Add some initialized string variables.
+
+Tue Jan 19 14:07:38 1993 Mike Werner (mtw@rtl.cygnus.com)
+
+ * Makefile.in: corrected anchoring error in sed script, within
+ the "install" rule, which created the the file {mach}-runtest
+
+Fri Jan 15 21:16:51 1993 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t04/setvar.exp: Minor changes to match current syntax for
+ printing array-of-char in string form.
+ * gdb.t16/printcmds.exp: Fix one test case to match bug fix.
+ * gdb.t30/chexp.exp: Disable tests that check for control
+ sequence form of character literals, not supported in GNU Chill.
+
+Wed Jan 13 21:33:05 1993 Mike Stump (mrs@cygnus.com)
+
+ * doc/dejagnu.texi, Makefile.in: Change .../gcc to .../xgcc.
+
+Wed Jan 13 08:21:00 1993 Fred Fish (fnf@cygnus.com)
+
+ * Makefile.in (CHILLFLAGS): Add appropriate -L arg to find
+ libchill.a, if a freshly built one exists.
+ * gdb.t31/Makefile.in (LIBCHILL, LIBS): Define local defaults.
+
+ * Makefile.in (runtest): Fix to properly find freshly built
+ "expect" binary.
+
+Tue Jan 12 12:51:46 1993 Fred Fish (fnf@cygnus.com)
+
+ * Makefile.in (CPLUS): Remove macro.
+ * Makefile.in (CC, CXX, GDB, EXPECT): Use freshly build binaries
+ if available.
+ * Makefile.in (CFLAGS, CXXFLAGS, GDBFLAGS): Provide default
+ flags to go with CC, CXX, and GDB respectively.
+ * Makefile.in (FLAGS_TO_PASS): Add CXX, CXXFLAGS, LINK.
+ * Makefile.in (info, subdir_do, subdirs): Use rootme and
+ rootsrc to find tool directories, use FLAGS_TO_PASS.
+ * Makefile.in (runtest): Use new EXPECT macro.
+ * Makefile.in: Other minor macro rearrangements.
+ * config/{abug-g++.exp, aout-g++.exp, coff-g++.exp, mt-a29k-udi,
+ mt-i960-nindy, mt-i960-vx, mt-m68k-abug-aout, mt-m68k-abug-coff,
+ mt-m68k-aout, mt-m68k-coff, mt-m68k-vx, mt-unix, nind-g++.exp,
+ udi-g++.exp, unix-g++.exp, vx-g++.exp}, doc/deja-gnu.texi,
+ g++.mike/{misc2.exp, misc8.exp, misc9.exp}, g++.old-deja/tests/
+ g++.sun/g++.frag/1076585.C, gdb.t20/Makefile.in, gdb.t21/
+ Makefile.in, gdb.t22/Makefile.in, lib/mike-g++.exp:
+ Use CXX rather than CPLUS, CPLUSPLUS, or C++, use CXXFLAGS
+ rather than CFLAGS or CPLUSFLAGS or C++FLAGS.
+ * Makefile.in (CHILL): Use freshly built binaries if available.
+ * Makefile.in (CHILLFLAGS): Provide default flags for CHILL.
+ * Makefile.in (FLAGS_TO_PASS): Add CHILL, CHILLFLAGS.
+
+Mon Jan 11 18:02:48 1993 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * expect.tests/exp-after.test, exp-before.test, log-file.test,
+ send-exp.test, spawn.test: Test case for expect tests.
+ * expect.tests/exp-test.exp: Test driver for expect tests.
+ * expect.tests/Makefile.in, configure.in: Configure
+ support.
+ * expect.tests/exp-test.c: Simple interactive program for expect
+ tests.
+ * expect.tests: New directory.
+ * config/unix-expect.exp: New tool.
+
+Fri Jan 8 16:41:51 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
+
+ * config/udi-gdb.exp (gdb_start): don't require "UDI socket" in
+ the startup message.
+
+Wed Jan 6 08:53:08 1993 Fred Fish (fnf@cygnus.com)
+
+ * {gdb.t01, gdb.t02, gdb.t03, gdb.t04, gdb.t05, gdb.t06, gdb.t07,
+ gdb.t11, gdb.t12}/Makefile.in: Add explicit "all" target to
+ Makefiles missing it, supply explicit rules to make object files
+ from source files to subvert bug in GNU make that assumes gcc
+ style "-c -o" handling.
+ * tcl.texts/Makefile.in: Look in tcl sibling dir for library,
+ rather than picking up whatever happens to be installed.
+ * config/unix-gdb.exp (gdb_start): Temporarily increase timeout
+ by 60 seconds to accommodate heavily loaded or otherwise slow
+ systems during gdb startup. A similar fix was also installed in
+ a 14-Dec change, but mysteriously disappeared.
+ * gdb.t31/chillvars.exp: Go ahead and try to run test on non-
+ DWARF systems, as long as there is a chill executable to test.
+
+Mon Jan 4 17:19:08 1993 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t30/chexp.exp (test_print_accept, test_print_reject):
+ Convert to varargs function.
+ * gdb.t30/chexp.exp (test_arithmetic_expressions): New tests.
+ * gdb.t31/Makefile.in (CHILL, CHILLFLAGS): Provide defaults.
+ * gdb.t31/chillvars.exp (test_UBYTE): Remove FIXME`s, fixed.
+ * gdb.t31/in-gdbme.ch (scalar_arithmetic, write_arrays,
+ booleans): Add procs for testing.
+ * lib/gdb.exp (runto): Don't expect hex format for breakpoint
+ address.
+
+Sun Jan 3 14:24:53 1993 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t30/chexp.exp (test_float_literals_accepted): Use
+ literals in comparisons, rather than printing their values
+ directly. Avoids spurious failures due to conversion or
+ representational differences between machines types.
+
+Sat Jan 2 22:56:53 1993 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t30/chexp.exp (test_float_literals_accepted): New test.
+ * gdb.t31/in-gdbme.ch (testvars): Add floating point assigns.
+
+Thu Dec 31 08:30:08 1992 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t00/help.exp: Track recent gdb changes in description
+ of "set" command for assigning expression values to variables.
+
+Wed Dec 30 13:17:36 1992 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t00/gdbvars.exp: New tests for convenience variables and
+ history value list.
+ * gdb.t30/chexp.exp: Add tests for convenience variables and
+ history value list.
+
+ * config/unix-gdb.exp (gdb_exit): Put escaped quotes around
+ command to send to gdb inside a catch. Otherwise the newline
+ at the end of the quit command gets eaten.
+ * lib/gdb.exp (gdb_test): Replace bogus message about the
+ gdb process no longer existing with a error that reports the
+ real reason for the send command failing. Remove use of
+ "$command" in the expect pattern, since it may contain sequences
+ that look like regular expressions but should not be interpreted
+ as regular expressions.
+
+Tue Dec 29 22:49:56 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * Makefile.in: define FLAGS_TO_PASS
+
+Sun Dec 27 11:52:45 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * lib/udi.exp: Fixed so that it downloads stably. Added better
+ error trapping. Works with simulator or demo board.
+ * runtest.exp: Cleaned up handling of signals during the init
+ phase.
+ * lib/old-dejagnu.exp: Fixed bug that made $CFLAGS accumulate
+ repititions of the same flags.
+ * runtest.exp: cleans up temp file better.
+ * config/udi-g++.exp: Minor bug fixes. Doesn't die it it can't
+ connect now.
+
+Sat Dec 26 19:21:14 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * config/vx-gdb.exp: Now it exits if it can't connect to the
+ target.
+ * most everything: Made *all* (whew) error and warning messages
+ use new procedures. These messages are controlled by --all rather
+ than --verbose.
+ * lib/framework.exp: Fixed clone_output so everything gets sent to
+ the correct files. Also added a procedure for standard warning and
+ error messages.
+
+Sat Dec 26 11:16:55 1992 Fred Fish (fnf@cygnus.com)
+
+ * tcl.tests/tcltest.c (Tcl_DumpActiveMemory): Remove extern
+ declaration, which is now incompatible with tcl.h.
+
+
+Tue Dec 22 22:36:42 1992 Fred Fish (fnf@cygnus.com)
+
+ * Makefile.in (subdir_do): Remove blank line after target,
+ that gives older makes indigestion.
+ * configure.in: When running "make", use environment definition
+ of MAKE if one exists, default to "make" if not in environ.
+ * gdb.t21/cplusfuncs.exp: Update regular expressions for matching
+ operators to track gdb C++ demangling fixes.
+
+Mon Dec 21 22:32:46 1992 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t31/in-gdbme.ch (bytetable3, bytetable4): Reduce ranges
+ of array dimensions to something more managable for explicit
+ initialization. Add initializers.
+ * gdb.t31/in-gdbme.ch (inttable1, inttable2, longtable1,
+ longtable2): Fix typo, initializers were intended to be
+ sequential values for easy identification.
+ * gdb.t31/chillvars.exp: Update to track changes in in-gdbme.ch.
+
+Mon Dec 21 19:48:42 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest.exp: Has new option to specify the target's
+ configuration string. Only used by runtest.
+ * g++.other/*.exp: Now use procs from mike-g+.exp.
+ * g++.mike/*.exp: Now use procs from mike-g+.exp.
+ * Makefile.in: Now has install & uninstall targets.
+ * lib/prebase, postbase.exp: Merged into lib/mike-g++.exp and made
+ into procs.
+ * runtest.exp: Traps error when trying to test a tool that does't
+ have support.
+ * lib/framework.exp: Contains all the procs from runtest.exp.
+ These are basically the guts of the testing framework.
+ * runtest.exp: Moved all procs to a library file.
+
+Sat Dec 19 16:50:46 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest.exp: Upped version number to 0.8.1
+ * lib/nm-defs.exp: Support procs for nm tests.
+ * nm.all/nm.exp: Now uses a generic nm testing proc.
+ * nm.all/Makefile.in: Changes the path for the linker script so it
+ won't produce srecs.
+ * nm.all/configure.in: Copies linker script for m68k-abug and
+ edits out OUTPUT_FORMAT line.
+ * config/*-nm.exp: They only contain stubs calling the procs in
+ nm-defs.exp.
+
+Fri Dec 18 18:13:15 1992 Rob Savoye (rob@cygnus.com)
+
+ * gcc.*/*.exp: Doesn't change into the subdir.
+ * lib/c-torture.exp: Adds subdir to path for objects and binaries
+ * runtest.exp: Added tests for targetname and connectmode when
+ using a MVME m68k board.
+ * configure.in: Now tests for m68k-abug-[coff|aout].
+ * config/mt-m68k-abug: Now a mt-m68k-abug-coff and
+ mt-m68k-abug-aout version so either tool chain can be used to
+ produce the srecords.
+
+Fri Dec 18 10:26:46 1992 Fred Fish (fnf@cygnus.com)
+
+ * Makefile.in (.NOEXPORT): Add for GNU make. Don't pass defines
+ with pathnames relative to this directory to submakes.
+ * gdb.t00/{default.exp, help.exp}: Update to track latest gdb
+ changes.
+ * gdb.t30/chexp.exp: Update to track latest gdb changes.
+ * gdb.t31/{in-gdbme.ch, chillvars.exp}: Add some arrays and
+ tests for arrays, update to track latest gdb changes.
+
+Mon Dec 14 18:42:58 1992 Fred Fish (fnf@cygnus.com)
+
+ * config/unix-gdb.exp (gdb_start): Temporarily set timeout up
+ to 60 seconds to accommodate heavily loaded or otherwise slow
+ systems during gdb startup.
+
+Mon Dec 14 12:16:27 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * gdb.t11/list.exp, gdb.t16/printcmds.exp: added expected failures
+ for i960-*-*.
+ * gdb.t15/funcargs.exp: increase timeout for *-*-vxworks.
+
+Fri Dec 11 21:15:07 1992 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t16/{in-gdbme.c, printcmds.exp}: Add some tests for
+ printing the contents of multidimensional arrays.
+
+Wed Dec 9 13:18:39 1992 Michael Werner (mtw@rtl.cygnus.com)
+
+ * tcl.test/tcl-test.exp:
+ changed the comparison that looks for the end-of-test return
+ string, "%", from the tcl interpreter, tcltest, to check for
+ "^%$" instead of just "%".
+
+Tue Dec 8 13:49:18 1992 Fred Fish (fnf@cygnus.com)
+
+ * chillvars.exp: Only run the tests if the target is an
+ SVR4 target (which presumes DWARF format). They are only
+ expected to work right now for targets that use DWARF.
+
+Tue Dec 8 13:42:45 1992 Michael Werner (mtw@rtl.cygnus.com)
+
+ * removed accidental change to config/unix-tcl.exp that
+ occurred during last check-in.
+
+Tue Dec 8 13:21:45 1992 Michael Werner (mtw@rtl.cygnus.com)
+
+ * tcl.test/configure.in
+ corrected error in "files=" line; changed "defs.h" to "defs".
+
+Sun Dec 6 22:00:06 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * config/*-nm: Fixed nm_version.
+ * configure.in: Doesn't configure tcl tests for a cross test.
+
+Sat Dec 5 14:13:15 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * doc/dejagnu.l, dejagnu.texi: Added documentation for --baud
+ option.
+ * runtest.exp: Added --baud option to spcify the baud rate for a
+ serial connection.
+
+Fri Dec 4 07:00:45 1992 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t31/chillvars.exp: Add new tests, fix expected results
+ for some existing ones.
+
+Thu Dec 3 12:28:52 1992 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t20/{classes.exp, inherit.exp, misc.exp},
+ gdb.t21/cplusfuncs.exp, gdb.t22/virtfunc.exp: Downgrade
+ missing test executables from ERROR to just FAIL.
+ * gdb.t30/chillvars.exp: Downgrade missing test executables
+ from ERROR to just FAIL. Start adding some real tests.
+ * gdb.t30/in-gdbme.ch: Start adding some initializations of
+ fundamental type variables.
+
+Wed Dec 2 11:46:04 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * runtest.exp (setup_xfail): only set xfail_prms if xfail_flag is
+ set.
+ * gdb.t11/list.exp, gdb.t12/scope.exp, gdb.t15/funcargs.exp: more
+ mips-*-* expected failures.
+
+Wed Dec 2 11:39:28 1992 Fred Fish (fnf@cygnus.com)
+
+ * lib/gdb.exp (gdb_reinitialize_dir): New utility proc.
+ * gdb.t03/ptype.exp, gdb.t06/break.exp, gdb.t07/watchpoint.exp,
+ gdb.t08/opaque.exp, gdb.t09/corefile.exp, gdb.t11/list.exp,
+ gdb.t12/scope.exp, gdb.t13/bitfields.exp, gdb.t15/funcargs.exp,
+ gdb.t16/printcmds.exp, gdb.t20/{classes.exp, inherit.exp,
+ misc.exp}, gdb.t21/{cplusfuncs.exp, demangle.exp},
+ gdb.t22/virtfunc.exp: Use new gdb_reinitialize_dir tcl proc.
+ * gdb.t20/{classes.exp, inherit.exp, misc.exp},
+ gdb.t21/{cplusfuncs.exp, demangle.exp}, gdb.t22/virtfunc.exp:
+ Suppress tests if executable not found.
+ * Makefile.in: Add CHILL and CHILLFLAGS as things to pass
+ to recursive makes.
+ * gdb.t31/{configure.in, Makefile.in, in-gdbme.ch, chillvar.exp}:
+ New directory of chill tests.
+ * config/mt-unix (CHILL, CHILLFLAGS): New defs for chill
+ compiler name and flags to pass to compiler.
+ * configure.in (configdirs): Add gdb.t31.
+ * gdb.t30/chexp.exp: Don't need to load a gdb.
+
+Mon Nov 30 20:38:00 1992 Fred Fish (fnf@cygnus.com)
+
+ * runtest.exp (setup_xfail, clear_xfail): Modify to accept
+ multiple arguments and examine each one for a valid config
+ triplet or a prms id.
+ * gdb.t03/ptype.exp: Clear xfail flag for ptype of unnamed
+ enumeration members for SVR4 systems (presumes DWARF).
+ * gdb.t11/list.exp: Set up xfail flag for tests that are
+ expected to fail on SVR4 systems (presumes DWARF).
+
+Mon Nov 30 17:32:36 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * gdb.t00/default.exp (set write, show write): don't leave it at
+ set write on, because that causes debugging problems in later
+ testing on Ultrix.
+
+Mon Nov 30 17:18:32 1992 Rob Savoye (rob@cygnus.com)
+
+ * runtest.exp: Now uses find proc to recursively find all expect
+ file.
+
+Mon Nov 30 11:55:36 1992 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t20/inherit.exp: Recognize a '.' as the g++/gdb
+ CPLUS_MARKER, rather than just '$'. This particular piece of
+ brain damage is spreading like ooze; gcc, gdb, and libiberty are
+ all infected as well.
+
+Mon Nov 30 11:23:42 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * configure.in: use mt-i960-nindy, not mt-i960-nind.
+ * gdb.t02/whatis.exp, gdb.t03/ptype.exp, gdb.t08/opaque.exp,
+ gdb.t09/corefile.exp, gdb.t11/list.exp, gdb.t12/scope.exp: add
+ expected failures for mips-*-*.
+
+Sun Nov 29 23:10:43 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * prebase.exp (not_compiler_output): Change from looking for
+ Segmentation Violation to Internal compiler error, as the compiler
+ no longer issues the former.
+
+Sun Nov 29 15:16:06 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * config:/vx-g++.exp, udi-g++.exp: Replaced with gcc init code.
+ * runtest.exp: Now executes recursively any *.exp files.
+ * lib/old-dejagnu.exp: proc old-dejagnu executes tests that are
+ supposed to.
+ * g++.old-deja/old-deja.exp: Recursively get all the C code in a
+ subdirectory tree.
+ * lib/utils.exp: New file, contains utility procs grep, find,
+ and which.
+ * runtest.exp: Applied Fred's patch for the output.
+
+Sun Nov 29 08:51:15 1992 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t22/virtfunc.exp: Make "ptype VA" an expected failure.
+ * runtest.exp: Fix a couple of minor formatting glitches.
+ * gdb.t30/chexp.exp(test_print_reject): Add another possible
+ failure expect string.
+
+Sat Nov 28 21:09:33 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * g++.old-deja/tests: New directories for C++ code from the old
+ style DejaGnu tests.
+ * g++.old-deja/old-deja.exp: New file for running the old style
+ DejaGnu tests.
+ * lib/old-dejagnu.exp: New file. Support procs for running the
+ old style DejaGnu tests.
+
+Wed Nov 25 08:05:59 1992 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t16/printcmds.exp: Set up expected failure for
+ "p 123DEADBEEF". Gdb thinks this is a floating point number.
+
+Mon Nov 23 12:14:43 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * config/mt-i960-vx: set LIBS to -lgcc, not -lg (lost when file
+ was renamed).
+ * gdb.t07/watchpoint.exp: Added expected failures for Sun3.
+
+Fri Nov 20 15:39:07 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * gdb.t00/default.exp (info set): don't get fooled by the prompt
+ in the output.
+ (detach): gdb_test can not include $prompt in the expected result.
+ * gdb.t00/teststrategy.exp (backtrace): don't insist on main being
+ at level 7; any level is acceptable.
+
+Sun Nov 22 14:44:35 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * lib/remote.exp: Added proc for kermit.
+
+Fri Nov 20 11:23:26 1992 Fred Fish (fnf@cygnus.com)
+
+ * config/unix-gdb.exp (gdb_exit): Add explicit close as
+ workaround for expect bug that slowly consumes file descriptors.
+ * gdb.t22/virtfunc.exp: When gdb dumps core, start a new one
+ for the benefit of later tests that expect a gdb to be currently
+ running. This is a kludge.
+ * configure.in (configdirs): Add gdb.t16.
+ * gdb.t16/{Makefile.in, configure.in, in-gdbme.c, printcmds.exp}:
+ New test for exhaustive printing of all ASCII characters and
+ substrings, and a few tests for printing of integral values.
+ * gdb.t30/chexp.exp: Add tests for character literals.
+
+Thu Nov 19 17:45:53 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * lib/udi.exp: New procs for udi shells.
+ * config/udi-gcc.exp: Made gcc_load
+ * config/udi-gdb.exp: Made gdb_start, gdb_load gdb_exit
+ * gdb.t00/default.exp: Lots of ugly hacks cause many default
+ actions kill the UDI connection. Lookfor for new xfails. Sigh...
+ * config/*-gdb.exp: Use which in gdb_version.
+ * lib/gcc.exp: Use which in default_gcc_version.
+ * runtest.exp: New proc which that does a path lookup.
+
+Wed Nov 18 17:08:08 1992 Michael Werner (mtw@rtl.cygnus.com)
+
+ * Updated c torture tests from the package c-torture-1.7
+ The test in: gcc.code_quality
+ gcc.compile
+ gcc.execute
+ gcc.noncompile
+ gcc.unsorted
+ were updated. Existing tests in a given directory that had
+ changed or that were not in 1.7 were moved into a subdirectory
+ called "old-tests". 1.7 had a new directory called "special",
+ the contents of which were placed in deja-gnu/gcc.special .
+ Also, deleted from a prior Changelog entry was the erroneous
+ statement of the removal of support in gcc for the recognition
+ of the ".C" extension.
+
+Wed Nov 18 13:36:43 1992 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t30/chexp.exp: Change print tests to include explicit
+ print command so we can also include formats.
+
+Wed Nov 18 12:32:53 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * configure.in: never change target_os; we need to be able to
+ check it in istarget tests.
+ * config/unix-gdb.exp (gdb_exit): the string match test was the
+ wrong way around; also, call close to try to avoid the file
+ descriptor leak in some versions of expect.
+ * teststrategy.exp: added some expected failures for Sun4 and
+ Solaris, and changed the core dump test to accept a timeout (no
+ response from gdb) if a core file was actually created.
+ * gdb.t02/whatis.exp, gdb.t03/ptype.exp, gdb.t05/expr.exp,
+ gdb.t15/funcargs.exp: added PRMS bug numbers for expected i960
+ failures.
+ * gdb.t10/crossload.exp (bfddefault): corrected error message.
+ (whole file): changed fixme handling to use setup_xfail.
+
+Tue Nov 17 09:14:11 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * runtest.exp (setup_xfail): take optional second argument which
+ is the PRMS bug number.
+ (pass, fail): use it.
+ * gdb.t00/default.exp (accept): gdb 4.7 returns a different
+ string.
+ (show): don't get fooled by the prompt in the output.
+ * gdb.t12/scope.exp: RS/6000 expects to fail print 'file'::var.
+ * gdb.t21/cplusfuncs.exp: use setup_xfail rather than FIXME.
+
+Mon Nov 16 12:38:47 1992 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t10/Makefile.in (EXECUTABLES): Add sparc-elf.
+ * gdb.t10/README: Document sparc-elf.
+ * gdb.t10/crossload.exp: Load and test sparc-elf.
+ * gdb.t10/sparc-elf.u: New test executable.
+
+Mon Nov 16 11:31:30 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * config/unix-tcl.exp: Tcl library init module.
+ * tcl.tests: Add the tests directory from the Tcl release.
+ * tcl.tests/Makefile.in, configure.in: Support stuff.
+ * tcl.tests/tcl-test.exp: Test the Tcl library.
+
+Sun Nov 15 09:30:29 1992 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t30/{Makefile.in, chexp.exp, configure.in}: New tests
+ for GNU-Chill.
+ * configure.in (configdirs): Add gdb.t30.
+
+Fri Nov 13 21:14:13 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * runtest.exp (pass): don't print \n\nXPASS\n\n; just XPASS:
+ suffices.
+ (setup_xfail): don't set xfail_flag unconditionally; instead set
+ it if the argument is the target so that it can be called several
+ times.
+ (clear_xfail): new function to conditionally clear xfail_flag.
+ * config/unix-gdb.exp (gdb_load): set the directory to point to
+ whereever the program is loaded from, for the benefit of symbol
+ formats which don't know that.
+ * teststrategy.exp: accept AIX error messages.
+ (print "foo"): AIX shared libraries mean gdb can't find malloc.
+ (stack trace): fails on AIX.
+ * gdb.t02/in-gdbme.c, gdb.t03/in-gdbme.c: assign to nested_su
+ field so that AIX linker doesn't strip it from object file.
+ * gdb.t03/ptype.exp (unnamed enumeration): works on RS/6000.
+ * gdb.t04/setvar.exp: don't set prms_id to garbage value.
+ * gdb.t08/opaque.exp: RS/6000 can't do xrefs.
+ * gdb.t09/corefile.exp: AIX gdb can't get name or signal from a
+ core file.
+ * gdb.t10/crossload.exp: v_signed_char on MIPS generally fails.
+ * gdb.t11/list.exp: some tests fail because gcc generates
+ incorrect debugging information.
+ * gdb.t12/in-gdbme0.c, gdb.t12/in-gdbme1.c: don't let AIX strip
+ unreferenced variables.
+
+Thu Nov 12 08:17:40 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * runtest.exp (sum): catch errors from tool_version and tool_exit,
+ to ensure that we exit as expected even if they fail.
+ * gdb.t00/default.exp, gdb.t00/help.exp: some targets, notably the
+ RS/6000, don't support "set write" and "show write".
+ * gdb.t11/list.exp (list gdbme0.c:unused, list gdbme1.c:unused):
+ mark as expected failures for i960-*-*. These should perhaps be
+ considered successes.
+
+Tue Nov 10 20:40:43 1992 Rob Savoye (rob at rtl.cygnus.com)
+
+ * lib/gcc.exp: Added $LDFLAGS to default_gcc_start so targets can
+ get their linker scripts.
+
+Mon Nov 9 10:57:44 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * lib/gcc.exp: new file; defines default_gcc_version and
+ default_gcc_start.
+ * config/*-gcc.exp: use routines in gcc.exp.
+ * gcc.execute/execute.exp: don't use c-torture, because it gives
+ us undesired PASS and FAIL reports; use gcc_start instead.
+ * gcc.execute/920501-6.c, gcc.execute/920726-1.c: don't include
+ <stdio.h> or <strings.h>, so these can be used on VxWorks.
+ * gdb.t01/run.exp: expect "run" after sending it to avoid waiting
+ for the VxWorks shell too early.
+
+Sun Nov 8 21:38:55 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
+
+ * Makefile.in: added subdir_do target, use it for info and install-info
+
+Fri Nov 6 14:10:58 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * config/vx-gdb.exp (gdb_load, spawn_vxgdb): increase timeouts.
+ * gdb.t00/default.exp: accept AIX error messages, and set the init
+ file name based on the target.
+ * gdb.t01/run.exp, gdb.t12/scope.exp: increase timeouts for
+ VxWorks.
+ * gdb.t06/break.exp: increase timeouts for VxWorks, and rewrite a
+ few tests to use gdb_test function.
+
+Fri Nov 6 11:34:20 1992 Michael Werner (mtw@rtl.cygnus.com)
+
+ * Moved the following ChangeLog entry from devo/ChangeLog to here:
+
+Wed Nov 4 17:57:47 1992 Michael Werner (mtw@rtl.cygnus.com)
+
+ * Makefile.in: Added stuff for building deja-gnu.
+ * ./deja-gnu/gdb.t21/ & ./deja-gnu/gdb.t22/:
+ Moved in-gdbme.C file to in-gdbme.cc to enhance portability.
+ Changed the configure.in file to reflect the filename extension
+ change.
+
+Fri Nov 6 14:00:48 1992 Ian Lance Taylor (ian@tweedledumbest.cygnus.com)
+
+ * gdb.t15/funcargs.exp: continue to call6k is an expected failure
+ for i960-*-vxworks; PRMS 1786.
+
+Thu Nov 5 18:09:23 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * lib/prebase.exp: Remove incorrect fix. CPLUSFLAGS needs to be
+ reset on a per test case basis, as it is changed by each test
+ case. The correct way to fix this is to establish a default value
+ for the variable, and set the variable to that value.
+
+Thu Nov 5 18:04:21 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest.exp: proc unknown doesn't print the error codes if
+ they're aren't any.
+ * lib/remote.exp: New procs tip and tip_download for boards that
+ live on the end of a serial cable.
+ * config/abug-gcc.exp: Init module for MVME board.
+ * config/mt-m68k-abug: Makefile frag for m68k MVME board.
+ * configure.in: Only makes links for config files that exist.
+
+Thu Nov 5 17:40:27 1992 Fred Fish (fnf@cygnus.com)
+
+ * {gdb.t20, gdb.t21, gdb.t22}/{Makefile.in, configure.in}:
+ Convert C++ filenames from '.C' to '.cc'. Rename test files.
+
+Wed Nov 4 11:50:34 1992 Ian Lance Taylor (ian@tweedledumbest.cygnus.com)
+
+ * lib/gdb.exp (gdb_test): don't check specially for attach error,
+ since that doesn't belong in a general test.
+ * gdb.t00/default.exp: fix attach and run tests for VxWorks.
+ * gdb.t04/setvar.exp: clean up a few broken tests, eliminating
+ some false failures incorrectly marked FIXME.
+ * gdb.t12/scope.exp: do two ``next'' commands if necessary to skip
+ over the call to init.
+ * gdb.t20/classes.exp, gdb.t20/inherit.exp: make FIXME cases use
+ setup_xfail.
+
+Tue Nov 3 11:53:37 1992 Ian Lance Taylor (ian@tweedledumbest.cygnus.com)
+
+ * runtest.exp (clone_output): send strings to the user even if
+ they say FIXME.
+ * gdb.t01/in-gdbme.c (vxmain): new function for VxWorks which
+ takes an argument and calls main with it.
+ gdb.t01/run.exp: for *-*-vxworks, call vxmain to pass arguments,
+ and look for results from connected task, not gdb.
+ * gdb.t01/term.exp: don't run these tests unless native.
+ * gdb.t02/whatis.exp, gdb.t03/ptype.exp, gdb.t05/expr.exp: expect
+ the i960 to fail to print type char correctly, because gdb treats
+ char as unsigned char.
+ * gdb.t06/in-gdbme.c (vxmain): new function for VxWorks which
+ takes an argument and calls main with it.
+ gdb.t06/break.exp: adjust line numbers for previous change. For
+ target *-*-vxworks, call vxmain to pass arguments.
+ * gdb.t07/watchpoint.exp: don't check the first old value after
+ restarting the program, because on VxWorks it will not have been
+ reset.
+ * gdb.t08/opaque.exp: don't check the breakpoint number, because
+ on VxWorks gdb_load stops and restarts gdb.
+ * gdb.t10/crossload.exp: don't run these tests for i960 targets,
+ because bfd uses SELECT_VECS and these formats are unknown.
+ * gdb.t11/list.exp: changed some FIXME strings to use setup_xfail.
+
+Mon Nov 2 19:00:36 1992 Ian Lance Taylor (ian@tweedledumbest.cygnus.com)
+
+ * config/vx-gdb.exp: use the new generic communication routines in
+ lib/remote.exp.
+ lib/remote.exp (rlogin): if we get "Sorry, this system is
+ engaged", try again; it can come from VxWorks just after
+ rebooting.
+
+Sat Oct 31 20:11:12 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest.exp: procs pass & fail now use a flag set by setup_xfail
+ to determine it a test is an expected failure or an unexpected
+ success.
+ * runtest.exp: New proc setup_xfail. If called with a configure
+ pattern it sets up the next test as an expected failure or an
+ unexpected success.
+
+Sat Oct 31 16:10:14 1992 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * gdb.t10/crossload.exp: Entire file re-written to use the new
+ gdb_test command.
+
+Sat Oct 31 12:12:08 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * lib/gdb.exp: gdb_test now traps cleanly if send fails cause gdb
+ core dumped.
+ * gdb.t00/default.exp: Rewrote the first few tests to use the
+ gdb_test proc.
+ * lib/gdb.exp: Added a gdb_test proc. It takes a command and a
+ pattern and runs the gdb test.
+
+Fri Oct 30 11:46:45 1992 Fred Fish (fnf@cygnus.com)
+
+ * runtest.exp: Guard against nonexistant PWD environment var,
+ which is shell dependent.
+
+Fri Oct 30 20:23:06 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest.exp: Changed format of log messages. $prms_id & $bug_id
+ are only printed if they are not 0. Also they now appear at the
+ end of the line in parens with a label.
+ * runtest.exp: New procs xpass & xfail for expected failures and
+ unexpected successes. Added successes to proc sum.
+ * runtest.exp: istarget & ishost with no arguments returns the
+ target and host triplet strings.
+ * runtest.exp: New proc isnative. Returns a 1 if running native,
+ a 0 if on a target.
+ * config/nind-gcc.exp, coff-gcc.ecp, aout-gcc.exp: Applied patch
+ from vx-gcc.exp so errror messages don't always go to the screen.
+
+Thu Oct 29 19:07:28 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * Changed all refences to $srcdir/lib to ./lib since configure now
+ makes a link for it.
+ * config/vx-gcc.exp: gcc_load doesn't try to load a program if
+ there is no remote shell.
+ * lib/remote.exp: The network procs telnet, rlogin, rsh now do
+ three retries before exiting with an error.
+ * runtest.exp: Fixed so there are multiple ways to get the users
+ login name so it can be printed in the logs.
+ * doc/DejaGnu.l, dejagnu.texi: Removed references to $nfshost.
+ * runtest.exp: Removed the --nfshost option cause it's become
+ unnessary.
+ * configure.in: Deals with the shorter names in config. Creates an
+ abbreviation for the OS and uses that for the filename substring.
+ * config/*: All names shortened to <= 14 characters.
+ All init-$target_os-$tool.exp changed to $target_os-$tool.exp.
+ * config/mt-vxworks68, mt-vxworks960: Changed to use the
+ abbreviated triplet form like all the other stubs. Now mt-m68k-vx
+ and mt-i960-vx.
+
+Tue Oct 27 10:27:33 1992 Mike Stump (mrs@cygnus.com)
+
+ * runtest.exp: When setting base_dir don't use getenv("PWD") until
+ the code works when there is no PWD env variable.
+
+Tue Oct 27 07:37:38 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * gdb.t00/default.exp: accept "can't create process" error for run
+ on VxWorks.
+ gdb.t08/opaque.exp: don't look for $binfile when setting
+ breakpoint.
+ gdb.t15/funcargs.exp: added -re "$prompt $" cases.
+ gdb.t20/classes.exp: accept \t as well as space after line number.
+ gdb.t22/virtfunc.exp: added expected failure for "cannot invoke
+ functions on this machine".
+ lib/gdb.exp (runto): added -re "$prompt $" cases.
+
+ * lib/gdb.exp: renamed from break.exp. Moved gdb_unload and runto
+ in from config/init-unix-gdb.exp.
+ config/init-unix-gdb.exp: removed gdb_unload and runto.
+ config/init-vxworks-gdb.exp: removed runto.
+ (gdb_start): added "set args main" so that "run" with no arguments
+ works as on Unix.
+ config/*-gdb.exp: include gdb.exp, not break.exp.
+
+ * gdb.t01/in-gdbme.c: supply static atoi for vxworks, return
+ rather than calling exit (avoids VxWorks vs. libgcc problem).
+ gdb.t07/in-gdbme.c: return rather than calling exit.
+ gdb.t08/in-gdbme0.c: return rather than calling exit.
+ gdb.t13/in-gdbme.c: return rather than calling exit.
+ * gdb.t00/default.exp: don't set height and width here.
+ config/init-unix-gdb.exp (gdb_start): set it here.
+ config/init-vxworks-gdb.exp (gdb_start): and here.
+ * config/init-vxworks-gdb.exp (runto): new function, similar to
+ init-unix-gdb.exp function.
+
+Mon Oct 26 09:16:24 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * gdb.t12/scope.exp: check for $prompt when failing, not just
+ timeout.
+ * gdb.t11/list.exp: accept tab as well as space after line number.
+ * gdb.t09/corefile.exp: don't run these tests on a target system.
+ gdb.t09/Makefile.in: don't complain if can not dump core.
+ * lib/break.exp: new file, for delete_breakpoints function.
+ config/*-gdb.exp: include it.
+ * config/init-vxworks-gdb.exp (gdb_start): open the telnet
+ connection in gdb_start, not just once.
+ (telnet_init): If shell is locked, retry.
+ (gdb_load): check for $prompt; also stop and restart gdb before
+ loading each file, because vxgdb accumulates symbols and lets the
+ old ones take precendence.
+
+Sun Oct 25 11:35:49 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * config/init-vxworks-gcc.exp: Now works good, traps load errors
+ cleanly.
+ * runtest.exp, doc/dejagnu.texi: Changed all occurences of
+ $defaultmode to $connectmode.
+ * config/init-vxworks-gcc.exp, init-unix-gcc.exp: Fixed so
+ compiler output doesn't go to the screen unless $verbose>1.
+ * runtest.exp: Improved error handling in proc unknown by having
+ it dump state.
+
+Sun Oct 25 11:35:49 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest.exp, doc/dejagnu.texi: Changed all occurences of
+ $defaultmode to $connectmode.
+ * config/init-vxworks-gcc.exp, init-unix-gcc.exp: Fixed so
+ compiler output doesn't go to the screen unless $verbose>1.
+ * runtest.exp: Improved error handling in proc unknown by having
+ it dump state.
+
+Sat Oct 24 22:44:09 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * gcc.execute/execute.exp: Looks at $status after executing the
+ test code.
+ * config/init-unix-gcc.exp: Made gcc_load work and set $status.
+ * runtest.exp: Moved regex variables for decimal and hex from
+ init-unix-gdb.exp.
+
+Fri Oct 23 12:03:47 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * config/mt-m68k-aout, mt-m68k-coff, mt-i960-nindy, mt-a29k-udi:
+ New makefile stubs.
+ * config/init-nindy-gdb.exp, init-nindy-gdb.exp, init-nindy-gdb.exp:
+ New init modules for nindy tests.
+ * configure.in: Added aout, coff, udi targets.
+ * config/init-aout-gdb.exp, init-coff-gdb.exp, init-udi-gdb.exp:
+ New init modules for gdb tests.
+ * config/init-aout-gcc.exp, init-coff-gcc.exp, init-udi-gcc.exp:
+ New init modules for gcc tests.
+ * config/init-aout-nm.exp, init-coff-nm.exp, init-udi-nm.exp: New
+ init modules for nm tests.
+ * lib/c-torture.exp: Fixed so warning messages are still a PASS.
+ * runtest.exp: Fixed bug so --connectmode now works.
+
+Fri Oct 23 11:56:02 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * gdb.t06/in-gdbme.c: added definition of atoi when using VxWorks.
+ gdb.t06/break.exp: adjusted line numbers for above change.
+
+Thu Oct 22 21:39:03 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * Makefile.in: Added to site target so the value of LIBS goes into
+ site.exp.
+
+Thu Oct 22 12:16:03 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * gdb.t00/help.exp: VxWorks support:
+ help i, help info: info sharedlibrary line is optional
+ help source: accept .vxgdbinit as well as .gdbinit
+ * gdb.t00/default.exp: VxWorks support:
+ add-symbol-file, show prompt: use $prompt, not (gdb)
+ i, info: info sharedlibrary line is optional
+ load, r, run, x: accept vxgdb responses as legitimate
+ * config/init-vxworks-gdb: send a single \n at end, because
+ otherwise the multiple prompts confuse the expect scripts.
+
+Wed Oct 21 16:06:33 1992 Ian Lance Taylor (ian@cygnus.com)
+
+ * Makefile.in, */Makefile.in: use new variable $(LIBS) when
+ linking.
+ config/mt-vxworks68, config/mt-vxworks960: define LIBS as -lgcc.
+ * configure.in: add irix* to list of unix targets.
+
+Tue Oct 20 12:31:38 1992 Mike Stump (mrs@rtl.cygnus.com)
+
+ * Makefile.in (subdirs): Fixed so that make works, even when whole
+ subdirectories of tests are removed. This way, subsets of the
+ whole set of test can be distributed.
+
+Mon Oct 19 10:59:19 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * gcc.execute/execute.exp: Runs all the test from the c-torture test's
+ execute directory.
+ * gcc.execute: New directory
+ * gcc.code_quality/code_quality.exp: Runs all the test from the c-torture test's
+ code_quality directory.
+ * gcc.code_quality: New directory
+ * gcc.noncompile/noncompile.exp: Runs all the test from the c-torture test's
+ noncompile directory.
+ * gcc.noncompile: New directory
+ * gdb.*/*.exp: Removed all references to $det_file.
+ * nm.all/nm.exp: Removed all references to $det_file.
+ * g++.other/g++-03.exp, g++-04.exp: Source prebase.exp and
+ postbase.exp from lib directory.
+ * g++.mike/misc1.exp, misc2.exp, misc3.exp, misc4.exp, misc5.exp,
+ misc6.exp, p646.exp, p710.exp: Source prebase.exp and postbase.exp
+ from lib directory.
+ * prebase.exp, postbase.exp: Moved into lib directory.
+
+Sun Oct 18 15:46:07 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * lib/c-torture.exp: New support procs for running tests from the
+ C torture test.
+ * gcc.unsorted/unsorted.exp: Runs all the test from the c-torture test's
+ unsorted directory.
+ * gcc.unsorted: New directory
+ * lib: New directory for Tcl procs used by tests.
+
+Sun Oct 18 00:39:59 1992 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t11/list.exp: Revise to install FIXME cases for things
+ that are known to fail when used with DWARF.
+ * gdb.t07/watchpoints.exp: Rewrite to avoid cascading of errors.
+
+Sat Oct 17 10:54:42 1992 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t00/teststrategy.exp: Fix single step tests to succeed
+ if the source for the gdb being tested is no longer available
+ for the gdb doing the testing.
+
+Fri Oct 16 17:25:31 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * g++.mike/misc1.C, misc4.C misc5.C p646.C: Changed all occurences
+ of 'i' as a variable, cause it screws up the vxworks 'i' shell
+ command.
+
+Fri Oct 16 15:51:10 1992 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t00/default.exp: Set height to zero. Fix target cmds
+ to accept either "child" or "procfs" depending upon whether
+ gdb uses /proc.
+ * gdb.t00/help.exp: Accept either "child" or "procfs" for
+ target commands, depending upon gdb configuration for /proc.
+ * gdb.t00/teststrategy.exp: Make disassembly output more
+ portable. Make test for gdb core dump more portable.
+ * gdb.t07/watchpoint.exp: Test only for pattern at line
+ for watchpoint hit, ignore break addr and linenumber.
+ * gdb.t09/corefile.exp: Minor fixes for system dependencies.
+
+Wed Oct 14 13:11:51 1992 Fred Fish (fnf@cygnus.com)
+
+ * configure.in (configdirs): Add gdb.t22
+ * gdb.t22/{Makefile.in, configure.in, in-gdbme.C, virtfunc.exp}:
+ New tests for calling C++ virtual functions.
+
+Wed Oct 14 00:30:07 1992 Fred Fish (fnf@cygnus.com)
+
+ * configure.in (configdirs): Add gdb.t21
+ * config/init-unix-gdb.exp (delete_breakpoints): Minor cleanup.
+ * config/init-unix-gdb.exp (runto): New proc.
+ * gdb.t00/teststrategy.exp (test_with_self): Preserve the
+ original timeout and restore when done. Extend the timeout
+ for loading gdb into itself to 10 minutes (old limit of 5 minutes
+ was hit on a SPARCstation under moderate load).
+ * gdb.t01/term.exp: Fix run command in "info terminal" test.
+ * gdb.t06/break.exp: Fix linenumber in "run 2" output.
+ * gdb.t12/scope.exp: Remove "runto" proc, moved to init file.
+ * gdb.t20/inherit.exp: Remove "runto" proc, moved to init file.
+ * gdb.t20/classes.exp: Remove "runto" proc, moved to init file.
+ Also remove some junk leftover from gdbtest case conversion.
+ * gdb.t21/{Makefile.in, configure.in, in-gdbme.C, cplusfuncs.exp,
+ demangle.exp}: New test case for demangling and C++ function
+ lookups.
+
+Mon Oct 12 09:10:22 1992 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t00/default.exp: Add expect strings for setting height and
+ width commands. Add expect string for add-symbol-file.
+ * gdb.t00/teststrategy.exp: Add proc to convert current gdb
+ pathname to fully qualified pathname for the copy command.
+ Reorganize so that the test can be gracefully skipped if this
+ fails. Increase timeout to load gdb to 5 minutes for systems
+ where loading is done over the network and/or full symtabs are
+ required.
+ * gdb.t20/{Makefile.in, configure.in, in-gdbme.C, classes.exp,
+ inherit.exp, misc.exp}: New tests for C++.
+
+Sat Oct 10 18:23:20 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest: New makefile created bourne shell to load runtest.exp
+ into expect. Needed for machine that don't grok #!/bin/expect kind
+ of things.
+ * config/mt-vxworks960: Uses new p3 naming convention. Also
+ expects to find all the binaries in your path.
+ * gdb.t13/bitfields.exp: Added a line after every test to dump the
+ output to the detail file.
+ * gdb.t15/funcargs.exp: Added a line after every test to dump the output to the detail file.
+ * configure.in: Do a "make runtest" for post target.
+ * Makefile.in: Has new target for making runtest. Runtest is a
+ bourne shell script that start $srcdir/runtest.exp.
+ * runtest.exp: made the printing of the summary counts a proc so a
+ ^C or SIGQUIT will print the summary, then exit.
+ * runtest: Renamed to runtest.exp.
+
+Fri Oct 9 07:15:04 1992 Fred Fish (fnf@cygnus.com)
+
+ * gdb.t11/configure.in (srctrigger): Change to list.exp.
+
+Fri Oct 9 00:16:02 1992 Fred Fish (fnf@cygnus.com)
+
+ * configure.in: Add gdb.t11.
+ * runtest: Add new variable efailcnt for expected failures.
+ Treat expected failures as passes, but count them separately
+ and report summary.
+ * config/init-unix-gdb.exp (delete_breakpoints): Add proc.
+ * gdb.t03/ptype.exp: Add expected failure for enums.
+ * gdb.t04/setvar.exp: Make FIXME's consistent with other tests.
+ * gdb.t06/break.exp: Add new test for next over recursive calls.
+ * gdb.t11/{Makefile.in, configure.in, in-gdbme0.c, in-gdbme0.h,
+ in-gdbme1.c, list.exp}: New test for list command.
+ * gdb.t15/in-gdbme.c (test_struct_args): Remove aggregate initial-
+ ization.
+
+Tue Oct 6 19:25:00 1992 Fred Fish (fnf@cygnus.com)
+
+ * config/init-unix-gdb.exp: Don't spawn gdb with a null argument
+ when GDBFLAGS is empty.
+ * gdb.t00/default.exp: Set width to 0 (unlimited).
+ * gdb.t00/default.exp: Add expect strings for "attach", "run",
+ "source", and "x", that match current gdb.
+ * gdb.t00/help.exp: Fix expect string for "help breakpoints".
+ * gdb.t00/teststrategy.exp: Fix "run" send string and expected
+ output. Fix expected output for control-C.
+ * gdb.t06/break.exp: Restart gdb to avoid leftovers from other
+ tests. Adjust line numbers to account for changes in test source.
+
+Tue Oct 6 11:08:26 1992 Fred Fish (fnf@cygnus.com)
+
+ * configure.in (configdirs): Add gdb.t13 gdb.t15.
+ * gdb.t12/in-gdbme0.c: Add code for checking auto variables and
+ local scopes.
+ * gdb.t12/scope.exp: Add tests for auto variables and local scopes.
+ * gdb.t13/{Makefile.in, configure.in, in-gdbme.c, bitfields.exp}:
+ New test for bitfields.
+ * gdb.t15/{Makefile.in, configure.in, in-gdbme.c, funcargs.exp}:
+ New test for actual args passed to functions.
+
+Fri Oct 2 15:42:10 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * Makefile.in: Added support for srcdir going to site.exp.
+
+Thu Oct 1 21:26:35 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * teststrategy.exp: Changed the test for target vs host to using
+ $target_alias & $host_alias instead of $target_os & $host_os.
+ * corefile.exp: Added line to dump output of tests to detail
+ log.
+ * scope.exp: Added line to dump output of tests to detail
+ log.
+ * opaque.exp: Added line to dump output of tests to detail
+ log.
+ * crossload.exp: Added line to dump output of tests to detail
+ log.
+ * watchpoint.exp: Added line to dump output of tests to detail
+ log.
+
+Thu Oct 1 21:05:28 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest: Changed the test for target vs host to using
+ $target_alias & $host_alias instead of $target_aos & $host_os.
+
+Sep 30 08:45:00 1992 Fred Fish (fnf@fishpond.cygnus.com)
+
+ * configure.in (configdirs): Add gdb.t07, gdb.t08, gdb.t09
+ gdb.t10, gdb.t12.
+ * runtest: Fix some misspellings in trap commands.
+ * runtest (proc unknown): Change arg to args.
+ * runtest (clone_output, pass, fail): Remove leading tabs from result
+ lines that waste space that can be used for more meaningful
+ comments.
+ * runtest: Remove extraneous 12 newlines at end of file.
+ * config/init-unix-gdb.exp: Add convenience abbreviations for
+ hex and decimal number strings.
+ * config/init-unix-gdb.exp: Add gdb_unload proc.
+ * gdb.t06/break.exp: Replace hardcoded directory with $subdir.
+ * gdb.t07/{Makefile.in, configure.in, in-gdbme.c, watchpoint.exp}:
+ New tests for watchpoints.
+ * gdb.t08/{Makefile.in, configure.in, in-gdbme0.c, in-gdbme1.c,
+ opaque.exp}: New tests for opaque structs.
+ * gdb.t09/{Makefile.in, configure.in, in-gdbme.c, corefile.exp}:
+ New tests for core file handling.
+ * gdb.t10/{Makefile.in, configure.in, README, in-gdbme.c,
+ crossload.exp, i486-elf.u, i860-elf.u, m68k-aout.u, m68k-aout2.u,
+ m68k-elf.u, mips-ecoff.u, sparc-aout.u}: New files for non-native
+ executable handling tests.
+ * gdb.t12/{Makefile.in, configure.in, in-gdbme0.c, in-gdbme1.c,
+ scope.exp}: New tests for handling scope specifications.
+
+Sun Sep 20 14:18:19 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * configure.in: Better support for multiple platforms. Configures
+ for most unix variants and targets.
+ * DejaGnu.l, dejagnu.texi: Updated with new command line option.
+ * runtest: Added option to not reboot the target evry time.
+
+Thu Sep 10 17:15:37 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest: Check for config variable targetname and nfshost after
+ cmd options rather than before.
+
+Mon Sep 7 21:06:23 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * config/mt-m68k-coff: Created for m68k based bare board.
+
+Sun Sep 6 16:48:29 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * postbase.exp: add $srcdir for g++_start invocation from
+ different directory tree.
+ * postbase.exp: made output other than pass/fail go only to
+ screen only if $verbose > 1.
+
+Wed Sep 2 23:29:14 1992 Rob Savoye (rob at rtl.cygnus.com)
+
+ * Minor bug fixes. Now works with local config file.
+
+Sun Aug 16 23:00:40 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * dejagnu.texi: updated some more.
+ * configure.in: added nm support.
+ * Makefile.in: added nm.all to subdirs list.
+ * config/init-sunos-nm.exp: new init module for nm tests.
+ * nm.all/in-nmtest.c: new test case code for nm.
+ * nm.all/nm.exp: new test cases for nm.
+ * nm.all/Makefile.in: new makefile fragment
+ for nm tests.
+ * nm.all/configure.in: new config file file for nm tests.
+
+Sat Aug 15 16:30:39 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * All test cases: changed how the tool is invoked. Now use the
+ _start function.
+ * configure.in: added g++ init module.
+ * init-*-g++.exp: Created new global called $exec_output, to hold
+ the output of an executable produce by g++.
+ * init-sunos-g++.exp: Added stubs to target dependant routines.
+ * g++-init.exp: renamed to config/init-sunos-g++.exp.
+ * Features.txt: moved to doc directory.
+
+Sun Aug 9 22:49:21 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * Added self-defined makefile style arguments.
+ * Added most of the makefile variables for tools to site.exp.
+ * Merged *-gdb-exit.exp into the config/init-*-gdb.exp and made it
+ a function call instead.
+
+Sat Aug 8 18:47:40 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * runtest: Now lets all site.exp set all configuration variables.
+ Command line options overrule the config file's.
+ * runtest: Rearranged all command line options. Made most of them
+ use a --fullname syntax.
+ * runtest: Now --verbose prints only the tests that failed. Added
+ option --all that prints tests that passed too.
+
+Fri Aug 7 21:55:48 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * init-vxworks-gdb.exp: Now uses config file.
+ * Makefile.in: Now has a target to make a config file.
+ * site.exp: Created by make/configure. Holds init values for
+ init module.
+ * configure.in: Now configures init modules for tool.
+ * runtest: Now uses init setup by configure.
+
+Wed Aug 5 23:04:47 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * all files: Changed the prompt pattern to a variable $prompt that
+ is set in the init module.
+
+Thu Jul 16 11:12:44 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * Changed the framework executable from DejaGnu to runtest.
+
+Sun Jul 12 16:08:04 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * Changed command line options so cc, gdb, etc... are specified
+ like makefiles. ie: CC=gcc CFLAGS="-v -r"
+ * Changed several command line option names.
+
+Fri Jul 10 11:28:00 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * Added support to gdb_load in gdb-init.exp for loading a program
+ if another one is already loaded. Also now deals with reloading if
+ still debugging previous program.
+ * Added multiple levels of verbose. Verbose gets incremented
+ depending on how many times it appears on the command line.
+ * Added more subdirectories for gdb tests.
+ * Added tests for testing "run" and "terminal" commands.
+ * Added support to gdb_load() so it can load a file to replace the
+ previous one.
+
+Tue Jun 30 22:22:00 1992 Rob Savoye (rob at darkstar.cygnus.com)
+
+ * DejaGnu: Added changes to main loop adding support for init and
+ exit modules. Moved *_version stuff to init modules.
+ * DejaGnu.l: Added new command line option for targets. Added lots
+ on how to write a test.
+ * Added section on init and exit modules. Added keyword use by
+ DejaGnu.
+ * vxworks-gdb-init.exp: Expect script that logs in to vxworks board,
+ starts GDB, and loads a file.
+ * gdb-init.exp: New init module for gdb native. Was gdb-01.exp.
+ * gdb-exit.exp: New exit module for GDB native.
+ * features.txt: List of features and goals. Based on testing meeting
+ notes.
+ * g++-init.exp: New module for G++ initialization.
+ * Gave gdb.all tests intelligent names instead of numbers.
+ * default.exp: Was xdefault.exp. Removed spawn commnd. Added prompt
+ for test failure.
+ * help.exp: Removed process spawning part. Added prompt match for test
+ failure.
+ * echo.exp: Was gdb-02.exp.
+
+Thu May 21 17:20:23 1992 Rob Savoye (rob@darkstar.cygnus.com)
+
+ * Hacking in better detailed reports.
--- /dev/null
+Basic Installation
+==================
+
+ These are generic installation instructions.
+
+ The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation. It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions. Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+ If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release. If at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+ The file `configure.in' is used to create `configure' by a program
+called `autoconf'. You only need `configure.in' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+ 1. `cd' to the directory containing the package's source code and type
+ `./configure' to configure the package for your system. If you're
+ using `csh' on an old version of System V, you might need to type
+ `sh ./configure' instead to prevent `csh' from trying to execute
+ `configure' itself.
+
+ Running `configure' takes awhile. While running, it prints some
+ messages telling which features it is checking for.
+
+ 2. Type `make' to compile the package.
+
+ 3. Optionally, type `make check' to run any self-tests that come with
+ the package.
+
+ 4. Type `make install' to install the programs and any data files and
+ documentation.
+
+ 5. You can remove the program binaries and object files from the
+ source code directory by typing `make clean'. To also remove the
+ files that `configure' created (so you can compile the package for
+ a different kind of computer), type `make distclean'. There is
+ also a `make maintainer-clean' target, but that is intended mainly
+ for the package's developers. If you use it, you may have to get
+ all sorts of other programs in order to regenerate files that came
+ with the distribution.
+
+Compilers and Options
+=====================
+
+ Some systems require unusual options for compilation or linking that
+the `configure' script does not know about. You can give `configure'
+initial values for variables by setting them in the environment. Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+ CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+ env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+Compiling For Multiple Architectures
+====================================
+
+ You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory. To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'. `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script. `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+ If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile the package for one architecture at a time
+in the source code directory. After you have installed the package for
+one architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Installation Names
+==================
+
+ By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc. You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+ You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files. If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+ In addition, if you use an unusual directory layout you can give
+options like `--bindir=PATH' to specify different values for particular
+kinds of files. Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+ If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+ Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System). The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+ For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+ There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on. Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option. TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+ CPU-COMPANY-SYSTEM
+
+See the file `config.sub' for the possible values of each field. If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the host type.
+
+ If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+Sharing Defaults
+================
+
+ If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists. Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Operation Controls
+==================
+
+ `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+ Use and save the results of the tests in FILE instead of
+ `./config.cache'. Set FILE to `/dev/null' to disable caching, for
+ debugging `configure'.
+
+`--help'
+ Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+ Do not print messages saying which checks are being made. To
+ suppress all normal output, redirect it to `/dev/null' (any error
+ messages will still be shown).
+
+`--srcdir=DIR'
+ Look for the package's source code in directory DIR. Usually
+ `configure' can determine that directory automatically.
+
+`--version'
+ Print the version of Autoconf used to generate the `configure'
+ script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
+
--- /dev/null
+## Process this file with automake to generate Makefile.in
+
+AUTOMAKE_OPTIONS = cygnus
+
+SUBDIRS = doc testsuite example
+
+# driver script goes in /usr/local/bin
+bin_SCRIPTS = runtest
+
+# auxiliary scripts go in /usr/local/share/dejagnu
+pkgdata_SCRIPTS = config.guess runtest.exp
+
+# Below, host-independent data files that need to get installed.
+# We do it this way so we can use globbing.
+
+lib_dest = $(DESTDIR)$(pkgdatadir)
+lib_files = $(srcdir)/*.c $(srcdir)/lib/*.exp
+
+baseboards_dest = $(DESTDIR)$(pkgdatadir)/baseboards
+baseboards_files = $(srcdir)/baseboards/README $(srcdir)/baseboards/*.exp
+
+config_dest = $(DESTDIR)$(pkgdatadir)/config
+config_files = $(srcdir)/config/README $(srcdir)/config/*.exp
+
+install-data-local:
+ $(mkinstalldirs) $(lib_dest)
+ for f in $(lib_files); do \
+ test ! -f "$$f" || $(INSTALL_DATA) $$f $(lib_dest); \
+ done
+ #
+ $(mkinstalldirs) $(baseboards_dest)
+ for f in $(baseboards_files); do \
+ test ! -f "$$f" || $(INSTALL_DATA) $$f $(baseboards_dest); \
+ done
+ #
+ $(mkinstalldirs) $(config_dest)
+ for f in $(config_files); do \
+ test ! -f "$$f" || $(INSTALL_DATA) $$f $(config_dest); \
+ done
+
+uninstall-local:
+ for f in $(lib_files); do \
+ test ! -f "$$f" || rm -f $(lib_dest)/`basename "$$f"`; \
+ done
+ for f in $(config_files); do \
+ test ! -f "$$f" || rm -f $(config_dest)/`basename "$$f"`; \
+ done
+ for f in $(baseboards_files); do \
+ test ! -f "$$f" || rm -f $(baseboards_dest)/`basename "$$f"`; \
+ done
--- /dev/null
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = .
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+BOARDS = @BOARDS@
+CC = @CC@
+CONFIG = @CONFIG@
+EXEEXT = @EXEEXT@
+MAINT = @MAINT@
+MAKEINFO = @MAKEINFO@
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+AUTOMAKE_OPTIONS = cygnus
+
+SUBDIRS = doc testsuite example
+
+# driver script goes in /usr/local/bin
+bin_SCRIPTS = runtest
+
+# auxiliary scripts go in /usr/local/share/dejagnu
+pkgdata_SCRIPTS = config.guess runtest.exp
+
+# Below, host-independent data files that need to get installed.
+# We do it this way so we can use globbing.
+
+lib_dest = $(DESTDIR)$(pkgdatadir)
+lib_files = $(srcdir)/*.c $(srcdir)/lib/*.exp
+
+baseboards_dest = $(DESTDIR)$(pkgdatadir)/baseboards
+baseboards_files = $(srcdir)/baseboards/README $(srcdir)/baseboards/*.exp
+
+config_dest = $(DESTDIR)$(pkgdatadir)/config
+config_files = $(srcdir)/config/README $(srcdir)/config/*.exp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs
+CONFIG_CLEAN_FILES =
+SCRIPTS = $(bin_SCRIPTS) $(pkgdata_SCRIPTS)
+
+DIST_COMMON = README AUTHORS COPYING ChangeLog INSTALL Makefile.am \
+Makefile.in NEWS TODO aclocal.m4 config.guess configure configure.in \
+install-sh mkinstalldirs
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = gtar
+GZIP_ENV = --best
+all: all-redirect
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
+ cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ cd $(top_builddir) \
+ && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in
+ cd $(srcdir) && $(ACLOCAL)
+
+config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ $(SHELL) ./config.status --recheck
+$(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
+ cd $(srcdir) && $(AUTOCONF)
+
+install-binSCRIPTS: $(bin_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(bindir)
+ @list='$(bin_SCRIPTS)'; for p in $$list; do \
+ if test -f $$p; then \
+ echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \
+ $(INSTALL_SCRIPT) $$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
+ else if test -f $(srcdir)/$$p; then \
+ echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`"; \
+ $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
+ else :; fi; fi; \
+ done
+
+uninstall-binSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ list='$(bin_SCRIPTS)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(bindir)/`echo $$p|sed '$(transform)'`; \
+ done
+
+install-pkgdataSCRIPTS: $(pkgdata_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(pkgdatadir)
+ @list='$(pkgdata_SCRIPTS)'; for p in $$list; do \
+ if test -f $$p; then \
+ echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(pkgdatadir)/`echo $$p|sed '$(transform)'`"; \
+ $(INSTALL_SCRIPT) $$p $(DESTDIR)$(pkgdatadir)/`echo $$p|sed '$(transform)'`; \
+ else if test -f $(srcdir)/$$p; then \
+ echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(pkgdatadir)/`echo $$p|sed '$(transform)'`"; \
+ $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(pkgdatadir)/`echo $$p|sed '$(transform)'`; \
+ else :; fi; fi; \
+ done
+
+uninstall-pkgdataSCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ list='$(pkgdata_SCRIPTS)'; for p in $$list; do \
+ rm -f $(DESTDIR)$(pkgdatadir)/`echo $$p|sed '$(transform)'`; \
+ done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+# (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+
+@SET_MAKE@
+
+all-recursive install-data-recursive install-exec-recursive \
+installdirs-recursive install-recursive uninstall-recursive install-info-recursive \
+check-recursive installcheck-recursive info-recursive dvi-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ target=`echo $@ | sed s/-recursive//`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ dot_seen=yes; \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done; \
+ if test "$$dot_seen" = "no"; then \
+ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+ fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+ @set fnord $(MAKEFLAGS); amf=$$2; \
+ dot_seen=no; \
+ rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
+ rev="$$subdir $$rev"; \
+ test "$$subdir" = "." && dot_seen=yes; \
+ done; \
+ test "$$dot_seen" = "no" && rev=". $$rev"; \
+ target=`echo $@ | sed s/-recursive//`; \
+ for subdir in $$rev; do \
+ echo "Making $$target in $$subdir"; \
+ if test "$$subdir" = "."; then \
+ local_target="$$target-am"; \
+ else \
+ local_target="$$target"; \
+ fi; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ done && test -z "$$fail"
+tags-recursive:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+ done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ here=`pwd` && cd $(srcdir) \
+ && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ if test "$$subdir" = .; then :; else \
+ test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
+ fi; \
+ done; \
+ list='$(SOURCES) $(HEADERS)'; \
+ unique=`for i in $$list; do echo $$i; done | \
+ awk ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
+ || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+ -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+
+# This target untars the dist file and tries a VPATH configuration. Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+ -rm -rf $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
+ mkdir $(distdir)/=build
+ mkdir $(distdir)/=inst
+ dc_install_base=`cd $(distdir)/=inst && pwd`; \
+ cd $(distdir)/=build \
+ && ../configure --srcdir=.. --prefix=$$dc_install_base \
+ && $(MAKE) $(AM_MAKEFLAGS) \
+ && $(MAKE) $(AM_MAKEFLAGS) dvi \
+ && $(MAKE) $(AM_MAKEFLAGS) check \
+ && $(MAKE) $(AM_MAKEFLAGS) install \
+ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+ && $(MAKE) $(AM_MAKEFLAGS) dist
+ -rm -rf $(distdir)
+ @banner="$(distdir).tar.gz is ready for distribution"; \
+ dashes=`echo "$$banner" | sed s/./=/g`; \
+ echo "$$dashes"; \
+ echo "$$banner"; \
+ echo "$$dashes"
+dist: distdir
+ -chmod -R a+r $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+ -rm -rf $(distdir)
+dist-all: distdir
+ -chmod -R a+r $(distdir)
+ GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+ -rm -rf $(distdir)
+distdir: $(DISTFILES)
+ -rm -rf $(distdir)
+ mkdir $(distdir)
+ -chmod 777 $(distdir)
+ @for file in $(DISTFILES); do \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ cp -pr $$d/$$file $(distdir)/$$file; \
+ else \
+ test -f $(distdir)/$$file \
+ || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+ || cp -p $$d/$$file $(distdir)/$$file || :; \
+ fi; \
+ done
+ for subdir in $(SUBDIRS); do \
+ if test "$$subdir" = .; then :; else \
+ test -d $(distdir)/$$subdir \
+ || mkdir $(distdir)/$$subdir \
+ || exit 1; \
+ chmod 777 $(distdir)/$$subdir; \
+ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
+ || exit 1; \
+ fi; \
+ done
+info-am:
+info: info-recursive
+dvi-am:
+dvi: dvi-recursive
+check-am:
+check: check-recursive
+installcheck-am:
+installcheck: installcheck-recursive
+install-info-am:
+install-info: install-info-recursive
+install-exec-am: install-binSCRIPTS
+install-exec: install-exec-recursive
+
+install-data-am: install-pkgdataSCRIPTS install-data-local
+install-data: install-data-recursive
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-recursive
+uninstall-am: uninstall-binSCRIPTS uninstall-pkgdataSCRIPTS \
+ uninstall-local
+uninstall: uninstall-recursive
+all-am: Makefile $(SCRIPTS)
+all-redirect: all-recursive
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs: installdirs-recursive
+installdirs-am:
+ $(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(pkgdatadir)
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -rm -f Makefile $(CONFIG_CLEAN_FILES)
+ -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am: mostlyclean-tags mostlyclean-generic
+
+mostlyclean: mostlyclean-recursive
+
+clean-am: clean-tags clean-generic mostlyclean-am
+
+clean: clean-recursive
+
+distclean-am: distclean-tags distclean-generic clean-am
+
+distclean: distclean-recursive
+ -rm -f config.status
+
+maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \
+ distclean-am
+ @echo "This command is intended for maintainers to use;"
+ @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-recursive
+ -rm -f config.status
+
+.PHONY: uninstall-binSCRIPTS install-binSCRIPTS uninstall-pkgdataSCRIPTS \
+install-pkgdataSCRIPTS install-data-recursive uninstall-data-recursive \
+install-exec-recursive uninstall-exec-recursive installdirs-recursive \
+uninstalldirs-recursive all-recursive check-recursive \
+installcheck-recursive info-recursive dvi-recursive \
+mostlyclean-recursive distclean-recursive clean-recursive \
+maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
+distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
+dvi-am dvi check check-am installcheck-am installcheck install-info-am \
+install-info install-exec-am install-exec install-data-local \
+install-data-am install-data install-am install uninstall-local \
+uninstall-am uninstall all-redirect all-am all installdirs-am \
+installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+install-data-local:
+ $(mkinstalldirs) $(lib_dest)
+ for f in $(lib_files); do \
+ test ! -f "$$f" || $(INSTALL_DATA) $$f $(lib_dest); \
+ done
+ #
+ $(mkinstalldirs) $(baseboards_dest)
+ for f in $(baseboards_files); do \
+ test ! -f "$$f" || $(INSTALL_DATA) $$f $(baseboards_dest); \
+ done
+ #
+ $(mkinstalldirs) $(config_dest)
+ for f in $(config_files); do \
+ test ! -f "$$f" || $(INSTALL_DATA) $$f $(config_dest); \
+ done
+
+uninstall-local:
+ for f in $(lib_files); do \
+ test ! -f "$$f" || rm -f $(lib_dest)/`basename "$$f"`; \
+ done
+ for f in $(config_files); do \
+ test ! -f "$$f" || rm -f $(config_dest)/`basename "$$f"`; \
+ done
+ for f in $(baseboards_files); do \
+ test ! -f "$$f" || rm -f $(baseboards_dest)/`basename "$$f"`; \
+ done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
--- /dev/null
+DejaGnu is now back under active maintainance. The initial work has been
+rewriting the manual to bring it up to date, and switching to SGML. NT
+support has also been added, and DejaGnu now uses automake.
--- /dev/null
+ DejaGnu is a framework for testing other programs. Its purpose is to
+provide a single front end for all tests. Beyond this, DejaGnu offers
+several advantages for testing:
+
+ - The flexibility and consistency of the DejaGnu framework
+ make it easy to write tests for any program.
+
+ - DejaGnu provides a layer of abstraction which makes all
+ tests (if correctly written) portable to any host or target
+ where a program must be tested. For instance, a test for
+ GDB can run (from any Unix based host) on any target
+ architecture supported by DejaGnu. Currently DejaGnu runs
+ tests on several single board computers, whose operating
+ software ranges from just a boot monitor to a full-fledged,
+ Unix-like realtime OS.
+
+ - DejaGnu is written in expect, which in turn uses Tcl
+ (Tool command language). The framework comprises two parts:
+ the testing framework and the testsuites themselves. Tests
+ are usually written in expect using Tcl.
+
+ Bugs can be reported to bug-dejagnu@prep.ai.mit.edu.
+
+ How To Configure and Build
+
+ To build DejaGnu, run the ``configure'' script here, e.g.:
+
+ ./configure MYHOSTTYPE
+
+followed by running ``make''. (MYHOSTTYPE is a name for your host computer,
+for instance "sun4". You can use the script ``config.sub'' to test whether
+a name is recognized; if it is, config.sub translates it to a triplet
+specifying CPU, vendor, and OS.) This is used when you plan to
+configure and build in the source tree.
+
+ If you use a separate tree for object files, (the recommended way),
+then the --srcdir option must also be specified. This would also
+require that the configure script be run from the top level directory.
+
+ PATH/configure MYHOSTYPE --srcdir PATH/dejagnu
+
+where PATH is is the directory that the contains the sources.
+
+ To configure it so it gets installed somewhere other than the
+default of /usr/local, use the --prefix option.
+
+ configure MYHOSTYPE --prefix [PATH]
+
+where PATH is the prefix used to install the programs.
+
+ The configure testing and building will use the native compiler "cc"
+on your host machine. To change which compiler gets used (like gcc)
+set a the variable "CC" in your environment to point to it.
+
+ For csh users: "setenv CC gcc"
+ For bourne shell users: "CC=gcc;export CC"
+
+ Then when you compile, use "make CC=$CC".
+
+See etc/cfg-paper.texi, etc/configure.texi, and/or the README files in
+various subdirectories, for more details.
+
+ As DejaGnu is a Tcl program, there is nothing to build. However, the
+documentation is not built by default. Use these targets:
+"make info" - Convert the texinfo document to something that can
+ be used the GNU info program or info mode in emacs.
+"make dvi" - Convert the texinfo document to something that can
+ be printed. This produces dvi output.
+"make doc" - This builds both.
+"make ps" - This converts the dvi file into postscript. This
+ requires a copy of dvips.
+"make install" - This installs DejaGnu based on the --prefix option
+ when configuring. Otherwise it defaults to
+ /usr/local. See the DejaGnu manual for more
+ information on installation.
+
+ Changes from 1.1.1
+ 1. Works with (included in release) Tcl 7.3 and Expect 5.6.
+ 2. Much better error trapping and handling, including the
+ execution of sub scripts.
+ 3. Re-worked configuration subsystem.
+ 4. Default handling for testing unknown targets.
+ 5. New testsuite for expect and runtest.
+ 6. More debugging procedures.
+
+ Changes from 1.0
+
+ 1. DejaGnu now conforms to POSIX 1003.3, a standard for
+ testing frameworks.
+ 2. A Tcl debugger written by Don Libes has been added.
+ 3. Lots of bug fixes.
+
+ Changes from 0.9
+
+ 1. DejaGnu now installs itself like other utilities.
+ 2. 700 G++ tests are included.
+ 3. The bugs in the GCC tests have been fixed.
+ 4. Testsuites are released separately.
+ 5. Testsuite sources now reside with the within each tool's
+ source tree.
+
+-------------------------------------------------------------------
+Here's is a posting on the Free OS testing project. (FROST)
+-------------------------------------------------------------------
+If you have built up your own tests for system calls, library
+routines, networking protocols, or common utilities, this posting
+offers you an opportunity to put them to good use. You can do a good
+deed for the Linux community, the Berkeley UNIX community, and the
+wider world of free software users.
+
+Also, if you would like to learn some good test tools and strategies,
+and devote some time on a volunteer basis to writing tests -- perhaps
+a couple of weeks full-time, or a couple hours per week over a period
+of several months -- then here is a project you should get involved
+in.
+
+I am helping to coordinate a test effort for Linux. In the following
+four sections of this message I will describe the goals, the process,
+the people trying to do it, and what you can do to help.
+
+Goals
+
+ Linux and BSD share a number of libraries and utilities, both
+ because BSD software was ported to Linux, and because several free
+ software (GNU) utilities have been ported to both operating
+ systems.
+
+ Linux shows startling differences and failures as you move from one
+ set of hardware to another. People who hope to base their own
+ commercial products on Linux would like to see proof that it is
+ robust, portable, and standard-conforming. The problem is that
+ cross-platform testing is very hard to do, and few decent test
+ suites exist either for free software or for UNIX. (Look at all the
+ differences you find among systems that are SVID-conforming,
+ particularly at higher levels such as the utilities.)
+
+ Therefore, a number of us who are interested n Linux have decided to
+ enter the modern age of formal, automated software testing -- but in
+ a manner that is proper for the free software community.
+
+ Using DejaGnu, a test platform developed by Cygnus Support and
+ placed under the GPL, we want to collect the best tests we can from
+ people everywhere, and integrate them into suites that any user can
+ download, run, and interpret with a few commands. DejaGnu already
+ runs under BSD, and Cygnus is porting it to Linux.
+
+ Our goal is to test as many parts of the system as possible,
+ including system calls (particularly for POSIX 1003.1 compliance),
+ libraries in the official distribution, networking protocols,
+ and utilities. We need help with
+
+ 1) integrating good tests donated by the community (and probably
+ written in a variety of programming languages and command
+ shells) into the DejaGnu framework, and
+
+ 2) writing new tests for major functional areas for which no
+ adequate tests exist.
+
+ The tests we use will be placed under the GPL and distributed by
+ Cygnus Support along with DejaGnu. H. J. Lu, who maintains the C
+ library for Linux, has offered to run the POSIX 1003.1 tests and as
+ many others as he can.
+
+Process
+
+ First let me summarize the advantages of using DejaGnu, a free
+ software product that will be the umbrella for all the tests, and
+ then explain how we plan to conduct this project.
+
+ Cygnus Support released DejaGnu to the public on January 3, along
+ with several test suites for GNU language tools. The product is
+ designed for portability and easy cross-platform development and
+ execution. It works more uniformly than typical tests using the
+ UNIX shell, and also supports interactive testing better than most
+ test platforms -- for instance, Cygnus has written over 1300 unit
+ tests for the gdb debugger using it.
+
+ The implementation of DejaGnu is based on tcl and expect, two simple
+ existing languages for writing commands. You can develop new tests
+ in two major ways: by placing keyword-based comments in C source
+ code, or by writing tests in tcl.
+
+ While Cygnus is still increasing their body of tests for language
+ tools, they are also turning their resources toward the libraries
+ and GNU utilities. While most of the tests are written at Cygnus,
+ they have reached out to communities of testers and are now porting
+ substantial sets of donated tests.
+
+ We are hoping to broaden this successful use of collaboration across
+ user communities. We hope that suites of useful tests are sitting
+ in desk drawers out there. We also hope to gather and mobilize
+ people who appreciate the value of formal tests in legitimizing free
+ software, and would like to help write them.
+
+ I am not an employee of Cygnus, but have volunteered to talk to
+ interested people and do an initial classification of tests, just to
+ offload some of this routine work from them. I will discuss all
+ offers with Cygnus staff to find out what is most needed and decide
+ which tests to incorporate into DejaGnu. There are several criteria
+ for choosing tests, including the degree to which an area is
+ covered, and its importance in the overall stability of the
+ operating system. Some tests may have to be rejected just because
+ they are hard to fit into the DejaGnu model.
+
+People
+
+ Now you can find out why each of us got involved with this project.
+
+ Cygnus writes and distributes free software, selling support as a
+ means to make money. The company is not directly in the business of
+ supporting operating systems or common UNIX utilities, so this kind
+ of testing is tangential to their main goals. But they may want to
+ support those things in the future. In any case, they would like to
+ see Linux do well, and this big test project will be a good
+ promotion for DejaGnu.
+ H. K. Lu, as a volunteer for Linux, has been using his own system to
+ implement, port, maintain, and ensure ANSI and POSIX compliance for
+ the C library (mostly the GNU C library along with the iostream
+ class from the g++ library). He is looking for ways to validate the
+ work that he and many other contributors have put in.
+
+ As an editor at a publisher of computer books, my relationship to
+ Linux and BSD is even more distant than that of Cygnus. But we are
+ thinking about putting out books about Linux, from either the Linux
+ Documentation Project or independent authors, and would like to make
+ sure Linux is stable enough to be documented. The testing of
+ utilities is particularly important to me, because it can provide
+ quality assurance for our books, including the BSD version of UNIX
+ in a Nutshell.
+
+What you can do
+
+ We ask people who have written tests in the areas I have described
+ to donate them to this project and see them benefit the public.
+ Don't just send me stuff -- write or call to discuss what you've got
+ in general. You also have to assign the tests to the Free Software
+ Foundation (a simple matter, so long as you are the owner of the
+ tests) so that they can be distributed under the GPL.
+
+ Also, please don't starting flaming about the GPL. Either join our
+ project and donate your tests, or don't. Personally, I do not take
+ a side in this war.
+
+ People who are interested in testing as a discipline, and have some
+ time to donate, are invited to contact me to help write tests. Tell
+ me:
+
+ Your knowledge of computer languages and tools
+
+ Previous software test efforts you have engaged in, if any
+
+ How much time you can devote
+
+ What functional areas you think are important and have a
+ particular interest in
+
+ Cygnus staff will tell volunteers which areas need testing, and
+ offer guidance while you learn and apply DejaGnu. The most
+ important trait for the project is rigorous thinking along the lines
+ of software quality (so the best preparation is to have done some
+ formal testing before). You do not need to know any particular
+ language or tool; you can learn tcl or other aspects of DejaGnu
+ fairly quickly.
+
+ Contact information for me is in my signature. I am at the phone
+ number during traditional U.S. business hours. So send mail any
+ time, or try calling from Monday through Friday, 9:00 AM to 5:00 PM,
+ Eastern Daylight Saving Time (four hours later than Greenwich Mean
+ Time).
+
+ Feel free to distribute and repost this message elsewhere, in its
+ entirety.
+
+----------------------------------------------------------------------
+Andy Oram O'Reilly & Associates, Inc. andyo@ora.com
+ 90 Sherman Street, Cambridge, MA 02140 (617) 354-5800
+ fax (617) 661-1116
+----------------------------------------------------------------------
+
+There is a new listserv based mailing list for the FROST project. To
+subscribe, send email to "listserv@cygnus.com" and the body should
+contain "SUBSCRIBE FROST <your name>". Messages sent to
+frost@cygnus.com go to the mailing list.
\ No newline at end of file
--- /dev/null
+ Thu Mar 16 17:34:33 MST 1995
+
+. Add more support for target boards and realtime OS's.
+. Use the new expect terminal support for an "escape codes" API.
+. Use expectk and write a GUI testing API, complete with
+ record/playback.
+. Add a "testing methodologies" section to the manual.
+
--- /dev/null
+dnl aclocal.m4 generated automatically by aclocal 1.4
+
+dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+
+# Do all the work for Automake. This macro actually does too much --
+# some checks are only needed if your package does certain things.
+# But this isn't really a big deal.
+
+# serial 1
+
+dnl Usage:
+dnl AM_INIT_AUTOMAKE(package,version, [no-define])
+
+AC_DEFUN(AM_INIT_AUTOMAKE,
+[AC_REQUIRE([AC_PROG_INSTALL])
+PACKAGE=[$1]
+AC_SUBST(PACKAGE)
+VERSION=[$2]
+AC_SUBST(VERSION)
+dnl test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+ AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+ifelse([$3],,
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
+AC_REQUIRE([AM_SANITY_CHECK])
+AC_REQUIRE([AC_ARG_PROGRAM])
+dnl FIXME This is truly gross.
+missing_dir=`cd $ac_aux_dir && pwd`
+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
+AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
+AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
+AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
+AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
+AC_REQUIRE([AC_PROG_MAKE_SET])])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+AC_DEFUN(AM_SANITY_CHECK,
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+ if test "[$]*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftestfile`
+ fi
+ if test "[$]*" != "X $srcdir/configure conftestfile" \
+ && test "[$]*" != "X conftestfile $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
+alias in your environment])
+ fi
+
+ test "[$]2" = conftestfile
+ )
+then
+ # Ok.
+ :
+else
+ AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+rm -f conftest*
+AC_MSG_RESULT(yes)])
+
+dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
+dnl The program must properly implement --version.
+AC_DEFUN(AM_MISSING_PROG,
+[AC_MSG_CHECKING(for working $2)
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if ($2 --version) < /dev/null > /dev/null 2>&1; then
+ $1=$2
+ AC_MSG_RESULT(found)
+else
+ $1="$3/missing $2"
+ AC_MSG_RESULT(missing)
+fi
+AC_SUBST($1)])
+
+# Add --enable-maintainer-mode option to configure.
+# From Jim Meyering
+
+# serial 1
+
+AC_DEFUN(AM_MAINTAINER_MODE,
+[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
+ dnl maintainer-mode is disabled by default
+ AC_ARG_ENABLE(maintainer-mode,
+[ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer],
+ USE_MAINTAINER_MODE=$enableval,
+ USE_MAINTAINER_MODE=no)
+ AC_MSG_RESULT($USE_MAINTAINER_MODE)
+ AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes)
+ MAINT=$MAINTAINER_MODE_TRUE
+ AC_SUBST(MAINT)dnl
+]
+)
+
+# Define a conditional.
+
+AC_DEFUN(AM_CONDITIONAL,
+[AC_SUBST($1_TRUE)
+AC_SUBST($1_FALSE)
+if $2; then
+ $1_TRUE=
+ $1_FALSE='#'
+else
+ $1_TRUE='#'
+ $1_FALSE=
+fi])
+
--- /dev/null
+The files in this directory are used to describe the basic
+configuration of a board. (Note that we use "board" in its loosest
+sense, referring to either a target or host). The structure of these
+files is very similar, and I would suggest that you follow this when
+writing a new one.
+
+Two files need to be created for a given board; the appropriate file
+in this directory, and one in devo/dejagnu/config. The one in here is
+used to set up entries in the data array describing the board, while
+the one in devo/dejagnu/config is used to describe the actions used to
+actually communicate with the board.
+
+A third file (the site-specific machine file) can be used to describe
+any site-specific functionality, such as port numbers, serial devices,
+etc.
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {a29k-amd-udi};
+
+# Load the generic configuration for this board.
+load_generic_config "udi";
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]";
+# The basic set of flags needed to build "hello world" for this
+# board. This target uses libgloss and newlib.
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]";
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+# We don't need a linker script.
+set_board_info ldscript "";
+
+# mondfe can't return exit statuses, so gcc (ctorture et al) needs to
+# do what it can to get them.
+set_board_info needs_status_wrapper 1;
+
+# Used by a few gcc.c-torture testcases to delimit how large the stack can
+# be.
+set_board_info gcc,stack_size 16384
--- /dev/null
+# There is currently no ARC simulator. This exists so gcc compile.exp testing
+# works.
+
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {arc-elf}
+
+# Load the generic configuration for this board. This will define a basic set
+# of routines needed by the tool to communicate with the board.
+load_generic_config "sim"
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim"
+
+# "arc" is the name of the sim subdir in devo/sim.
+setup_sim arc
+
+# No multilib options needed by default.
+process_multilib_options ""
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+
+set_board_info compiler "[find_gcc]"
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+# No linker script needed.
+set_board_info ldscript "";
+
+# The simulator doesn't return exit statuses and we need to indicate this;
+# the standard GCC wrapper will work with this target.
+set_board_info needs_status_wrapper 1
+# Doesn't pass arguments or signals, can't return results, and doesn't
+# do inferiorio.
+set_board_info noargs 1
+set_board_info gdb,nosignals 1
+set_board_info gdb,noresults 1
+set_board_info gdb,noinferiorio 1
--- /dev/null
+# Load the generic configuration for this board. This will define a basic
+# set of routines used to communicate with the board.
+load_generic_config "arm-ice"
+
+# No multilib flags needed by default.
+process_multilib_options ""
+
+if { [board_info $board obj_format] == "pe" } {
+ set additional_options "-Wl,-oformat,pe-arm-little,--image-base,0"
+} else {
+ set additional_options ""
+}
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]"
+# The basic set of flags needed to build "hello world" for this
+# board. This board uses libgloss and newlib.
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags] $additional_options"
+# This board doesn't use a linker script.
+set_board_info ldscript "";
+
+# Used by a few gcc.c-torture testcases to delimit how large the stack can
+# be.
+set_board_info gcc,stack_size 16384
+
+# We use "target rdi" to talk to the board.
+set_board_info gdb_protocol "rdi"
+
+# No support for signals.
+set_board_info gdb,nosignals 1
+
+# Make this variable go away, we don't need it.
+unset additional_options;
+
+# Can't call functions from GDB.
+set_board_info gdb,cannot_call_functions 1
+
+# Or do I/O.
+set_board_info gdb,noinferiorio 1
+
+# Or have signals.
+set_board_info gdb,nosignals 1
+
+# Exit statuses are invalid.
+set_board_info exit_statuses_bad 1
--- /dev/null
+# Load the generic configuration for this board. This will define a basic
+# set of routines used to communicate with the board.
+load_generic_config "sim"
+
+# No multilib flags needed by default.
+process_multilib_options ""
+
+if { [board_info $board obj_format] == "pe" } {
+ set additional_options "-Wl,-oformat,pe-arm-little,--image-base,0"
+# set_board_info uses_underscores 1
+} else {
+
+# if [istarget "*-*-coff"] {
+# set_board_info uses_underscores 1
+# }
+
+ set additional_options ""
+}
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim"
+
+# The name of the directory in the build tree where the simulator lives.
+setup_sim arm;
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]"
+
+# The basic set of flags needed to build "hello world" for this
+# board. This board uses libgloss and newlib.
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags] $additional_options"
+
+# This board doesn't use a linker script.
+set_board_info ldscript "";
+
+# The simulator doesn't return exit statuses and we need to indicate this.
+set_board_info needs_status_wrapper 1
+
+# Used by a few gcc.c-torture testcases to delimit how large the stack can
+# be.
+set_board_info gcc,stack_size 16384
+
+# No support for signals.
+set_board_info gdb,nosignals 1
+
+# More time is needed to compile PlumHall tests
+set_board_info gcc,timeout 800
+
+# Make this variable go away, we don't need it.
+unset additional_options;
--- /dev/null
+# find_sim -- find a usable simulator
+# This proc is local to this file and is used to locate a simulator to use.
+# First we see if SIM=foo was specified on the command line.
+# Otherwise we search the build tree, then $PATH.
+
+proc find_sim { target_alias sim_dir sim_name } {
+ global tool_root_dir;
+ global SIM
+
+ if [info exists SIM] {
+ return $SIM
+ }
+
+ if [is_remote host] {
+ if ![board_info host exists no_transform_name] {
+ return ${target_alias}-${sim_name};
+ } else {
+ return ${sim_name};
+ }
+ }
+
+ # We have to search because tool_root_dir may actually point to that blasted
+ # "target" subdirectory.
+ set try [lookfor_file ${tool_root_dir} sim/${sim_dir}/${sim_name}];
+ if { $try != "" } {
+ return $try;
+ }
+ return ${target_alias}-${sim_name};
+}
+
+proc setup_sim { subdir_name } {
+ global target_alias;
+ global tool_root_dir;
+ global board;
+
+ if [info exists target_alias] {
+ set tmp $target_alias;
+ } else {
+ if [board_info $board exists target_install] {
+ set tmp [lindex [board_info $board target_install] 0];
+ }
+ }
+
+ if ![board_info $board exists sim] {
+ set_board_info sim [find_sim $tmp $subdir_name run];
+ }
+
+ verbose "Using simulator [board_info $board sim]\n"
+}
+
+set_board_info is_simulator 1;
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {m68k-elf};
+
+# Load the generic configuration for this board. This will define any
+# routines needed by the tool to communicate with the board.
+load_generic_config "cfdbug";
+
+# Need -m5200 by default.
+process_multilib_options "-m5200"
+
+# The compiler used to build for this board. Note that this has nothing to do
+# with what compiler is tested when testing gcc.
+set_board_info compiler "[find_gcc]"
+
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]";
+
+# Nasty hack.
+if { [board_info $board obj_format] == "a.out" } {
+ # Need to pass the start address to objcopy.
+ set_board_info use_vma_offset 1;
+ # Wrapping has to be specially done for m68k-aout, for whatever reason.
+ set_board_info wrap_m68k_aout 1;
+
+ set extra_m68k_ld_flags "-N"
+
+ # We need to tell GDB to load at the correct offset.
+ set_board_info gdb_load_offset [board_info $board hex_startaddr];
+} else {
+ set extra_m68k_ld_flags ""
+}
+
+set_board_info ldflags "$extra_m68k_ld_flags [libgloss_link_flags] [newlib_link_flags]"
+unset extra_m68k_ld_flags
+
+
+# If no output format is specified, use objcopy.
+if ![board_info $board exists output_format] {
+ set tempfil [lookfor_file $tool_root_dir binutils/objcopy];
+ if { $tempfil != "" } {
+ set_board_info objcopy $tempfil
+ } else {
+ set_board_info objcopy [transform objcopy]
+ }
+ unset tempfil
+}
+
+# SBC5204 linker script.
+set_board_info ldscript "-Wl,-Tsbc5204.ld";
+# The idt interface can't return exit statuses, so gcc (ctorture et
+# al) needs to do what it can to get them.
+set_board_info needs_status_wrapper 1;
+
+# Used by a few gcc.c-torture testcases to delimit how large the stack can be.
+# The board has 192K of RAM. We will set stack size to one third of that.
+set_board_info gcc,stack_size 65536
+
+# GDB needs to use "target dbug" to talk to the board.
+set_board_info gdb_protocol "dbug";
+
+# Can't pass arguments to the program under test.
+set_board_info noargs 1
+
+# Nor can it do I/O in GDB.
+set_board_info gdb,noinferiorio 1
+
+# It has no signals.
+set_board_info gdb,nosignals 1
+
+# It can't return results when debugging with GDB.
+set_board_info gdb,noresults 1
+
+# Pseudo-random guess.
+set_board_info sys_speed_value 200;
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {sparc-elf sparc64-elf}
+
+# Load the generic configuration for this board. This will define a
+# set of generic routines used by the tool to communicate with the
+# board.
+load_generic_config "cygmon";
+
+# It needs no multilib flags by default.
+process_multilib_options ""
+
+set_board_info compiler "[find_gcc]";
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]";
+set_board_info ldflags "-nostdlib [libgloss_link_flags] [newlib_link_flags] [board_info $board addl_link_flags]";
+
+# CygMON linker script.
+set_board_info ldscript "-Tcygmon.ld"
+
+# Standard remote protocol.
+set_board_info gdb_protocol "remote";
+# We can't do input in GDB (yet! HA!). It *will* do output, hurrah.
+set_board_info gdb,noinferiorio 1;
+# Or pass arguments.
+set_board_info noargs 1;
+# Or do signals.
+set_board_info gdb,nosignals 1;
+
+set_board_info shell_prompt "cygmon>"
+
+
+set_board_info use_gdb_stub 1;
--- /dev/null
+# The canonical unix board description.
+load_generic_config "unix";
+
+process_multilib_options "";
+
+set_board_info compiler "[find_gcc]";
+
+set_board_info bmk,use_alarm 1;
+
+set_board_info gdb,noinferiorio 1;
+
+send_user "configuring for cygwin testing\n";
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {d10v-elf}
+
+# Load the generic configuration for this board. This will define any
+# routines needed to communicate with the board.
+load_generic_config "sim";
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim"
+
+# The name of the simulator directory is "d10v".
+setup_sim d10v
+
+# No multilib options needed by default.
+process_multilib_options "";
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]"
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+set_board_info cflags "[newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+# No linker script needed.
+set_board_info ldscript "";
+
+# Can't pass arguments to programs on this target..
+set_board_info noargs 1
+# And there's no support for signals.
+set_board_info gdb,nosignals 1
+
+# Used by a few gcc.c-torture testcases to delimit how large the stack can
+# be.
+set_board_info gcc,stack_size 5000
+
+# Used by a few gcc.c-torture testcases when trampolines are used.
+set_board_info gcc,no_trampolines 1
+
+# Used by a few gcc.c-torture testcases when labels as values are used.
+set_board_info gcc,no_label_values 1
+
+# Torture test gcc.c-torture/execute/920501-6.c takes > 5 minutes on a
+# 90 Mhz Pentium, so up the time limit.
+set board_info($board,sim_time_limit) 600
+
+# sizeof int != sizeof long.
+set_board_info gdb,short_int 1
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {d10v-elf}
+
+# Load the generic configuration for this board. This will define a base set
+# of routines needed by the tool to communicate with the board.
+load_generic_config "d10v"
+
+# No multilib options are needed by default for this board.
+process_multilib_options "";
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+set_board_info compiler "[find_gcc]";
+set_board_info cflags "[newlib_include_flags]";
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]";
+# No linker script needed.
+set_board_info ldscript "";
+
+# The board can't really return exit statuses and we need to indicate this;
+# however, the standard GCC wrapper won't work with this target because
+# it can't do I/O.
+#set_board_info needs_status_wrapper 1
+
+# It uses the remote stub protocol to talk to the board.
+set_board_info gdb_protocol "remote"
+set_board_info use_gdb_stub 1
+
+# Both the EVA and TS3 boards currently deal badly with X packets.
+set_board_info disable_x_packet 1
+
+# Both the EVA and TS3 boards currently deal badly with Z packets.
+set_board_info disable_z_packet 1
+
+# Used by gdb-comm.
+set_board_info gdb_run_command "jump *_start";
+set_board_info gdb,start_symbol "_start";
+
+# Can't pass arguments to programs on this target.
+set_board_info noargs 1
+# And there's no support for signals.
+set_board_info gdb,nosignals 1
+# And it can't do I/O.
+set_board_info gdb,noinferiorio 1
+
+# Used by a few gcc.c-torture testcases to delimit how large the stack can
+# be.
+set_board_info gcc,stack_size 5000
+
+# Used by a few gcc.c-torture testcases when trampolines are used.
+set_board_info gcc,no_trampolines 1
+
+# Used by a few gcc.c-torture testcases when labels as values are used.
+set_board_info gcc,no_label_values 1
+
+# sizeof int != sizeof long.
+set_board_info gdb,short_int 1
+
+# Some d10v:ts3 boards are in ts2-board compatibility mode after a reset.
+# Force it into d10v:ts3 internal mode
+set_board_info gdb_init_command "set \$dmap2 = 0x2000"
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {d30v-elf}
+
+# Load the generic configuration for this board. This will define any
+# routines needed to communicate with the board.
+load_generic_config "sim";
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim"
+
+# The name of the simulator directory is "d30v".
+setup_sim d30v
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]"
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+# Pass -C to the assembler to suppress the warning about symbols being the same name as registers
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags] -Wa,-C"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags] -mextmem -Wl,--defsym,__stack=0x80800000"
+# No linker script needed.
+set_board_info ldscript "";
+
+# Can't pass arguments to programs on this target..
+set_board_info noargs 1
+# And there's no support for signals.
+set_board_info gdb,nosignals 1
+
+# Used by a few gcc.c-torture testcases to delimit how large the stack can
+# be.
+set_board_info gcc,stack_size 5000
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {sparc86x-elf}
+
+# Load the generic configuration for this board. This will define a
+# set of generic routines used by the tool to communicate with the
+# board.
+load_generic_config "slite";
+
+# It needs no multilib flags by default.
+process_multilib_options ""
+
+set_board_info compiler "[find_gcc]";
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]";
+
+set_board_info ldflags "-nostartfiles [libgloss_link_flags] [newlib_link_flags]";
+
+# DANlite (sparc86x) linker script.
+set_board_info ldscript "-Tsparc86x.ld";
+
+# The address at which the stub needs to be linked.
+# set_board_info gdb_stub_offset "0x40000000";
+
+# The board doesn't return exit statuses and we need to indicate this.
+# However, the standard GCC wrapper won't work with this target because
+# it doesn't return stuff from printf ().
+set_board_info needs_status_wrapper 1;
+
+# We use a GDB stub to talk to the board.
+set_board_info use_gdb_stub 1;
+# For GDB, we need to use a real stub (not the separate loader scheme
+# we use for Sparclet).
+set_board_info gdb_stub "";
+# And the protocol is "sparclite".
+set_board_info gdb_protocol "sparclite";
+# No mathlib.
+set_board_info mathlib "";
+# We can't do I/O in GDB.
+set_board_info gdb,noinferiorio 1;
+# Or pass arguments.
+set_board_info noargs 1;
+# Or do signals.
+set_board_info gdb,nosignals 1;
--- /dev/null
+# This is a list of the installed tools for this board. Of course,
+# we apparently don't create a compiler for this board, but...
+set_board_info target_install {i386-cygwin32}
+
+# Load the generic configuration for the board. This will define any routines
+# needed by the tool to communicate with the board.
+
+load_generic_config "dos";
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]";
+# The basic set of flags needed to build "hello world" for this
+# board. This target uses libgloss, libio and winsup.
+set_board_info cflags "[newlib_include_flags] [libio_include_flags] [winsup_include_flags]";
+set_board_info ldflags "[newlib_link_flags] [libio_link_flags] [winsup_link_flags]"
+# We don't need a link script.
+set_board_info ldscript "";
+
+# mondfe can't return exit statuses, so gcc (ctorture et al) needs to
+# do what it can to get them.
+set_board_info needs_status_wrapper 1;
+
+set_board_info gdb_opts "--command gdbinit"
+set_board_info gdb,nointerrupts 1
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {fr30-elf}
+
+# Load the generic configuration for this board. This will define a
+# set of generic routines used by the tool to communicate with the
+# board.
+load_generic_config "cygmon";
+
+# It needs no multilib flags by default.
+process_multilib_options ""
+
+set_board_info compiler "[find_gcc]";
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]";
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags] [board_info $board addl_link_flags]";
+
+# CygMON linker script.
+set_board_info ldscript "-specs=eval1.specs"
+
+# Standard remote protocol.
+set_board_info gdb_protocol "remote";
+# We can't do input in GDB (yet! HA!). It *will* do output, hurrah.
+set_board_info gdb,noinferiorio 1;
+# Or pass arguments.
+set_board_info gdb,noargs 1;
+set_board_info noargs 1;
+# Or do signals.
+set_board_info gdb,nosignals 1;
+
+set_board_info shell_prompt "cygmon>"
+
+set_board_info use_gdb_stub 1;
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {fr30-elf}
+
+# No multilib flags needed by default.
+process_multilib_options ""
+
+# Load the generic configuration for this board. This will define a basic set
+# of routines needed by the tool to communicate with the board.
+if { $is_gdb_remote } {
+ load_generic_config "fr30-stub"
+} else {
+ load_generic_config "fr30"
+}
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+
+set_board_info compiler "[find_gcc]"
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+set_board_info ldscript "-Wl,-Teva.ld"
+set_board_info gdb,start_symbol "_start"
+
+set_board_info needs_status_wrapper 1
+
+# The GDB protocol used for this target.
+if { ! $is_gdb_remote } {
+ set_board_info gdb_protocol "fr30"
+} else {
+ set_board_info gdb_protocol "fr30"
+ set_board_info use_gdb_stub 1
+ set_board_info gdb_stub_ldscript "-Wl,-Teva-stub.ld"
+}
+
+# Doesn't pass arguments or signals, can't return results, and doesn't
+# do inferiorio.
+set_board_info noargs 1
+set_board_info gdb,nosignals 1
+set_board_info gdb,noresults 1
+set_board_info gdb,noinferiorio 1
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {fr30-elf}
+
+# Load the generic configuration for this board. This will define a basic set
+# of routines needed by the tool to communicate with the board.
+load_generic_config "sim"
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim"
+
+# "fr30" is the name of the sim subdir in devo/sim.
+setup_sim fr30
+
+# No multilib options needed by default.
+process_multilib_options ""
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+
+set_board_info compiler "[find_gcc]"
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+# No linker script needed.
+set_board_info ldscript "";
+
+# The simulator doesn't return exit statuses and we need to indicate this;
+# the standard GCC wrapper will work with this target.
+set_board_info needs_status_wrapper 1
+# Doesn't pass arguments or signals, can't return results, and doesn't
+# do inferiorio.
+set_board_info noargs 1
+set_board_info gdb,nosignals 1
+set_board_info gdb,noresults 1
+set_board_info gdb,noinferiorio 1
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {h8300-hms}
+
+# Load the tool-specific configuration for this board, as well as the
+# generic configuration. This will define any routines needed by the
+# tool to communicate with the board.
+load_generic_config "sim"
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim"
+
+# The name of the simulator is "h8300" (as in h8300-hms-run).
+setup_sim h8300
+
+# No multilib options are used by default.
+process_multilib_options ""
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]"
+
+# We only support newlib on this target.
+set_board_info cflags "[newlib_include_flags]"
+set_board_info ldflags "[newlib_link_flags]"
+# The simulator doesn't return exit statuses and we need to indicate this.
+set_board_info needs_status_wrapper 1
+
+# There's no support for argument-passing.
+set_board_info noargs 1
+# Nor does it have real signals.
+set_board_info gdb,nosignals 1
+# And it can't do I/O.
+set_board_info gdb,noinferiorio 1
+# Nor can it return results.
+set_board_info gdb,noresults 1
+
+# Limit the stack size to something real tiny.
+set_board_info gcc,stack_size 4096
+
+# There's no long long support on this target
+set_board_info no_long_long 1
+
+# sizeof int != sizeof long.
+set_board_info gdb,short_int 1
--- /dev/null
+# Load the tool-specific configuration for this board, as well as the
+# generic configuration. This will define any routines needed by the
+# tool to communicate with the board.
+load_generic_config "h8300"
+
+# Don't use anything by default.
+process_multilib_options ""
+
+# The default compiler for this target.
+set_board_info compiler "[find_gcc]"
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+set_board_info cflags "[newlib_include_flags]"
+set_board_info ldflags "[newlib_link_flags]"
+
+# The GDB protocol used with this board.
+set_board_info gdb_protocol "remote"
+# It's running a GDB stub in ROM.
+set_board_info use_gdb_stub 1;
+
+# There's no support for argument-passing.
+set_board_info noargs 1
+# Nor does it have real signals.
+set_board_info gdb,nosignals 1
+# And it can't do I/O.
+set_board_info gdb,noinferiorio 1
+# Nor can it return results.
+set_board_info gdb,noresults 1
+
+# Limit the stack size to something real tiny.
+set_board_info gcc,stack_size 4096
+
+# The board can get wedged in amusing and interesting ways.
+set_board_info unreliable 1
+
+# There's no long long support on this target
+set_board_info no_long_long 1
+
+# sizeof int != sizeof long.
+set_board_info gdb,short_int 1
+
+# Pick the right linker script if -mh/-ms is specified.
+
+set linker_script "h8300.ld"
+
+foreach x $board_variant_list {
+ regsub -all "^\[ \t\]*" "$x" "" x;
+ regsub -all "\[ \t\]*$" "$x" "" x;
+
+ case $x in {
+ { h -mh } {
+ set linker_script "h8300h.ld"
+ }
+ { s -ms } {
+ set linker_script "h8300s.ld"
+ }
+ }
+}
+
+# Whee, magic linker scripts hidden away.
+#
+# This one's dependent on the multilib options in use, sadly. And we
+# *need* a linker script. Really. Otherwise the code gets linked at
+# the wrong address and it won't run on the board.
+set_board_info ldscript "-Wl,-T${prefix_dir}/h8300-hms/${linker_script}"
+
+unset linker_script
--- /dev/null
+# Load the tool-specific configuration for this board, as well as the
+# generic configuration. This will define any routines needed by the
+# tool to communicate with the board.
+load_generic_config "i386-bozo"
+
+# Use no multilib options by default.
+process_multilib_options ""
+
+# Default to COFF.
+set add_flags "";
+if { [board_info $board obj_format] == "a.out" } {
+ set_board_info support_libs "${prefix_dir}/i386-aout/"
+ set_board_info gdb_load_offset "0x41000000";
+ set_board_info gdb_sect_offset "0x41000000";
+ set add_flags "-N ";
+} elseif { [board_info $board obj_format] == "elf" } {
+ set_board_info support_libs "${prefix_dir}/i386-elf/"
+} else {
+ set_board_info support_libs "${prefix_dir}/i386-coff/"
+}
+
+# The default compiler for this target.
+set_board_info compiler "[find_gcc]"
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+set_board_info cflags "[newlib_include_flags]"
+set_board_info ldflags "${add_flags}[newlib_link_flags] -B[board_info $board support_libs]"
+# Whee, magic linker scripts hidden away.
+set_board_info ldscript "-Tbozo.ld"
+
+# The GDB protocol used with this board.
+set_board_info gdb_protocol "remote"
+# It's running a GDB stub in ROM.
+set_board_info use_gdb_stub 1;
+
+# There's no support for argument-passing.
+set_board_info noargs 1
+# Can't do input.
+set_board_info gdb,noinferiorio 1
+# Nor does it have real signals.
+set_board_info gdb,nosignals 1
+
+# Limit the stack size.
+set_board_info gcc,stack_size 16384
+
+# Status wrapper will work, although exit statuses are reliable.
+set_board_info needs_status_wrapper 1
+
+# This is the start symbol in crt0.o.
+set_board_info gdb,start_symbol "_start";
--- /dev/null
+# Danger, Will Robinson! Settings in this file do not override
+# previous settings for the board being defined.
+
+# Load the generic configuration for this board. This will define a basic
+# set of routines needed by the tool to communicate with the board.
+load_generic_config "i960"
+
+# No multilib options needed by default.
+process_multilib_options ""
+
+# We want to strip executables before downloading them via xmodem.
+if ![board_info $board exists strip] {
+ set tempfil [lookfor_file $tool_root_dir binutils/strip];
+ if { $tempfil != "" } {
+ set_board_info strip $tempfil
+ } else {
+ set_board_info strip [transform strip]
+ }
+ unset tempfil
+}
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+set_board_info compiler "[find_gcc]"
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info start_addr 0xa0008000
+set_board_info ldflags "-Wl,-Ttext,[board_info $board start_addr] [libgloss_link_flags] [newlib_link_flags] -B${prefix_dir}/i960-coff/"
+# IDT linker script.
+set_board_info ldscript "-Wl,-T${prefix_dir}/i960-coff/i960.ld"
+
+# GDB doesn't return exit statuses and we need to indicate this;
+# the standard GCC wrapper will work with this target.
+set_board_info needs_status_wrapper 1
+
+# The GDB protocol used with this board.
+set_board_info gdb_protocol "mon960"
+
+# Can't pass arguments to the program.
+set_board_info noargs 1
+
+# No support for signals.
+set_board_info gdb,nosignals 1
+
+set_board_info gdb_prompt "\\(gdb960\\)"
+
+# The board tends to be unreliable.
+set_board_info unreliable 1
--- /dev/null
+# Load the generic configuration for this board. This will define a basic
+# set of routines needed by the tool to communicate with the board.
+load_generic_config "sim";
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim";
+
+# This tells it which directory to look in for the simulator.
+setup_sim i960;
+
+# No multilib flags are set by default.
+# Set -msoft-float, because the simulator doesn't have FP support yet.
+process_multilib_options "-msoft-float";
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]";
+
+set_board_info cflags "-mka [libgloss_include_flags] [newlib_include_flags]";
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]";
+
+# Use mon960.
+set_board_info ldscript "-Wl,-Tmon960.ld";
+
+# And, it can't do arguments, and doesn't have real signals.
+# ??? Unknown if this is right.
+set_board_info noargs 1;
+set_board_info gdb,nosignals 1;
--- /dev/null
+# And we use the jmr3904 linker script.
+set_board_info ldscript "-Tjmr3904app.ld"
+
+# Pass --board=jmr3904 to the standalone simulator
+set_board_info sim,options "--board=jmr3904"
+set_board_info gdb,target_sim_options "--board=jmr3904"
+
+# Pass -G 0 when testing libjava
+set_board_info libjava,options "-G 0"
+
+set_board_info gcc,stack_size "8192"
+
+# Otherwise we're the same as the standard MIPS simulator.
+load_base_board_description "mips-sim";
--- /dev/null
+# gdbserver running native.
+
+load_generic_config "gdbserver";
+
+process_multilib_options "";
+
+# The default compiler for this target.
+set_board_info compiler "[find_gcc]";
+
+# We will be using the standard GDB remote protocol
+set_board_info gdb_protocol "remote"
+
+# Path to the gdbserver executable, if required.
+set_board_info gdb_server_prog \
+ "../gdbserver/gdbserver"
+
+# Name of the computer whose socket will be used, if required.
+set_board_info sockethost "localhost:"
+
+# Port ID to use for socket connection
+# set_board_info gdb,socketport "4004"
+
+# Use techniques appropriate to a stub
+set_board_info use_gdb_stub 1;
+
+# This gdbserver can only run a process once per session.
+set_board_info gdb,do_reload_on_run 1;
+
+# There's no support for argument-passing (yet).
+set_board_info noargs 1
+
+# Can't do input (or output) in the current gdbserver.
+set_board_info gdb,noinferiorio 1
+
+# Can't do hardware watchpoints, in general
+set_board_info gdb,no_hardware_watchpoints 1;
--- /dev/null
+# Libremote gdbserver running native.
+
+load_generic_config "gdbserver";
+
+process_multilib_options "";
+
+# The default compiler for this target.
+set_board_info compiler "[find_gcc]";
+
+# We will be using the standard GDB remote protocol
+set_board_info gdb_protocol "remote"
+
+# Path to the gdbserver executable, if required.
+set_board_info gdb_server_prog \
+ "../../libremote/native/server"
+
+# Name of the computer whose socket will be used, if required.
+# set_board_info sockethost "localhost"
+
+# Port ID to use for socket connection
+# set_board_info gdb,socketport "4004"
+
+# Use techniques appropriate to a stub
+set_board_info use_gdb_stub 1;
+
+# This gdbserver can only run a process once per session.
+set_board_info gdb,do_reload_on_run 1;
+
+# There's no support for argument-passing (yet).
+set_board_info noargs 1
+
+# Can't do input (or output) in the current gdbserver.
+set_board_info gdb,noinferiorio 1
+
+# Can't do hardware watchpoints, in general
+set_board_info gdb,no_hardware_watchpoints 1;
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {m32r-elf}
+
+# No multilib flags needed by default.
+process_multilib_options ""
+
+# Load the generic configuration for this board. This will define a basic set
+# of routines needed by the tool to communicate with the board.
+if { $is_gdb_remote } {
+ load_generic_config "m32r-stub"
+} else {
+ load_generic_config "m32r"
+}
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+
+set_board_info compiler "[find_gcc]"
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+set_board_info ldscript "-Wl,-Teva.ld"
+set_board_info gdb,start_symbol "_start"
+
+set_board_info needs_status_wrapper 1
+
+# The GDB protocol used for this target.
+if { ! $is_gdb_remote } {
+ set_board_info gdb_protocol "m32r"
+} else {
+ set_board_info gdb_protocol "m32r"
+ set_board_info use_gdb_stub 1
+ set_board_info gdb_stub_ldscript "-Wl,-Teva-stub.ld"
+}
+
+# Doesn't pass arguments or signals, can't return results, and doesn't
+# do inferiorio.
+set_board_info noargs 1
+set_board_info gdb,nosignals 1
+set_board_info gdb,noresults 1
+set_board_info gdb,noinferiorio 1
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {m32r-elf}
+
+# Load the generic configuration for this board. This will define a basic set
+# of routines needed by the tool to communicate with the board.
+load_generic_config "sim"
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim"
+
+# "m32r" is the name of the sim subdir in devo/sim.
+setup_sim m32r
+
+# No multilib options needed by default.
+process_multilib_options ""
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+
+set_board_info compiler "[find_gcc]"
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+# No linker script needed.
+set_board_info ldscript "";
+
+# The simulator doesn't return exit statuses and we need to indicate this;
+# the standard GCC wrapper will work with this target.
+set_board_info needs_status_wrapper 1
+# Doesn't pass arguments or signals, can't return results, and doesn't
+# do inferiorio.
+set_board_info noargs 1
+set_board_info gdb,nosignals 1
+set_board_info gdb,noresults 1
+set_board_info gdb,noinferiorio 1
--- /dev/null
+# Load the generic configuration for this board. This will define any
+# routines needed by the tool to communicate with the board.
+load_generic_config "m68k-emc";
+
+# No multilib options by default.
+process_multilib_options ""
+
+# The compiler used to build for this board. Note that this has nothing to do
+# with what compiler is tested when testing gcc.
+set_board_info compiler "[find_gcc]"
+
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]";
+
+set_board_info ldflags "-nostdlib [libgloss_link_flags] [newlib_link_flags]"
+
+# No linker script.
+set_board_info ldscript "";
+# The idt interface can't return exit statuses, so gcc (ctorture et
+# al) needs to do what it can to get them.
+set_board_info needs_status_wrapper 1;
+
+# GDB needs to use "target remote" to talk to the board.
+set_board_info gdb_protocol "remote";
+
+# Can't pass arguments to the program under test.
+set_board_info noargs 1
+
+# Nor can it do I/O in GDB.
+set_board_info gdb,noinferiorio 1
+
+# It has no signals.
+set_board_info gdb,nosignals 1
+
+# It can't return results when debugging with GDB.
+set_board_info gdb,noresults 1
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {mcore-elf}
+
+# No multilib flags needed by default.
+process_multilib_options ""
+
+# Load the generic configuration for this board. This will define a basic set
+# of routines needed by the tool to communicate with the board.
+load_generic_config "mcore"
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+
+set_board_info compiler "[find_gcc]"
+set_board_info cflags "-specs=cmb.specs [libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+set_board_info ldscript ""
+set_board_info gdb,start_symbol "_start"
+
+#set_board_info needs_status_wrapper 1
+
+# The GDB protocol used for this target.
+set_board_info gdb_protocol "picobug"
+set_board_info use_gdb_stub 1
+
+# Doesn't pass arguments or signals, can't return results, and doesn't
+# do inferiorio. It can't handle FP, either.
+set_board_info noargs 1
+set_board_info gdb,nosignals 1
+set_board_info gdb,noresults 1
+set_board_info gdb,noinferiorio 1
+set_board_info gdb,skip_float_tests 1
+
+# Increase the timeout
+set timeout 60
--- /dev/null
+# This is a HACKED version of mcore-sim.exp that is intended to
+# support running tests on Motorola's proprietry MCore simulator.
+
+# It is quite likely that thia file will need to be modified in
+# order for you to use Motorola's simulator.
+
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {mcore-elf, mcore-pe}
+
+# Do general config stuff but do not load anything. "jim" was
+# chosen because it does not exist.
+load_generic_config "jim"
+
+process_multilib_options ""
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+set_board_info compiler "[find_gcc]"
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+
+# No linker script needed.
+set_board_info ldscript "";
+
+# The simulator doesn't return exit statuses and we need to indicate this;
+# the standard GCC wrapper will work with this target.
+set_board_info needs_status_wrapper 1
+
+# Doesn't pass arguments or signals, can't return results, and doesn't
+# do inferiorio.
+set_board_info noargs 1
+set_board_info gdb,nosignals 1
+set_board_info gdb,noresults 1
+set_board_info gdb,noinferiorio 1
+
+# Rather than include the normal simulator support files,
+# their functions are reproduced (and modified) here.
+# --------------------------------------------------------------
+proc sim_spawn { dest cmdline args } {
+
+ # Choose whoch simulator to run
+ ## XXX - fixme - this should be automatic based on the
+ ## multilib option.
+ ## XXX - fixme - this should not be hardcoded.
+ set sim "/home/nickc/bin/linux/sim-be"
+# set sim "/home/nickc/bin/linux/sim-le"
+
+ set simflags "-m abi"
+
+ # Create a script to run the program
+ set handle [open doit w]
+ puts $handle "load $cmdline"
+ puts $handle "reset"
+ puts $handle "g 28"
+ puts $handle "quit"
+ close $handle
+
+ return [eval remote_spawn host \{ $sim $simflags "-sdoit" \} $args];
+}
+
+proc sim_wait { dest timeout } {
+ return [remote_wait host $timeout];
+}
+
+proc sim_load { dest prog args } {
+
+ if ![file exists $prog] then {
+ perror "sim.exp: $prog to be downloaded does not exist."
+ verbose -log "$prog to be downloaded does not exist." 3
+ return [list "untested" ""];
+ }
+
+ set sim_time_limit 240
+
+ set output "";
+
+ set res [remote_spawn target "${prog}"];
+
+ if { $res <= 0 } {
+ return [list "fail" "remote_spawn failed"];
+ }
+
+ set state [remote_wait target $sim_time_limit];
+ set status [lindex $state 0];
+ set output [lindex $state 1];
+ verbose "Output is $output";
+
+ set status2 [check_for_board_status output];
+ if { $status2 >= 0 } {
+ set status $status2
+ }
+
+ # FIXME: Do we need to examine $status?
+ # Yes, we do--what if the simulator itself gets an error and coredumps?
+
+ verbose "Return status was: $status" 2
+ if { $status == 0 } {
+ set result "pass"
+ } else {
+ set result "fail"
+ }
+ return [list $result $output];
+}
+
+set_board_info protocol "sim";
+
+# By default, assume the simulator is slow. This causes some tests
+# to either be simplified or skipped completely.
+set_board_info slow_simulator 1
+
+# -----------------------------------------------------------
+# find_sim -- find a usable simulator
+# This proc is local to this file and is used to locate a simulator to use.
+# First we see if SIM=foo was specified on the command line.
+# Otherwise we search the build tree, then $PATH.
+
+proc find_sim { target_alias sim_dir sim_name } {
+
+ ## XXX - fixme - this should not be hardcoded.
+ ## XXX - fixme - this should vary depending upon endianism selected.
+
+ return "/home/nickc/bin/linux/sim-be";
+}
+
+set_board_info is_simulator 1;
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {mcore-pe}
+
+# No multilib flags needed by default.
+process_multilib_options ""
+
+# Load the generic configuration for this board. This will define a basic set
+# of routines needed by the tool to communicate with the board.
+load_generic_config "mcore"
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+
+set_board_info compiler "[find_gcc]"
+set_board_info cflags "-specs=cmb.specs [libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+set_board_info ldscript ""
+set_board_info gdb,start_symbol "_start"
+
+#set_board_info needs_status_wrapper 1
+
+# The GDB protocol used for this target.
+set_board_info gdb_protocol "picobug"
+set_board_info use_gdb_stub 1
+
+# Doesn't pass arguments or signals, can't return results, and doesn't
+# do inferiorio. It can't handle FP, either.
+set_board_info noargs 1
+set_board_info gdb,nosignals 1
+set_board_info gdb,noresults 1
+set_board_info gdb,noinferiorio 1
+set_board_info gdb,skip_float_tests 1
+
+# Increase the timeout
+set timeout 60
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {mcore-elf, mcore-pe}
+
+# Load the generic configuration for this board. This will define a basic set
+# of routines needed by the tool to communicate with the board.
+load_generic_config "sim"
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim"
+
+# "mcore" is the name of the sim subdir in devo/sim.
+setup_sim mcore
+
+# No multilib options needed by default.
+process_multilib_options ""
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+
+set_board_info compiler "[find_gcc]"
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+# No linker script needed.
+set_board_info ldscript "";
+
+# The simulator doesn't return exit statuses and we need to indicate this;
+# the standard GCC wrapper will work with this target.
+set_board_info needs_status_wrapper 1
+# Doesn't pass arguments or signals, can't return results, and doesn't
+# do inferiorio.
+set_board_info noargs 1
+set_board_info gdb,nosignals 1
+set_board_info gdb,noresults 1
+set_board_info gdb,noinferiorio 1
+set_board_info gdb,skip_float_tests 1
+
+set timeout 45
--- /dev/null
+# Load the generic configuration for this board. This will define any
+# routines needed by the tool to communicate with the board.
+load_generic_config "mips-idt";
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]";
+
+# We don't use any multilib options by default.
+process_multilib_options ""
+
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]";
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]";
+
+# Use idt.
+if { [board_info $board obj_format] == "ecoff" } {
+ set_board_info ldscript "-Wl,-Tidtecoff.ld";
+} else {
+ set_board_info ldscript "-Wl,-Tidt.ld";
+}
+
+# The idt interface can't return exit statuses, so gcc (ctorture et
+# al) needs to do what it can to get them.
+set_board_info needs_status_wrapper 1;
+
+# GDB needs to use "target mips" to talk to the board.
+set_board_info gdb_protocol "mips";
+
+# And, it can't do arguments, and doesn't have real signals.
+set_board_info noargs 1
+set_board_info gdb,nosignals 1
--- /dev/null
+# lnews linker script.
+set_board_info ldscript "-Wl,-Tlnews.ld"
+
+# Otherwise, it's the same as the standard mips simulator.
+load_base_board_description "mips-sim";
--- /dev/null
+# We need mips16.
+add_multilib_option "-mips16"
+
+# And we use the lsi linker script.
+set_board_info ldscript "-Wl,-Tlsi.ld"
+
+# Otherwise we're the same as the standard MIPS simulator.
+load_base_board_description "mips-sim";
--- /dev/null
+# Load the generic configuration for this board. This will define a basic
+# set of routines needed by the tool to communicate with the board.
+load_generic_config "sim";
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim";
+
+# This tells it which directory to look in for the simulator.
+setup_sim mips;
+
+# No multilib flags are set by default.
+process_multilib_options "";
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]";
+
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]";
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]";
+
+# Use idt.
+if { [board_info $board obj_format] == "ecoff" } {
+ set_board_info ldscript "-Wl,-Tidtecoff.ld";
+} else {
+ set_board_info ldscript "-Wl,-Tidt.ld";
+}
+
+# And, it can't do arguments, and doesn't have real signals.
+set_board_info noargs 1;
+set_board_info gdb,nosignals 1;
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {mips64vr4300-elf
+ mips64-elf}
+
+# Load the generic configuration for this board. This will define a basic
+# set of routines needed by the tool to communicate with the board.
+load_generic_config "sim";
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim";
+
+# This tells it which directory to look in for the simulator.
+setup_sim mips;
+
+# No multilib flags are set by default.
+process_multilib_options "";
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]";
+
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]";
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]";
+# PMON linker script.
+set_board_info ldscript "-Wl,-Tpmon.ld"
+
+# And, it can't do arguments or signals in GDB.
+set_board_info noargs 1;
+set_board_info gdb,nosignals 1;
--- /dev/null
+# This is the name of the installed tools for this target.
+set target_install "mips64vr4100-elf"
+
+# Load the generic configuration for this board. This will define a basic
+# set of routines needed by the tool to communicate with the board.
+load_generic_config "sim"
+
+load_lib "libgloss.exp"
+
+# We need this for find_gcc and *_include_flags/*_link_flags.
+load_board_description "basic-sim"
+
+if ![info exists board_info($board,multilib_flags)] {
+ set board_info($board,multilib_flags) "-mips16"
+}
+
+# This tells it which directory to look in for the simulator.
+setup_sim mips
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+set board_info($board,compiler) "[find_gcc]"
+set board_info($board,cflags) "[libgloss_include_flags] [newlib_include_flags] [libio_include_flags]"
+set board_info($board,ldflags) "[libgloss_link_flags] [newlib_link_flags] [libio_link_flags]"
+# IDT linker script.
+set board_info($board,ldscript) "-Wl,-Tidt.ld"
+
+# The simulator doesn't return exit statuses and we need to indicate this;
+# the standard GCC wrapper will work with this target.
+set board_info($board,needs_status_wrapper) 1
+set board_info($board,gdb,noargs) 1
+set_board_info gdb,nosignals 1;
+set_board_info noargs 1;
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {mn10200-elf}
+
+# Load the generic configuration for this board. This will define a
+# set of generic routines used by the tool to communicate with the
+# board.
+load_generic_config "mn10200-eval";
+
+# It needs no multilib flags by default.
+process_multilib_options ""
+
+set_board_info compiler "[find_gcc]";
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]";
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags] [board_info $board addl_link_flags]";
+
+# CygMON linker script.
+set_board_info ldscript "-Teval.ld"
+
+# Standard remote protocol.
+set_board_info gdb_protocol "remote";
+# We can't do input in GDB (yet! HA!). It *will* do output, hurrah.
+set_board_info gdb,noinferiorio 1;
+# Or pass arguments.
+set_board_info gdb,noargs 1;
+set_board_info noargs 1;
+# Or do signals.
+set_board_info gdb,nosignals 1;
+
+set_board_info shell_prompt "cygmon>"
+
+
+set_board_info use_gdb_stub 1;
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {mn10200-elf}
+
+# Load the tool-specific configuration for this board, as well as the
+# generic configuration. This will define any routines needed by the
+# tool to communicate with the board.
+load_generic_config "sim"
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim"
+
+# This is the name of the sim subdir in devo/sim (and in the build tree).
+setup_sim mn10200
+
+# No multilib flags are set by default.
+process_multilib_options ""
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]"
+
+# We only support newlib on this target.
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+
+# Simulator linker script.
+set_board_info ldscript "-Tsim.ld"
+
+# The simulator doesn't return exit statuses and we need to indicate this.
+set_board_info needs_status_wrapper 1
+
+# We can't pass args to the simulator or get exit status back from the
+# simulator, nor does the simulator support real signals.
+set_board_info noargs 1
+set_board_info gdb,nosignals 1
+set_board_info gdb,noresults 1
+set_board_info gdb,noinferiorio 1
+
+# The mn10200 doesn't support long long data types or double data types.
+set_board_info no_long_long 1
+set_board_info no_double 1
+
+# Used by a few gcc.c-torture testcases to delimit how large the stack can
+# be.
+set_board_info gcc,stack_size 4096;
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {mn10300-elf}
+
+# Load the generic configuration for this board. This will define a
+# set of generic routines used by the tool to communicate with the
+# board.
+load_generic_config "mn10300-eval";
+
+# It needs no multilib flags by default.
+process_multilib_options ""
+
+set_board_info compiler "[find_gcc]";
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]";
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags] [board_info $board addl_link_flags]";
+
+# CygMON linker script.
+set_board_info ldscript "-Teval.ld"
+
+# Standard remote protocol.
+set_board_info gdb_protocol "remote";
+# We can't do input in GDB (yet! HA!). It *will* do output, hurrah.
+set_board_info gdb,noinferiorio 1;
+# Or pass arguments.
+set_board_info gdb,noargs 1;
+set_board_info noargs 1;
+# Or do signals.
+set_board_info gdb,nosignals 1;
+
+set_board_info shell_prompt "cygmon>"
+
+
+set_board_info use_gdb_stub 1;
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {mn10300-elf}
+
+# Load the tool-specific configuration for this board, as well as the
+# generic configuration. This will define any routines needed by the
+# tool to communicate with the board.
+load_generic_config "sim"
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim"
+
+# This is the name of the sim subdir in devo/sim (and in the build tree).
+setup_sim mn10300
+
+# No multilib flags are set by default.
+process_multilib_options ""
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]"
+
+# We only support newlib on this target.
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+
+# Simulator linker script.
+set_board_info ldscript "-Tsim.ld"
+
+# The simulator doesn't return exit statuses and we need to indicate this.
+set_board_info needs_status_wrapper 1
+
+# We can't pass args to the simulator or get exit status back from the
+# simulator, nor does the simulator support real signals.
+set_board_info noargs 1
+set_board_info gdb,nosignals 1
+set_board_info gdb,noresults 1
+set_board_info gdb,noinferiorio 1
+
+# Used by a few gcc.c-torture testcases to delimit how large the stack can
+# be.
+set_board_info gcc,stack_size 4096;
--- /dev/null
+load_base_board_description "cygmon";
--- /dev/null
+# Load the tool-specific configuration for this board, as well as the
+# generic configuration. This will define any routines needed by the
+# tool to communicate with the board.
+load_generic_config "proelf";
+
+# GDB needs to use "target op50n" to talk to the board.
+set_board_info gdb_protocol "op50n";
+
+if ![board_info $board exists output_format] {
+ set tempfil [lookfor_file $tool_root_dir binutils/objcopy];
+ if { $tempfil != "" } {
+ set_board_info objcopy $tempfil
+ } else {
+ set_board_info objcopy [transform objcopy]
+ }
+ unset tempfil
+}
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]";
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]";
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]";
+# It's an op50n board.
+set_board_info ldscript "-Wl,-Top50n.ld";
+# The proelf interface has no way to return status information, so we
+# need to indicate this.
+set_board_info needs_status_wrapper 1;
+
+# No support for signals.
+set_board_info gdb,nosignals 1;
+# Nor can we do I/O.
+set_board_info gdb,noinferiorio 1;
+
+# The monitor interface is really slow.
+set_board_info gdb,timeout 540;
--- /dev/null
+load_generic_config "powerpc-bug";
+
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {powerpc-eabi};
+
+# We need mvme by default.
+process_multilib_options "mvme";
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]"
+
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+
+# No linker script needed for this board.
+set_board_info ldscript "";
+
+# Can't pass arguments to programs on this target..
+set_board_info noargs 1
+# And there's no support for signals.
+set_board_info gdb,nosignals 1
+
+# GDB doesn't return exit statuses and we need to indicate this;
+# the standard GCC wrapper will work with this target.
+set_board_info needs_status_wrapper 1
+
+# The GDB protocol for this board is...
+set_board_info gdb_protocol "ppcbug"
--- /dev/null
+# This config uses ppcbug1 protocol in GDB.
+set_board_info gdb_protocol "ppcbug1"
+
+# But otherwise we're the same as powerpc-bug.
+load_base_board_description "powerpc-bug"
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {powerpc-eabi}
+
+# Load the generic configuration for this board, This will define a basic
+# set of routines needed by the tool to communicate with the board.
+load_generic_config "sim"
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim"
+
+# The name of the simulator is "ppc".
+setup_sim ppc
+
+# No multilib flags needed by default.
+process_multilib_options ""
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]"
+
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "-msim [libgloss_link_flags] [newlib_link_flags]"
+
+# No support for signals on this target.
+set_board_info gdb,nosignals 1;
+
+# Can't call functions from GDB.
+set_board_info gdb,cannot_call_functions 1
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {powerpcle-eabi}
+
+# Load the generic configuration for this board, This will define a basic
+# set of routines needed by the tool to communicate with the board.
+load_generic_config "sim"
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim"
+
+# The name of the simulator is "ppc".
+setup_sim ppc
+
+# No multilib flags needed by default.
+process_multilib_options ""
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]"
+
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "-msim [libgloss_link_flags] [newlib_link_flags]"
+
+# No support for signals on this target.
+set_board_info gdb,nosignals 1;
+
+# Can't call functions from GDB.
+set_board_info gdb,cannot_call_functions 1
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {m68k-coff m68k-elf};
+
+# Load the generic configuration for this board. This will define any
+# routines needed by the tool to communicate with the board.
+load_generic_config "rom68k";
+
+# Need soft-float by default.
+process_multilib_options "-msoft-float"
+
+# The compiler used to build for this board. Note that this has nothing to do
+# with what compiler is tested when testing gcc.
+set_board_info compiler "[find_gcc]"
+
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]";
+
+# Nasty hack.
+if { [board_info $board obj_format] == "a.out" } {
+ # Need to pass the start address to objcopy.
+ set_board_info use_vma_offset 1;
+ # Wrapping has to be specially done for m68k-aout, for whatever reason.
+ set_board_info wrap_m68k_aout 1;
+
+ set extra_m68k_ld_flags "-N -nostdlib "
+
+ # We need to tell GDB to load at the correct offset.
+ set_board_info gdb_load_offset [board_info $board hex_startaddr];
+} else {
+ set extra_m68k_ld_flags ""
+}
+
+set_board_info ldflags "$extra_m68k_ld_flags [libgloss_link_flags] [newlib_link_flags]"
+unset extra_m68k_ld_flags
+
+
+# If no output format is specified, use objcopy.
+if ![board_info $board exists output_format] {
+ set tempfil [lookfor_file $tool_root_dir binutils/objcopy];
+ if { $tempfil != "" } {
+ set_board_info objcopy $tempfil
+ } else {
+ set_board_info objcopy [transform objcopy]
+ }
+ unset tempfil
+}
+
+# IDP linker script.
+set_board_info ldscript "-Wl,-Tidp.ld";
+# The idt interface can't return exit statuses, so gcc (ctorture et
+# al) needs to do what it can to get them.
+set_board_info needs_status_wrapper 1;
+
+# GDB needs to use "target rom68k" to talk to the board.
+set_board_info gdb_protocol "rom68k";
+
+# Can't pass arguments to the program under test.
+set_board_info noargs 1
+
+# Nor can it do I/O in GDB.
+set_board_info gdb,noinferiorio 1
+
+# It has no signals.
+set_board_info gdb,nosignals 1
+
+# It can't return results when debugging with GDB.
+set_board_info gdb,noresults 1
+
+# Pseudo-random guess.
+set_board_info sys_speed_value 200;
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {sh-hms}
+
+# Load the generic configuration for this board. This will define a basic
+# set of routines needed by the tool to communicate with the board.
+load_generic_config "sim"
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim"
+
+# The name of the directory in the build tree that the simulator lives in
+# is "sh".
+setup_sim sh
+
+# No multilib flags needed by default.
+process_multilib_options ""
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]"
+
+# We only support newlib on this target.
+# However, we include libgloss so we can find the linker scripts.
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]"
+set_board_info ldflags "[newlib_link_flags]"
+# No linker script for this board.
+set_board_info ldscript "";
+# The simulator doesn't return exit statuses and we need to indicate this.
+# Doesn't work on SH yet.
+# set_board_info needs_status_wrapper 1
+# Can't pass arguments to this target.
+set_board_info noargs 1
+# No signals.
+set_board_info gdb,nosignals 1
+# And it can't call functions.
+set_board_info gdb,cannot_call_functions 1
+
+# Used by a few gcc.c-torture testcases to delimit how large the stack can
+# be.
+set_board_info gcc,stack_size 16384
+
+# Need to pass -mieee in order to for the compiler to be IEEE-fp compliant.
+set_board_info ieee_multilib_flags "-mieee";
+
+#We want to pass "18" to GDB"s "targt sim" command.
+set_board_info gdb,target_sim_options "18"
+#and the standalone simulator
+set_board_info sim,options "-m 18"
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {sh-hms}
+
+# Load the generic configuration for this board. This will define a basic
+# set of routines needed by the tool to communicate with the board.
+load_generic_config "sh"
+
+# Default to SH2.
+process_multilib_options "-m2"
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]"
+
+# We only support newlib on this target.
+# However, we include libgloss so we can find the linker scripts.
+set_board_info cflags "[newlib_include_flags]"
+set_board_info ldflags "[newlib_link_flags] [libgloss_link_flags]"
+
+# Linker script for the SH2 board.
+set_board_info ldscript "-Wl,-Tsh2lcevb.ld"
+
+# Can't pass arguments to this target.
+set_board_info noargs 1
+# And it can't call functions.
+set_board_info gdb,cannot_call_functions 1
+
+# We use the remote GDB protocol.
+set_board_info gdb_protocol "remote"
+# Jumping to start is how we get the program started in GDB.
+set_board_info gdb_run_command "jump start"
+# The remote target uses a GDB stub.
+set_board_info use_gdb_stub 1
+# We can't do I/O.
+set_board_info gdb,noinferiorio 1
+# Or signals.
+set_board_info gdb,nosignals 1
+
+# Used by a few gcc.c-torture testcases to delimit how large the stack can
+# be.
+set_board_info gcc,stack_size 16384
+
+# Exit statuses returned from GDB are sometimes faulty.
+set_board_info exit_statuses_bad 1
+
+# Need to pass -mieee in order to for the compiler to be IEEE-fp compliant.
+set_board_info ieee_multilib_flags "-mieee";
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {sparc64-elf}
+
+# Load the generic configuration for this board. This will define any
+# routines needed by the tool to communicate with the board.
+load_generic_config "sim"
+
+# We need this for find_gcc and *_include_flags/*_link_flags.
+load_base_board_description "basic-sim"
+
+# Use long64 by default.
+process_multilib_options "long64"
+
+setup_sim sparc64
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+set_board_info compiler "[find_gcc]"
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+# No linker script.
+set_board_info ldscript "";
+
+# Used by a few gcc.c-torture testcases to delimit how large the stack can
+# be.
+set_board_info gcc,stack_size 16384
+# The simulator doesn't return exit statuses and we need to indicate this;
+# the standard GCC wrapper will work with this target.
+set_board_info needs_status_wrapper 1
+# We can't pass arguments to programs.
+set_board_info noargs 1
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {sparclet-aout}
+
+# Load the generic configuration for this board. This will define any
+# routines needed by the tool to communicate with the board,.
+load_generic_config "sparclet";
+
+# It needs broken-saverestore by default.
+process_multilib_options "-mbroken-saverestore"
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+set_board_info compiler "[find_gcc]"
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]"
+set_board_info ldflags "-nostdlib [libgloss_link_flags] [newlib_link_flags] -Wl,-Ttext,0x12020000 -N"
+
+# tsc701 linker script.
+set_board_info ldscript "-Ttsc701.ld"
+
+# The board doesn't return exit statuses and we need to indicate this.
+# However, the standard GCC wrapper won't work with this target because
+# it doesn't return stuff from printf ().
+#set_board_info needs_status_wrapper 1
+
+# The monitor uses a GDB stub.
+set_board_info use_gdb_stub 1
+# The GDB protocol used to communicate with this board.
+set_board_info gdb_protocol "sparclet"
+# The offset in memory that we load programs.
+set_board_info gdb_load_offset "0x12020000"
+# And the place in memory where we load the stub.
+set_board_info gdb_stub_offset "0x12010000"
+# No mathlib.
+set_board_info mathlib "";
+# We can't do I/O in GDB.
+set_board_info gdb,noinferiorio 1;
+# Or pass arguments.
+set_board_info noargs 1;
+
+set_board_info gcc,no_varargs 1
+set_board_info gcc,no_label_values 1
+
+# This is the old GDB prompt for the toolchain.
+# Uncomment for old tests
+set_board_info gdb_prompt "\\(gdb\\)";
+
+# We always have to set a breakpoint at exit(), instead of just _exit().
+set_board_info always_break_exit 1;
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {sparclite-coff}
+
+# Load the generic configuration for this board. This will define a
+# set of generic routines used by the tool to communicate with the
+# board.
+load_generic_config "slite";
+
+# It needs no multilib flags by default.
+process_multilib_options ""
+
+set_board_info compiler "[find_gcc]";
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]";
+set_board_info ldflags "-nostdlib [libgloss_link_flags] [newlib_link_flags] -Wl,-Ttext,0x40005000 -N";
+
+# ex930 linker script.
+set_board_info ldscript "-Tex930.ld";
+
+# The address at which the stub needs to be linked.
+set_board_info gdb_stub_offset "0x40000000";
+
+# The board doesn't return exit statuses and we need to indicate this.
+# However, the standard GCC wrapper won't work with this target because
+# it doesn't return stuff from printf ().
+set_board_info needs_status_wrapper 1;
+
+# We use a GDB stub to talk to the board.
+set_board_info use_gdb_stub 1;
+# For GDB, we need to use a real stub (not the separate loader scheme
+# we use for Sparclet).
+set_board_info gdb_stub "";
+# And the protocol is "sparclite serial".
+set_board_info gdb_protocol "sparclite serial";
+# No mathlib.
+set_board_info mathlib "";
+# We can't do I/O in GDB.
+set_board_info gdb,noinferiorio 1;
+# Or pass arguments.
+set_board_info noargs 1;
+# Or do signals.
+set_board_info gdb,nosignals 1;
--- /dev/null
+if { [board_info $board obj_format] == "a.out" } {
+ set_board_info addl_link_flags "-N"
+ set_board_info gdb_load_offset "0x40050000"
+}
+
+load_base_board_description "cygmon"
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {sparclite-elf}
+
+# Load the generic configuration for this board. This will define a
+# set of generic routines used by the tool to communicate with the
+# board.
+load_generic_config "sim";
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim";
+
+if ![info exists board_info($board,multilib_flags)] {
+ set board_info($board,multilib_flags) "-mlittle-endian-data"
+}
+
+# This tells it which directory to look in for the simulator.
+setup_sim erc32;
+
+# It needs no multilib flags by default.
+process_multilib_options ""
+
+set_board_info compiler "[find_gcc]";
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]";
+set_board_info ldflags "-nostdlib -nostartfiles [libgloss_link_flags] [newlib_link_flags]";
+
+# ELF simulator linker script.
+set_board_info ldscript "-Telfsim.ld";
+
+# The simulator doesn't return exit statuses and we need to indicate this.
+set_board_info needs_status_wrapper 1;
+
+# We use a GDB stub to talk to the board.
+# set_board_info use_gdb_stub 1;
+# For GDB, we need to use a real stub (not the separate loader scheme
+# we use for Sparclet).
+# set_board_info gdb_stub "";
+# No mathlib.
+# set_board_info mathlib "";
+# We can't do I/O in GDB.
+# set_board_info gdb,noinferiorio 1;
+# Or pass arguments.
+set_board_info noargs 1;
+# Or do signals.
+set_board_info gdb,nosignals 1;
+
+#We want to specify the sparclite emulator in GDB.
+set_board_info gdb,target_sim_options "-sparclite"
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {sparclite-elf}
+
+# Load the generic configuration for this board. This will define a
+# set of generic routines used by the tool to communicate with the
+# board.
+load_generic_config "sim";
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim";
+
+# This tells it which directory to look in for the simulator.
+setup_sim erc32;
+
+# It needs no multilib flags by default.
+process_multilib_options ""
+
+set_board_info compiler "[find_gcc]";
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]";
+set_board_info ldflags "-nostdlib -nostartfiles [libgloss_link_flags] [newlib_link_flags]";
+
+# ELF simulator linker script.
+set_board_info ldscript "-Telfsim.ld";
+
+# The simulator doesn't return exit statuses and we need to indicate this.
+set_board_info needs_status_wrapper 1;
+
+# We can't pass arguments.
+set_board_info noargs 1;
+# Or do signals.
+set_board_info gdb,nosignals 1;
+
+# We want to specify the sparclite emulator in GDB.
+set_board_info gdb,target_sim_options "-sparclite"
+
+# Pass -a -sparclite to the standalone simulator
+set_board_info sim,options "-a -sparclite"
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {strongarm-elf}
+
+# Load the generic configuration for this board. This will define a
+# set of generic routines used by the tool to communicate with the
+# board.
+load_generic_config "cygmon";
+
+# It needs no multilib flags by default.
+process_multilib_options ""
+
+set_board_info compiler "[find_gcc]";
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]";
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags] [board_info $board addl_link_flags]";
+
+# CygMON linker script.
+
+if {[string compare [board_info $board boardtype] "sa1100dp"] == 0} {
+ set_board_info ldscript "-specs=sa1100dp.specs"
+} elseif {[string compare [board_info $board boardtype] "sa1100mm"] == 0} {
+ set_board_info ldscript "-specs=sa1100mm.specs"
+} elseif {[string compare [board_info $board boardtype] "sa-iop"] == 0} {
+ set_board_info ldscript "-specs=sa-iop.specs"
+} elseif {[string compare [board_info $board boardtype] "ebsa-285"] == 0} {
+ set_board_info ldscript "-specs=ebsa-285.specs"
+}
+
+# Standard remote protocol.
+set_board_info gdb_protocol "remote";
+# We can't do input in GDB (yet! HA!). It *will* do output, hurrah.
+set_board_info gdb,noinferiorio 1;
+# Or pass arguments.
+set_board_info gdb,noargs 1;
+set_board_info noargs 1;
+# Or do signals.
+set_board_info gdb,nosignals 1;
+
+set_board_info shell_prompt "cygmon>"
+
+set_board_info use_gdb_stub 1;
+set_board_info use_cygmon 1
--- /dev/null
+# Load the generic configuration for this board. This will define a basic
+# set of routines needed by the tool to communicate with the board.
+load_generic_config "sim";
+
+# basic-sim.exp is a basic description for the standard Cygnus simulator.
+load_base_board_description "basic-sim";
+
+# This tells it which directory to look in for the simulator.
+setup_sim tic80;
+
+# No multilib flags are set by default.
+process_multilib_options "";
+
+# The compiler used to build for this board. This has *nothing* to do
+# with what compiler is tested if we're testing gcc.
+set_board_info compiler "[find_gcc]";
+
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]";
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]";
+# No linker script is needed.
+# set_board_info ldscript "";
+
+# And, it can't do arguments, and doesn't have real signals.
+set_board_info noargs 1;
+set_board_info gdb,nosignals 1;
+
+# Used by a few gcc.c-torture testcases when trampolines are used.
+set_board_info gcc,no_varargs 1
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {mips-tx39-elf mips-elf}
+
+# Load the generic configuration for this board. This will define a basic
+# set of routines needed by the tool to communicate with the board.
+if { [board_info $board cygmon] == "yes" } {
+ load_generic_config "cygmon";
+} else {
+ load_generic_config "dve";
+}
+
+# It's a big-endian board.
+process_multilib_options "big-endian"
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+set_board_info compiler "[find_gcc]"
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+# DDB linker script.
+set_board_info ldscript "-Wl,-Tdve.ld";
+
+# GDB doesn't return exit statuses and we need to indicate this;
+# the standard GCC wrapper will work with this target.
+set_board_info needs_status_wrapper 1;
+
+# The GDB protocol used with this board.
+if { [board_info $board cygmon] == "yes" } {
+ set_board_info gdb_protocol "remote"
+} else {
+ set_board_info gdb_protocol "r3900"
+}
+
+# This is needed for compiling nullstone.
+set_board_info nullstone,lib "mips-clock.c"
+set_board_info nullstone,ticks_per_sec 3782018
+
+# Sometimes the board gets into a state where it always generates SIGFPE.
+#set_board_info unreliable 1
+
+# Can't pass arguments to the program.
+set_board_info noargs 1
+
+# No support for signals.
+set_board_info gdb,nosignals 1
+
+# We need to clear the floating-point status register before running.
+#set_board_info gdb_init_command "print/x \$fsr = 0x0"
--- /dev/null
+# This file is unnecessary, but we'll keep it for now.
+# We're the same as the standard MIPS simulator.
+load_base_board_description "mips-sim";
--- /dev/null
+# The canonical unix board description.
+load_generic_config "unix";
+
+process_multilib_options "";
+
+set_board_info compiler "[find_gcc]";
+
+set_board_info bmk,use_alarm 1;
--- /dev/null
+load_base_board_description "cygmon";
+
+set_board_info testcase_timeout 30;
+
+proc ${board}_init { dest } {
+ global usparc_init_count;
+ set shell_prompt [board_info $dest shell_prompt];
+
+ if ![info exists usparc_init_count] {
+ set usparc_init_count 0;
+ } else {
+ incr usparc_init_count;
+ if { $usparc_init_count == 3 } {
+ return -1;
+ }
+
+ }
+ remote_close $dest;
+ set shell_id [remote_open $dest];
+ if { $shell_id == "" || $shell_id < 0 } {
+ return [remote_reboot $dest];
+ } else {
+ remote_binary $dest;
+ remote_send $dest "\n";
+ set got_one 0;
+ remote_expect $dest 5 {
+ -re "$shell_prompt" { set got_one 1; exp_continue; }
+ default {
+ if { ! $got_one } {
+ remote_close $dest;
+ return [remote_reboot $dest];
+ }
+ }
+ }
+ remote_send $dest "m \[15\]1fff1001f00 32\n";
+ remote_expect $dest 5 {
+ -re "$shell_prompt" {
+ unset usparc_init_count;
+ remote_close $dest;
+ return 0;
+ }
+ default {
+ remote_close $dest;
+ return [remote_reboot $dest];
+ }
+ }
+ }
+}
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {v850-elf}
+
+# Load the generic configuration for this board. This will define any
+# routines needed by the tool to communicate with the board.
+load_generic_config "sim"
+
+# We need this for find_gcc and *_include_flags/*_link_flags.
+load_base_board_description "basic-sim"
+
+# No multilib flags needed for this target.
+process_multilib_options ""
+
+setup_sim v850
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+set_board_info compiler "[find_gcc]"
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+# DDB linker script.
+set_board_info ldscript "";
+
+# The simulator doesn't return exit statuses and we need to indicate this;
+# the standard GCC wrapper will work with this target.
+set_board_info needs_status_wrapper 1
+# We can't pass arguments to programs.
+set_board_info noargs 1
+
+# And we don't support signals.
+set_board_info gdb,nosignals 1
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {mips64vr4100-elf mips64-elf}
+
+# It's a little-endian board.
+process_multilib_options "-EL -msoft-float"
+
+set_board_info startaddr "a0020000"
+set_board_info hex_startaddr "0xa0020000"
+
+# Load the generic configuration for this board. This will define a basic
+# set of routines needed by the tool to communicate with the board.
+load_generic_config "vr4100"
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+set_board_info compiler "[find_gcc]"
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+# DDB linker script.
+set_board_info ldscript "-Wl,-Tpmon.ld"
+
+# GDB doesn't return exit statuses and we need to indicate this;
+# the standard GCC wrapper will work with this target.
+set_board_info needs_status_wrapper 1
+
+# The GDB protocol used with this board.
+set_board_info gdb_protocol "ddb"
+
+set_board_info reboot_delay 10
+
+# This board is unreliable. If a test times out, the board should be
+# rebooted and the test re-run.
+set_board_info unreliable 1
--- /dev/null
+# DDB linker script.
+if { [board_info $board obj_format] == "ecoff" } {
+ set_board_info ldscript "-Wl,-Tddbecoff.ld"
+} else {
+ set_board_info ldscript "-Wl,-Tddb.ld"
+}
+
+# And the simulator doesn't reliably return exit statuses.
+set_board_info needs_status_wrapper 1
+
+# Otherwise, we're a standard MIPS config.
+load_base_board_description "mips64-sim";
--- /dev/null
+# DDB linker script.
+if { [board_info $board obj_format] == "ecoff" } {
+ set_board_info ldscript "-Wl,-Tddbecoff.ld"
+} else {
+ set_board_info ldscript "-Wl,-Tddb.ld"
+}
+
+# And the simulator doesn't reliably return exit statuses.
+set_board_info needs_status_wrapper 1
+
+# Otherwise, we're a standard MIPS config.
+load_base_board_description "mips64-sim";
--- /dev/null
+# Danger, Will Robinson! Settings in this file do not override
+# previous settings for the board being defined.
+
+# DDB linker script.
+if { [board_info $board obj_format] == "ecoff" } {
+ set_board_info ldscript "-Wl,-Tddbecoff.ld"
+} else {
+ set_board_info ldscript "-Wl,-Tddb.ld"
+}
+
+# This is needed for compiling nullstone.
+set_board_info nullstone,lib "mips-clock.c"
+set_board_info nullstone,ticks_per_sec 3782018
+
+# The GDB protocol used with this board.
+set_board_info gdb_protocol "ddb"
+
+# Otherwise, we're the same as a generic vr4300 board.
+load_base_board_description "vr4300";
--- /dev/null
+# DDB linker script.
+if { [board_info $board obj_format] == "ecoff" } {
+ set_board_info ldscript "-Wl,-Tddbecoff.ld"
+} else {
+ set_board_info ldscript "-Wl,-Tddb.ld"
+}
+
+# And the simulator doesn't reliably return exit statuses.
+set_board_info needs_status_wrapper 1
+
+# Otherwise, we're a standard MIPS config.
+load_base_board_description "mips64-sim";
--- /dev/null
+# Danger, Will Robinson! Settings in this file do not override
+# previous settings for the board being defined.
+
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {mips64vr4300-elf mips64-elf}
+
+# Load the generic configuration for this board. This will define a basic
+# set of routines needed by the tool to communicate with the board.
+load_generic_config "vr4300"
+
+# It's a little-endian board.
+process_multilib_options "little-endian"
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+set_board_info compiler "[find_gcc]"
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+# IDT linker script.
+set_board_info ldscript "-Wl,-Tidt.ld"
+
+# GDB doesn't return exit statuses and we need to indicate this;
+# the standard GCC wrapper will work with this target.
+set_board_info needs_status_wrapper 1
+
+# The GDB protocol used with this board.
+set_board_info gdb_protocol "mips"
+
+# This board is unreliable. If a test times out, the board should be
+# rebooted and the test re-run.
+set_board_info unreliable 1
+
+# Can't pass arguments to the program.
+set_board_info noargs 1
+
+# No support for signals.
+set_board_info gdb,nosignals 1
+
+# We need to clear the floating-point status register before running.
+# This command will be sent after connecting to the board.
+set_board_info gdb_init_command "print/x \$fsr = 0x0"
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {mips64vr5000-elf mips64-elf}
+
+# Load the generic configuration for this board. This will define a basic
+# set of routines needed by the tool to communicate with the board.
+load_generic_config "vr5000";
+
+# It's a big-endian board.
+process_multilib_options "big-endian"
+
+# We only support newlib on this target. We assume that all multilib
+# options have been specified before we get here.
+set_board_info compiler "[find_gcc]"
+set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]"
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]"
+# DDB linker script.
+set_board_info ldscript "-Wl,-Tddb.ld";
+
+# GDB doesn't return exit statuses and we need to indicate this;
+# the standard GCC wrapper will work with this target.
+set_board_info needs_status_wrapper 1;
+
+# The GDB protocol used with this board.
+set_board_info gdb_protocol "ddb";
+
+# This is needed for compiling nullstone.
+set_board_info nullstone,lib "mips-clock.c"
+set_board_info nullstone,ticks_per_sec 3782018
+
+# Sometimes the board gets into a state where it always generates SIGFPE.
+set_board_info unreliable 1
+
+# Can't pass arguments to the program.
+set_board_info noargs 1
+
+# No support for signals.
+set_board_info gdb,nosignals 1
+
+# We need to clear the floating-point status register before running.
+set_board_info gdb_init_command "print/x \$fsr = 0x0"
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {mips-vxworks5.3}
+
+# Load the generic configuration for this board. This will define any
+# routines needed by the tool to communicate with the board.
+load_generic_config "vxworks";
+
+# No multilib flags by default.
+process_multilib_options "";
+
+# The compiler used to build for this board. Note that this has nothing to do
+# with what compiler is tested when testing gcc.
+set_board_info compiler "[find_gcc]";
+
+# These are probably wrong.
+set_board_info cflags "-EL";
+# vxworks 5.1 needs the executable to be relinkable.
+set_board_info ldflags "-nostdlib -r";
+set_board_info libs "-lgcc";
+
+# No linker script needed.
+set_board_info ldscript "";
+
+# GDB needs to use "target vxworks" to talk to the board.
+set_board_info gdb_protocol "vxworks";
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {m68k-vxworks5.1 m68k-vxworks5.2}
+
+# Load the generic configuration for this board. This will define any
+# routines needed by the tool to communicate with the board.
+load_generic_config "vxworks";
+
+# No multilib flags by default.
+process_multilib_options "";
+
+# The compiler used to build for this board. Note that this has nothing to do
+# with what compiler is tested when testing gcc.
+set_board_info compiler "[find_gcc]";
+
+# These are probably wrong.
+set_board_info cflags "";
+# vxworks 5.1 needs the executable to be relinkable.
+set_board_info ldflags "-nostdlib -r";
+set_board_info libs "-lgcc";
+
+# No linker script needed.
+set_board_info ldscript "";
+
+# GDB needs to use "target vxworks" to talk to the board.
+set_board_info gdb_protocol "vxworks";
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {i960-vxworks5.1 i960-vxworks5.2}
+
+# Load the generic configuration for this board. This will define any
+# routines needed by the tool to communicate with the board.
+load_generic_config "vxworks";
+
+# No multilib flags by default.
+process_multilib_options "";
+
+# The compiler used to build for this board. Note that this has nothing to do
+# with what compiler is tested when testing gcc.
+set_board_info compiler "[find_gcc]";
+
+# These are probably wrong, but at least it is configurable now.
+if { [board_info $board cpu] == "I960CA" } {
+ set_board_info cflags "-mca";
+} else {
+ set_board_info cflags "";
+}
+# vxworks 5.1 needs the executable to be relinkable.
+set_board_info ldflags "-nostdlib -r";
+set_board_info libs "-lgcc";
+
+# No linker script needed.
+set_board_info ldscript "";
+
+# GDB needs to use "target vxworks" to talk to the board.
+set_board_info gdb_protocol "vxworks";
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {sparc-vxworks5.1 sparc-vxworks5.2}
+
+# Load the generic configuration for this board. This will define any
+# routines needed by the tool to communicate with the board.
+load_generic_config "vxworks";
+
+# No multilib flags by default.
+process_multilib_options "";
+
+# The compiler used to build for this board. Note that this has nothing to do
+# with what compiler is tested when testing gcc.
+set_board_info compiler "[find_gcc]";
+
+# These are probably right.
+set_board_info cflags "";
+# vxworks 5.1 needs the executable to be relinkable.
+set_board_info ldflags "-nostdlib -r";
+set_board_info libs "-lgcc";
+
+# No linker script needed.
+set_board_info ldscript "";
+
+# GDB needs to use "target vxworks" to talk to the board.
+set_board_info gdb_protocol "vxworks";
--- /dev/null
+load_base_board_description "cygmon";
+
+# Default to ELF.
+if { [board_info $board obj_format] == "a.out" } {
+ set_board_info gdb,start_symbol "_start"
+} elseif { [board_info $board obj_format] == "coff" } {
+ set_board_info gdb,start_symbol "__start"
+} else {
+ set_board_info gdb,start_symbol "__start"
+}
+
--- /dev/null
+# This is a list of toolchains that are supported on this board.
+set_board_info target_install {xscale-elf}
+
+# Load the generic configuration for this board. This will define a
+# set of generic routines used by the tool to communicate with the
+# board.
+load_generic_config "cygmon";
+
+# It needs no multilib flags by default.
+process_multilib_options ""
+
+set_board_info compiler "[find_gcc]";
+set_board_info cflags "[newlib_include_flags] [libgloss_include_flags]";
+set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags] [board_info $board addl_link_flags]";
+
+# CygMON linker script.
+
+if {[string compare [board_info $board boardtype] "xaret"] == 0} {
+ set_board_info ldscript "-specs=xaret.specs"
+} elseif {[string compare [board_info $board boardtype] "iq80310"] == 0} {
+ set_board_info ldscript "-specs=iq80310.specs"
+}
+
+# Standard remote protocol.
+set_board_info gdb_protocol "remote";
+# We can't do input in GDB (yet! HA!). It *will* do output, hurrah.
+set_board_info gdb,noinferiorio 1;
+# Or pass arguments.
+set_board_info gdb,noargs 1;
+set_board_info noargs 1;
+# Or do signals.
+set_board_info gdb,nosignals 1;
+
+set_board_info shell_prompt "cygmon>"
+
+set_board_info use_gdb_stub 1;
+set_board_info use_cygmon 1
--- /dev/null
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999
+# Free Software Foundation, Inc.
+#
+# This file 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.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Written by Per Bothner <bothner@cygnus.com>.
+# The master version of this file is at the FSF in /home/gd/gnu/lib.
+# Please send patches to the Autoconf mailing list <autoconf@gnu.org>.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit system type (host/target name).
+#
+# Only a few systems have been added to this list; please add others
+# (but try to keep the structure clean).
+#
+
+# Use $HOST_CC if defined. $CC may point to a cross-compiler
+if test x"$CC_FOR_BUILD" = x; then
+ if test x"$HOST_CC" != x; then
+ CC_FOR_BUILD="$HOST_CC"
+ else
+ if test x"$CC" != x; then
+ CC_FOR_BUILD="$CC"
+ else
+ CC_FOR_BUILD=cc
+ fi
+ fi
+fi
+
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 8/24/94.)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+dummy=dummy-$$
+trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ alpha:OSF1:*:*)
+ if test $UNAME_RELEASE = "V4.0"; then
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ fi
+ # A Vn.n version is a released version.
+ # A Tn.n version is a released field test version.
+ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+ cat <<EOF >$dummy.s
+ .globl main
+ .ent main
+main:
+ .frame \$30,0,\$26,0
+ .prologue 0
+ .long 0x47e03d80 # implver $0
+ lda \$2,259
+ .long 0x47e20c21 # amask $2,$1
+ srl \$1,8,\$2
+ sll \$2,2,\$2
+ sll \$0,3,\$0
+ addl \$1,\$0,\$0
+ addl \$2,\$0,\$0
+ ret \$31,(\$26),1
+ .end main
+EOF
+ $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
+ if test "$?" = 0 ; then
+ ./$dummy
+ case "$?" in
+ 7)
+ UNAME_MACHINE="alpha"
+ ;;
+ 15)
+ UNAME_MACHINE="alphaev5"
+ ;;
+ 14)
+ UNAME_MACHINE="alphaev56"
+ ;;
+ 10)
+ UNAME_MACHINE="alphapca56"
+ ;;
+ 16)
+ UNAME_MACHINE="alphaev6"
+ ;;
+ esac
+ fi
+ rm -f $dummy.s $dummy
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+ exit 0 ;;
+ Alpha\ *:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # Should we change UNAME_MACHINE based on the output of uname instead
+ # of the specific Alpha model?
+ echo alpha-pc-interix
+ exit 0 ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit 0 ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-cbm-sysv4
+ exit 0;;
+ amiga:NetBSD:*:*)
+ echo m68k-cbm-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ amiga:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit 0 ;;
+ arc64:OpenBSD:*:*)
+ echo mips64el-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ arc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ hkmips:OpenBSD:*:*)
+ echo mips-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ pmax:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sgi:OpenBSD:*:*)
+ echo mips-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ wgrisc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:OS/390:*.*)
+ echo i370-ibm-openedition
+ exit 0 ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit 0;;
+ arm32:NetBSD:*:*)
+ echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ exit 0 ;;
+ SR2?01:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit 0;;
+ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit 0 ;;
+ NILE*:*:*:dcosx)
+ echo pyramid-pyramid-svr4
+ exit 0 ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ i86pc:SunOS:5.*:*)
+ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit 0 ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit 0 ;;
+ aushp:SunOS:*:*)
+ echo sparc-auspex-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ atari*:NetBSD:*:*)
+ echo m68k-atari-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ atari*:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ # The situation for MiNT is a little confusing. The machine name
+ # can be virtually everything (everything which is not
+ # "atarist" or "atariste" at least should have a processor
+ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
+ # to the lowercase version "mint" (or "freemint"). Finally
+ # the system name "TOS" denotes a system which is actually not
+ # MiNT. But MiNT is downward compatible to TOS, so this should
+ # be no problem.
+ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+ echo m68k-atari-mint${UNAME_RELEASE}
+ exit 0 ;;
+ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit 0 ;;
+ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit 0 ;;
+ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit 0 ;;
+ sun3*:NetBSD:*:*)
+ echo m68k-sun-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sun3*:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mac68k:NetBSD:*:*)
+ echo m68k-apple-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mac68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme88k:OpenBSD:*:*)
+ echo m88k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ powerpc:machten:*:*)
+ echo powerpc-apple-machten${UNAME_RELEASE}
+ exit 0 ;;
+ macppc:NetBSD:*:*)
+ echo powerpc-apple-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ RISC*:Mach:*:*)
+ echo mips-dec-mach_bsd4.3
+ exit 0 ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
+ echo clipper-intergraph-clix${UNAME_RELEASE}
+ exit 0 ;;
+ mips:*:*:UMIPS | mips:*:*:RISCos)
+ sed 's/^ //' << EOF >$dummy.c
+#ifdef __cplusplus
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+ #if defined (host_mips) && defined (MIPSEB)
+ #if defined (SYSTYPE_SYSV)
+ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_SVR4)
+ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+ #endif
+ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+ #endif
+ #endif
+ exit (-1);
+ }
+EOF
+ $CC_FOR_BUILD $dummy.c -o $dummy \
+ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+ && rm $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit 0 ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit 0 ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit 0 ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit 0 ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
+ -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit 0 ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit 0 ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit 0 ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit 0 ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i?86:AIX:*:*)
+ echo i386-ibm-aix
+ exit 0 ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ sed 's/^ //' << EOF >$dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+ echo rs6000-ibm-aix3.2.5
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit 0 ;;
+ *:AIX:*:4)
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=4.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit 0 ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit 0 ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit 0 ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit 0 ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit 0 ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit 0 ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit 0 ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit 0 ;;
+ 9000/[34678]??:HP-UX:*:*)
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/[678][0-9][0-9])
+ sed 's/^ //' << EOF >$dummy.c
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ ($CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy`
+ rm -f $dummy.c $dummy
+ esac
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit 0 ;;
+ 3050*:HI-UX:*:*)
+ sed 's/^ //' << EOF >$dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+ echo unknown-hitachi-hiuxwe2
+ exit 0 ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit 0 ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit 0 ;;
+ *9??*:MPE/iX:*:*)
+ echo hppa1.0-hp-mpeix
+ exit 0 ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit 0 ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit 0 ;;
+ i?86:OSF1:*:*)
+ if [ -x /usr/sbin/sysversion ] ; then
+ echo ${UNAME_MACHINE}-unknown-osf1mk
+ else
+ echo ${UNAME_MACHINE}-unknown-osf1
+ fi
+ exit 0 ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit 0 ;;
+ hppa*:OpenBSD:*:*)
+ echo hppa-unknown-openbsd
+ exit 0 ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ CRAY*X-MP:*:*:*)
+ echo xmp-cray-unicos
+ exit 0 ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE}
+ exit 0 ;;
+ CRAY*[A-Z]90:*:*:*)
+ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
+ exit 0 ;;
+ CRAY*TS:*:*:*)
+ echo t90-cray-unicos${UNAME_RELEASE}
+ exit 0 ;;
+ CRAY*T3E:*:*:*)
+ echo t3e-cray-unicosmk${UNAME_RELEASE}
+ exit 0 ;;
+ CRAY-2:*:*:*)
+ echo cray2-cray-unicos
+ exit 0 ;;
+ F300:UNIX_System_V:*:*)
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit 0 ;;
+ F301:UNIX_System_V:*:*)
+ echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
+ exit 0 ;;
+ hp3[0-9][05]:NetBSD:*:*)
+ echo m68k-hp-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ hp300:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ i?86:BSD/386:*:* | i?86:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:FreeBSD:*:*)
+ if test -x /usr/bin/objformat; then
+ if test "elf" = "`/usr/bin/objformat`"; then
+ echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'`
+ exit 0
+ fi
+ fi
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit 0 ;;
+ *:NetBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ exit 0 ;;
+ *:OpenBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ exit 0 ;;
+ i*:CYGWIN*:*)
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit 0 ;;
+ i*:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
+ exit 0 ;;
+ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+ # How do we know it's Interix rather than the generic POSIX subsystem?
+ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+ # UNAME_MACHINE based on the output of uname instead of i386?
+ echo i386-pc-interix
+ exit 0 ;;
+ i*:UWIN*:*)
+ echo ${UNAME_MACHINE}-pc-uwin
+ exit 0 ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin
+ exit 0 ;;
+ prep*:SunOS:5.*:*)
+ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ *:GNU:*:*)
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit 0 ;;
+ *:Linux:*:*)
+ # uname on the ARM produces all sorts of strangeness, and we need to
+ # filter it out.
+ case "$UNAME_MACHINE" in
+ armv*) UNAME_MACHINE=$UNAME_MACHINE ;;
+ arm* | sa110*) UNAME_MACHINE="arm" ;;
+ esac
+
+ # The BFD linker knows what the default object file format is, so
+ # first see if it will tell us. cd to the root directory to prevent
+ # problems with other programs or directories called `ld' in the path.
+ ld_help_string=`cd /; ld --help 2>&1`
+ ld_supported_emulations=`echo $ld_help_string \
+ | sed -ne '/supported emulations:/!d
+ s/[ ][ ]*/ /g
+ s/.*supported emulations: *//
+ s/ .*//
+ p'`
+ case "$ld_supported_emulations" in
+ i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;;
+ i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;;
+ sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
+ armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
+ m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
+ elf32ppc | elf32ppclinux)
+ # Determine Lib Version
+ cat >$dummy.c <<EOF
+#include <features.h>
+#if defined(__GLIBC__)
+extern char __libc_version[];
+extern char __libc_release[];
+#endif
+main(argc, argv)
+ int argc;
+ char *argv[];
+{
+#if defined(__GLIBC__)
+ printf("%s %s\n", __libc_version, __libc_release);
+#else
+ printf("unkown\n");
+#endif
+ return 0;
+}
+EOF
+ LIBC=""
+ $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
+ if test "$?" = 0 ; then
+ ./$dummy | grep 1\.99 > /dev/null
+ if test "$?" = 0 ; then
+ LIBC="libc1"
+ fi
+ fi
+ rm -f $dummy.c $dummy
+ echo powerpc-unknown-linux-gnu${LIBC} ; exit 0 ;;
+ esac
+
+ if test "${UNAME_MACHINE}" = "alpha" ; then
+ sed 's/^ //' <<EOF >$dummy.s
+ .globl main
+ .ent main
+ main:
+ .frame \$30,0,\$26,0
+ .prologue 0
+ .long 0x47e03d80 # implver $0
+ lda \$2,259
+ .long 0x47e20c21 # amask $2,$1
+ srl \$1,8,\$2
+ sll \$2,2,\$2
+ sll \$0,3,\$0
+ addl \$1,\$0,\$0
+ addl \$2,\$0,\$0
+ ret \$31,(\$26),1
+ .end main
+EOF
+ LIBC=""
+ $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
+ if test "$?" = 0 ; then
+ ./$dummy
+ case "$?" in
+ 7)
+ UNAME_MACHINE="alpha"
+ ;;
+ 15)
+ UNAME_MACHINE="alphaev5"
+ ;;
+ 14)
+ UNAME_MACHINE="alphaev56"
+ ;;
+ 10)
+ UNAME_MACHINE="alphapca56"
+ ;;
+ 16)
+ UNAME_MACHINE="alphaev6"
+ ;;
+ esac
+
+ objdump --private-headers $dummy | \
+ grep ld.so.1 > /dev/null
+ if test "$?" = 0 ; then
+ LIBC="libc1"
+ fi
+ fi
+ rm -f $dummy.s $dummy
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
+ elif test "${UNAME_MACHINE}" = "mips" ; then
+ cat >$dummy.c <<EOF
+#ifdef __cplusplus
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+#ifdef __MIPSEB__
+ printf ("%s-unknown-linux-gnu\n", argv[1]);
+#endif
+#ifdef __MIPSEL__
+ printf ("%sel-unknown-linux-gnu\n", argv[1]);
+#endif
+ return 0;
+}
+EOF
+ $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+ else
+ # Either a pre-BFD a.out linker (linux-gnuoldld)
+ # or one that does not give us useful --help.
+ # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
+ # If ld does not provide *any* "supported emulations:"
+ # that means it is gnuoldld.
+ echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
+ test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
+
+ case "${UNAME_MACHINE}" in
+ i?86)
+ VENDOR=pc;
+ ;;
+ *)
+ VENDOR=unknown;
+ ;;
+ esac
+ # Determine whether the default compiler is a.out or elf
+ cat >$dummy.c <<EOF
+#include <features.h>
+#ifdef __cplusplus
+ int main (int argc, char *argv[]) {
+#else
+ int main (argc, argv) int argc; char *argv[]; {
+#endif
+#ifdef __ELF__
+# ifdef __GLIBC__
+# if __GLIBC__ >= 2
+ printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
+# else
+ printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
+# endif
+# else
+ printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
+# endif
+#else
+ printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
+#endif
+ return 0;
+}
+EOF
+ $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0
+ rm -f $dummy.c $dummy
+ fi ;;
+# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
+# are messed up and put the nodename in both sysname and nodename.
+ i?86:DYNIX/ptx:4*:*)
+ echo i386-sequent-sysv4
+ exit 0 ;;
+ i?86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit 0 ;;
+ i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
+ else
+ echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ i?86:*:5:7*)
+ UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) && UNAME_MACHINE=i586
+ (/bin/uname -X|egrep '^Machine.*Pent.*II' >/dev/null) && UNAME_MACHINE=i686
+ (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) && UNAME_MACHINE=i585
+ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}${UNAME_VERSION}-sysv${UNAME_RELEASE}
+ exit 0 ;;
+ i?86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \
+ && UNAME_MACHINE=i686
+ (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \
+ && UNAME_MACHINE=i686
+ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit 0 ;;
+ pc:*:*:*)
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i386.
+ echo i386-pc-msdosdjgpp
+ exit 0 ;;
+ Intel:Mach:3*:*)
+ echo i386-pc-mach3
+ exit 0 ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit 0 ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit 0 ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit 0 ;;
+ M68*:*:R3V[567]*:*)
+ test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+ 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
+ OS_REL=''
+ test -r /etc/.relid \
+ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4 && exit 0 ;;
+ m68*:LynxOS:2.*:*)
+ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit 0 ;;
+ i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*)
+ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ TSUNAMI:LynxOS:2.*:*)
+ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
+ echo rs6000-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ SM[BE]S:UNIX_SV:*:*)
+ echo mips-dde-sysv${UNAME_RELEASE}
+ exit 0 ;;
+ RM*:ReliantUNIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit 0 ;;
+ PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit 0 ;;
+ *:UNIX_System_V:4*:FTX*)
+ # From Gerald Hewes <hewes@openmarket.com>.
+ # How about differentiating between stratus architectures? -djm
+ echo hppa1.1-stratus-sysv4
+ exit 0 ;;
+ *:*:*:FTX*)
+ # From seanf@swdc.stratus.com.
+ echo i860-stratus-sysv4
+ exit 0 ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit 0 ;;
+ news*:NEWS-OS:*:6*)
+ echo mips-sony-newsos6
+ exit 0 ;;
+ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+ if [ -d /usr/nec ]; then
+ echo mips-nec-sysv${UNAME_RELEASE}
+ else
+ echo mips-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit 0 ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit 0 ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit 0 ;;
+ SX-4:SUPER-UX:*:*)
+ echo sx4-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ SX-5:SUPER-UX:*:*)
+ echo sx5-nec-superux${UNAME_RELEASE}
+ exit 0 ;;
+ Power*:Rhapsody:*:*)
+ echo powerpc-apple-rhapsody${UNAME_RELEASE}
+ exit 0 ;;
+ *:Rhapsody:*:*)
+ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+ exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+ printf ("vax-dec-bsd\n"); exit (0);
+#else
+ printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0
+rm -f $dummy.c $dummy
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ c34*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ c38*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ c4*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ esac
+fi
+
+#echo '(Unable to guess system type)' 1>&2
+
+exit 1
--- /dev/null
+The files in this directory define a basic set of functionality for each
+board. They are loaded by calling "load_generic_config", normally done
+as part of the baseboard description for a given board.
+
+This functionality is a partial replacement for the tool-specific
+configuration previously found in the testsuite/config directory. Note
+that no tool-specific actions are defined here; they still need to be
+defined by the tool-specific config files. However, for tools that
+simply wish to download and execute programs on a board, the
+functionality here should be sufficient.
+
+The functions that can be defined are:
+
+${board}_open
+${board}_close
+${board}_exec
+${board}_binary
+${board}_reboot
+${board}_download
+${board}_upload
+${board}_transmit
+${board}_send
+${board}_file
+${board}_spawn
+${board}_load
+
+Normally these functions are invoked indirectly by the testcases when
+they invoke the remote_xxx version of the function.
+
+The ${board}_xxx functions will be called in preference to the default
+versions (or the ones specified by the "connect" protocol in the board
+description). However, the version defined by the "connect" protocol
+are still accessible by calling remote_raw_xxx, which will ignore any
+board-specific or generic versions of these functions.
--- /dev/null
+# Copyright (C) 1997 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+load_generic_config "gdb-comm";
--- /dev/null
+# Copyright (C) 1997 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+load_generic_config "gdb-comm";
--- /dev/null
+# Copyright (C) 1997 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+#
+# reboot_hook -- called to reboot a target board. Returns 1 on
+# success, 0 otherwise.
+#
+proc reboot_via_x10 { dest } {
+ if [board_info $dest exists name] {
+ set dest [board_info $dest name];
+ }
+
+ if [board_info $dest exists x10] {
+ set x10 [board_info $dest x10];
+ verbose "rebooting x10 unit $x10" 1
+ rsh_exec rtl "/usr/unsupported/bin/x10-hellcab unit $x10 off"
+ sleep 2
+ rsh_exec rtl "/usr/unsupported/bin/x10-hellcab unit $x10 on"
+ sleep 2
+ return 1;
+ }
+ return 0;
+}
+
+proc ${board}_reboot { args } {
+ if { [llength $args] > 0} {
+ set dest [lindex $args 0];
+ } else {
+ set dest target;
+ }
+ return [reboot_via_x10 $dest];
+}
--- /dev/null
+# Copyright (C) 1994, 1996, 1997 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+# This file was written by Bob Manson (manson@cygnus.com)
+# based on earlier work by JT Conklin (jtc@cygnus.com)
+
+#
+# base68k_load -- load the program and execute it
+#
+
+proc base68k_ld { dest prog } {
+ global tmpdir
+
+ set shell_prompt [board_info $dest shell_prompt]
+
+ if ![file exists $prog] then {
+ verbose -log "$prog does not exist."
+ return "untested"
+ }
+ if [is_remote host] {
+ set prog [remote_download host $prog];
+ if { $prog == "" } {
+ verbose -log "Unable to download $prog to host.";
+ return "untested";
+ }
+ }
+
+ if [board_info $dest exists objcopy] {
+ set OBJCOPY [board_info $dest objcopy];
+ set exec_file "${prog}.srec"
+ set objcopy_args ""
+ if [board_info $dest exists use_vma_offset] {
+ set objcopy_args "--adjust-vma=[board_info $dest hex_startaddr]";
+ }
+ set status [remote_exec host "$OBJCOPY $objcopy_args -O srec $prog ${prog}.srec"]
+ set result [lindex $status 1];
+ regsub -all -- "\[\r\n\]*" $result "" result
+ if { $result != "" || [lindex $status 0] != 0 } {
+ warning "Got \"$result\" from $OBJCOPY"
+ verbose -log "Couldn't convert to srecord for downloading"
+ remote_close $dest;
+ return "untested"
+ } else {
+ verbose "Converted $prog to an srecord." 2
+ }
+ } else {
+ set exec_file $prog
+ }
+
+ set value 0;
+ if ![board_info $dest exists fileid] {
+ while { $value < 2 } {
+ set rom68k_shell_id [remote_open $dest]
+ if { $rom68k_shell_id < 0 } {
+ if { $value > 0 || ![remote_reboot $dest] } {
+ verbose -log "$prog not executed, couldn't connect to target."
+ return "untested"
+ }
+ incr value;
+ } else {
+ break;
+ }
+ }
+ # dbug has problems if we go into binary mode, so this allows us to
+ # disable entry into binary mode.
+ if ![board_info $dest exists no_binary_mode] {
+ remote_binary $dest;
+ }
+ }
+
+ # if we built the srecord on a remote host, copy it back here so we
+ # can load it
+ if [is_remote host] {
+ global objdir
+ set exec_file [remote_upload host ${exec_file} "${objdir}/a.out"];
+ }
+
+ set got_p 0;
+ for { set tries 0; } { (! $got_p) && $tries < 5 } { incr tries } {
+ remote_send $dest "\r\n\r\n"
+ remote_expect $dest 5 {
+ -re "${shell_prompt}$" {
+ verbose "Got prompt."
+ set result 0
+ set got_p 1;
+ }
+ timeout {
+ warning "Never got prompt."
+ }
+ }
+ if { ! $got_p } {
+ if $tries<=4 then {
+ if { $tries == 3 } then {
+ remote_reboot $dest;
+ } else {
+ remote_send $dest "\r\n"
+ }
+ }
+ }
+ }
+
+ # We need to do this in case the connection to the remote side is
+ # scrogged -- the remote_expect above will fail in a lot of
+ # non-clean ways.
+ if { ! $got_p } {
+ remote_close $dest;
+ remote_reboot $dest;
+ return "unresolved";
+ } else {
+ # Flush out any remaining cruft.
+ remote_expect $dest 2 {
+ timeout { }
+ -re ".+" { exp_continue }
+ default { }
+ }
+ }
+
+ if [board_info $dest exists download_command] {
+ # Load the program.
+ remote_send $dest "\r\n";
+ # dbug has problems sending download command immediately after a
+ # newline, so we wait for the prompt to come back first.
+ remote_expect $dest 5 {
+ -re "${shell_prompt}$" {
+ verbose -log "Got prompt."
+ }
+ timeout {
+ warning "Never got prompt."
+ }
+ }
+ remote_send $dest [board_info $dest download_command]
+ if [board_info $dest exists download_response] {
+ remote_expect $dest 5 {
+ [board_info $dest download_response] { }
+ timeout {
+ perror "Download command never responded."
+ return "unresolved";
+ }
+ }
+ }
+ }
+
+ verbose "Writing records to target..."
+ set status [remote_transmit $dest $exec_file];
+ if { $exec_file != $prog } {
+ remote_file build delete $exec_file
+ }
+ if { $status != 0 } {
+ remote_close $dest;
+ verbose -log "Transmission of $exec_file to the target failed." 3
+ return "unresolved"
+ }
+ verbose "Wrote records to target...waiting for prompt."
+ remote_send $dest "\n"
+ set got_p 0;
+ remote_expect $dest 50 {
+ -re "$shell_prompt$" {
+ verbose "Got prompt."
+ set got_p 1;
+ }
+ timeout { }
+ }
+ if { $got_p } {
+ # Flush any remaining cruft. 2 seconds may be too long, dunno.
+ remote_expect $dest 2 {
+ timeout { }
+ -re ".+" { exp_continue }
+ default { }
+ }
+ return "pass";
+ } else {
+ remote_close $dest;
+ remote_reboot $dest;
+ return "unresolved";
+ }
+
+}
+
+
+proc base68k_spawn { dest prog args } {
+ set shell_prompt [board_info $dest shell_prompt];
+
+ set result [remote_ld $dest $prog];
+ if { $result != "pass" } {
+ return [list $result ""];
+ }
+
+ if [board_info $dest exists startaddr] {
+ set go_command "[board_info $dest go_command] [board_info $dest startaddr]";
+ } else {
+ set go_command "[board_info $dest go_command]";
+ }
+
+ verbose "Sending $go_command, waiting for results.";
+ remote_send $dest "${go_command}\n";
+ return { "pass" "" };
+}
+
+proc base68k_wait { dest timeout } {
+ set shell_prompt [board_info $dest shell_prompt];
+ set noappend 0;
+ set result -1;
+
+ set output "";
+
+ remote_expect $dest $timeout {
+ -re [board_info $dest go_response] {
+ append output $expect_out(buffer);
+ set noappend 1;
+ set result 0;
+ exp_continue -continue_timer;
+ }
+ -re "$shell_prompt$" {
+ verbose "Got prompt.";
+ set result 0;
+ }
+ -re "\[\r\n\]+" {
+ if { ! $noappend } {
+ append output $expect_out(buffer);
+ if { [string length $output] < 512000 } {
+ exp_continue -continue_timer;
+ } else {
+ set result -1;
+ }
+ }
+ }
+ timeout {
+ warning "Nothing ever came back.";
+ set result -1;
+ }
+ }
+
+ if [board_info $dest exists output_end] {
+ regsub "[board_info $dest output_end]" "$output" "\n" output;
+ }
+
+ # There has got to be a better way. (We need to do this in order to remove
+ # the echoed "go command".
+ if [board_info $dest exists startaddr] {
+ set go_command "[board_info $dest go_command] [board_info $dest startaddr]";
+ } else {
+ set go_command "[board_info $dest go_command]";
+ }
+
+ regsub "^.*$go_command\[\r\n\]*" "$output" "" output;
+ regsub "^.*$go_command\[\r\n\]*" "$output" "" output;
+
+ # We always want to check for a status, even if there was a funky weird
+ # failure above.
+ set status [check_for_board_status output];
+ if { $result == 0 } {
+ set result $status;
+ verbose -log "exit status was $status";
+ }
+ # A negative value indicates that we should reboot. Otherwise, return
+ # the exit status from the program if we got one (and we should have).
+ return [list $result "$output"];
+}
+
+proc base68k_load { dest prog args } {
+ global base68k_retry
+
+ set shell_prompt [board_info $dest shell_prompt];
+
+ if { [llength $args] > 0 } {
+ for { set x 0; } { $x < [llength $args] } { incr x ; } {
+ if { [lindex $args $x] != "" } {
+ verbose -log "Cannot pass parameters or input file to this target";
+ return [list "unsupported" ""];
+ }
+ }
+ }
+
+ set result [remote_spawn $dest $prog];
+ if { [lindex $result 0] != "pass" } {
+ return $result;
+ }
+
+ # FIXME: The value 360 below should be a parameter.
+
+ set result [remote_wait $dest 360];
+ set output [lindex $result 1];
+ set status [lindex $result 0];
+
+ verbose "output from board is $output"
+
+ # Make sure there's a newline before the PASS/FAIL/whatever for the log.
+ send_log "\n"
+
+ if { $status > 0 } {
+ return [list "fail" $output];
+ } elseif { $status == 0 } {
+ return [list "pass" $output];
+ } else {
+ if [info exists base68k_retry] {
+ return [list "fail" $output];
+ }
+ set base68k_retry 1;
+ remote_reboot $dest;
+ set status [eval base68k_load \{$dest\} \{$prog\} $args];
+ unset base68k_retry;
+ return $status;
+ }
+}
+
+set_board_info protocol "base68k";
+set_board_info send_initial_cr 1
--- /dev/null
+# Copyright (C) 1997 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-dejagnu@prep.ai.mit.edu
+
+# This file was written by Bob Manson (manson@cygnus.com).
+
+load_generic_config "base68k";
+
+set_board_info shell_prompt "\[0-9\]+Bug>"
+set_board_info download_command "lo 0\r"
+set_board_info download_response "lo 0.*"
+set_board_info go_command "go"
+set_board_info go_response "\*\*\*EXIT code.*"
+set_board_info startaddr "10000"
--- /dev/null
+# Copyright (C) 1999 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-dejagnu@prep.ai.mit.edu
+
+# This file was written by Bob Manson (manson@cygnus.com).
+
+load_generic_config "base68k";
+
+set_board_info shell_prompt "dBUG> *"
+set_board_info download_command "dl\r\n"
+set_board_info download_response "*Escape to local*"
+set_board_info go_command "go"
+set_board_info go_response "\[*\]\[*\]\[*\] EXIT code \[^\r\n\]*\[\r\n\]"
+set_board_info startaddr "10000"
+set_board_info hex_startaddr "0x10000"
+set_board_info no_binary_mode 1
--- /dev/null
+# Copyright (C) 1997, 1998 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+load_generic_config "gdb-comm";
+
+set_board_info send_initial_cr 1;
--- /dev/null
+# Copyright (C) 1997 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+load_generic_config "gdb-comm";
--- /dev/null
+# Copyright (C) 1997, 1998 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+# This file was written by Bob Manson (manson@cygnus.com)
+
+# Reset the prompt to what GDB needs.
+proc ${board}_init { dest } {
+ global doing_ddb_init;
+
+ if ![info exists doing_ddb_init] {
+ set doing_ddb_init 1;
+
+ remote_close $dest;
+ for { set x 0; } { $x < 3 } { incr x; } {
+ set shell_id [remote_open $dest];
+ if { $shell_id == "" || $shell_id < 0 } {
+ remote_reboot $dest;
+ } else {
+ break;
+ }
+ }
+
+ set shell_prompt [board_info $dest shell_prompt];
+
+ remote_send $dest "\n";
+ remote_expect $dest 10 {
+ -re ".*PMON> $" {
+ remote_send $dest "set prompt \"$shell_prompt\"\n";
+ exp_continue;
+ }
+ -re ".*${shell_prompt}$" { }
+ }
+ remote_close $dest;
+ unset doing_ddb_init;
+ } else {
+ return;
+ }
+}
+
+proc ddb_ether_load { dest prog args } {
+ for { set x 0; } { $x < 3 } { incr x } {
+ set result [eval remote_spawn \{$dest\} \{$prog\} $args];
+ if { $result < 0 } {
+ remote_reboot $dest;
+ } else {
+ set result [remote_wait $dest 300];
+ set status [lindex $result 0];
+ set output [lindex $result 1];
+ if { $status >= 0 } {
+ if { $status > 0 } {
+ return [list "fail" $output];
+ } else {
+ return [list "pass" $output];
+ }
+ }
+ }
+ }
+ return [list "fail" ""];
+}
+
+proc ddb_ether_ld { dest prog } {
+ if ![board_info $dest exists tftpdir] {
+ perror "Must set_board_info tftpdir for [board_info $dest name]";
+ return "fail";
+ }
+
+ if ![board_info $dest exists fileid] {
+ set spawn_id [remote_open $dest];
+ if { $spawn_id == "" || $spawn_id < 0 } {
+ return "retry";
+ }
+ remote_binary $dest;
+ }
+
+ set shell_prompt [board_info $dest shell_prompt];
+
+ remote_send $dest "\n";
+ remote_expect $dest 10 {
+ -re ".*${shell_prompt}$" { }
+ default {
+ return "retry";
+ }
+ }
+ set basename "a.out.[pid]";
+ set file "[board_info $dest tftpdir]/$basename";
+ set file [remote_download build $prog $file];
+ if { $file == "" } {
+ perror "download to tftp area failed";
+ return "fail";
+ }
+ set state "pass";
+
+ remote_send $dest "boot /$basename\n";
+ set tries 0;
+ remote_expect $dest 30 {
+ -re "Loading.*Entry address is.*${shell_prompt}$" { }
+ -re "invalid executable.*${shell_prompt}$" {
+ incr tries;
+ if { $tries < 3 } {
+ sleep 2;
+ remote_send $dest "boot /$basename\n";
+ exp_continue;
+ }
+ }
+ -re ".*${shell_prompt}$" {
+ set state "fail";
+ }
+ default {
+ set state "fail";
+ }
+ }
+ remote_file build delete $file;
+ if { $state == "fail" } {
+ return $state;
+ }
+ return "pass";
+}
+
+proc ddb_ether_spawn { dest prog args } {
+ set state [ddb_ether_ld $dest $prog];
+
+ if { $state != "pass" } {
+ return -1;
+ }
+ remote_send $dest "g\n";
+ remote_expect $dest 5 {
+ -re "g\[\r\n\]\[\r\n\]?" { }
+ default { }
+ }
+
+ return [board_info $dest fileid];
+}
+
+proc ddb_ether_wait { dest timeout } {
+ set output "";
+ set shell_prompt [board_info $dest shell_prompt];
+
+ remote_expect $dest $timeout {
+ -re "^g\[\r\n\]\[\r\n\]?" {
+ if { $output != "" } {
+ append output $expect_out(buffer);
+ }
+ exp_continue;
+ }
+ -re "(.*)$shell_prompt" {
+ append output $expect_out(1,string);
+ set status [check_for_board_status output];
+ if { $status > 0 } {
+ return [list $status $output];
+ } else {
+ if [regexp "Exception Cause=" $output] {
+ remote_reboot $dest;
+ return [list -1 $output];
+ }
+ return [list 0 $output];
+ }
+ }
+ -re "\[\r\n\]+" {
+ append output $expect_out(buffer);
+ if { [string length $output] < 512000 } {
+ exp_continue;
+ } else {
+ return [list -1 ""];
+ }
+ }
+ default {
+ return [list -1 ""];
+ }
+ }
+}
+
+set_board_info send_initial_cr 1
+set_board_info protocol "ddb_ether"
+set_board_info shell_prompt "NEC010> "
--- /dev/null
+# Copyright (C) 1997 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+# This file was written by Bob Manson (manson@cygnus.com)
+
+# We use GDB to talk to a vr4300 board.
+load_generic_config "base68k";
+
+set_board_info shell_prompt "NEC010> ";
+set_board_info download_command "load tty0\n";
+set_board_info download_response "Downloading from";
+set_board_info go_command "g -e";
+set_board_info startaddr "a0100000"
+set_board_info hex_startaddr "0xa0100000"
+set_board_info go_response "(^|\[\r\n\])(Exception Cause|\[0-9a-z\]+ \[0-9a-z\]+ break|\\*\\*\\*EXIT code )\[^\r\n\]*\[\r\n\]"
+set_board_info output_end "\[\r\n\](Exception Cause|\[0-9a-z\]+ \[0-9a-z\]+ break).*$"
+
+# Reset the prompt to what GDB needs.
+proc ${board}_init { dest } {
+ global doing_ddb_init;
+ if [is_remote host] {
+ return;
+ }
+
+ if ![info exists doing_ddb_init] {
+ set doing_ddb_init 1;
+
+ for { set i 1; } { $i <= 3 } {incr i } {
+ remote_close $dest;
+ for { set x 0; } { $x < 3 } { incr x; } {
+ set shell_id [remote_open $dest];
+ if { $shell_id == "" || $shell_id < 0 } {
+ remote_reboot $dest;
+ } else {
+ break;
+ }
+ }
+
+ set count 0;
+ remote_send $dest "\n";
+ remote_expect $dest 20 {
+ -re ".*PMON> $" {
+ remote_send $dest "set prompt \"NEC010> \"\n";
+ exp_continue;
+ }
+ -re "NEC010> $" {
+ set i 10;
+ }
+ timeout { }
+ -re "0x0" {
+ count++;
+ if(count<5) {
+ exp_continue;
+ }
+ }
+ }
+ if { $i < 3 } {
+ remote_reboot $dest;
+ }
+ }
+ remote_close $dest;
+ unset doing_ddb_init;
+ } else {
+ return;
+ }
+}
+
+set_board_info send_initial_cr 1
+set_board_info dont_wait_for_prompt 1
+
+# If no output format is specified, use objcopy.
+if ![board_info $board exists output_format] {
+ set tempfil [lookfor_file $tool_root_dir binutils/objcopy];
+ if { $tempfil != "" } {
+ set_board_info objcopy $tempfil
+ } else {
+ set_board_info objcopy [transform objcopy]
+ }
+ unset tempfil
+}
--- /dev/null
+# Copyright (C) 1997, 1998, 1999 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+# This file was written by Bob Manson (manson@cygnus.com)
+
+#
+# Open a connection to the remote DOS host.
+#
+proc dos_open { dest args } {
+ global destbat_num
+
+ if ![info exists destbat_num] {
+ set destbat_num [pid];
+ }
+ if { [board_info $dest conninfo] == "" } {
+ global board_info;
+ set name [board_info $dest name];
+
+ set board_info($name,conninfo) "b${destbat_num}.bat";
+ incr destbat_num;
+ }
+
+ if [board_info $dest exists fileid] {
+ return [board_info $dest fileid];
+ }
+
+ verbose "doing a dos_open to $dest"
+
+ set shell_prompt [board_info $dest shell_prompt];
+
+ set shell_id [remote_raw_open $dest];
+
+ if { $shell_id == "" || $shell_id < 0 } {
+ return -1;
+ }
+
+ if [board_info $dest exists init_command] {
+ remote_send $dest "[board_info $dest init_command]\n";
+ remote_expect $dest 10 {
+ -re "$shell_prompt" { }
+ default {
+ perror "failed connection to DOS on $dest."
+ return -1;
+ }
+ }
+ }
+
+ if [board_info $dest exists ftp_directory] {
+ set dir [board_info $dest ftp_directory];
+ regsub -all "/" "$dir" "\\" dir;
+ remote_send $dest "cd $dir\n";
+ remote_expect $dest 10 {
+ -re "$shell_prompt" { }
+ default {
+ perror "failed connection to DOS on $dest."
+ return -1;
+ }
+ }
+ }
+
+ if [board_info $dest exists dos_dir] {
+ set dos_dir [board_info $dest dos_dir];
+ regsub -all "^(\[a-zA-Z]:).*$" "$dos_dir" "\\1" drive;
+ regsub -all "^\[a-zA-Z]:" "$dos_dir" "" dos_dir;
+ remote_send $dest "${drive}\n";
+ remote_expect $dest 10 {
+ -re "$shell_prompt" { }
+ default {
+ perror "failed connection to DOS on $dest."
+ return -1;
+ }
+ }
+ remote_send $dest "cd $dos_dir\n";
+ remote_expect $dest 10 {
+ -re "$shell_prompt" { }
+ default {
+ perror "failed connection to DOS on $dest."
+ return -1;
+ }
+ }
+ }
+
+ global target_alias
+ if [info exists target_alias] {
+ set talias $target_alias;
+ } else {
+ set talias "foo-bar"
+ }
+
+ global board_info;
+ if [board_info $dest exists name] {
+ set n [board_info $dest name];
+ } else {
+ set n $dest;
+ }
+ set board_info($n,fileid) $shell_id;
+
+ if [board_info $dest exists init_script] {
+ remote_exec $dest "[board_info $dest init_script] $talias"
+ }
+
+ verbose "Succeeded in connecting to DOS."
+ return $shell_id;
+}
+
+#
+# Close the connection to the remote host. If we're telnetting there, we
+# need to exit the connection first (ataman telnetd gets confused otherwise).
+#
+proc dos_close { dest args } {
+ if [board_info $dest exists fileid] {
+ if { [board_info $dest connect] == "telnet" } {
+ remote_send $dest "exit\n";
+ sleep 2;
+ }
+ return [remote_raw_close $dest];
+ }
+}
+
+proc dos_prep_command { dest cmdline } {
+ global board_info;
+
+ set name [board_info $dest name];
+ set shell_id [remote_open "$dest"];
+
+ set localbat "/tmp/b[pid].bat";
+ set remotebat [board_info $dest conninfo];
+
+ verbose "opened"
+ if { $shell_id != "" && $shell_id >= 0 } {
+ set fileid [open "$localbat" "w"];
+ puts -nonewline $fileid "@echo off\r\n$cmdline\r\nif errorlevel 1 echo *** DOSEXIT code 1\r\nif not errorlevel 1 echo *** DOSEXIT code 0\r\n\1a";
+ close $fileid;
+ set result [remote_download $dest $localbat $remotebat];
+ } else {
+ set result ""
+ }
+ remote_file build delete $localbat;
+ return $result;
+}
+
+#
+# Run CMDLINE on DESTHOST. We handle two cases; one is where we're at
+# a DOS prompt, and the other is where we're in GDB.
+# We run CMDLINE by creating a batchfile, downloading it, and then
+# executing it; this handles the case where the commandline is too
+# long for command.com to deal with.
+#
+
+proc dos_exec { dest program pargs inp outp } {
+ set cmdline "$program $pargs"
+
+ set shell_prompt [board_info $dest shell_prompt];
+
+ if { $inp != "" } {
+ set inp [remote_download $dest $inp inpfile];
+ if { $inp != "" } {
+ set inp " < $inp";
+ }
+ }
+
+ if { $outp != "" } {
+ set outpf " > tempout";
+ } else {
+ set outpf "";
+ }
+
+ verbose "cmdline is $cmdline$inp." 2
+
+ # Make a DOS batch file; we use @echo off so we don't have to see
+ # the DOS command prompts and such.
+ for { set i 0; } { $i < 2 } { incr i } {
+ set exit_status -1;
+ verbose "calling open"
+ set batfile [dos_prep_command $dest "$cmdline$inp$outpf"];
+ if { $batfile != "" } {
+ if { [dos_start_command $batfile $dest] == "" } {
+ # FIXME: The 300 below should be a parameter.
+ set result [remote_wait $dest 300];
+ set exit_status [lindex $result 0];
+ set output [lindex $result 1];
+ }
+ }
+ if { $exit_status >= 0 } {
+ if { $outp != "" } {
+ remote_upload $dest tempout $outp;
+ remote_file $dest delete tempout;
+ }
+ return [list $exit_status $output];
+ }
+ if { $exit_status != -2 } {
+ remote_close $dest;
+ remote_reboot $dest;
+ }
+ }
+ return [list -1 "program execution failed"];
+}
+
+#
+# Start CMDLINE executing on DEST.
+# There are two cases that we handle, one where we're at a DOS prompt
+# and the other is when the remote machine is running GDB.
+#
+
+proc dos_start_command { cmdline dest } {
+ set shell_prompt [board_info $dest shell_prompt];
+ set prefix ""
+ set ok 0;
+ for {set i 0;} {$i <= 2 && ! $ok} {incr i;} {
+ set shell_id [remote_open $dest];
+ if { $shell_id != "" && $shell_id > 0 } {
+ remote_send $dest "echo k\r";
+ remote_expect $dest 20 {
+ -re "\\(gdb\\)" {
+ set shell_prompt "\\(gdb\\)";
+ # gdb uses 'shell command'.
+ set prefix "shell ";
+ set ok 1;
+ }
+ -re "$shell_prompt" {
+ set ok 1;
+ }
+ default { }
+ }
+ }
+ if { ! $ok } {
+ remote_close $dest;
+ remote_reboot $dest;
+ }
+ }
+ if { ! $ok } {
+ return "unable to start command"
+ } else {
+ remote_send $dest "${prefix}${cmdline}\n";
+ remote_expect $dest 2 {
+ -re "${cmdline}\[\r\n\]\[\r\n\]?" { }
+ timeout { }
+ }
+ return "";
+ }
+}
+
+#
+# Send STRING to DEST, translating all LFs to CRs first, and sending one
+# line at a time because of strangeness with telnet in some circumstances.
+#
+
+proc dos_send { dest string } {
+ verbose "Sending '$string' to $dest" 2
+ # Convert LFs to CRs, 'cause that is what DOS wants to see.
+ set first 1
+ set string [string trimright $string "\r\n"]
+ foreach line [split $string "\r\n"] {
+ if {$first} {
+ set first 0
+ } else {
+ # small delay between lines, to keep from
+ # overwhelming the stupid telnet server.
+ sleep 1.0
+ }
+ remote_raw_send $dest "$line\r"
+ }
+}
+
+#
+# Spawn PROGRAM on DEST, and return the spawn_id associated with the
+# connection; we can only spawn one command at a time.
+#
+
+proc dos_spawn { dest program args } {
+ verbose "running $program on $dest"
+ set remotebat [dos_prep_command $dest $program];
+
+ for { set x 0; } { $x < 3 } { incr x } {
+ if { [dos_start_command $remotebat $dest] == "" } {
+ return [board_info $dest fileid];
+ }
+ remote_close $dest;
+ remote_reboot $dest;
+ }
+ return -1;
+}
+
+proc dos_wait { dest timeout } {
+ set output "";
+ set shell_prompt [board_info $dest shell_prompt];
+ set status 1;
+
+ verbose "waiting in dos_wait";
+ remote_expect $dest $timeout {
+ -re "(.*)\[*\]\[*\]\[*\] DOSEXIT code (\[0-9\]+)\[\r\n\]\[\r\n\]?" {
+ verbose "got exit status";
+ append output $expect_out(1,string);
+ set status $expect_out(2,string);
+ exp_continue;
+ }
+
+ -re "(.*)${shell_prompt}" {
+ append output $expect_out(1,string);
+ verbose "output from dos is:'$output'";
+ return [list $status $output];
+ }
+
+ -re "(.*)\\(gdb\\)" {
+ append output $expect_out(1,string);
+ return [list $status $output];
+ }
+
+ -re "In.*cygwin.*except" {
+ remote_close $dest;
+ remote_reboot $dest;
+ return [list -2 $output];
+ }
+
+ -re "\[\r\n\]+" {
+ # This is a bit obscure. We only want to put whole
+ # lines into the output string, because otherwise we
+ # might miss a prompt because we only got 1/2 of it the
+ # first time 'round. The other tricky bit is that
+ # expect_out(buffer) will contain everything before and including
+ # the matched pattern.
+ append output $expect_out(buffer);
+ exp_continue -continue_timer;
+ }
+
+ timeout {
+ warning "timeout in dos_wait";
+ if { [dos_interrupt_job $dest] == "" } {
+ return [list 1 $output];
+ }
+ }
+
+ eof {
+ warning "got EOF from dos host.";
+ }
+ }
+
+ remote_close $dest;
+
+ return [list -1 $output];
+}
+
+proc dos_load { dest prog args } {
+ global dos_dll_loaded;
+ set progargs "";
+ set inpfile "";
+ if { [llength $args] > 0 } {
+ set progargs [lindex $args 1];
+ }
+ if { [llength $args] > 1 } {
+ set inpfile [lindex $args 1];
+ }
+ if ![info exists dos_dll_loaded] {
+ if ![is_remote host] {
+ global target_alias;
+
+ set comp [get_multilibs];
+ if [file exists "${comp}/winsup/new-cygwin1.dll"] {
+ set dll "${comp}/winsup/new-cygwin1.dll";
+ set dll_name "cygwin1.dll";
+ } elseif [file exists "${comp}/winsup/new-cygwin.dll"] {
+ set dll "${comp}/winsup/new-cygwin.dll";
+ set dll_name "cygwin.dll";
+ } elseif [file exists ${comp}/lib/cygwin1.dll] {
+ set dll "${comp}/lib/cygwin1.dll";
+ set dll_name "cygwin1.dll";
+ } elseif [file exists ${comp}/lib/cygwin.dll] {
+ set dll "${comp}/lib/cygwin.dll";
+ set dll_name "cygwin.dll";
+ } else {
+ error "couldn't find cygwin.dll:$comp"
+ return "fail";
+ }
+ remote_download $dest $dll $dll_name
+ }
+ set dos_dll_loaded 1;
+ }
+ set remote_prog [remote_download $dest $prog "aout.exe"];
+ set result [remote_exec $dest $remote_prog $progargs $inpfile];
+ set status [lindex $result 0];
+ set output [lindex $result 1];
+ set status2 [check_for_board_status output];
+ if { $status2 >= 0 } {
+ set status $status2;
+ }
+ if { $status != 0 } {
+ set status "fail";
+ } else {
+ set status "pass";
+ }
+ return [list $status $output];
+}
+
+proc dos_file { dest op args } {
+ switch $op {
+ delete {
+ foreach x $args {
+ remote_exec $dest "del" "$x";
+ }
+ return;
+
+ }
+ default {
+ return [eval standard_file \{$dest\} \{$op\} $args];
+ }
+ }
+}
+
+#
+# Interrupt the current spawned command being run; the only tricky
+# part is that we have to handle the "Terminate batch job" prompt.
+#
+proc dos_interrupt_job { host } {
+ set shell_prompt [board_info $host shell_prompt];
+
+ remote_send $host "\003";
+ remote_expect $host 10 {
+ -re "Terminate batch job.*Y/N\[)\]\[?\] *$" {
+ remote_send $host "n\n";
+ exp_continue;
+ }
+ -re "$shell_prompt" {
+ return "";
+ }
+ -re ">" {
+ remote_send $host "\n";
+ exp_continue;
+ }
+ }
+ return "fail";
+}
+
+proc dos_copy_download { host localfile remotefile } {
+ remote_file build delete "[board_info $host local_dir]/$remotefile";
+ if [remote_file build exists $localfile] {
+ set result [remote_download build $localfile "[board_info $host local_dir]/$remotefile"];
+ if { $result != "" } {
+ remote_exec build "chmod" "a+rw $result";
+ return $remotefile;
+ }
+ } else {
+ return ""
+ }
+}
+
+proc dos_copy_upload { host remotefile localfile } {
+ remote_file build delete $localfile;
+ if [file exists "[board_info $host local_dir]/$remotefile"] {
+ set result [remote_download build "[board_info $host local_dir]/$remotefile" $localfile];
+ } else {
+ set result "";
+ }
+ if { $result != "" } {
+ remote_exec build "chmod" "a+rw $result";
+ return $result;
+ }
+}
+
+proc dos_copy_file { dest op args } {
+ if { $op == "delete" } {
+ set file "[board_info $dest local_dir]/[lindex $args 0]";
+ remote_file build delete $file;
+ }
+}
+
+set_board_info protocol "dos";
+set_board_info shell_prompt "(^|\[\r\n\])\[a-zA-Z\]:\[^\r\n\]*>\[ \t\]*$";
+set_board_info needs_status_wrapper 1
--- /dev/null
+# Copyright (C) 1998 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gcc@prep.ai.mit.edu
+
+# For Densan MIPS boards we use gdb to load and execute programs.
+
+load_generic_config "gdb-comm";
--- /dev/null
+# Copyright (C) 1996, 1997, 1998 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+# Note: some of this was cribbed from the gdb testsuite since we need
+# to use some pretty standard gdb features (breakpoints in particular).
+
+# Load up some standard junk.
+load_lib remote.exp
+
+if ![info exists board] {
+ perror "$board must be set before loading gdb-comm"
+}
+
+# The number of times we've tried to download/execute this executable.
+set try_again 0
+
+#
+# Delete all breakpoints and verify that they were deleted. If anything
+# goes wrong, return -1.
+#
+proc gdb_comm_delete_breakpoints {} {
+ global gdb_prompt
+
+ remote_send host "delete breakpoints\n";
+ remote_expect host 10 {
+ -re "Delete all breakpoints.*y or n. $" {
+ remote_send host "y\n"
+ exp_continue
+ }
+ -re ".*$gdb_prompt $" { }
+ timeout { perror "Delete all breakpoints (timeout)" ; return -1}
+ }
+ remote_send host "info breakpoints\n"
+ remote_expect host 10 {
+ -re "No breakpoints or watchpoints..*$gdb_prompt $" {}
+ -re ".*$gdb_prompt $" { perror "breakpoints not deleted" ; return -1}
+ timeout { perror "info breakpoints (timeout)" ; return -1}
+ }
+ return 0;
+}
+
+#
+# Inform the debugger that we have a new exec file.
+# return a -1 if anything goes wrong, 0 on success.
+#
+proc gdb_comm_file_cmd { arg } {
+ global verbose
+ global loadpath
+ global loadfile
+ global GDB
+ global gdb_prompt
+ upvar timeout timeout
+
+ # The "file" command loads up a new symbol file for gdb, deal with
+ # the various messages it might spew out.
+ if [is_remote host] {
+ set arg [remote_download host $arg a.out];
+ }
+ remote_send host "file $arg\n"
+ remote_expect host 60 {
+ -re "Reading symbols from.*done.*$gdb_prompt $" {
+ verbose "\t\tLoaded $arg into the $GDB"
+ return 0
+ }
+ -re "has no symbol-table.*$gdb_prompt $" {
+ perror "$arg wasn't compiled with \"-g\""
+ return -1
+ }
+ -re "A program is being debugged already.*Kill it.*y or n. $" {
+ remote_send host "y\n"
+ verbose "\t\tKilling previous program being debugged"
+ exp_continue
+ }
+ -re "Load new symbol table from \".*\".*y or n.*$" {
+ remote_send host "y\n"
+ remote_expect host 60 {
+ -re "Reading symbols from.*done.*$gdb_prompt $" {
+ verbose "\t\tLoaded $arg with new symbol table into $GDB"
+ return 0
+ }
+ timeout {
+ perror "(timeout) Couldn't load $arg, other program already loaded."
+ return -1
+ }
+ }
+ }
+ -re ".*No such file or directory.*$gdb_prompt $" {
+ perror "($arg) No such file or directory\n"
+ return -1
+ }
+ -re "$gdb_prompt $" {
+ perror "couldn't load $arg into $GDB."
+ return -1
+ }
+ timeout {
+ perror "couldn't load $arg into $GDB (timed out)."
+ return -1
+ }
+ eof {
+ # This is an attempt to detect a core dump, but seems not to
+ # work. Perhaps we need to match .* followed by eof, in which
+ # expect does not seem to have a way to do that.
+ perror "couldn't load $arg into $GDB (end of file)."
+ return -1
+ }
+ }
+ return 0;
+}
+
+# Disconnect from the target and forget that we have an executable. Returns
+# -1 on failure, 0 on success.
+
+proc gdb_comm_go_idle { } {
+ global gdb_prompt;
+
+ if ![board_info host exists fileid] {
+ return -1;
+ }
+
+ remote_send host "target exec\n";
+ remote_expect host 10 {
+ -re "Kill it.*y or n.*$" {
+ remote_send host "y\n"
+ exp_continue;
+ }
+ -re "No exec.* file now.*$gdb_prompt $" {
+ return 0;
+ }
+ default {
+ remote_close host;
+ return -1;
+ }
+ }
+}
+
+# Start GDB running with target DEST.
+proc gdb_comm_start { dest } {
+ global GDB
+ global gdb_prompt
+ global tool_root_dir
+
+ # The variable gdb_prompt is a regexp which matches the gdb prompt. Set it
+ # if it is not already set.
+ if ![board_info $dest exists gdb_prompt] then {
+ set gdb_prompt "\\(gdb\\)"
+ } else {
+ set gdb_prompt [board_info $dest gdb_prompt];
+ }
+ # Similarly for GDB. Look in the object directory for gdb if we aren't
+ # provided with one.
+ if ![info exists GDB] then {
+ set GDB "[lookfor_file ${tool_root_dir} gdb/gdb]"
+ if { $GDB == "" } {
+ set GDB [transform gdb]
+ }
+ }
+ if [board_info host exists gdb_opts] {
+ set gdb_opts [board_info host gdb_opts];
+ } else {
+ set gdb_opts ""
+ }
+ # Start up gdb (no startfiles, no windows) and wait for a prompt.
+ remote_spawn host "$GDB $gdb_opts -nw -nx";
+ remote_expect host 60 {
+ -re ".*$gdb_prompt $" { }
+ }
+ remote_send host "set height 0\n";
+ remote_expect host 10 {
+ -re ".*$gdb_prompt $" {}
+ }
+ remote_send host "set width 0\n";
+ remote_expect host 10 {
+ -re ".*$gdb_prompt $" {}
+ }
+}
+
+# Add a breakpoint at function FUNCTION. We assume that GDB has already been
+# started.
+proc gdb_comm_add_breakpoint { function } {
+ global gdb_prompt
+
+ remote_send host "break $function\n"
+ remote_expect host 60 {
+ -re "Breakpoint.*$gdb_prompt $" { return "" }
+ -re "Function.*not defined.*$gdb_prompt $" { return "undef" }
+ -re "No symbol table.*$gdb_prompt $" { return "undef" }
+ default {
+ return "untested"
+ }
+ }
+}
+
+#
+# quit_gdb -- try to quit GDB gracefully
+#
+
+proc quit_gdb { } {
+ global gdb_prompt;
+
+ set spawn_id [board_info host fileid];
+
+ if { $spawn_id != "" && $spawn_id > -1 } {
+ if { [remote_send host "quit\n"] == "" } {
+ remote_expect host 10 {
+ -re ".*y or n.*$" {
+ remote_send host "y\n";
+ exp_continue;
+ }
+ -re ".*\[*\]\[*\]\[*\].*EXIT code" { }
+ default { }
+ }
+ }
+ }
+ if ![is_remote host] {
+ remote_close host;
+ }
+}
+
+proc gdb_comm_leave { } {
+ if [is_remote host] {
+ quit_gdb;
+ } else {
+ gdb_comm_go_idle;
+ }
+}
+#
+# gdb_comm_load -- load the program and execute it
+#
+# PROG is a full pathname to the file to load, no arguments.
+# Result is "untested", "pass", "fail", etc.
+#
+
+proc gdb_comm_load { dest prog args } {
+ global GDB
+ global GDBFLAGS
+ global gdb_prompt
+ global timeout
+ set argnames { "command-line arguments" "input file" "output file" }
+
+ for { set x 0; } { $x < [llength $args] } { incr x } {
+ if { [lindex $args $x] != "" } {
+ return [list "unsupported" "no support for [lindex $argnames $x] on this target"];
+ }
+ }
+ # Make sure the file we're supposed to load really exists.
+ if ![file exists $prog] then {
+ perror "$prog does not exist."
+ return [list "untested" ""];
+ }
+
+ if { [is_remote host] || ![board_info host exists fileid] } {
+ gdb_comm_start $dest;
+ }
+
+ # Remove all breakpoints, then tell the debugger that we have
+ # new exec file.
+ if { [gdb_comm_delete_breakpoints] != 0 } {
+ gdb_comm_leave;
+ return [gdb_comm_reload $dest $prog $args];
+ }
+ if { [gdb_comm_file_cmd $prog] != 0 } {
+ gdb_comm_leave;
+ return [gdb_comm_reload $dest $prog $args];
+ }
+ if [board_info $dest exists gdb_sect_offset] {
+ set textoff [board_info $dest gdb_sect_offset];
+ remote_send host "sect .text $textoff\n";
+ remote_expect host 10 {
+ -re "(0x\[0-9a-z]+) - 0x\[0-9a-z\]+ is \\.data" {
+ set dataoff $expect_out(1,string);
+ exp_continue;
+ }
+ -re "(0x\[0-9a-z\]+) - 0x\[0-9a-z\]+ is \\.bss" {
+ set bssoff $expect_out(1,string);
+ exp_continue;
+ }
+ -re "$gdb_prompt" { }
+ }
+ set dataoff [format 0x%x [expr $dataoff + $textoff]];
+ set bssoff [format 0x%x [expr $bssoff + $textoff]];
+ remote_send host "sect .data $dataoff\n";
+ remote_expect host 10 {
+ -re "$gdb_prompt" { }
+ }
+ remote_send host "sect .bss $bssoff\n";
+ remote_expect host 10 {
+ -re "$gdb_prompt" { }
+ }
+ }
+
+ # Now set up breakpoints in exit, _exit, and abort. These
+ # are used to determine if a c-torture test passed or failed. More
+ # work would be necessary for things like the g++ testsuite which
+ # use printf to indicate pass/fail status.
+
+ if { [gdb_comm_add_breakpoint _exit] != "" } {
+ gdb_comm_add_breakpoint exit;
+ }
+ gdb_comm_add_breakpoint abort;
+
+ set protocol [board_info $dest gdb_protocol];
+ if [board_info $dest exists gdb_serial] {
+ set targetname [board_info $dest gdb_serial];
+ } elseif [board_info $dest exists netport] {
+ set targetname [board_info $dest netport];
+ } else {
+ if [board_info $dest exists serial] {
+ set targetname [board_info $dest serial];
+ } else {
+ set targetname ""
+ }
+ }
+ if [board_info $dest exists baud] {
+ remote_send host "set remotebaud [board_info $dest baud]\n"
+ remote_expect host 10 {
+ -re ".*$gdb_prompt $" {}
+ default {
+ warning "failed setting baud rate";
+ }
+ }
+ }
+ remote_send host "target $protocol $targetname\n";
+ remote_expect host 60 {
+ -re "Couldn.t establish conn.*$gdb_prompt $" {
+ warning "Unable to connect to $targetname with GDB."
+ quit_gdb;
+ return [gdb_comm_reload $dest $prog $args]
+ }
+ -re "Ending remote.*$gdb_prompt $" {
+ warning "Unable to connect to $targetname with GDB."
+ quit_gdb;
+ return [gdb_comm_reload $dest $prog $args]
+ }
+ -re "Remote target $protocol connected to.*$gdb_prompt $" { }
+ -re "Remote target $targetname connected to.*$gdb_prompt $" { }
+ -re "Connected to ARM RDI target.*$gdb_prompt $" { }
+ -re "Connected to the simulator.*$gdb_prompt $" { }
+ -re "Remote.*using $targetname.*$gdb_prompt $" { }
+ -re "$gdb_prompt $" {
+ warning "Unable to connect to $targetname with GDB."
+ quit_gdb;
+ return [gdb_comm_reload $dest $prog $args]
+ }
+ -re ".*RDI_open.*should reset target.*" {
+ warning "RDI Open Failed"
+ quit_gdb;
+ return [gdb_comm_reload $dest $prog $args]
+ }
+ default {
+ warning "Unable to connect to $targetname with GDB."
+ quit_gdb;
+ return [gdb_comm_reload $dest $prog $args]
+ }
+ }
+
+ if [target_info exists gdb_init_command] {
+ remote_send host "[target_info gdb_init_command]\n";
+ remote_expect host 10 {
+ -re ".*$gdb_prompt $" { }
+ default {
+ gdb_comm_leave;
+ return [list "fail" ""];
+ }
+ }
+ }
+ # Now download the executable to the target board. If communications
+ # with the target are very slow the timeout might need to be increased.
+ if [board_info $dest exists gdb_load_offset] {
+ remote_send host "load $prog [board_info $dest gdb_load_offset]\n";
+ } else {
+ remote_send host "load\n"
+ }
+ remote_expect host 600 {
+ -re "text.*data.*$gdb_prompt $" { }
+ -re "data.*text.*$gdb_prompt $" { }
+ -re "$gdb_prompt $" {
+ warning "Unable to send program to target board."
+ gdb_comm_leave;
+ return [gdb_comm_reload $dest $prog $args];
+ }
+ default {
+ warning "Unable to send program to target board."
+ gdb_comm_leave;
+ return [gdb_comm_reload $dest $prog $args];
+ }
+ }
+
+ set output ""
+
+ # Now start up the program and look for our magic breakpoints.
+ # And a whole lot of other magic stuff too.
+
+ if [board_info $dest exists gdb_run_command] {
+ remote_send host "[board_info $dest gdb_run_command]\n";
+ } else {
+ remote_send host "run\n"
+ }
+ # FIXME: The value 300 below should be a parameter.
+ if [board_info $dest exists testcase_timeout] {
+ set testcase_timeout [board_info $dest testcase_timeout];
+ } else {
+ set testcase_timeout 300;
+ }
+ remote_expect host $testcase_timeout {
+ -re "Line.*Jump anyway.*.y or n.*" {
+ remote_send host "y\n";
+ exp_continue;
+ }
+ -re "Continuing( at |\\.| with no signal\\.)\[^\r\n\]*\[\r\n\]" {
+ exp_continue;
+ }
+ -re ".*Start it from the beginning?.*y or n.*" {
+ remote_send host "n\n";
+ remote_expect host 10 {
+ -re ".*$gdb_prompt $" {
+ remote_send host "signal 0\n";
+ remote_expect host 10 {
+ -re "signal 0\[\r\n\]+" { exp_continue; }
+ -re "Continuing(\\.| with no signal\\.)\[\r\n\]" {}
+ }
+ }
+ }
+ exp_continue
+ }
+ -re "(run\[\r\n\]*|)Starting program: \[^\r\n\]*\[\r\n\]" {
+ exp_continue
+ }
+ -re "$gdb_prompt (signal 0|continue)\[\r\n\]+Continuing(\\.| with no signal\\.)\[\r\n\]" {
+ exp_continue
+ }
+ -re "(.*)Breakpoint.*exit.*=0.*$gdb_prompt $" {
+ append output $expect_out(1,string);
+ set result [check_for_board_status output];
+ gdb_comm_leave;
+ if { $result > 0 } {
+ return [list "fail" $output];
+ }
+ return [list "pass" $output];
+ }
+ -re "(.*)Breakpoint.*exit.*=\[1-9\]\[0-9\]*.*$gdb_prompt $" {
+ append output $expect_out(1,string);
+ set result [check_for_board_status output];
+ gdb_comm_leave;
+ if { $result == 0 } {
+ return [list "pass" $output];
+ }
+ if [board_info $dest exists exit_statuses_bad] {
+ return [list "pass" $output];
+ }
+ return [list "fail" $output];
+ }
+ -re "(.*)Breakpoint.*exit.*$gdb_prompt $" {
+ append output $expect_out(1,string);
+ set status [check_for_board_status output];
+ gdb_comm_leave;
+ if { $status > 0 } {
+ return [list "fail" $output];
+ }
+ return [list "pass" $output];
+ }
+ -re "(.*)Breakpoint.*abort.*$gdb_prompt $" {
+ append output $expect_out(1,string);
+ check_for_board_status output;
+ gdb_comm_leave;
+ return [list "fail" $output];
+ }
+ -re "SIGTRAP.*$gdb_prompt $" {
+ return [gdb_comm_reload $dest $prog $args];
+ }
+ -re "(.*)Program (received |terminated ).*$gdb_prompt $" {
+ set output $expect_out(1,string);
+ check_for_board_status output;
+ gdb_comm_leave;
+ remote_reboot $dest;
+ return [list "fail" $output];
+ }
+ -re "(.*)Program exited with code \[0-9\]+.*$gdb_prompt $" {
+ set output $expect_out(1,string);
+ set status [check_for_board_status output];
+ gdb_comm_leave;
+ if { $status > 0 } {
+ return [list "fail" $output];
+ }
+ return [list "pass" $output];
+ }
+ default {
+ gdb_comm_leave;
+ if [board_info $dest exists unreliable] {
+ if { [board_info $dest unreliable] > 0 } {
+ global board_info;
+ set name [board_info $dest name];
+ incr board_info($name,unreliable) -1;
+ set result [gdb_comm_reload $dest $prog $args];
+ incr board_info($name,unreliable);
+ return $result;
+ }
+ }
+ return [list "fail" ""];
+ }
+ }
+ gdb_comm_leave;
+ return [list "fail" ""];
+}
+
+# If we've tried less than 4 times to load PROG, reboot the target, restart GDB
+# and try again. Otherwise, return "untested".
+proc gdb_comm_reload { dest prog aargs } {
+ global try_again;
+
+ # how many times have we done this?
+ set n_reloads [board_info $dest n_reloads]
+ if {$n_reloads == ""} {
+ set n_reloads 0
+ }
+
+ # increment it
+ global board_info
+ set name [board_info $dest name]
+ set board_info($dest,n_reloads) [expr {$n_reloads + 1}]
+
+ # how many times are we allowed to do this?
+ set max [board_info $dest max_reload_reboots]
+ if {$max == ""} {
+ set max 15
+ }
+
+ # if we've been doing this too much, something's very
+ # wrong. just give up, to reduce stress on boards.
+ if {$max == $n_reloads} {
+ perror "Too many reboots. Giving up."
+ }
+ if {$max <= $n_reloads} {
+ return {untested {}}
+ }
+
+ if { $try_again < 4 } {
+ global GDB;
+ remote_reboot $dest;
+ remote_close host;
+ incr try_again;
+ set result [eval remote_load \"$dest\" \"$prog\" $aargs]
+ set try_again 0;
+ return "$result";
+ } else {
+ set try_again 0;
+ return [list "untested" ""];
+ }
+}
+
+set_board_info protocol "gdb_comm";
--- /dev/null
+# Copyright (C) 1996-98, 1999 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+# This file was written by Michael Snyder <msnyder@cygnus.com>.
+
+#
+# Stub remote run command.
+#
+
+proc gdb_stub_init { dest args } {
+ global gdb_prompt
+ global GDB
+ global tool_root_dir
+
+ if ![info exists GDB] then {
+ set GDB "[lookfor_file ${tool_root_dir} gdb/gdb]"
+ if { $GDB == "" } {
+ set GDB [transform gdb]
+ }
+ }
+
+ if [board_info $dest exists gdb_prompt] {
+ set gdb_prompt [board_info $dest gdb_prompt];
+ } else {
+ set gdb_prompt "\\(gdb\\)"
+ }
+
+ return 1;
+}
+
+proc gdb_stub_restart { dest } {
+ global gdb_prompt
+ global GDB
+
+ gdb_stub_init $dest;
+
+ for {set x 1;} { $x < 4 } {incr x} {
+ remote_close $dest;
+ sleep 2;
+ set command "$GDB -nw -nx";
+ if [host_info exists gdb_opts] {
+ append command " [host_info gdb_opts]";
+ }
+ set spawn_id [remote_spawn host $command];
+ remote_expect host 30 {
+ -re "$gdb_prompt" { }
+ }
+ if { $spawn_id >= 0 } {
+ if [board_info $dest exists baud] {
+ remote_send host "set remotebaud [board_info $dest baud]\n";
+ remote_expect host 5 {
+ -re "$gdb_prompt" { }
+ default {
+ warning "Error setting baud rate."
+ return -1;
+ }
+ }
+ }
+
+
+ set value [gdb_stub_startup $dest];
+ if { $value > 0 } {
+ break;
+ }
+ verbose "got $value from gdb_stub_startup";
+ remote_send host "quit\n";
+ }
+ remote_reboot $dest;
+ }
+ if { ${x} < 4 } {
+ global board_info;
+ set name [board_info $dest name];
+
+ set board_info($name,gdb_is_running) 1;
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+proc gdb_stub_remote_check { dest } {
+ global gdb_prompt
+
+ if [board_info $dest exists gdb_serial] {
+ set serial [board_info $dest gdb_serial];
+ } elseif [board_info $dest exists serial] {
+ set serial [board_info $dest serial];
+ } else {
+ set serial [board_info $dest netport];
+ }
+ remote_send host "target remote $serial\n";
+ remote_expect host 10 {
+ -re "Couldn't establish connection.*$gdb_prompt" {
+ return 0;
+ }
+ -re "Remote debugging.*$gdb_prompt" {
+ verbose "stub is already running"
+ return 1;
+ }
+ -re "$gdb_prompt" {
+ return 0;
+ }
+ timeout {
+ remote_send host "\003";
+ remote_expect host 10 {
+ -re "$gdb_prompt" { }
+ }
+ return 0;
+ }
+ default {
+ return 0;
+ }
+ }
+}
+
+proc gdb_stub_startup { dest } {
+ global gdb_prompt
+ global GDB
+
+ set is_running_stub 0;
+
+ if [gdb_stub_remote_check $dest] {
+ set is_running_stub 1;
+ }
+
+ if [board_info $dest exists serial] {
+ set serial [board_info $dest serial];
+ } else {
+ set serial [board_info $dest netport];
+ }
+
+ if { ! $is_running_stub } {
+ set command "target [board_info $dest gdb_protocol] $serial\n";
+ remote_send host $command;
+ remote_expect host 5 {
+ -re "already.*y or n." {
+ remote_send host "y\n";
+ exp_continue;
+ }
+ -re "appears to be alive.*$gdb_prompt" { }
+ -re "Remote target.*connected to.*$gdb_prompt" { }
+ default {
+ return -1;
+ }
+ }
+ }
+ if { $is_running_stub == 0 } {
+ global libdir
+
+ verbose "building loader";
+ set loader "loader";
+ if ![file exists $loader] {
+ if [board_info $dest exists gdb_stub_offset] {
+ set result [target_compile "${libdir}/stub-loader.c" $loader executable "libs=-Wl,-Ttext,[board_info $dest gdb_stub_offset]"];
+ } else {
+ set result [target_compile "${libdir}/stub-loader.c" $loader executable "ldscript=[board_info $dest gdb_stub_ldscript]"];
+ }
+ verbose "result is $result";
+ if [is_remote host] {
+ set loader [remote_download host $loader];
+ }
+ }
+ remote_send host "file $loader\n";
+ remote_expect host 20 {
+ -re "A program is being debug.*Kill it.*y or n. $" {
+ remote_send host "y\n"
+ exp_continue
+ }
+ -re "Load new symbol table.*y or n. $" {
+ remote_send host "y\n"
+ exp_continue
+ }
+ -re "Reading symbols from.*done..*$gdb_prompt $" {}
+ -re "$gdb_prompt $" { warning "GDB couldn't find loader" }
+ timeout {
+ warning "(timeout) read symbol file" ;
+ return -1
+ }
+ }
+
+ if [board_info $dest exists serial] {
+ set serial [board_info $dest serial];
+ } else {
+ set serial [board_info $dest netport];
+ }
+ remote_send host "target [board_info $dest gdb_protocol] $serial\n";
+ remote_expect host 60 {
+ -re "appears to be alive.*$gdb_prompt" { }
+ -re "Remote target.*connected to.*$gdb_prompt" { }
+ -re "$gdb_prompt" {
+ warning "Error reconnecting to stub.";
+ return -1;
+ }
+ default {
+ warning "Error reconnecting to stub.";
+ return -1;
+ }
+ }
+
+ # We only send the offset if gdb_load_offset is set. Otherwise, we
+ # assume that sending the offset isn't needed.
+ if [board_info $dest exists gdb_load_offset] {
+ remote_send host "load $loader [board_info $dest gdb_stub_offset]\n"
+ } else {
+ remote_send host "load $loader\n";
+ }
+ verbose "Loading $loader into $GDB" 2
+ global verbose
+ set no_run_command 0;
+ # FIXME: The value 1200 below should be a parameter.
+ remote_expect host 1200 {
+ -re "Transfer rate:.*Switching to remote protocol.*Remote debugging" {
+ set no_run_command 1;
+ remote_send host "\ 3";
+ sleep 2;
+ remote_send host "\ 3";
+ sleep 1;
+ }
+ -re "Loading.*Starting.*at.*$gdb_prompt $" {
+ verbose "Loaded $loader into $GDB" 1
+ set no_run_command 1;
+ }
+ -re "Loading.*$gdb_prompt $" {
+ verbose "Loaded $loader into $GDB" 1
+ }
+ -re "$gdb_prompt $" {
+ if $verbose>1 then {
+ warning "GDB couldn't load."
+ }
+ }
+ timeout {
+ if $verbose>1 then {
+ warning "Timed out trying to load $arg."
+ }
+ }
+ }
+
+ if { ! $no_run_command } {
+ remote_send host "run\n";
+ remote_expect host 60 {
+ -re "A program is being debug.*Kill it.*y or n. $" {
+ remote_send host "y\n"
+ exp_continue
+ }
+ -re "The program being debugged .*y or n. $" {
+ remote_send host "y\n"
+ exp_continue
+ }
+ -re "Starting program:.*loader.*$" {
+ verbose "Starting loader succeeded"
+ }
+ timeout {
+ warning "(timeout) starting the loader" ;
+ return -1
+ }
+ default {
+ warning "error starting the loader";
+ }
+ }
+ sleep 2;
+ remote_send host "\ 3"
+ sleep 1;
+ remote_send host "\ 3"
+ verbose "Sent ^C^C"
+ remote_expect host 30 {
+ -re "Give up .and stop debugging it.*$" {
+ remote_send host "y\n"
+ exp_continue
+ }
+ -re "$gdb_prompt $" {
+ verbose "Running loader succeeded"
+ }
+ timeout {
+ warning "(timeout) interrupting the loader" ;
+ return -1
+ }
+ default {
+ warning "error interrupting the loader";
+ }
+ }
+ }
+ remote_send host "quit\n";
+ return [gdb_stub_restart $dest];
+ }
+ return 1;
+}
+
+#
+# Delete all breakpoints and verify that they were deleted. If anything
+# goes wrong we just exit.
+#
+proc gdb_stub_delete_breakpoints {} {
+ global gdb_prompt
+
+ remote_send host "delete breakpoints\n"
+ remote_expect host 10 {
+ -re "Delete all breakpoints.*y or n. $" {
+ remote_send host "y\n"
+ exp_continue
+ }
+ -re "$gdb_prompt $" { }
+ timeout { warning "Delete all breakpoints (timeout)" ; return -1}
+ }
+ remote_send host "info breakpoints\n"
+ remote_expect host 10 {
+ -re "No breakpoints or watchpoints..*$gdb_prompt $" {}
+ -re "$gdb_prompt $" { warning "breakpoints not deleted" ; return -1}
+ timeout { warning "info breakpoints (timeout)" ; return -1}
+ }
+ return 0;
+}
+
+proc gdb_stub_go_idle { dest } {
+ gdb_stub_delete_breakpoints
+}
+
+proc gdb_stub_add_breakpoint { function args } {
+ global gdb_prompt
+
+ remote_send host "break $function\n"
+ remote_expect host 60 {
+ -re "Breakpoint (\[0-9\]+).*$gdb_prompt $" { return $expect_out(1,string) }
+ -re "Function.*not defined.*$gdb_prompt $" { return "undef" }
+ -re "No symbol table.*$gdb_prompt $" { return "undef" }
+ default {
+ return "undef"
+ }
+ }
+}
+
+proc gdb_stub_start { dest } {
+ global gdb_prompt;
+
+ set exit_brnum [gdb_stub_add_breakpoint _exit];
+ if { $exit_brnum == "undef" || [board_info $dest exists always_break_exit] } {
+ set exit_brnum [gdb_stub_add_breakpoint exit];
+ }
+ set abort_brnum [gdb_stub_add_breakpoint abort];
+
+ upvar #0 gdb_stub_info I
+ set I($dest,exit_brnum) $exit_brnum
+ set I($dest,abort_brnum) $abort_brnum
+
+ remote_send host "set \$fp=0\n";
+ remote_expect host 10 {
+ -re "$gdb_prompt" { }
+ }
+ # This is needed for the SparcLite. Whee.
+ if [board_info $dest exists gdb,start_symbol] {
+ set start_comm "jump *[board_info $dest gdb,start_symbol]\n";
+ } else {
+ set start_comm "jump *start\n";
+ }
+ remote_send host "break copyloop\n";
+ remote_expect host 10 {
+ -re "Breakpoint.*$gdb_prompt $" {
+ set start_comm "continue\n";
+ }
+ -re "Function.*not defined.*$gdb_prompt $" { }
+ default { }
+ }
+ remote_send host $start_comm;
+ remote_expect host 10 {
+ -re "y or n. $" {
+ remote_send host "y\n"
+ exp_continue;
+ }
+ -re "Breakpoint.*in copyloop.*$gdb_prompt $" {
+ remote_send host "jump relocd\n";
+ exp_continue;
+ }
+ -re "Continuing at.*\[\r\n\]" { }
+ default {
+ return { "fail" "" };
+ }
+ }
+ return { "pass" "" };
+}
+
+proc gdb_stub_spawn { dest prog args } {
+ for { set x 0; } { $x < 3 } { incr x } {
+ if { [remote_ld $dest $prog] != 1 } {
+ return [list "fail" "remote_ld failed"];
+ }
+
+ set result [gdb_stub_start $dest];
+ if { [lindex $result 0] != "pass" } {
+ remote_reboot target;
+ } else {
+ return 666; # does anyone use this value?
+ }
+ }
+ return -1;
+}
+
+proc gdb_stub_wait { dest timeout } {
+ global gdb_prompt
+
+
+ upvar #0 gdb_stub_info I
+ set exit_brnum $I($dest,exit_brnum)
+ set abort_brnum $I($dest,abort_brnum)
+
+ remote_expect host $timeout {
+ -re "Breakpoint.*exit.*=0.*$gdb_prompt $" {
+ gdb_stub_go_idle $dest
+ return [list 0 ""];
+ }
+ -re "Breakpoint.*exit.*=\[1-9\]\[0-9\]*.*$gdb_prompt $" {
+ gdb_stub_go_idle $dest
+ return [list 0 ""];
+ }
+ -re "Breakpoint.*exit.*$gdb_prompt $" {
+ gdb_stub_go_idle $dest
+ return [list 0 ""];
+ }
+ -re "Breakpoint.*abort.*$gdb_prompt $" {
+ gdb_stub_go_idle $dest
+ return [list 1 ""];
+ }
+ -re " EXIT code 0.*$gdb_prompt $" {
+ gdb_stub_go_idle $dest;
+ return [list 0 ""];
+ }
+ -re " EXIT code \[1-9]\[0-9]*.*$gdb_prompt $" {
+ gdb_stub_go_idle $dest;
+ return [list 0 ""];
+ }
+ -re " EXIT code 4242.*$gdb_prompt $" {
+ gdb_stub_go_idle $dest;
+ return [list 1 ""];
+ }
+ -re "Program received.*$gdb_prompt $" {
+ gdb_stub_go_idle $dest
+ return [list 1 ""];
+ }
+ -re "Program exited.*$gdb_prompt $" {
+ gdb_stub_go_idle $dest
+ return [list 1 ""];
+ }
+ -re "Breakpoint $exit_brnum.*$gdb_prompt $" {
+ gdb_stub_go_idle $dest;
+ return [list 0 ""];
+ }
+ -re "Breakpoint $abort_brnum.*$gdb_prompt $" {
+ gdb_stub_go_idle $dest;
+ return [list 1 ""];
+ }
+ default {
+ remote_close $dest;
+ remote_reboot $dest;
+ return [list -1 ""];
+ }
+ }
+ return [list -1 ""];
+}
+
+proc gdb_stub_load { dest prog args } {
+ global gdb_prompt
+ set argnames { "command-line arguments" "input file" "output file" }
+
+ for { set x 0; } { $x < [llength $args] } { incr x } {
+ if { [lindex $args $x] != "" } {
+ return [list "unsupported" "no support for [lindex $argnames $x] on this target"];
+ }
+ }
+
+ set result [remote_spawn $dest $prog];
+
+ if { $result < 0 } {
+ return [list "fail" "remote_spawn failed"];
+ }
+
+ # FIXME: The value 120 should be a parameter.
+ set result [remote_wait $dest 120];
+ set status [lindex $result 0];
+ set output [lindex $result 1];
+
+ if { $status == 0 } {
+ return [list "pass" $output];
+ } elseif { $status > 0 } {
+ return [list "fail" $output];
+ } else {
+ global gdb_stub_retry;
+
+ if ![info exists gdb_stub_retry] {
+ set gdb_stub_retry 1;
+
+ set result [eval gdb_stub_load \{$dest\} \{$prog\} $args];
+ unset gdb_stub_retry;
+ return $result;
+ } else {
+ return [list "fail" $output];
+ }
+ }
+}
+
+
+#
+# gdb_stub_ld -- load PROG into the board;
+# Returns a 0 if there was an error,
+# 1 if it loaded successfully.
+#
+proc gdb_stub_ld { dest prog } {
+ global gdb_prompt
+ global GDB
+
+ if ![board_info $dest exists gdb_is_running] {
+ if ![gdb_stub_restart $dest] {
+ return 0;
+ }
+ }
+
+ set loadfile [file tail $prog]
+ set loadpath [file dirname $prog]
+
+ remote_send host "file $prog\n"
+ remote_expect host 30 {
+ -re "A program is being debug.*Kill it.*y or n. $" {
+ remote_send host "y\n"
+ exp_continue
+ }
+ -re "Load new symbol table.*y or n. $" {
+ remote_send host "y\n"
+ exp_continue
+ }
+ -re "Reading symbols from.*done..*$gdb_prompt $" {}
+ -re "$gdb_prompt $" {
+ # Hmmm...is retrying going to help? I kinda doubt it.
+ warning "GDB couldn't read file"
+ return [gdb_stub_retry_ld "$dest" "$prog"];
+ }
+ timeout {
+ warning "(timeout) read symbol file";
+ return [gdb_stub_retry_ld "$dest" "$prog"];
+ }
+ }
+
+ # just in case there are old breakpoints lying around.
+ gdb_stub_delete_breakpoints
+
+ if [board_info $dest exists gdb_serial] {
+ set serial [board_info $dest gdb_serial];
+ } elseif [board_info $dest exists serial] {
+ set serial [board_info $dest serial];
+ } else {
+ set serial [board_info $dest netport];
+ }
+
+ remote_send host "target remote $serial\n"
+ remote_expect host 60 {
+ -re "Kill it?.*y or n.*" {
+ remote_send host "y\n";
+ exp_continue
+ }
+ -re "$gdb_prompt $" {
+ verbose "Set remote target to $serial" 2
+ }
+ timeout {
+ warning "Couldn't set remote target."
+ return 0
+ }
+ }
+
+ if [board_info $dest exists gdb_load_offset] {
+ set offset "[board_info $dest gdb_load_offset]";
+ } else {
+ set offset "";
+ }
+ remote_send host "load $prog $offset\n"
+ verbose "Loading $prog into $GDB" 2
+ global verbose;
+ remote_expect host 1200 {
+ -re "Loading.*$gdb_prompt $" {
+ verbose "Loaded $prog into $GDB" 1
+ }
+ -re "$gdb_prompt $" {
+ if $verbose>1 then {
+ warning "GDB couldn't load."
+ }
+ }
+ timeout {
+ if $verbose>1 then {
+ perror "Timed out trying to load $prog."
+ }
+ }
+ }
+ return 1
+}
+
+#
+# Retry the ld operation, but only once.
+#
+
+proc gdb_stub_retry_ld { dest prog } {
+ global gdb_stub_retry_ld;
+
+ remote_reboot $dest;
+ if [info exists gdb_stub_retry_ld] {
+ unset gdb_stub_retry_ld;
+ return 0;
+ } else {
+ set gdb_stub_retry_ld 1;
+ }
+ gdb_stub_restart $dest;
+ set status [gdb_stub_ld $dest $prog];
+ if [info exists gdb_stub_retry_ld] {
+ unset gdb_stub_retry_ld;
+ }
+ return $status;
+}
+
+proc gdb_stub_close { dest } {
+ global board_info
+ set name [board_info $dest name];
+ if [info exists board_info($name,gdb_is_running)] {
+ unset board_info($name,gdb_is_running);
+ }
+ return [remote_close host];
+}
+
+set_board_info protocol "gdb_stub"
--- /dev/null
+# Copyright (C) 1997 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+load_generic_config "gdb-comm";
--- /dev/null
+# Copyright (C) 1997 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+load_generic_config "gdb-comm";
+
+proc ${board}_init { args } {
+ set linux_box [target_info linux_box];
+ set bozo_server [target_info bozo_server];
+ remote_spawn $linux_box "$bozo_server unknown";
+ remote_expect $linux_box 60 {
+ -re "port is (\[0-9\]+)" {
+ set_currtarget_info netport "${linux_box}:$expect_out(1,string)";
+ }
+ }
+}
+
+proc ${board}_close { board } {
+ set linux_box [board_info $board linux_box];
+ if [board_info $linux_box exists fileid] {
+ remote_send $linux_box "\003";
+ remote_close $linux_box;
+ }
+ standard_close $board;
+}
+
+proc ${board}_reboot { board args } {
+ remote_close $board;
+ unset_currtarget_info netport;
+ return 1;
+}
--- /dev/null
+# Copyright (C) 1997, 1998, 1999 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+#
+# Initialize the board on initial connection or after rebooting.
+# Since the board autobauds, we have to be a bit aggressive about
+# getting a valid prompt.
+#
+proc ${board}_init { dest } {
+ global i960_try_count;
+
+ set prompt [board_info $dest shell_prompt];
+ set done 0;
+
+ if ![info exists i960_try_count] {
+ set i960_try_count 1;
+ }
+
+ remote_close $dest;
+ if { [remote_open $dest] != "" } {
+ for { set tries 0; } { $tries < 7 && ! $done } { incr tries } {
+ remote_send $dest "\n";
+ remote_expect $dest 1 {
+ -re "${prompt}" {
+ set done 1;
+ }
+ -re ".+" { exp_continue }
+ timeout { }
+ }
+ }
+ }
+
+ remote_close $dest;
+ if { ! $done } {
+ if { $i960_try_count == 3 } {
+ perror "Couldn't connect to board.";
+ } else {
+ incr i960_try_count;
+ remote_close $dest;
+ remote_reboot $dest;
+ }
+ }
+ if [info exists i960_try_count] {
+ unset i960_try_count;
+ }
+}
+
+proc i960_ld { dest prog } {
+ if ![file exists $prog] {
+ perror "$prog does not exist."
+ return "untested"
+ }
+ set shell_prompt [board_info $dest shell_prompt];
+ set strip [board_info $dest strip];
+ set rprog [remote_download host $prog a.out];
+ if { $strip != "" } {
+ remote_exec host $strip $rprog;
+ }
+ remote_upload host $rprog a.out;
+
+ set id [remote_open $dest];
+ if { $id < 0 } {
+ return -1;
+ }
+ remote_binary $dest;
+ remote_send $dest "\n";
+ remote_expect $dest 5 {
+ -re $shell_prompt { }
+ }
+ remote_send $dest "do\n";
+ remote_expect $dest 5 {
+ -re "Downloading" { }
+ }
+ # Nasty.
+ if { [board_info $dest connect] == "telnet" } {
+ global board_info;
+
+ remote_close $dest;
+ set hp [split [board_info $dest netport] ":"];
+ set host [lindex $hp 0];
+ set port [lindex $hp 1];
+ set status -1;
+ while { $status != 0 } {
+ set status [catch "socket $host $port" id2];
+ if { $status != 0 } {
+ sleep 5;
+ }
+ }
+ } else {
+ set id2 [exp_open -leaveopen -i $id];
+ }
+ if [catch "exec sx -bX a.out <@$id2 >@$id2 2>/dev/null" error] {
+ perror "exec sx failed: $error"
+ }
+ if { [board_info $dest connect] == "telnet" } {
+ close $id2;
+ sleep 2;
+ remote_open $dest;
+ remote_binary $dest;
+ }
+ set result 1;
+ remote_send $dest "\n";
+ remote_expect $dest 1 {
+ -re "$shell_prompt" {
+ set result 0;
+ exp_continue;
+ }
+ timeout { }
+ }
+ return $result;
+}
+
+proc i960_spawn { dest prog args } {
+ set shell_prompt [board_info $dest shell_prompt];
+
+ for { set tries 0 ; } { $tries < 3 } { incr tries } {
+ set result [remote_ld $dest $prog];
+ if { $result == 0 } {
+ set comm "go [board_info $dest start_addr]";
+ remote_send $dest "$comm\n";
+ remote_expect $dest 10 {
+ -re "$comm\[\r\n\]\[\r\n\]?" { }
+ default { }
+ }
+ return [board_info $dest fileid];
+ } else {
+ remote_reboot $dest;
+ }
+ }
+ return -1;
+}
+
+proc i960_wait { dest timeout } {
+ set output "";
+ set shell_prompt [board_info $dest shell_prompt];
+
+ remote_expect $dest $timeout {
+ -re " fault at \[0-9a-h\]+, subtype \[0-9a-h\]+" {
+ set status -1;
+ exp_continue;
+ }
+ -re "(.*)(\[\r\n\]|^)Program Exit: (\[0-9\]+)\[\r\n\]" {
+ append output $expect_out(1,string);
+ set status $expect_out(3,string);
+ exp_continue;
+ }
+ -re "(.*)$shell_prompt" {
+ append output $expect_out(1,string);
+ set bstatus [check_for_board_status output];
+ if { $bstatus >= 0 } {
+ set status $bstatus;
+ }
+ }
+ -re "\[\r\n\]+" {
+ # Sometimes the board goes wacky in the head, and we have
+ # to shoot it.
+ append output $expect_out(buffer);
+ if { [string length $output] < 512000 } {
+ exp_continue;
+ } else {
+ set status -1;
+ }
+ }
+ default {
+ set status -1;
+ }
+ }
+ return [list $status $output];
+}
+
+proc i960_load { dest prog args } {
+ for { set x 0; } { $x < 3 } { incr x; } {
+ set id [eval remote_spawn \{$dest\} \{$prog\} $args];
+ if { $id < 0 } {
+ return [list "fail" ""];
+ }
+ set result [remote_wait $dest 120];
+ set status [lindex $result 0];
+ set output [lindex $result 1];
+
+ if { $status == 0 } {
+ return [list "pass" $output];
+ } else {
+ global i960_retry;
+
+ if { [board_info $dest exists unreliable] && ![info exists i960_retry] } {
+ set i960_retry 1;
+ remote_reboot $dest;
+ set result [eval i960_load \{$dest\} \{$prog\} $args];
+ unset i960_retry;
+ return $result;
+ } else {
+ if { $status < 0 } {
+ remote_reboot $dest;
+ }
+ return [list "fail" $output];
+ }
+ }
+ }
+}
+
+set_board_info shell_prompt "=>";
+set_board_info send_initial_cr 1;
+# We take care of getting a prompt in ${board}_init.
+set_board_info dont_wait_for_prompt 1;
--- /dev/null
+# Copyright (C) 1997 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+load_generic_config "gdb_stub";
--- /dev/null
+# Copyright (C) 1997 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+load_generic_config "gdb-comm";
--- /dev/null
+proc ${board}_init { dest } {
+ global doing_emc_init;
+
+ if [info exists doing_emc_init] {
+ return;
+ }
+ set doing_emc_init 1;
+ remote_close $dest;
+ set dos_host [board_info $dest dos_host];
+ remote_reboot $dos_host;
+ unset doing_emc_init;
+}
+
+proc m68k_emc_board_connect { dest } {
+ global board_info;
+ set tname [board_info $dest name];
+
+ set board_info($tname,m68k_connected) 1;
+ set dos_host [board_info $dest dos_host];
+
+ for { set x 0; } { $x < 3 } { incr x; } {
+ set shell_id [remote_open $dos_host];
+ if { $shell_id == "" || $shell_id < 0 } {
+ remote_reboot $dos_host;
+ } else {
+ break;
+ }
+ }
+ remote_send $dos_host "c:\\symetrix.bat\n";
+ remote_expect $dos_host 300 {
+ -re "SymmComm.*Installed.*\033.2J.*\033.2J" { }
+ default {
+ warning "Never got clear screen sequence from remote side."
+ }
+ }
+ # Flush the buffer.
+ remote_expect $dos_host 2 {
+ -re ".+" { exp_continue; }
+ }
+ # Get past first menu.
+ remote_send $dos_host "\n";
+ remote_expect $dos_host 10 {
+ -re "\033.07;02H" { }
+ default { }
+ }
+ # We don't want a log file.
+ remote_send $dos_host "\n";
+ remote_expect $dos_host 10 {
+ -re "\033.02;24H" { }
+ default { }
+ }
+}
--- /dev/null
+# Copyright (C) 1997 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gcc@prep.ai.mit.edu
+
+# For MIPS/IDT we use gdb to load and execute programs.
+
+load_generic_config "gdb-comm";
+
+set_board_info gdb_init_command "set syn-garbage-limit 0";
--- /dev/null
+# Copyright (C) 1998 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gcc@prep.ai.mit.edu
+
+# For MN10200 evaluation boards we use gdb to load and execute programs.
+
+load_generic_config "gdb-comm";
--- /dev/null
+# Copyright (C) 1998 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gcc@prep.ai.mit.edu
+
+# For MN10300 evaluation boards we use gdb to load and execute programs.
+
+load_generic_config "gdb-comm";
--- /dev/null
+# Copyright (C) 1994, 1996, 1997 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gcc@prep.ai.mit.edu
+
+# This file was written by J.T. Conklin. (jtc@cygnus.com)
+
+#
+# load support libraries
+#
+load_lib remote.exp
+
+# set target variables only if needed
+
+proc ${board}_init { args } {
+ global NLMCONV
+ if ![info exists NLMCONV] then {
+ set NLMCONV [findfile "$rootme/../binutils/nlmconv"]
+ }
+ global LD
+ if ![info exists LD] then {
+ set LD [findfile "$rootme/../ld/ld-new" "$rootme/../ld/ld-new" [transform "ld"]]
+ }
+
+ set shell_prompt "Password:"
+ set shell_id [remote_open target];
+ if [target_info exists passwd] {
+ set passwd [target_info passwd];
+ } else {
+ set passwd "";
+ }
+ if $shell_id<0 then {
+ warning "Couldn't connect to target"
+ return -1
+ }
+
+ if [string match "" $passwd] then {
+ stty -echo
+ send_user "Password: "
+ expect_user -re "(.*)\n"
+ send_user "\n"
+ set passwd "$expect_out(1,string)"
+ stty echo
+ }
+
+ send -i $shell_id "$passwd\n"
+ expect {
+ -i $shell_id ":" {
+ verbose "Got termtype prompt" 0
+ }
+
+ -i $shell_id timeout {
+ warning "Connection timed out"
+ return -1
+ }
+ }
+
+ # FIXME
+ set shell_prompt "[string toupper [target_info name]]:"
+ send -i $shell_id "1\n"
+
+ expect {
+ -i $shell_id -re "$shell_prompt" {}
+ -i $shell_id timeout {
+ warning "Connection timed out"
+ return -1
+ }
+ }
+}
+
+
+#
+# ${board}_load -- load the program and execute it
+#
+# See default.exp for explanation of arguments and results.
+#
+
+proc ${board}_load { dest prog args } {
+ global LD NLMCONV
+ global tmpdir
+ global errorCode
+
+ if [board_info $dest exists fileid] {
+ set shell_id [board_info $dest fileid];
+ } else {
+ set shell_id -1;
+ }
+
+ set output ""
+
+ if $shell_id<0 then {
+ verbose -log "$prog not executed because there is no target" 3
+ return "untested"
+ }
+
+ #
+ set exe [file tail $prog]
+
+ # We can't blindly append a suffix to the object name, because the
+ # result may not be valid on netware's 8.3 filesystem.
+ set nlm "$tmpdir/x.nlm"
+ set lnk "$tmpdir/x.lnk"
+
+ # build *.lnk file
+ set fd [open $lnk w]
+ puts $fd "description \"$exe\""
+ puts $fd "screenname \"System Console\""
+ puts $fd "module clib.nlm"
+ puts $fd "module mathlib.nlm"
+ puts $fd "stack 65536"
+ puts $fd "debug"
+ # FIXME: don't hardcode location of prelude.o
+ puts $fd "input /s1/cygnus/dejagnu/i386-netware/lib/prelude.o"
+ puts $fd "input $prog"
+ puts $fd "output $nlm"
+ close $fd
+
+ # run nlmconv
+ verbose "Executing: $NLMCONV -l$LD -T$lnk" 1
+ catch "exec $NLMCONV -l$LD -T$lnk" output
+ if ![string match "" $output] then {
+ verbose $output 1
+ }
+ if ![string match "NONE" $errorCode] {
+ verbose -log "Can't link $prog" 3
+ return "fail"
+ }
+
+ # download
+ verbose "Downloading $nlm" 1
+ catch "exec cp $nlm /.NetWare/[board_info $dest name].nws/sys.nwv/tmp/x.nlm" output
+ if ![string match "" $output] then {
+ verbose $output 1
+ verbose -log "cp failed for $nlm" 3
+ return "unresolved"
+ }
+
+ # Wait a second for the file to "settle" on the NetWare server.
+ # I've encountered unexplained failures without this delay.
+# sleep 1
+
+
+ # The NetWare remote console expects to be connected to a vt100
+ # compatible terminal. It isn't very efficent, and it seems to
+ # send screen repaints for no reason. So we have to clear the
+ # screen as we run each test, otherwise a shell prompt or abort
+ # message from a previous test could cause incorrect results.
+ send -i $shell_id "CLS\r\n"
+ set timeout 1
+ expect {
+ -i $shell_id -re "$shell_prompt" {
+ exp_continue
+ }
+ }
+ set timeout 10
+
+
+ # Netware does not support exit status. The best we can do to
+ # detect failures is to look for the "ABNORMAL NLM TERMINATION"
+ # message printed by abort().
+ set ret 0
+ send -i $shell_id "LOAD X.NLM\r\n"
+ expect {
+ -i $shell_id "ABNORMAL NLM TERMINATION" {
+ set ret 1
+ exp_continue
+ }
+ -i $shell_id "Unable to find load file" {
+ perror "Couldn't execute program"
+ verbose -log "Couldn't execute program" 3
+ return "unresolved"
+ }
+ -i $shell_id timeout {
+ perror "Couldn't execute program (timed out)"
+ verbose -log "Couldn't execute program (timed out)" 3
+ return "unresolved"
+ }
+ -i $shell_id -re "[format "%sLOAD" $shell_prompt]" {
+ exp_continue
+ }
+ -i $shell_id -re "$shell_prompt" {}
+ }
+
+ catch [exec rm -f $lnk]
+ catch [exec rm -f $nlm]
+
+ if { $ret == 0 } {
+ return "pass"
+ } else {
+ return "fail"
+ }
+}
+
+#
+# ${tool}_exit -- shutdown the connection
+#
+
+proc ${board}_exit {} {
+ remote_close target;
+}
--- /dev/null
+# Copyright (C) 1997 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+load_generic_config "gdb-comm";
--- /dev/null
+# Copyright (C) 1997 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+load_generic_config "base68k";
+set_board_info shell_prompt "#"
+set_board_info download_command "r 0\n";
+set_board_info go_command "g"
+set_board_info startaddr "40000"
+
+set_board_info go_response "\[\r\n\]+\[a-z \]+\\(\[0-9\]+\\) pc=\[0-9A-Ha-h\]+\[\r\n\]+\[0-9A-H\]+ \[0-9A-H\]+ \[^\r\n\]+\[\r\n\]+|\\*\\*\\*EXIT code "
+set_board_info output_end "\[\r\n\]+\[a-z \]+\\(\[0-9\]+\\) pc=\[0-9A-Ha-h\]+\[\r\n\]+.*$"
--- /dev/null
+# Copyright (C) 1995, 1996, 1997 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+# This file was written by Bob Manson (manson@cygnus.com)
+# based on earlier work by J.T. Conklin (jtc@cygnus.com)
+
+load_generic_config "base68k";
+
+set_board_info shell_prompt "ROM68K :-> "
+set_board_info download_command "DC\n";
+set_board_info download_response "Waiting for S-records from host... ";
+set_board_info go_command "GO"
+set_board_info startaddr "10000"
+set_board_info hex_startaddr "0x10000"
+set_board_info go_response "(Emul|RS Except|TRAP #\[1-9\]|\\*\\*\\*EXIT code ).*"
+set_board_info output_end "\[\r\n\]((\[^\r\n\]*\[\r\n\]-----*)|Emul|RS Except|TRAP #|Bus/Address).*$"
--- /dev/null
+# Copyright (C) 1997 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+load_generic_config "gdb-comm";
--- /dev/null
+# Copyright (C) 1993, 1994, 1996, 1997, 1998 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-dejagnu@prep.ai.mit.edu
+
+#
+# sim_load -- load the program and execute it
+#
+# See default.exp for explanation of arguments and results.
+#
+
+proc sim_spawn { dest cmdline args } {
+ if ![board_info $dest exists sim] {
+ perror "no simulator defined for [board_info $dest name]"
+ exit 1
+ } else {
+ set sim [board_info $dest sim];
+ }
+
+ if [board_info $dest exists sim,options] {
+ set simflags [board_info $dest sim,options]
+ } else {
+ set simflags ""
+ }
+
+ if ![is_remote host] {
+ if { [which $sim] == 0 } {
+ verbose -log "Simulator $sim missing." 3
+ return -1;
+ }
+ }
+
+ if [is_remote host] {
+ # download the program to remote.
+ # we're assuming the program is the first word in the command.
+ # FIXME: "prog < infile" won't work until we download infile.
+ set prog [lindex $cmdline 0]
+ set prog [remote_download host $prog a.out];
+ set cmdline [lreplace $cmdline 0 0 $prog]
+ }
+
+ return [eval remote_spawn host \{ $sim $simflags $cmdline \} $args];
+}
+
+proc sim_wait { dest timeout } {
+ return [remote_wait host $timeout];
+}
+
+proc sim_load { dest prog args } {
+ set inpfile ""
+ if { [llength $args] > 1 } {
+ if { [lindex $args 1] != "" } {
+ set inpfile "[lindex $args 1]"
+ }
+ }
+
+ if ![file exists $prog] then {
+ perror "sim.exp: $prog to be downloaded does not exist."
+ verbose -log "$prog to be downloaded does not exist." 3
+ return [list "untested" ""];
+ }
+
+ if [board_info $dest exists sim_time_limit] {
+ set sim_time_limit [board_info $dest sim_time_limit];
+ } else {
+ set sim_time_limit 240
+ }
+
+ set output "";
+
+ # Run the program with a limited amount of real time. While
+ # this isn't as nice as limiting the amount of CPU time, it
+ # will have to do.
+ if { $inpfile != "" } {
+ set res [remote_spawn target "${prog} < $inpfile" "readonly"];
+ } else {
+ set res [remote_spawn target "${prog}"];
+ }
+
+ if { $res <= 0 } {
+ return [list "fail" "remote_spawn failed"];
+ }
+
+ set state [remote_wait target $sim_time_limit];
+ set status [lindex $state 0];
+ set output [lindex $state 1];
+ verbose "Output is $output";
+
+ set status2 [check_for_board_status output];
+ if { $status2 >= 0 } {
+ set status $status2
+ }
+
+ # FIXME: Do we need to examine $status?
+ # Yes, we do--what if the simulator itself gets an error and coredumps?
+
+ verbose "Return status was: $status" 2
+ if { $status == 0 } {
+ set result "pass"
+ } else {
+ set result "fail"
+ }
+ return [list $result $output];
+}
+
+set_board_info protocol "sim";
+
+# By default, assume the simulator is slow. This causes some tests
+# to either be simplified or skipped completely.
+set_board_info slow_simulator 1
--- /dev/null
+# Copyright (C) 1996, 1997 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+load_generic_config "gdb_stub";
--- /dev/null
+# Copyright (C) 1996, 1997 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+# This file was written by Michael Snyder <msnyder@cygnus.com>.
+
+load_generic_config "gdb_stub";
+
+# This is the old GDB prompt for the toolchain.
+# Uncomment for old tests
+#set_board_info gdb_prompt "\\(gdbslet\\)";
--- /dev/null
+#
+# Nasty ugly stuff.
+#
+# We have to maintain two connections to the DOS box where the board
+# is being held. One of them runs an I/O monitor process, while the other
+# is used to actually start the program under test running on the board.
+#
+
+proc tic80_load { dest prog args } {
+ set dos_box [board_info $dest dos_host];
+
+ remote_spawn $dos_box [board_info $dest io_program];
+
+ set status [remote_ld $dest $prog];
+
+ if { $status != "pass" } {
+ return $status;
+ }
+
+ set result [remote_wait $dos_box 300];
+ set output [lindex $result 1];
+ if { [lindex $result 0] < 0 } {
+ if [board_info $dos_box exists fileid] {
+ dos_interrupt_job $dos_box;
+ } else {
+ remote_close $dos_box;
+ }
+ }
+
+ set status "fail";
+ regsub "(\\*\\*\\* EXIT code \[0-9\]+\[\r\n]+).*$" "$output" "\\1" output;
+ verbose "board out is $output";
+ set bstatus [check_for_board_status output];
+ if { [lindex $result 0] >= 0 } {
+ if { $bstatus == 0 } {
+ set status "pass";
+ }
+ }
+ remote_file build delete "a.fix";
+ return [list $status $output];
+}
+
+proc tic80_ld { dest prog } {
+ set dos_box [board_info $dest dos_host];
+ set dopush 0;
+
+ if { [remote_swap_conn $dos_box] == "fail" } {
+ if { [remote_push_conn $dos_box] == "fail" } {
+ set dopush 1;
+ }
+ remote_open $dos_box;
+ }
+ set prog [remote_download $dos_box $prog "a.fix"];
+
+ remote_spawn $dos_box "[board_info $dest start_program] $prog";
+ remote_expect $dos_box 10 {
+ -re "file\[(\]s\[)\] copied" {}
+ }
+ sleep 3;
+ dos_interrupt_job $dos_box;
+ if { $dopush } {
+ remote_push_conn $dos_box;
+ } else {
+ remote_swap_conn $dos_box;
+ }
+ return "pass";
+}
+#
+# Close the connection to the DOS box.
+#
+proc tic80_close { host } {
+ set dos_box [board_info $host dos_host];
+
+ return [remote_close $dos_box];
+}
+
+set_board_info protocol "tic80";
+set_board_info gdb,use_standard_load 1;
+set_board_info gdb,no_push_conn 1;
+set_board_info gdb,do_reload_on_run 1;
+set_board_info gdb,use_breakpoint_for_stub 1
--- /dev/null
+# Copyright (C) 1994, 1996, 1997 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+# This file was originally written by Rob Savoye. (rob@cygnus.com)
+# and modified by Bob Manson (manson@cygnus.com)
+
+# When using the simulator (-n iss) and running nice'd, things can naturally
+# take a little longer, so increase the timeout.
+
+#
+# udi_load -- load the program and execute it
+#
+# See default.exp for explanation of arguments and results.
+#
+
+proc udi_load { dest prog args } {
+ set shell_prompt [board_info $dest shell_prompt];
+ set output "";
+
+ if ![file exists $prog] then {
+ perror "$prog does not exist."
+ verbose -log "$prog does not exist." 3
+ return [list "untested" ""];
+ }
+
+ # Load the program.
+ if ![board_info $dest exists fileid] then {
+ remote_open $dest;
+ if ![board_info $dest exists fileid] then {
+ verbose -log "$prog not executed, couldn't connect to $dest." 3
+ return "untested"
+ }
+ }
+
+ if { [remote_ld $dest $prog] == "" } {
+ verbose -log "$prog not executed, load failed." 3
+ return [list "unresolved" ""];
+ }
+
+ # Execute it.
+ set result -1
+ set output "";
+ set noappend 0;
+
+ verbose "Executing $prog." 2
+ remote_send $dest "g\n"
+ # FIXME: The value 300 below should be a parameter.
+ remote_expect $dest 300 {
+ -re "(.*)Process exited with 0x0\[^\r\n\]*\[\r\n\]" {
+ append output $expect_out(1,string);
+ verbose "$prog executed successfully" 2
+ set noappend 1;
+ set result 0;
+ exp_continue;
+ }
+ -re "(.*)Halt instruction encountered" {
+ append output $expect_out(1,string);
+ verbose "$prog got a HALT instruction" 2
+ set result 1;
+ set noappend 1;
+ exp_continue;
+ }
+ -re "(^|\[\r\n\])$shell_prompt" {
+ if { $result == -1 } {
+ exp_continue;
+ }
+ }
+ -re "(^|\[\r\n\]+)g\[\r\n\]+" {
+ exp_continue;
+ }
+ -re "\[\r\n\]+" {
+ if { ! $noappend } {
+ append output $expect_out(buffer);
+ if { [string length $output] < 512000 } {
+ exp_continue;
+ } else {
+ set result 1;
+ }
+ } else {
+ exp_continue;
+ }
+ }
+ timeout {
+ warning "$prog timed out."
+ }
+ }
+
+ # See what happened.
+ switch -- $result {
+ 0 {
+ set status [check_for_board_status output];
+ if { $status < 0 } {
+ blammo
+ }
+ if { $status > 0 } {
+ set result "fail";
+ } else {
+ set result "pass"
+ }
+ }
+ 1 - -1 {
+ warning "Resetting $dest."
+ remote_send $dest "r\n"
+ remote_expect $dest 5 {
+ -re "r.*$shell_prompt.*" {
+ verbose "Target reset." 2
+ }
+ timeout {
+ # Get nastier. We want to leave the system in a state
+ # ready to run the next testcase.
+ remote_send $dest "q\n"
+ remote_close $dest;
+ set udi_shell_id [remote_open $dest]
+ if { $udi_shell_id < 0 } {
+ perror "Couldn't reset $dest."
+ }
+ }
+ }
+ if { $result == 1 } {
+ set result "fail"
+ } else {
+ set result "unresolved"
+ }
+ }
+ default {
+ set result "unresolved"
+ }
+ }
+ return [list $result $output];
+}
+
+#
+# udi_exit -- shutdown the connection (or simulator)
+#
+
+proc udi_exit {} {
+ remote_close target;
+}
+
+set_board_info protocol "udi";
+set_board_info connect "mondfe";
+set_board_info shell_prompt "mondfe>";
--- /dev/null
+# Copyright (C) 92, 1993, 1994, 1996, 1997, 1998 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gcc@prep.ai.mit.edu
+
+# This file was written by Rob Savoye. (rob@cygnus.com)
+
+if ![info exists board] {
+ error "must set $board before loading unix.exp"
+}
+
+# For rcp_download, rsh_exec.
+load_lib remote.exp
+
+#
+# unix_load -- load the program and execute it
+#
+# See default.exp for explanation of arguments and results.
+#
+
+
+proc unix_load { dest prog args } {
+ global ld_library_path
+ set output "";
+
+ if { [llength $args] > 0 } {
+ set parg [lindex $args 0];
+ } else {
+ set parg ""
+ }
+
+ if { [llength $args] > 1 } {
+ set inp [lindex $args 1];
+ } else {
+ set inp ""
+ }
+
+ if ![file exists $prog] then {
+ # We call both here because this should never happen.
+ perror "$prog does not exist in unix_load."
+ verbose -log "$prog does not exist." 3
+ return "untested"
+ }
+ verbose "loading to $dest" 2
+ if ![is_remote $dest] {
+ if { "$inp" != "" } {
+ set command "$prog $parg < $inp"
+ } else {
+ set command "$prog $parg";
+ }
+
+ if [info exists ld_library_path] {
+ setenv LD_LIBRARY_PATH $ld_library_path
+ setenv SHLIB_PATH $ld_library_path
+ }
+
+ set id [remote_spawn $dest "$command" "readonly"];
+ if { $id < 0 } {
+ set output "remote_spawn failed"
+ set status -1;
+ } else {
+ set status [remote_wait $dest 300];
+ set output [lindex $status 1];
+ set status [lindex $status 0];
+ }
+ # Unset them so we don't potentially get hosed when we try to run a
+ # non-testcase executable. (Setting LD_LIBRARY_PATH is the wrong
+ # fix in the first place; this just tries to minimize the resulting
+ # crap.)
+ if [info exists ld_library_path] {
+ unsetenv LD_LIBRARY_PATH
+ unsetenv SHLIB_PATH
+ }
+ } else {
+ set remotefile "/tmp/[file tail $prog].[pid]"
+ set remotefile [remote_download $dest $prog $remotefile];
+ if { $remotefile == "" } {
+ verbose -log "Download of $prog to [board_info $dest name] failed." 3
+ return [list "unresolved" ""];
+ }
+ if [board_info $dest exists remote_link] {
+ if [[board_info $dest remote_link] $remotefile] {
+ verbose -log "Couldn't do remote link"
+ remote_exec $dest "\\rm -f $remotefile"
+ return [list "unresolved" ""]
+ }
+
+ verbose "$prog linked ok" 3
+ } else {
+ # rcp's to lynx seem not to get marked executable
+ set status [remote_exec $dest "chmod +x $remotefile"]
+ if { [lindex $status 0] != 0 } {
+ remote_file $dest delete ${remotefile}.o $remotefile
+ verbose -log "chmod +x of $prog on $dest failed." 3
+ return [list "unresolved" ""];
+ }
+ }
+ set status [remote_exec $dest "$remotefile" $parg $inp]
+ remote_file $dest delete $remotefile.o $remotefile;
+ if { [lindex $status 0] < 0 } {
+ verbose -log "Couldn't execute $prog, [lindex $status 1]" 3
+ return [list "unresolved" ""]
+ }
+ set output [lindex $status 1]
+ set status [lindex $status 0]
+ }
+
+ verbose "Executed $prog, status $status" 2
+ if ![string match "" $output] {
+ verbose -- "$output" 2
+ }
+ if { $status == 0 } {
+ set result "pass";
+ } else {
+ set result "fail";
+ }
+ return [list $result $output];
+}
+
+set_board_info protocol "unix";
--- /dev/null
+# Copyright (C) 1997 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+# We're using a ddb monitor.
+load_generic_config "ddb";
--- /dev/null
+# Copyright (C) 1997 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+# We're using a ddb monitor.
+load_generic_config "ddb";
--- /dev/null
+# Copyright (C) 1997 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+# We're using a ddb monitor, but we want to use the ethernet to load files.
+load_generic_config "ddb-ether";
--- /dev/null
+# Copyright (C) 1994, 1996, 1997 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gcc@prep.ai.mit.edu
+
+# This file was written by Rob Savoye. (rob@cygnus.com)
+
+# This file uses the xsh protocol.
+
+#
+# load support libraries
+#
+load_lib remote.exp
+
+#
+# ${tool}_load -- load the program and execute it
+#
+# See default.exp for explanation of arguments and results.
+#
+
+proc vrtx_load { dest prog args } {
+ remote_open $dest;
+
+ switch -- [remote_download $dest $prog] {
+ 0 { return "pass" }
+ 1 { return "fail" }
+ -1 {
+ # FIXME: This needs work (as does xsh_load).
+ verbose -log "Unable to run $prog, internal spectra error." 3
+ return "unresolved"
+ }
+ }
+}
+
+set_board_info protocol "vrtx"
+set_board_info connect "xsh"
--- /dev/null
+# Copyright (C) 92, 93, 94, 95, 1996, 1997 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# DejaGnu@cygnus.com
+
+# This file was originally written by Rob Savoye. (rob@cygnus.com)
+# and modified by Bob Manson (manson@cygnus.com)
+
+#
+# Try to boot the machine into the requested OS.
+#
+proc ${board}_init { dest } {
+ # This is not the right way to determine the required OS...
+ global target_os;
+ set shell_prompt [board_info $dest shell_prompt];
+ set do_reboot 0;
+
+ set desired_kernel [board_info $dest "kernel,$target_os"];
+
+ if { $desired_kernel == "" } {
+ vxworks_final_init $dest;
+ # Nothing to see here, nothing to do. Move along.
+ return;
+ }
+
+ remote_raw_open $dest raw;
+ remote_send $dest "\n";
+ remote_expect $dest 5 {
+ -re "$shell_prompt" {
+ set do_reboot 1;
+ }
+ -re "Press any key to stop auto-boot" {
+ remote_send $dest "\n";
+ exp_continue;
+ }
+ -re "VxWorks Boot" {
+ set boot_mon 0;
+ set boot_mon_prompt "VxWorks Boot";
+ }
+ -re "\[0-9\]\[\r\n\]+ *\[0-9\]\[\r\n\]" {
+ remote_send $dest "\n";
+ exp_continue;
+ }
+ timeout {
+ set do_reboot 1;
+ }
+ }
+
+ if { $do_reboot } {
+ remote_close $dest;
+ remote_reboot $dest;
+ return;
+ }
+ remote_binary $dest;
+ remote_send $dest "\n\n";
+ remote_expect $dest 3 {
+ timeout {}
+ -re ".+" { exp_continue; }
+ }
+ remote_send $dest "p\n";
+ remote_expect $dest 20 {
+ -re "file name\[ \t\]+: (\[^ \r\n\]+)\[ \r\n\]+" {
+ set curr_file $expect_out(1,string);
+ exp_continue;
+ }
+ -re "$boot_mon_prompt" { }
+ }
+ if ![info exists curr_file] {
+ remote_close $dest;
+ remote_reboot $dest;
+ return;
+ }
+ if { $curr_file != $desired_kernel } {
+ verbose "$curr_file != '$desired_kernel'";
+ # Oh boy.
+ remote_send $dest "c\n";
+ remote_expect $dest 20 {
+ -re "file name\[ \t\]+:.*$" {
+ remote_send $dest "$desired_kernel\n";
+ exp_continue;
+ }
+ -re "\[a-z() \t\]+:.*$" {
+ remote_send $dest "\n";
+ exp_continue;
+ }
+ -re "$boot_mon_prompt" {}
+ }
+ }
+ remote_send $dest "@\n";
+ remote_expect $dest 30 {
+ -re "(^|\[\r\n\])$shell_prompt" {}
+ -re ".+" {
+ exp_continue;
+ }
+ }
+ vxworks_final_init $dest;
+ remote_close $dest;
+}
+
+proc vxworks_final_init { dest } {
+ if [board_info $dest exists preload_obj] {
+ if { [target_compile [board_info $dest preload_obj] foo.out object [board_info $dest preload_obj_flags]] == "" } {
+ vxworks_ld $dest foo.out
+ }
+ remote_file build delete foo.out;
+ }
+}
+#
+# Execute the command PROGRAM on VxWorks.
+#
+
+proc vxworks_exec { dest program pargs inp outp } {
+ global decimal hex;
+
+ set shell_id [vxworks_open $dest];
+ if { $shell_id < 0 } {
+ return [list -1 "open failure"];
+ }
+
+ if { $inp != "" } {
+ set inp [remote_download $dest $inp];
+ set suffix " < $inp";
+ } else {
+ set suffix ""
+ }
+
+ set shell_prompt [board_info $dest shell_prompt];
+ remote_send $dest "${program} ${pargs}$suffix\n";
+ # FIXME: The value 300 below should probably be a parameter passed in.
+ remote_expect $dest 300 {
+ -re "\\\[VxWorks Boot\\\]:" {
+ remote_send $dest "@\n";
+ sleep 20;
+ exp_continue;
+ }
+ -re "(.*)value = (-*$decimal) = $hex\[^\r\n\]*\[\r\n\]+$shell_prompt" {
+ set result [list $expect_out(2,string) $expect_out(1,string)];
+ }
+ -re "undefined symbol: .*$shell_prompt" {
+ set result [list 1 "unknown command"];
+ }
+ -re "syntax error.*$shell_prompt" {
+ set result [list -1 "syntax error in command"];
+ }
+ default {
+ set result [list -1 "unable to execute command"];
+ }
+ }
+ if { $suffix != "" } {
+ remote_file $dest delete $inp;
+ }
+ return $result;
+}
+
+proc vxworks_download { dest localfile remotefile } {
+ if [board_info $dest exists vxworks_homedir] {
+ set rfile "[board_info $dest vxworks_homedir]/$remotefile";
+ remote_download build $localfile $rfile;
+ return $rfile;
+ }
+ return [remote_raw_download $dest $localfile $remotefile];
+}
+
+proc vxworks_file { dest op args } {
+ set file [lindex $args 0];
+ if [board_info $dest exists vxworks_homedir] {
+ set dir "[board_info $dest vxworks_homedir]";
+ switch $op {
+ exists {
+ set file "${dir}/[file tail $file]";
+ return [file exists $file];
+ }
+ delete {
+ foreach x $args {
+ set x "${dir}/[file tail $x]";
+ if { [file exists $x] && [file isfile $x] } {
+ exec rm -f $x;
+ }
+ }
+ return;
+ }
+ }
+ }
+ return [eval remote_raw_file \"$dest\" \"$op\" $args];
+}
+
+proc vxworks_send { dest string } {
+ # Convert LFs to CRs, 'cause that is what VxWorks wants to see.
+ regsub -all "\n" $string "\r" string;
+ verbose "Sending '$string' to $dest" 2
+ return [remote_raw_send $dest "$string"];
+}
+
+proc vxworks_open { dest args } {
+ if [board_info $dest exists fileid] {
+ return [board_info $dest fileid];
+ }
+
+ set shell_prompt [board_info $dest shell_prompt]
+
+ set shell_id [remote_raw_open $dest];
+
+ if { $shell_id == "" || $shell_id < 0 } {
+ return -1;
+ }
+
+ if [board_info $dest exists logname] {
+ set logname [board_info $dest logname];
+ if [board_info $dest exists password] {
+ remote_send $dest "iam \"$logname\",\"[board_info $dest passwd]\"\r"
+ } else {
+ remote_send $dest "iam \"$logname\"\r"
+ }
+
+ remote_expect $dest 30 {
+ "iam*value = 0 = 0x0*$shell_prompt" {
+ verbose "Set default user." 2
+ }
+ timeout {
+ # ??? This is really an error. It's not clear whether `perror'
+ # or `warning' should be used here. There are *lots* of other
+ # cases like this.
+ perror "Couldn't set default user."
+ return -1;
+ }
+ }
+ }
+
+ set dir "";
+ if [board_info $dest exists ftp_directory] {
+ set dir [board_info $dest ftp_directory];
+ }
+ if [board_info $dest exists vxworks_homedir] {
+ set dir [board_info $dest vxworks_homedir];
+ }
+ if { $dir != "" } {
+ set status [remote_exec $dest "cd" "\"$dir\""];
+ if [lindex $status 0] {
+ perror "Error in cd to $dir--[lindex $status 1]";
+ return 1;
+ }
+ }
+ return $shell_id;
+}
+#
+# Load a file into vxworks
+#
+# The result is:
+# 0 - success
+# 1 - failed (eg: link failed so testcase should fail)
+# -1 - unresolved (eg: timeout), may be fixed by rebooting
+#
+proc vxworks_ld { dest prog } {
+ global decimal hex
+ global board_info
+
+ if { $prog == "" } {
+ return 1;
+ }
+
+ set shell_id [remote_open $dest];
+
+ if { $shell_id < 0 } {
+ return -1;
+ }
+
+ set prog [remote_download $dest $prog];
+
+ set shell_prompt [board_info $dest shell_prompt];
+
+ # We always want to exit the program via the code at the end.
+ # If the load fails we want `expect_out' stored in the log and this
+ # saves duplicating that code.
+
+ for { set x 0 ; } { $x < 3 } {incr x; } {
+ remote_send $dest "\n";
+ remote_expect $dest 30 {
+ -re ".*$shell_prompt $" { set x 20; }
+ -re "\\\[VxWorks Boot\\\]:" {
+ remote_send $dest "@\n";
+ sleep 20;
+ exp_continue;
+ }
+ timeout { return -1; }
+ }
+ }
+
+ set tries 0
+ set maxtries 3
+ set result -7 ;# -7 is a local value meaning "not done"
+
+ while { $result == -7 && $tries < $maxtries } {
+ verbose "Loading $prog into vxworks."
+ remote_send $dest "ld < $prog\n";
+ incr tries
+ remote_expect $dest 300 {
+ -re "USER.*command not understood" {
+ perror "Need to set the user and password."
+ set result 1
+ }
+ -re "Stale NFS file handle.*$shell_prompt $" {
+ # Need to retry.
+ }
+ -re "undefined symbol:.*$shell_prompt $" {
+ # This is an error in the testcase, don't call perror.
+ warning "Undefined symbol, $prog not loaded."
+ set result 1
+ }
+ -re "memPartAlloc: block too.*$shell_prompt $" {
+ perror "Not enough memory to load $prog."
+ set result -1
+ }
+ -re "can't open input.*$shell_prompt $" {
+ perror "Can't access $prog."
+ set result 1
+ }
+ -re "value = (-*${decimal}) = ${hex}.*$shell_prompt $" {
+ verbose "Loaded $prog into vxworks."
+ set board_info([board_info $dest name],vx_module) $expect_out(1,string);
+ set result 0
+ }
+ -re "(.*)$shell_prompt $" {
+ warning "Load failed: $expect_out(1,string)"
+ }
+ timeout {
+ warning "Timed out trying load $prog."
+ set result -1
+ }
+ }
+ }
+
+ if { $result && [info exists expect_out(buffer)] } {
+ send_log "$expect_out(buffer)"
+ }
+
+ remote_file $dest delete $prog;
+ return $result
+}
+
+#
+# Start a thread (process) executing
+#
+# The result is:
+# 0 - success
+# 1 - failed (eg: testcase aborted)
+# -1 - unresolved, may be fixed by rebooting
+#
+proc vxworks_run { dest function pargs inp outp } {
+ global hex decimal;
+
+ set shell_prompt [board_info $dest shell_prompt];
+ set output "";
+
+ # There isn't a command to wait for a thread to finish, so we have to keep
+ # polling. Instead, we expect the status wrapper to return an exit
+ # status.
+
+ set status [remote_exec $dest "sp" "$function $pargs" $inp $outp];
+
+ set tid [lindex $status 0];
+
+ # Bad task id, reboot and try again.
+ if { $tid == -1 || $tid == 0 } {
+ return -1;
+ }
+
+ set result 1;
+ # FIXME: The value 300 below should be a parameter.
+ remote_expect $dest 300 {
+ -re "task ${hex} - aborted.*$shell_prompt $" {
+ # FIXME: It's not clear we'll ever get here.
+ verbose "$function aborted"
+ set result 1
+ }
+ -re "\[\r\n\]syntax error\[\r\n\]" {
+ verbose "weirdness after task started"
+ set result -1;
+ }
+ -re "(.*)\\*\\*\\* EXIT code ($decimal)\[\r\n\]" {
+ set output "$expect_out(1,string)";
+ set exit_code "$expect_out(2,string)";
+ if { ($exit_code + 0) != 0 } {
+ set result 1;
+ } else {
+ set result 0;
+ }
+ }
+ -re "Operation Fault.*fault type:" {
+ set result 1;
+ }
+ -re "Bus Error" {
+ # This is here to try to cope with apparently flaky h/w.
+ # This is potentially an error in the testcase, but we don't
+ # really know, do we?
+ warning "Bus Error."
+ set result 1;
+ set output "Bus Error";
+ remote_reboot $dest;
+ }
+ timeout {
+ # Infinite loop? probably.
+ remote_exec $dest "td" "$tid";
+ set result 1;
+ }
+ }
+
+ return [list $result $output];
+}
+
+#
+# Unload the last executable that we loaded, so we can free up its memory.
+#
+proc vxworks_unld { dest } {
+ global board_info;
+
+ if [board_info $dest exists vx_module] {
+ # Vxworks5.0 does not have the unld command.
+ if { [board_info $dest os] != "vxworks5.0" } {
+ remote_exec $dest "unld" "[board_info $dest vx_module]";
+ }
+ unset board_info([board_info $dest name],vx_module);
+ }
+}
+
+#
+# We loop around rebooting the box until either the load and run
+# "work" or we give up.
+#
+proc vxworks_load {dest prog args} {
+ set result "";
+ set output "";
+
+ if { [llength $args] > 0 } {
+ set pargs "[lindex $args 0]";
+ } else {
+ set pargs ""
+ }
+
+ if { [llength $args] > 1 } {
+ set inp "[lindex $args 1]";
+ } else {
+ set inp ""
+ }
+
+ if { [llength $args] > 2 } {
+ set outp "[lindex $args 2]";
+ } else {
+ set outp ""
+ }
+
+ for { set x 0; } { $x < 3 } { incr x } {
+ set status [vxworks_ld $dest $prog];
+ if { $status >= 0 } {
+ if { $status > 0 } {
+ set result "fail";
+ } else {
+ set out [vxworks_run $dest __wrap_main $pargs $inp $outp];
+ set status [lindex $out 0];
+ set output [lindex $out 1];
+ # Get rid of the carriage returns, because they confuse
+ # callers that try to parse the result.
+ regsub -all "\r" $output "" output
+ if { $status != 0 } {
+ if { $status > 0 } {
+ set result "fail";
+ }
+ } else {
+ set result "pass";
+ }
+ }
+ }
+ if { $result != "" } {
+ vxworks_unld $dest;
+ return [list $result $output];
+ }
+ remote_reboot $dest;
+ }
+ return [list "fail" ""];
+}
+
+set_board_info protocol "vxworks"
+# -lm under vxworks isn't needed.
+set_board_info mathlib ""
+set_board_info shell_prompt "->"
+set_board_info needs_status_wrapper 1
+# FTP doesn't work in passive mode to this board.
+set_board_info ftp_no_passive 1
+# Wait 15 seconds after powercycling.
+set_board_info reboot_delay 15
+
+# We don't have sys/unistd.h.
+set_board_info wrap_compile_flags "-DNO_UNISTD_H"
+
+set_board_info gdb_prompt "\[(\]vxgdb\[)\]"
+
+set_board_info is_vxworks 1;
+set_board_info gdb,nosignals 1;
--- /dev/null
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_help="$ac_help
+ --enable-maintainer-mode enable make rules and dependencies not useful
+ (and sometimes confusing) to the casual installer"
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+sitefile=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ case "$ac_option" in
+ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) ac_optarg= ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case "$ac_option" in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir="$ac_optarg" ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build="$ac_optarg" ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file="$ac_optarg" ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir="$ac_optarg" ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ eval "enable_${ac_feature}=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix="$ac_optarg" ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he)
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+ --cache-file=FILE cache test results in FILE
+ --help print this message
+ --no-create do not create output files
+ --quiet, --silent do not print \`checking...' messages
+ --site-file=FILE use FILE as the site file
+ --version print the version of autoconf that created configure
+Directory and file names:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [same as prefix]
+ --bindir=DIR user executables in DIR [EPREFIX/bin]
+ --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
+ --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data in DIR
+ [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data in DIR
+ [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
+ --libdir=DIR object code libraries in DIR [EPREFIX/lib]
+ --includedir=DIR C header files in DIR [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
+ --infodir=DIR info documentation in DIR [PREFIX/info]
+ --mandir=DIR man documentation in DIR [PREFIX/man]
+ --srcdir=DIR find the sources in DIR [configure dir or ..]
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM
+ run sed PROGRAM on installed program names
+EOF
+ cat << EOF
+Host type:
+ --build=BUILD configure for building on BUILD [BUILD=HOST]
+ --host=HOST configure for HOST [guessed]
+ --target=TARGET configure for TARGET [TARGET=HOST]
+Features and packages:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+EOF
+ if test -n "$ac_help"; then
+ echo "--enable and --with options recognized:$ac_help"
+ fi
+ exit 0 ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host="$ac_optarg" ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir="$ac_optarg" ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir="$ac_optarg" ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir="$ac_optarg" ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir="$ac_optarg" ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir="$ac_optarg" ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir="$ac_optarg" ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir="$ac_optarg" ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix="$ac_optarg" ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix="$ac_optarg" ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix="$ac_optarg" ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name="$ac_optarg" ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir="$ac_optarg" ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir="$ac_optarg" ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site="$ac_optarg" ;;
+
+ -site-file | --site-file | --site-fil | --site-fi | --site-f)
+ ac_prev=sitefile ;;
+ -site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*)
+ sitefile="$ac_optarg" ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir="$ac_optarg" ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir="$ac_optarg" ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target="$ac_optarg" ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers)
+ echo "configure generated by autoconf version 2.13"
+ exit 0 ;;
+
+ -with-* | --with-*)
+ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_${ac_package}='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ eval "with_${ac_package}=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes="$ac_optarg" ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries="$ac_optarg" ;;
+
+ -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ ;;
+
+ *)
+ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+ echo "configure: warning: $ac_option: invalid host type" 1>&2
+ fi
+ if test "x$nonopt" != xNONE; then
+ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+ fi
+ nonopt="$ac_option"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+ exec 6>/dev/null
+else
+ exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+ case "$ac_arg" in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+ ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set. These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}" = set; then LANG=C; export LANG; fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=runtest.exp
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_prog=$0
+ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ else
+ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$sitefile"; then
+ if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+ fi
+else
+ CONFIG_SITE="$sitefile"
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ echo "loading site script $ac_site_file"
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ echo "loading cache $cache_file"
+ . $cache_file
+else
+ echo "creating cache $cache_file"
+ > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+ # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+ ac_n= ac_c='
+' ac_t=' '
+ else
+ ac_n=-n ac_c= ac_t=
+ fi
+else
+ ac_n= ac_c='\c' ac_t=
+fi
+
+
+ac_aux_dir=
+for ac_dir in .. $srcdir/..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { echo "configure: error: can not find install-sh or install.sh in .. $srcdir/.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:571: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
+ for ac_dir in $PATH; do
+ # Account for people who put trailing slashes in PATH elements.
+ case "$ac_dir/" in
+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ if test -f $ac_dir/$ac_prog; then
+ if test $ac_prog = install &&
+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+ IFS="$ac_save_IFS"
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL="$ac_cv_path_install"
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL="$ac_install_sh"
+ fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
+echo "configure:624: checking whether build environment is sane" >&5
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments. Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+ set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+ if test "$*" = "X"; then
+ # -L didn't work.
+ set X `ls -t $srcdir/configure conftestfile`
+ fi
+ if test "$*" != "X $srcdir/configure conftestfile" \
+ && test "$*" != "X conftestfile $srcdir/configure"; then
+
+ # If neither matched, then we have a broken ls. This can happen
+ # if, for instance, CONFIG_SHELL is bash and it inherits a
+ # broken ls alias from the environment. This has actually
+ # happened. Such a system could not be considered "sane".
+ { echo "configure: error: ls -t appears to fail. Make sure there is not a broken
+alias in your environment" 1>&2; exit 1; }
+ fi
+
+ test "$2" = conftestfile
+ )
+then
+ # Ok.
+ :
+else
+ { echo "configure: error: newly created file is older than distributed files!
+Check your system clock" 1>&2; exit 1; }
+fi
+rm -f conftest*
+echo "$ac_t""yes" 1>&6
+if test "$program_transform_name" = s,x,x,; then
+ program_transform_name=
+else
+ # Double any \ or $. echo might interpret backslashes.
+ cat <<\EOF_SED > conftestsed
+s,\\,\\\\,g; s,\$,$$,g
+EOF_SED
+ program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
+ rm -f conftestsed
+fi
+test "$program_prefix" != NONE &&
+ program_transform_name="s,^,${program_prefix},; $program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+ program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
+
+# sed with no file args requires a program.
+test "$program_transform_name" = "" && program_transform_name="s,x,x,"
+
+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:681: checking whether ${MAKE-make} sets \${MAKE}" >&5
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftestmake <<\EOF
+all:
+ @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ SET_MAKE=
+else
+ echo "$ac_t""no" 1>&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+PACKAGE=dejagnu
+
+VERSION=20000518
+
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+ { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
+fi
+cat >> confdefs.h <<EOF
+#define PACKAGE "$PACKAGE"
+EOF
+
+cat >> confdefs.h <<EOF
+#define VERSION "$VERSION"
+EOF
+
+
+
+missing_dir=`cd $ac_aux_dir && pwd`
+echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
+echo "configure:727: checking for working aclocal" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (aclocal --version) < /dev/null > /dev/null 2>&1; then
+ ACLOCAL=aclocal
+ echo "$ac_t""found" 1>&6
+else
+ ACLOCAL="$missing_dir/missing aclocal"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
+echo "configure:740: checking for working autoconf" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (autoconf --version) < /dev/null > /dev/null 2>&1; then
+ AUTOCONF=autoconf
+ echo "$ac_t""found" 1>&6
+else
+ AUTOCONF="$missing_dir/missing autoconf"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working automake""... $ac_c" 1>&6
+echo "configure:753: checking for working automake" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (automake --version) < /dev/null > /dev/null 2>&1; then
+ AUTOMAKE=automake
+ echo "$ac_t""found" 1>&6
+else
+ AUTOMAKE="$missing_dir/missing automake"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
+echo "configure:766: checking for working autoheader" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (autoheader --version) < /dev/null > /dev/null 2>&1; then
+ AUTOHEADER=autoheader
+ echo "$ac_t""found" 1>&6
+else
+ AUTOHEADER="$missing_dir/missing autoheader"
+ echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
+echo "configure:779: checking for working makeinfo" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf. Sigh.
+if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
+ MAKEINFO=makeinfo
+ echo "$ac_t""found" 1>&6
+else
+ MAKEINFO="$missing_dir/missing makeinfo"
+ echo "$ac_t""missing" 1>&6
+fi
+
+
+echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
+echo "configure:793: checking whether to enable maintainer-specific portions of Makefiles" >&5
+ # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
+if test "${enable_maintainer_mode+set}" = set; then
+ enableval="$enable_maintainer_mode"
+ USE_MAINTAINER_MODE=$enableval
+else
+ USE_MAINTAINER_MODE=no
+fi
+
+ echo "$ac_t""$USE_MAINTAINER_MODE" 1>&6
+
+
+if test $USE_MAINTAINER_MODE = yes; then
+ MAINTAINER_MODE_TRUE=
+ MAINTAINER_MODE_FALSE='#'
+else
+ MAINTAINER_MODE_TRUE='#'
+ MAINTAINER_MODE_FALSE=
+fi
+ MAINT=$MAINTAINER_MODE_TRUE
+
+
+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:816: checking whether ${MAKE-make} sets \${MAKE}" >&5
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftestmake <<\EOF
+all:
+ @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+ eval ac_cv_prog_make_${ac_make}_set=yes
+else
+ eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ SET_MAKE=
+else
+ echo "$ac_t""no" 1>&6
+ SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
+echo "configure:843: checking for Cygwin environment" >&5
+if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 848 "configure"
+#include "confdefs.h"
+
+int main() {
+
+#ifndef __CYGWIN__
+#define __CYGWIN__ __CYGWIN32__
+#endif
+return __CYGWIN__;
+; return 0; }
+EOF
+if { (eval echo configure:859: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_cygwin=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_cygwin=no
+fi
+rm -f conftest*
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_cygwin" 1>&6
+CYGWIN=
+test "$ac_cv_cygwin" = yes && CYGWIN=yes
+echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
+echo "configure:876: checking for mingw32 environment" >&5
+if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 881 "configure"
+#include "confdefs.h"
+
+int main() {
+return __MINGW32__;
+; return 0; }
+EOF
+if { (eval echo configure:888: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_mingw32=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_mingw32=no
+fi
+rm -f conftest*
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_mingw32" 1>&6
+MINGW32=
+test "$ac_cv_mingw32" = yes && MINGW32=yes
+
+
+echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
+echo "configure:907: checking for executable suffix" >&5
+if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
+ ac_cv_exeext=.exe
+else
+ rm -f conftest*
+ echo 'int main () { return 0; }' > conftest.$ac_ext
+ ac_cv_exeext=
+ if { (eval echo configure:917: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+ for file in conftest.*; do
+ case $file in
+ *.c | *.o | *.obj | *.ilk | *.pdb) ;;
+ *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
+ esac
+ done
+ else
+ { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; }
+ fi
+ rm -f conftest*
+ test x"${ac_cv_exeext}" = x && ac_cv_exeext=no
+fi
+fi
+
+EXEEXT=""
+test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext}
+echo "$ac_t""${ac_cv_exeext}" 1>&6
+ac_exeext=$EXEEXT
+
+
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:941: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CC="gcc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:971: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_prog_rejected=no
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# -gt 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ set dummy "$ac_dir/$ac_word" "$@"
+ shift
+ ac_cv_prog_CC="$@"
+ fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test -z "$CC"; then
+ case "`uname -s`" in
+ *win32* | *WIN32*)
+ # Extract the first word of "cl", so it can be a program name with args.
+set dummy cl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1022: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CC="cl"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+ ;;
+ esac
+ fi
+ test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:1054: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 1065 "configure"
+#include "confdefs.h"
+
+main(){return(0);}
+EOF
+if { (eval echo configure:1070: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ ac_cv_prog_cc_works=yes
+ # If we can't run a trivial program, we are probably using a cross compiler.
+ if (./conftest; exit) 2>/dev/null; then
+ ac_cv_prog_cc_cross=no
+ else
+ ac_cv_prog_cc_cross=yes
+ fi
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+ { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:1096: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:1101: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.c <<EOF
+#ifdef __GNUC__
+ yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1110: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ ac_cv_prog_gcc=yes
+else
+ ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:1129: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+ ac_cv_prog_cc_g=yes
+else
+ ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:1172: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
+ for ac_dir in $PATH; do
+ # Account for people who put trailing slashes in PATH elements.
+ case "$ac_dir/" in
+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
+ if test -f $ac_dir/$ac_prog; then
+ if test $ac_prog = install &&
+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+ IFS="$ac_save_IFS"
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL="$ac_cv_path_install"
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL="$ac_install_sh"
+ fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+BOARDS='$(boards)'
+
+CONFIG='$(config)'
+
+
+subdirs="example/calc"
+
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs. It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already. You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote substitution
+ # turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ -e "s/'/'\\\\''/g" \
+ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+ ;;
+ esac >> confcache
+if cmp -s $cache_file confcache; then
+ :
+else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+cat > conftest.defs <<\EOF
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
+s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
+s%\[%\\&%g
+s%\]%\\&%g
+s%\$%$$%g
+EOF
+DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+rm -f conftest.defs
+
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+ case "\$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "$CONFIG_STATUS generated by autoconf version 2.13"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "\$ac_cs_usage"; exit 0 ;;
+ *) echo "\$ac_cs_usage"; exit 1 ;;
+ esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile doc/Makefile example/Makefile testsuite/Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@PACKAGE@%$PACKAGE%g
+s%@VERSION@%$VERSION%g
+s%@ACLOCAL@%$ACLOCAL%g
+s%@AUTOCONF@%$AUTOCONF%g
+s%@AUTOMAKE@%$AUTOMAKE%g
+s%@AUTOHEADER@%$AUTOHEADER%g
+s%@MAKEINFO@%$MAKEINFO%g
+s%@SET_MAKE@%$SET_MAKE%g
+s%@MAINTAINER_MODE_TRUE@%$MAINTAINER_MODE_TRUE%g
+s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%g
+s%@MAINT@%$MAINT%g
+s%@EXEEXT@%$EXEEXT%g
+s%@CC@%$CC%g
+s%@BOARDS@%$BOARDS%g
+s%@CONFIG@%$CONFIG%g
+s%@subdirs@%$subdirs%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+ else
+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ fi
+ if test ! -s conftest.s$ac_file; then
+ ac_more_lines=false
+ rm -f conftest.s$ac_file
+ else
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f conftest.s$ac_file"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ fi
+ ac_file=`expr $ac_file + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ fi
+done
+if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile doc/Makefile example/Makefile testsuite/Makefile"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ case "$ac_given_INSTALL" in
+ [/$]*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
+if test "$no_recursion" != yes; then
+
+ # Remove --cache-file and --srcdir arguments so they do not pile up.
+ ac_sub_configure_args=
+ ac_prev=
+ for ac_arg in $ac_configure_args; do
+ if test -n "$ac_prev"; then
+ ac_prev=
+ continue
+ fi
+ case "$ac_arg" in
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ ;;
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ ;;
+ *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;;
+ esac
+ done
+
+ for ac_config_dir in example/calc; do
+
+ # Do not complain, so a configure script can configure whichever
+ # parts of a large source tree are present.
+ if test ! -d $srcdir/$ac_config_dir; then
+ continue
+ fi
+
+ echo configuring in $ac_config_dir
+
+ case "$srcdir" in
+ .) ;;
+ *)
+ if test -d ./$ac_config_dir || mkdir ./$ac_config_dir; then :;
+ else
+ { echo "configure: error: can not create `pwd`/$ac_config_dir" 1>&2; exit 1; }
+ fi
+ ;;
+ esac
+
+ ac_popdir=`pwd`
+ cd $ac_config_dir
+
+ # A "../" for each directory in /$ac_config_dir.
+ ac_dots=`echo $ac_config_dir|sed -e 's%^\./%%' -e 's%[^/]$%&/%' -e 's%[^/]*/%../%g'`
+
+ case "$srcdir" in
+ .) # No --srcdir option. We are building in place.
+ ac_sub_srcdir=$srcdir ;;
+ /*) # Absolute path.
+ ac_sub_srcdir=$srcdir/$ac_config_dir ;;
+ *) # Relative path.
+ ac_sub_srcdir=$ac_dots$srcdir/$ac_config_dir ;;
+ esac
+
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f $ac_sub_srcdir/configure; then
+ ac_sub_configure=$ac_sub_srcdir/configure
+ elif test -f $ac_sub_srcdir/configure.in; then
+ ac_sub_configure=$ac_configure
+ else
+ echo "configure: warning: no configuration information is in $ac_config_dir" 1>&2
+ ac_sub_configure=
+ fi
+
+ # The recursion is here.
+ if test -n "$ac_sub_configure"; then
+
+ # Make the cache file name correct relative to the subdirectory.
+ case "$cache_file" in
+ /*) ac_sub_cache_file=$cache_file ;;
+ *) # Relative path.
+ ac_sub_cache_file="$ac_dots$cache_file" ;;
+ esac
+ case "$ac_given_INSTALL" in
+ [/$]*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+
+ echo "running ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir"
+ # The eval makes quoting arguments work.
+ if eval ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir
+ then :
+ else
+ { echo "configure: error: $ac_sub_configure failed for $ac_config_dir" 1>&2; exit 1; }
+ fi
+ fi
+
+ cd $ac_popdir
+ done
+fi
+
+
--- /dev/null
+dnl Process this file with autoconf to produce a configure script.
+AC_PREREQ(2.13)
+AC_INIT(runtest.exp)
+AC_CONFIG_AUX_DIR(..)
+
+dnl These are required by automake
+AM_INIT_AUTOMAKE(dejagnu, 20000518)
+AM_MAINTAINER_MODE
+AC_PROG_MAKE_SET
+AC_EXEEXT
+
+AC_PROG_CC
+AC_PROG_INSTALL
+
+dnl Level of indirection for automake macro (baseboards:boards_DATA)
+BOARDS='$(boards)'
+AC_SUBST(BOARDS)
+CONFIG='$(config)'
+AC_SUBST(CONFIG)
+
+AC_CONFIG_SUBDIRS(example/calc)
+
+AC_OUTPUT(Makefile doc/Makefile example/Makefile testsuite/Makefile)
+
--- /dev/null
+These are "user" contributed scripts that automate testing. These all
+depend on using "make check", so they are included here as an aid to
+helping others automate their own testing. All of these script do
+report filtering on the output from DejaGnu. test-tool and test-g++
+are basically the same script. test-target is the script I use for our
+quarterly release and it is the most sophisticated. It still uses
+"make check" (a make target that start runtest) to produce the
+results, but tests our entire tool chain for native and crosses. It
+also produces a short summary report that gets emailed, as well as
+summary reports. It does regression analysis using the previous test
+run. testit is a very crude and simple Tk GUI for accessing all the
+testing results. Hope these are helpful to anyone, I'd like to collect
+more from the net as they get developed.
+
+ - rob -
+
--- /dev/null
+## @configure_input@
+# Makefile for BlueGnu Testing Framework.
+# Copyright (C) 1988, 1990, 1991, 1992, 1994, 1995 Free Software Foundation, # Copyright (C) 1998 jotOmega dsc, Inc.
+
+#This file is part of BlueGnu.
+
+#BlueGnu is open 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, or (at your option)
+#any later version.
+
+#BlueGnu 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 BlueGnu; see the file COPYING. If not, write to
+#the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+VPATH = @srcdir@
+srcdir = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = $(exec_prefix)/bin
+libdir = $(exec_prefix)/lib
+
+datadir = $(libdir)/bluegnu
+infodir = $(prefix)/info
+includedir = $(prefix)/include
+gxx_includedir = $(tooldir)/g++-include
+docdir = $(datadir)/doc
+
+SHELL = /bin/sh
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_DATA = @INSTALL_DATA@
+
+CC = @CC@
+CFLAGS = -g
+
+SUBDIRS = @subdirs@
+
+# These let the BlueGnu test suite run when BlueGnu isn't
+# installed yet, so run it from the srcdir and objdir.
+EXPECT = ` \
+ if [ -f $${rootme}/../expect/expect ] ; then \
+ echo $${rootme}/../expect/expect ; \
+ else echo expect ; fi`
+
+BLUEGNUFLAGS =
+BLUEGNU = ` \
+ if [ -f ${srcdir}/bluegnu ] ; then \
+ echo ${srcdir}/bluegnu ; \
+ else echo bluegnu ; fi`
+
+TCLIBRARY = `if [ -f $${rootme}/expect/expect ] ; \
+ then echo TCL_LIBRARY=$${srcdir}/../tcl/library ; \
+ else echo "" ; fi`
+
+FLAGS_TO_PASS = \
+ "CC=$(CC)" \
+ "CFLAGS=$(CFLAGS)" \
+ "INSTALL=$(INSTALL)" \
+ "INSTALL_DATA=$(INSTALL_DATA)" \
+ "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
+ "LDFLAGS=$(LDFLAGS)" \
+ "MAKEINFO=$(MAKEINFO)" \
+ "EXPECT=$(EXPECT)" \
+ "TCLIBRARY=$(TCLIBRARY)" \
+ "BLUEGNU=$(BLUEGNU)" \
+ "BLUEGNUFLAGS=$(BLUEGNUFLAGS)" \
+ "exec_prefix=$(exec_prefix)" \
+ "prefix=$(prefix)" \
+ "tooldir=$(tooldir)"
+
+all: force
+ @$(MAKE) subdir_do DO=$@ $(FLAGS_TO_PASS)
+
+contents: force
+ ls -lLAR -I CVS -I Makefile \
+ -I config.status -I config.log -I config.cache \
+ -I READMEdvi -I calc.h > $@
+
+.PHONY: check installcheck
+installcheck:
+
+.NOEXPORT:
+
+MAKEOVERRIDES=
+
+INFODIRS=doc
+dvi info:
+ @rootme=`pwd`/ ; export rootme ; \
+ rootsrc=`cd $(srcdir); pwd`/ ; export rootsrc ; \
+ $(MAKE) subdir_do DO=$@ "DODIRS=$(INFODIRS)" $(FLAGS_TO_PASS)
+
+install-info:
+ @rootme=`pwd`/ ; export rootme ; \
+ $(MAKE) subdir_do DO=install-info $(FLAGS_TO_PASS)
+
+install:
+ ${srcdir}/mkinstalldirs $(bindir) $(datadir)
+ $(INSTALL_PROGRAM) $(srcdir)/runtest $(bindir)/runtest
+ $(INSTALL_PROGRAM) $(srcdir)/runtest.exp $(datadir)/runtest.exp
+ $(INSTALL_PROGRAM) $(srcdir)/dejagnu $(bindir)/dejagnu
+ $(INSTALL_PROGRAM) $(srcdir)/bluegnu $(bindir)/bluegnu
+ $(INSTALL_PROGRAM) $(srcdir)/bluegnutk $(bindir)
+ $(INSTALL_PROGRAM) $(srcdir)/bluegnutk.itcl $(bindir)
+ $(INSTALL_PROGRAM) $(srcdir)/bluegnutk.rc $(bindir)
+ $(INSTALL_PROGRAM) $(srcdir)/bluegnutkUtils.itcl $(bindir)
+ $(INSTALL_PROGRAM) $(srcdir)/config.guess $(datadir)/config.guess
+ -for file in $(srcdir)/lib/*.exp; \
+ do \
+ $(INSTALL_DATA) $$file $(datadir) ; \
+ done
+ -for file in $(srcdir)/lib/*.tcl; \
+ do \
+ $(INSTALL_DATA) $$file $(datadir) ; \
+ done
+ -for file in $(srcdir)/lib/*.itcl; \
+ do \
+ $(INSTALL_DATA) $$file $(datadir) ; \
+ done
+ $(INSTALL_DATA) $(srcdir)/lib/tclIndex $(datadir)
+ @$(MAKE) subdir_do DO=install $(FLAGS_TO_PASS)
+
+subdir_do: force
+ @for i in $(SUBDIRS); do \
+ echo "Making $(DO) in $${i}..." ; \
+ if [ -d ./$$i ] ; then \
+ if (rootme=`pwd`/ ; export rootme ; \
+ rootsrc=`cd $(srcdir); pwd`/ ; export rootsrc ; \
+ cd ./$$i; \
+ $(MAKE) $(FLAGS_TO_PASS) $(DO)) ; then true ; \
+ else exit 1 ; fi ; \
+ else true ; fi ; \
+ done
+force:
+
+clean mostlyclean:
+ @echo "Doing clean mosttlyclean +++++"
+ -rm -f \#* *~ core *.o a.out xgdb *.x
+ $(MAKE) subdir_do DO=$@ $(FLAGS_TO_PASS)
+ @for l in `find . -name logs`; do rm -fr $$l; done
+ @for f in `find . -name '*~'`; do rm -fr $$f; done
+
+distclean: clean
+ @echo "Doing distclean +++++"
+ $(MAKE) subdir_do DO=$@ $(FLAGS_TO_PASS)
+ -rm -f Makefile *-init.exp site.bak site.exp conftest.c
+ -rm -f config.status config.log config.cache
+ -rm -fr *.log summary detail *.sum blockit
+
+maintainer-clean realclean:
+ @echo "Doing maintainer-clean realclean +++++"
+ $(MAKE) subdir_do DO=$@ $(FLAGS_TO_PASS)
+ -rm -f Makefile *-init.exp site.bak site.exp conftest.c
+ -rm -f config.status config.log config.cache
+ -rm -fr *.log summary detail *.sum blockit
+ -rm -f README.bluegnu contents
+
+check:
+ @if [ -f testsuite/Makefile ]; then \
+ rootme=`pwd`; export rootme; \
+ cd testsuite; \
+ $(MAKE) $(FLAGS_TO_PASS) check; \
+ else true; fi
+
+Makefile: $(srcdir)/Makefile.in config.status
+ @echo "Rebuilding the Makefile..."
+ $(SHELL) ./config.status
+
+configure: $(srcdir)/configure.in $(srcdir)/Makefile.in $(srcdir)/aclocal.m4
+ @echo "Rebuilding configure..."
+ @if [ x"${srcdir}" = x"@srcdir@" ] ; then \
+ srcdir=. ; export srcdir ; \
+ else true ; fi ; \
+ (cd $${srcdir}; autoconf)
+
+config.status:
+ @echo "Rebuilding config.status..."
+ $(SHELL) ./config.status --recheck
--- /dev/null
+
+
+
+
+
+
+
+
+ Release Notice
+
+ BlueGnu Testing Framework
+
+ Version 2.0.3
+
+ Jan-Willem Neurdenburg
+
+ jotOmega dsc
+
+
+ 56 Brigham Hill Road
+
+ Grafton MA 01519-1135
+
+ neurdenburgj@acm.org
+
+
+ Tel: (508) 839-0276
+
+ Fax: (508) 839-7267
+
+ September 19, 1999
+
+
+1 Introduction
+
+BlueGnu is a framework for testing other programs. It has been
+created to be compatible with DejaGnu. Its purpose is to provide
+a single front end for all tests. Beyond this, BlueGnu offers
+several advantages for testing:
+
+ * The flexibility and consistency of the BlueGnu framework
+ makes it easy to write tests for any program, with the
+ exception of GUI applications.
+
+ * BlueGnu provides a layer of abstraction, which makes all
+ tests (if correctly written) portable to any host or target
+ where a program must be tested.
+ * BlueGnu is written in [incr Tcl], which in turn is based on
+ Tcl (Tool Command Language). The framework comprises two
+ parts:
+
+
+
+ 1
+\f
+
+
+
+
+ 1. the testing framework,
+
+ 2. the test-suites or test-sets themselves.
+ * BlueGnu will work with any Tcl based interpreter as long as
+ [incr Tcl] has been included. You can include 'expect',
+ 'Tk', and/or other extensions.
+
+ * Includes DejaGnu release 1.6
+
+
+2 Requirements
+The following modules should have been installed, before you can
+install and/or use BlueGnu:
+
+ * Tcl release 8.0 or higher,
+
+ * incr Tcl release 3.0 or higher.
+
+ Any other extensions that is compatible with Tcl release 8.0
+can be used as well.
+
+
+3 Structure and Contents of the Release
+The root directory of the release contains the README files
+with installation instructions and the files needed to build and
+install this product. It also contains the executable scripts of
+the BlueGnu testing framework.
+ The top-level directories are listed below:
+
+lib: the packages and procedures that make the BlueGnu and
+ DejaGnu testing framework. This also includes the default
+ target definition files.
+
+testsets: the BlueGnu test-suites and test examples. It contains
+ the following subdirectories.
+
+ BlueGnu: test scripts to test the testing framework itself.
+ examples: test suite and test script examples.
+ config, lib, tools: currently empty, but can be used for
+ test-set dependent configuration files, library files,
+ and tools.
+
+config: currently empty.
+
+
+
+
+
+ 2
+\f
+
+
+
+
+doc: the DejaGnu texinfo source and the documentation in
+ 'info', 'dvi', 'ps', and 'pdf' representation, respectively
+ dejagnu.info*, dejagnu.dvi, dejagnu.ps, and dejagnu.pdf. A
+ DejaGnu man page is also available.
+
+ It also contains the TeX version (README.tex) of this
+ document as well as the 'dvi', 'ps' 'html', and
+ 'pdf' representation, respectively notice.dvi, notice.ps,
+ notice.html, and notice.pdf.
+testsuite: contains a mixture of DejaGnu and BlueGnu test
+ scripts.
+
+contrib: contains examples how DejaGnu is used at Cygnus.
+example: contains a full DejaGnu test framework example for
+ testing the program 'calc' which is also included.
+
+
+4 Installation and use under Unix
+
+Before you can install and use BlueGnu you need to have installed
+the following three packages:
+ * Tcl version 8.0.3
+
+ * Tk version 8.0.3
+ * incr Tcl version 3.0.1
+
+The source for these packages should all be located in one
+directory. The subdirectory in the directory should be:
+ * tcl8.0.3
+ * tk8.0.3
+
+ * itcl3.0.1
+ The following examples use the command `./configure --
+prefix=/tools/...`. This will install all packages in a
+directory ``/tools''. When you omit the ``--prefix''-switch then
+the installation default will be the directory ``/usr/local''.
+
+
+4.1 Installation of needed Packages
+When you have not installed Tcl and the other needed
+extensions, then you need to retrieve the sources from
+``www.tcltk.com/itcl''. You need to `gunzip` the files and do a
+`tar xf` of all these packages in one directory, let's call this
+directory ``TclTk''.
+ From the directory ``TclTk'', you should do the following to
+install the packages:
+
+
+ 3
+\f
+
+
+
+
+% cd tcl8.0.3/unix
+% ./configure --prefix=/tools/tcl8.0.3 --enable-gcc --enable-
+shared
+% make
+% mkdir /tools/tcl8.0.3
+% make install
+% cd ../../tk8.0.3/unix
+% ./configure --prefix=/tools/tk8.0.3 --enable-gcc --enable-
+shared
+% make
+% mkdir /tools/tk8.0.3
+% make install
+% cd ../../itcl3.0.1
+% ./configure --prefix=/tools/itcl3.0.1 --enable-gcc --enable-
+shared
+% make
+% mkdir /tools/itcl3.0.1
+% make install
+
+
+4.2 Installing BlueGnu
+You can now `gunzip` and `tar xf` the BlueGnu version 2.0.3
+in the directory ``TckTk''. This will create the directory
+``bluegnu2.0.3''. Now do the following:
+
+% cd bluegnu2.0.3
+% ./configure --prefix=/tools/bluegnu2.0.3
+% make
+% mkdir /tools/bluegnu2.0.3
+% make install
+
+ This will install BlueGnu in the directories:
+ * /tools/bluegnu2.0.3/bin
+
+ * /tools/bluegnu2.0.3/lib/bluegnu
+
+ * /tools/bluegnu2.0.3/info
+ * /tools/bluegnu2.0.3/man
+
+
+4.3 Using BlueGnu
+When you have installed [incr Tcl] and BlueGnu and you have the
+respective ``bin'' directories in your PATH variable, then you
+can start running some tests. You can go into the BlueGnu
+source directory ``bluegnu2.0.3/testsets/examples'' and run the
+following:
+
+
+ 4
+\f
+
+
+
+
+% bluegnu versionTcl.itcl
+% bluegnu ts_001
+% bluegnu ts_002
+% bluegnu ts_003
+
+ The above test result should all be PASS. The following test
+will give a result UNKNOWN, because no pass/fail instruction have
+been given.
+
+% bluegnu tc001
+
+ The last test you can run will fail in its simple form:
+% bluegnu tc002
+
+ But will pass if you execute the test as follows:
+
+% bluegnu tc002[English]
+
+ This is because the test scripts need a test case identifier
+to find the correct benchmark code.
+
+5 Changes
+
+5.1 Version 2.0.3
+
+This being the first public release it is not to useful to
+list all the changes. BlueGnu has been modeled after DejaGnu
+and is a complete new implementation which has been tested
+thoroughly. When documentation is being written more changes
+will be made. An example of some of these changes as a result of
+this documentation effort can be found in the test-suites ts_001,
+ts_002, and ts_003. The first two are not as easy to write as
+the third. The test suite ts_001 is a script implementation of
+the command line:
+
+% cd bluegnu2.0.3/testsets
+% bluegnu examples/tc002[English=B] \
+> "examples/tc002[Dutch=B]={MSG=Hallo Wereld}"
+This may be useful for simple tests but when you want to
+write more complex test-suite scripts you would like some more
+flexibility, so two procedures were introduced, which are shown
+in test-suite ts_002. This makes writing rather complex so
+the procedures have become part of the procedures 'appendQueue',
+'prependQueue', and 'runtest'. The resulting script is shown in
+test-suit ts_003.
+ Changes like this will be made in the future!
+
+
+ 5
+\f
+
+
+
+
+6 Future Enhancements
+
+The following enhancements are being planned:
+
+ * Target code will be made into a class with methods
+ 'start', 'load', 'exit', and 'version'. Instead of the
+ current '<target>_start', '<target>_load', '<target>_exit',
+ and '<target>_version', which have been taken from DejaGnu.
+ * Procedures will be created that make it easy to test WEB
+ application from the framework.
+
+ * Other enhancements will be made depending on the use of the
+ framework in testing different applications.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 6
+\f
\ No newline at end of file
--- /dev/null
+ DejaGnu is a framework for testing other programs. Its purpose is to
+provide a single front end for all tests. Beyond this, DejaGnu offers
+several advantages for testing:
+
+ - The flexibility and consistency of the DejaGnu framework
+ make it easy to write tests for any program.
+
+ - DejaGnu provides a layer of abstraction which makes all
+ tests (if correctly written) portable to any host or target
+ where a program must be tested. For instance, a test for
+ GDB can run (from any Unix based host) on any target
+ architecture supported by DejaGnu. Currently DejaGnu runs
+ tests on several single board computers, whose operating
+ software ranges from just a boot monitor to a full-fledged,
+ Unix-like realtime OS.
+
+ - DejaGnu is written in expect, which in turn uses Tcl
+ (Tool command language). The framework comprises two parts:
+ the testing framework and the testsuites themselves. Tests
+ are usually written in expect using Tcl.
+
+ Bugs can be reported to bug-dejagnu@prep.ai.mit.edu.
+
+ How To Configure and Build
+
+ To build DejaGnu, run the ``configure'' script here, e.g.:
+
+ ./configure MYHOSTTYPE
+
+followed by running ``make''. (MYHOSTTYPE is a name for your host computer,
+for instance "sun4". You can use the script ``config.sub'' to test whether
+a name is recognized; if it is, config.sub translates it to a triplet
+specifying CPU, vendor, and OS.) This is used when you plan to
+configure and build in the source tree.
+
+ If you use a separate tree for object files, (the recommended way),
+then the --srcdir option must also be specified. This would also
+require that the configure script be run from the top level directory.
+
+ PATH/configure MYHOSTYPE --srcdir PATH/dejagnu
+
+where PATH is is the directory that the contains the sources.
+
+ To configure it so it gets installed somewhere other than the
+default of /usr/local, use the --prefix option.
+
+ configure MYHOSTYPE --prefix [PATH]
+
+where PATH is the prefix used to install the programs.
+
+ The configure testing and building will use the native compiler "cc"
+on your host machine. To change which compiler gets used (like gcc)
+set a the variable "CC" in your environment to point to it.
+
+ For csh users: "setenv CC gcc"
+ For bourne shell users: "CC=gcc;export CC"
+
+ Then when you compile, use "make CC=$CC".
+
+See etc/cfg-paper.texi, etc/configure.texi, and/or the README files in
+various subdirectories, for more details.
+
+ As DejaGnu is a Tcl program, there is nothing to build. However, the
+documentation is not built by default. Use these targets:
+"make info" - Convert the texinfo document to something that can
+ be used the GNU info program or info mode in emacs.
+"make dvi" - Convert the texinfo document to something that can
+ be printed. This produces dvi output.
+"make doc" - This builds both.
+"make ps" - This converts the dvi file into postscript. This
+ requires a copy of dvips.
+"make install" - This installs DejaGnu based on the --prefix option
+ when configuring. Otherwise it defaults to
+ /usr/local. See the DejaGnu manual for more
+ information on installation.
+
+ Changes from 1.1.1
+ 1. Works with (included in release) Tcl 7.3 and Expect 5.6.
+ 2. Much better error trapping and handling, including the
+ execution of sub scripts.
+ 3. Re-worked configuration subsystem.
+ 4. Default handling for testing unknown targets.
+ 5. New testsuite for expect and runtest.
+ 6. More debugging procedures.
+
+ Changes from 1.0
+
+ 1. DejaGnu now conforms to POSIX 1003.3, a standard for
+ testing frameworks.
+ 2. A Tcl debugger written by Don Libes has been added.
+ 3. Lots of bug fixes.
+
+ Changes from 0.9
+
+ 1. DejaGnu now installs itself like other utilities.
+ 2. 700 G++ tests are included.
+ 3. The bugs in the GCC tests have been fixed.
+ 4. Testsuites are released separately.
+ 5. Testsuite sources now reside with the within each tool's
+ source tree.
+
+-------------------------------------------------------------------
+Here's is a posting on the Free OS testing project. (FROST)
+-------------------------------------------------------------------
+If you have built up your own tests for system calls, library
+routines, networking protocols, or common utilities, this posting
+offers you an opportunity to put them to good use. You can do a good
+deed for the Linux community, the Berkeley UNIX community, and the
+wider world of free software users.
+
+Also, if you would like to learn some good test tools and strategies,
+and devote some time on a volunteer basis to writing tests -- perhaps
+a couple of weeks full-time, or a couple hours per week over a period
+of several months -- then here is a project you should get involved
+in.
+
+I am helping to coordinate a test effort for Linux. In the following
+four sections of this message I will describe the goals, the process,
+the people trying to do it, and what you can do to help.
+
+Goals
+
+ Linux and BSD share a number of libraries and utilities, both
+ because BSD software was ported to Linux, and because several free
+ software (GNU) utilities have been ported to both operating
+ systems.
+
+ Linux shows startling differences and failures as you move from one
+ set of hardware to another. People who hope to base their own
+ commercial products on Linux would like to see proof that it is
+ robust, portable, and standard-conforming. The problem is that
+ cross-platform testing is very hard to do, and few decent test
+ suites exist either for free software or for UNIX. (Look at all the
+ differences you find among systems that are SVID-conforming,
+ particularly at higher levels such as the utilities.)
+
+ Therefore, a number of us who are interested n Linux have decided to
+ enter the modern age of formal, automated software testing -- but in
+ a manner that is proper for the free software community.
+
+ Using DejaGnu, a test platform developed by Cygnus Support and
+ placed under the GPL, we want to collect the best tests we can from
+ people everywhere, and integrate them into suites that any user can
+ download, run, and interpret with a few commands. DejaGnu already
+ runs under BSD, and Cygnus is porting it to Linux.
+
+ Our goal is to test as many parts of the system as possible,
+ including system calls (particularly for POSIX 1003.1 compliance),
+ libraries in the official distribution, networking protocols,
+ and utilities. We need help with
+
+ 1) integrating good tests donated by the community (and probably
+ written in a variety of programming languages and command
+ shells) into the DejaGnu framework, and
+
+ 2) writing new tests for major functional areas for which no
+ adequate tests exist.
+
+ The tests we use will be placed under the GPL and distributed by
+ Cygnus Support along with DejaGnu. H. J. Lu, who maintains the C
+ library for Linux, has offered to run the POSIX 1003.1 tests and as
+ many others as he can.
+
+Process
+
+ First let me summarize the advantages of using DejaGnu, a free
+ software product that will be the umbrella for all the tests, and
+ then explain how we plan to conduct this project.
+
+ Cygnus Support released DejaGnu to the public on January 3, along
+ with several test suites for GNU language tools. The product is
+ designed for portability and easy cross-platform development and
+ execution. It works more uniformly than typical tests using the
+ UNIX shell, and also supports interactive testing better than most
+ test platforms -- for instance, Cygnus has written over 1300 unit
+ tests for the gdb debugger using it.
+
+ The implementation of DejaGnu is based on tcl and expect, two simple
+ existing languages for writing commands. You can develop new tests
+ in two major ways: by placing keyword-based comments in C source
+ code, or by writing tests in tcl.
+
+ While Cygnus is still increasing their body of tests for language
+ tools, they are also turning their resources toward the libraries
+ and GNU utilities. While most of the tests are written at Cygnus,
+ they have reached out to communities of testers and are now porting
+ substantial sets of donated tests.
+
+ We are hoping to broaden this successful use of collaboration across
+ user communities. We hope that suites of useful tests are sitting
+ in desk drawers out there. We also hope to gather and mobilize
+ people who appreciate the value of formal tests in legitimizing free
+ software, and would like to help write them.
+
+ I am not an employee of Cygnus, but have volunteered to talk to
+ interested people and do an initial classification of tests, just to
+ offload some of this routine work from them. I will discuss all
+ offers with Cygnus staff to find out what is most needed and decide
+ which tests to incorporate into DejaGnu. There are several criteria
+ for choosing tests, including the degree to which an area is
+ covered, and its importance in the overall stability of the
+ operating system. Some tests may have to be rejected just because
+ they are hard to fit into the DejaGnu model.
+
+People
+
+ Now you can find out why each of us got involved with this project.
+
+ Cygnus writes and distributes free software, selling support as a
+ means to make money. The company is not directly in the business of
+ supporting operating systems or common UNIX utilities, so this kind
+ of testing is tangential to their main goals. But they may want to
+ support those things in the future. In any case, they would like to
+ see Linux do well, and this big test project will be a good
+ promotion for DejaGnu.
+ H. K. Lu, as a volunteer for Linux, has been using his own system to
+ implement, port, maintain, and ensure ANSI and POSIX compliance for
+ the C library (mostly the GNU C library along with the iostream
+ class from the g++ library). He is looking for ways to validate the
+ work that he and many other contributors have put in.
+
+ As an editor at a publisher of computer books, my relationship to
+ Linux and BSD is even more distant than that of Cygnus. But we are
+ thinking about putting out books about Linux, from either the Linux
+ Documentation Project or independent authors, and would like to make
+ sure Linux is stable enough to be documented. The testing of
+ utilities is particularly important to me, because it can provide
+ quality assurance for our books, including the BSD version of UNIX
+ in a Nutshell.
+
+What you can do
+
+ We ask people who have written tests in the areas I have described
+ to donate them to this project and see them benefit the public.
+ Don't just send me stuff -- write or call to discuss what you've got
+ in general. You also have to assign the tests to the Free Software
+ Foundation (a simple matter, so long as you are the owner of the
+ tests) so that they can be distributed under the GPL.
+
+ Also, please don't starting flaming about the GPL. Either join our
+ project and donate your tests, or don't. Personally, I do not take
+ a side in this war.
+
+ People who are interested in testing as a discipline, and have some
+ time to donate, are invited to contact me to help write tests. Tell
+ me:
+
+ Your knowledge of computer languages and tools
+
+ Previous software test efforts you have engaged in, if any
+
+ How much time you can devote
+
+ What functional areas you think are important and have a
+ particular interest in
+
+ Cygnus staff will tell volunteers which areas need testing, and
+ offer guidance while you learn and apply DejaGnu. The most
+ important trait for the project is rigorous thinking along the lines
+ of software quality (so the best preparation is to have done some
+ formal testing before). You do not need to know any particular
+ language or tool; you can learn tcl or other aspects of DejaGnu
+ fairly quickly.
+
+ Contact information for me is in my signature. I am at the phone
+ number during traditional U.S. business hours. So send mail any
+ time, or try calling from Monday through Friday, 9:00 AM to 5:00 PM,
+ Eastern Daylight Saving Time (four hours later than Greenwich Mean
+ Time).
+
+ Feel free to distribute and repost this message elsewhere, in its
+ entirety.
+
+----------------------------------------------------------------------
+Andy Oram O'Reilly & Associates, Inc. andyo@ora.com
+ 90 Sherman Street, Cambridge, MA 02140 (617) 354-5800
+ fax (617) 661-1116
+----------------------------------------------------------------------
+
+There is a new listserv based mailing list for the FROST project. To
+subscribe, send email to "listserv@cygnus.com" and the body should
+contain "SUBSCRIBE FROST <your name>". Messages sent to
+frost@cygnus.com go to the mailing list.
\ No newline at end of file
--- /dev/null
+ Thu Mar 16 17:34:33 MST 1995
+
+. Add more support for target boards and realtime OS's.
+. Use the new expect terminal support for an "escape codes" API.
+. Use expectk and write a GUI testing API, complete with
+ record/playback.
+. Add a "testing methodologies" section to the manual.
--- /dev/null
+dnl This file is duplicated in four places:
+dnl * gdb/aclocal.m4
+dnl * gdb/testsuite/aclocal.m4
+dnl * expect/aclocal.m4
+dnl * dejagnu/aclocal.m4
+dnl Consider modifying all copies in parallel.
+dnl written by Rob Savoye <rob@welcomehome.org> for Cygnus Support
+dnl CYGNUS LOCAL: This gets the right posix flag for gcc
+AC_DEFUN(CY_AC_TCL_LYNX_POSIX,
+[AC_REQUIRE([AC_PROG_CC])AC_REQUIRE([AC_PROG_CPP])
+AC_MSG_CHECKING([to see if this is LynxOS])
+AC_CACHE_VAL(ac_cv_os_lynx,
+[AC_EGREP_CPP(yes,
+[/*
+ * The old Lynx "cc" only defines "Lynx", but the newer one uses "__Lynx__"
+ */
+#if defined(__Lynx__) || defined(Lynx)
+yes
+#endif
+], ac_cv_os_lynx=yes, ac_cv_os_lynx=no)])
+#
+if test "$ac_cv_os_lynx" = "yes" ; then
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(LYNX)
+ AC_MSG_CHECKING([whether -mposix or -X is available])
+ AC_CACHE_VAL(ac_cv_c_posix_flag,
+ [AC_TRY_COMPILE(,[
+ /*
+ * This flag varies depending on how old the compiler is.
+ * -X is for the old "cc" and "gcc" (based on 1.42).
+ * -mposix is for the new gcc (at least 2.5.8).
+ */
+ #if defined(__GNUC__) && __GNUC__ >= 2
+ choke me
+ #endif
+ ], ac_cv_c_posix_flag=" -mposix", ac_cv_c_posix_flag=" -X")])
+ CC="$CC $ac_cv_c_posix_flag"
+ AC_MSG_RESULT($ac_cv_c_posix_flag)
+ else
+ AC_MSG_RESULT(no)
+fi
+])
+#
+# Sometimes the native compiler is a bogus stub for gcc or /usr/ucb/cc. This
+# makes configure think it's cross compiling. If --target wasn't used, then
+# we can't configure, so something is wrong.
+AC_DEFUN(CY_AC_C_CROSS,
+[# If we cannot run a trivial program, we must be cross compiling.
+AC_MSG_CHECKING(whether cross-compiling)
+AC_CACHE_VAL(ac_cv_c_cross,[
+AC_TRY_RUN([
+ main(){return(0);}],
+ ac_cv_c_cross=no, ac_cv_c_cross=yes, ac_cv_c_cross=yes)
+])
+if test x"${target}" = x"${host}" -a x"${ac_cv_c_cross}" = x"yes"; then
+ dnl this hack is cause the message is so long we don't call AC_MSG_ERROR
+ echo "configure: error: You need to specify --target to cross compile," 1>&2;
+ echo " or the native compiler is broken" 1>&2;
+ exit 1;
+else
+ cross_compiling=$ac_cv_c_cross
+ AC_MSG_RESULT($ac_cv_c_cross)
+fi
+])
+AC_DEFUN(CY_AC_PATH_TCLH, [
+#
+# Ok, lets find the tcl source trees so we can use the headers
+# Warning: transition of version 9 to 10 will break this algorithm
+# because 10 sorts before 9. We also look for just tcl. We have to
+# be careful that we don't match stuff like tclX by accident.
+# the alternative search directory is involked by --with-tclinclude
+#
+no_tcl=true
+AC_MSG_CHECKING(for Tcl private headers)
+AC_ARG_WITH(tclinclude, [ --with-tclinclude directory where tcl private headers are], with_tclinclude=${withval})
+AC_CACHE_VAL(ac_cv_c_tclh,[
+# first check to see if --with-tclinclude was specified
+if test x"${with_tclinclude}" != x ; then
+ if test -f ${with_tclinclude}/tclInt.h ; then
+ ac_cv_c_tclh=`(cd ${with_tclinclude}; pwd)`
+ else
+ AC_MSG_ERROR([${with_tclinclude} directory doesn't contain private headers])
+ fi
+fi
+# next check in private source directory
+#
+# since ls returns lowest version numbers first, reverse its output
+if test x"${ac_cv_c_tclh}" = x ; then
+ for i in \
+ ${srcdir}/../tcl \
+ `ls -dr ${srcdir}/../tcl[[0-9]]* 2>/dev/null` \
+ ${srcdir}/../../tcl \
+ `ls -dr ${srcdir}/../../tcl[[0-9]]* 2>/dev/null` \
+ ${srcdir}/../../../tcl \
+ `ls -dr ${srcdir}/../../../tcl[[0-9]]* 2>/dev/null ` ; do
+ if test -f $i/tclInt.h ; then
+ ac_cv_c_tclh=`(cd $i; pwd)`
+ break
+ fi
+ # Tcl 7.5 and greater puts headers in subdirectory.
+ if test -f $i/generic/tclInt.h ; then
+ ac_cv_c_tclh=`(cd $i; pwd)`/generic
+ fi
+ done
+fi
+# finally check in a few common install locations
+#
+# since ls returns lowest version numbers first, reverse its output
+if test x"${ac_cv_c_tclh}" = x ; then
+ for i in \
+ `ls -dr /usr/local/src/tcl[[0-9]]* 2>/dev/null` \
+ `ls -dr /usr/local/lib/tcl[[0-9]]* 2>/dev/null` \
+ /usr/local/src/tcl \
+ /usr/local/lib/tcl \
+ ${prefix}/include ; do
+ if test -f $i/tclInt.h ; then
+ ac_cv_c_tclh=`(cd $i; pwd)`
+ break
+ fi
+ done
+fi
+# see if one is installed
+if test x"${ac_cv_c_tclh}" = x ; then
+ AC_HEADER_CHECK(tclInt.h, ac_cv_c_tclh=installed, ac_cv_c_tclh="")
+fi
+])
+if test x"${ac_cv_c_tclh}" = x ; then
+ TCLHDIR="# no Tcl private headers found"
+ AC_MSG_ERROR([Can't find Tcl private headers])
+fi
+if test x"${ac_cv_c_tclh}" != x ; then
+ no_tcl=""
+ if test x"${ac_cv_c_tkh}" = x"installed" ; then
+ AC_MSG_RESULT([is installed])
+ TCLHDIR=""
+ else
+ AC_MSG_RESULT([found in ${ac_cv_c_tclh}])
+ # this hack is cause the TCLHDIR won't print if there is a "-I" in it.
+ TCLHDIR="-I${ac_cv_c_tclh}"
+ fi
+fi
+
+AC_MSG_CHECKING([Tcl version])
+rm -rf tclmajor tclminor
+orig_includes="$CPPFLAGS"
+
+if test x"${TCLHDIR}" != x ; then
+ CPPFLAGS="$CPPFLAGS $TCLHDIR"
+fi
+
+AC_TRY_RUN([
+#include <stdio.h>
+#include "tcl.h"
+main() {
+ FILE *maj = fopen("tclmajor","w");
+ FILE *min = fopen("tclminor","w");
+ fprintf(maj,"%d",TCL_MAJOR_VERSION);
+ fprintf(min,"%d",TCL_MINOR_VERSION);
+ fclose(maj);
+ fclose(min);
+ return 0;
+}],
+ tclmajor=`cat tclmajor`
+ tclminor=`cat tclminor`
+ tclversion=$tclmajor.$tclminor
+ AC_MSG_RESULT($tclversion)
+ rm -f tclmajor tclminor
+,
+ AC_MSG_RESULT([can't happen])
+,
+ AC_MSG_ERROR([can't be cross compiled])
+)
+CPPFLAGS="${orig_includes}"
+
+AC_PROVIDE([$0])
+AC_SUBST(TCLHDIR)
+])
+AC_DEFUN(CY_AC_PATH_TCLLIB, [
+#
+# Ok, lets find the tcl library
+# First, look for one uninstalled.
+# the alternative search directory is invoked by --with-tcllib
+#
+
+if test $tclmajor -ge 7 -a $tclminor -ge 4 ; then
+ installedtcllibroot=tcl$tclversion
+else
+ installedtcllibroot=tcl
+fi
+
+if test x"${no_tcl}" = x ; then
+ # we reset no_tcl incase something fails here
+ no_tcl=true
+ AC_ARG_WITH(tcllib, [ --with-tcllib directory where the tcl library is],
+ with_tcllib=${withval})
+ AC_MSG_CHECKING([for Tcl library])
+ AC_CACHE_VAL(ac_cv_c_tcllib,[
+ # First check to see if --with-tcllib was specified.
+ # This requires checking for both the installed and uninstalled name-styles
+ # since we have no idea if it's installed or not.
+ if test x"${with_tcllib}" != x ; then
+ if test -f "${with_tcllib}/lib$installedtcllibroot.so" ; then
+ ac_cv_c_tcllib=`(cd ${with_tcllib}; pwd)`/lib$installedtcllibroot.so
+ elif test -f "${with_tcllib}/libtcl.so" ; then
+ ac_cv_c_tcllib=`(cd ${with_tcllib}; pwd)`/libtcl.so
+ # then look for a freshly built statically linked library
+ # if Makefile exists we assume its configured and libtcl will be built first.
+ elif test -f "${with_tcllib}/lib$installedtcllibroot.a" ; then
+ ac_cv_c_tcllib=`(cd ${with_tcllib}; pwd)`/lib$installedtcllibroot.a
+ elif test -f "${with_tcllib}/libtcl.a" ; then
+ ac_cv_c_tcllib=`(cd ${with_tcllib}; pwd)`/libtcl.a
+ else
+ AC_MSG_ERROR([${with_tcllib} directory doesn't contain libraries])
+ fi
+ fi
+ # then check for a private Tcl library
+ # Since these are uninstalled, use the simple lib name root.
+ if test x"${ac_cv_c_tcllib}" = x ; then
+ for i in \
+ ../tcl \
+ `ls -dr ../tcl[[0-9]]* 2>/dev/null` \
+ ../../tcl \
+ `ls -dr ../../tcl[[0-9]]* 2>/dev/null` \
+ ../../../tcl \
+ `ls -dr ../../../tcl[[0-9]]* 2>/dev/null` ; do
+ # Tcl 7.5 and greater puts library in subdir. Look there first.
+ if test -f "$i/unix/libtcl.so" ; then
+ ac_cv_c_tcllib=`(cd $i; pwd)`/unix/libtcl.so
+ break
+ elif test -f "$i/unix/libtcl.a" -o -f "$i/unix/Makefile"; then
+ ac_cv_c_tcllib=`(cd $i; pwd)`/unix/libtcl.a
+ break
+ # look for a freshly built dynamically linked library
+ elif test -f "$i/libtcl.so" ; then
+ ac_cv_c_tcllib=`(cd $i; pwd)`/libtcl.so
+ break
+
+ # then look for a freshly built statically linked library
+ # if Makefile exists we assume its configured and libtcl will be
+ # built first.
+ elif test -f "$i/libtcl.a" -o -f "$i/Makefile" ; then
+ ac_cv_c_tcllib=`(cd $i; pwd)`/libtcl.a
+ break
+ fi
+ done
+ fi
+ # check in a few common install locations
+ if test x"${ac_cv_c_tcllib}" = x ; then
+ for i in `ls -d ${prefix}/lib /usr/local/lib 2>/dev/null` ; do
+ # first look for a freshly built dynamically linked library
+ if test -f "$i/lib$installedtcllibroot.so" ; then
+ ac_cv_c_tcllib=`(cd $i; pwd)`/lib$installedtcllibroot.so
+ break
+ # then look for a freshly built statically linked library
+ # if Makefile exists we assume its configured and libtcl will be built first.
+ elif test -f "$i/lib$installedtcllibroot.a" -o -f "$i/Makefile" ; then
+ ac_cv_c_tcllib=`(cd $i; pwd)`/lib$installedtcllibroot.a
+ break
+ fi
+ done
+ fi
+ # check in a few other private locations
+ if test x"${ac_cv_c_tcllib}" = x ; then
+ for i in \
+ ${srcdir}/../tcl \
+ `ls -dr ${srcdir}/../tcl[[0-9]]* 2>/dev/null` ; do
+ # Tcl 7.5 and greater puts library in subdir. Look there first.
+ if test -f "$i/unix/libtcl.so" ; then
+ ac_cv_c_tcllib=`(cd $i; pwd)`/unix/libtcl.so
+ break
+ elif test -f "$i/unix/libtcl.a" -o -f "$i/unix/Makefile"; then
+ ac_cv_c_tcllib=`(cd $i; pwd)`/unix/libtcl.a
+ break
+ # look for a freshly built dynamically linked library
+ elif test -f "$i/libtcl.so" ; then
+ ac_cv_c_tcllib=`(cd $i; pwd)`/libtcl.so
+ break
+
+ # then look for a freshly built statically linked library
+ # if Makefile exists we assume its configured and libtcl will be
+ # built first.
+ elif test -f "$i/libtcl.a" -o -f "$i/Makefile" ; then
+ ac_cv_c_tcllib=`(cd $i; pwd)`/libtcl.a
+ break
+ fi
+ done
+ fi
+
+ # see if one is conveniently installed with the compiler
+ if test x"${ac_cv_c_tcllib}" = x ; then
+ orig_libs="$LIBS"
+ LIBS="$LIBS -l$installedtcllibroot -lm"
+ AC_TRY_RUN([
+ Tcl_AppInit()
+ { exit(0); }], ac_cv_c_tcllib="-l$installedtcllibroot", ac_cv_c_tcllib=""
+ , ac_cv_c_tclib="-l$installedtcllibroot")
+ LIBS="${orig_libs}"
+ fi
+ ])
+ if test x"${ac_cv_c_tcllib}" = x ; then
+ TCLLIB="# no Tcl library found"
+ AC_MSG_WARN(Can't find Tcl library)
+ else
+ TCLLIB=${ac_cv_c_tcllib}
+ AC_MSG_RESULT(found $TCLLIB)
+ no_tcl=
+ fi
+fi
+
+AC_PROVIDE([$0])
+AC_SUBST(TCLLIB)
+])
+AC_DEFUN(CY_AC_PATH_TKH, [
+#
+# Ok, lets find the tk source trees so we can use the headers
+# If the directory (presumably symlink) named "tk" exists, use that one
+# in preference to any others. Same logic is used when choosing library
+# and again with Tcl. The search order is the best place to look first, then in
+# decreasing significance. The loop breaks if the trigger file is found.
+# Note the gross little conversion here of srcdir by cd'ing to the found
+# directory. This converts the path from a relative to an absolute, so
+# recursive cache variables for the path will work right. We check all
+# the possible paths in one loop rather than many seperate loops to speed
+# things up.
+# the alternative search directory is invoked by --with-tkinclude
+#
+AC_MSG_CHECKING(for Tk private headers)
+AC_ARG_WITH(tkinclude, [ --with-tkinclude directory where the tk private headers are],
+ with_tkinclude=${withval})
+no_tk=true
+AC_CACHE_VAL(ac_cv_c_tkh,[
+# first check to see if --with-tkinclude was specified
+if test x"${with_tkinclude}" != x ; then
+ if test -f ${with_tkinclude}/tk.h ; then
+ ac_cv_c_tkh=`(cd ${with_tkinclude}; pwd)`
+ else
+ AC_MSG_ERROR([${with_tkinclude} directory doesn't contain private headers])
+ fi
+fi
+# next check in private source directory
+#
+# since ls returns lowest version numbers first, reverse the entire list
+# and search for the worst fit, overwriting it with better fits as we find them
+if test x"${ac_cv_c_tkh}" = x ; then
+ for i in \
+ ${srcdir}/../tk \
+ `ls -dr ${srcdir}/../tk[[0-9]]* 2>/dev/null` \
+ ${srcdir}/../../tk \
+ `ls -dr ${srcdir}/../../tk[[0-9]]* 2>/dev/null` \
+ ${srcdir}/../../../tk \
+ `ls -dr ${srcdir}/../../../tk[[0-9]]* 2>/dev/null ` ; do
+ if test -f $i/tk.h ; then
+ ac_cv_c_tkh=`(cd $i; pwd)`
+ break
+ fi
+ # Tk 4.1 and greater puts this in a subdir.
+ if test -f $i/generic/tk.h; then
+ ac_cv_c_tkh=`(cd $i; pwd)`/generic
+ fi
+ done
+fi
+# finally check in a few common install locations
+#
+# since ls returns lowest version numbers first, reverse the entire list
+# and search for the worst fit, overwriting it with better fits as we find them
+if test x"${ac_cv_c_tkh}" = x ; then
+ for i in \
+ `ls -dr /usr/local/src/tk[[0-9]]* 2>/dev/null` \
+ `ls -dr /usr/local/lib/tk[[0-9]]* 2>/dev/null` \
+ /usr/local/src/tk \
+ /usr/local/lib/tk \
+ ${prefix}/include ; do
+ if test -f $i/tk.h ; then
+ ac_cv_c_tkh=`(cd $i; pwd)`
+ break
+ fi
+ done
+fi
+# see if one is installed
+if test x"${ac_cv_c_tkh}" = x ; then
+ AC_HEADER_CHECK(tk.h, ac_cv_c_tkh=installed)
+fi
+])
+if test x"${ac_cv_c_tkh}" != x ; then
+ no_tk=""
+ if test x"${ac_cv_c_tkh}" = x"installed" ; then
+ AC_MSG_RESULT([is installed])
+ TKHDIR=""
+ else
+ AC_MSG_RESULT([found in $ac_cv_c_tkh])
+ # this hack is cause the TKHDIR won't print if there is a "-I" in it.
+ TKHDIR="-I${ac_cv_c_tkh}"
+ fi
+else
+ TKHDIR="# no Tk directory found"
+ AC_MSG_WARN([Can't find Tk private headers])
+ no_tk=true
+fi
+
+# if Tk is installed, extract the major/minor version
+if test x"${no_tk}" = x ; then
+AC_MSG_CHECKING([Tk version])
+rm -rf tkmajor tkminor
+orig_includes="$CPPFLAGS"
+
+if test x"${TCLHDIR}" != x ; then
+ CPPFLAGS="$CPPFLAGS $TCLHDIR"
+fi
+if test x"${TKHDIR}" != x ; then
+ CPPFLAGS="$CPPFLAGS $TKHDIR"
+fi
+if test x"${x_includes}" != x -a x"${x_includes}" != xNONE ; then
+ CPPFLAGS="$CPPFLAGS -I$x_includes"
+fi
+
+AC_TRY_RUN([
+#include <stdio.h>
+#include "tk.h"
+ main() {
+ FILE *maj = fopen("tkmajor","w");
+ FILE *min = fopen("tkminor","w");
+ fprintf(maj,"%d",TK_MAJOR_VERSION);
+ fprintf(min,"%d",TK_MINOR_VERSION);
+ fclose(maj);
+ fclose(min);
+ return 0;
+}],
+ tkmajor=`cat tkmajor`
+ tkminor=`cat tkminor`
+ tkversion=$tkmajor.$tkminor
+ AC_MSG_RESULT($tkversion)
+ rm -f tkmajor tkminor
+,
+ AC_MSG_ERROR([
+cannot compile a simple X program - suspect your xmkmf is
+misconfigured and is incorrectly reporting the location of your X
+include or libraries - report this to your system admin]) ,
+ AC_MSG_ERROR([can't be cross compiled])
+)
+CPPFLAGS="${orig_includes}"
+fi
+
+AC_PROVIDE([$0])
+AC_SUBST(TKHDIR)
+])
+AC_DEFUN(CY_AC_PATH_TKLIB, [
+AC_REQUIRE([CY_AC_PATH_TCL])
+#
+# Ok, lets find the tk library
+# First, look for the latest private (uninstalled) copy
+# Notice that the destinations in backwards priority since the tests have
+# no break.
+# Then we look for either .a, .so, or Makefile. A Makefile is acceptable
+# is it indicates the target has been configured and will (probably)
+# soon be built. This allows an entire tree of Tcl software to be
+# configured at once and then built.
+# the alternative search directory is invoked by --with-tklib
+#
+
+if test x"${no_tk}" = x ; then
+ # reset no_tk incase something fails here
+ no_tk="true"
+
+ if test $tkmajor -ge 4 ; then
+ installedtklibroot=tk$tkversion
+ else
+ installedtkllibroot=tk
+ fi
+
+ AC_ARG_WITH(tklib, [ --with-tklib directory where the tk library is],
+ with_tklib=${withval})
+ AC_MSG_CHECKING([for Tk library])
+ AC_CACHE_VAL(ac_cv_c_tklib,[
+ # first check to see if --with-tklib was specified
+ # This requires checking for both the installed and uninstalled name-styles
+ # since we have no idea if it's installed or not.
+ if test x"${with_tklib}" != x ; then
+ if test -f "${with_tklib}/lib$installedtklibroot.so" ; then
+ ac_cv_c_tklib=`(cd ${with_tklib}; pwd)`/lib$installedtklibroot.so
+ no_tk=""
+ elif test -f "${with_tklib}/libtk.so" ; then
+ ac_cv_c_tklib=`(cd ${with_tklib}; pwd)`/libtk.so
+ no_tk=""
+ # then look for a freshly built statically linked library
+ # if Makefile exists we assume its configured and libtk will be built
+ elif test -f "${with_tklib}/lib$installedtklibroot.a" ; then
+ ac_cv_c_tklib=`(cd ${with_tklib}; pwd)`/lib$installedtklibroot.a
+ no_tk=""
+ elif test -f "${with_tklib}/libtk.a" ; then
+ ac_cv_c_tklib=`(cd ${with_tklib}; pwd)`/libtk.a
+ no_tk=""
+ else
+ AC_MSG_ERROR([${with_tklib} directory doesn't contain libraries])
+ fi
+ fi
+ # then check for a private Tk library
+ # Since these are uninstalled, use the simple lib name root.
+ if test x"${ac_cv_c_tklib}" = x ; then
+ for i in \
+ ../tk \
+ `ls -dr ../tk[[0-9]]* 2>/dev/null` \
+ ../../tk \
+ `ls -dr ../../tk[[0-9]]* 2>/dev/null` \
+ ../../../tk \
+ `ls -dr ../../../tk[[0-9]]* 2>/dev/null` ; do
+ # Tk 4.1 and greater puts things in subdirs. Check these first.
+ if test -f "$i/unix/libtk.so" ; then
+ ac_cv_c_tklib=`(cd $i; pwd)`/unix/libtk.so
+ no_tk=
+ break
+ elif test -f "$i/unix/libtk.a" -o -f "$i/unix/Makefile"; then
+ ac_cv_c_tklib=`(cd $i; pwd)`/unix/libtk.a
+ no_tk=
+ break
+ # look for a freshly built dynamically linked library
+ elif test -f "$i/libtk.so" ; then
+ ac_cv_c_tklib=`(cd $i; pwd)`/libtk.so
+ no_tk=
+ break
+ # then look for a freshly built statically linked library
+ # if Makefile exists we assume its configured and libtk will be built
+ elif test -f "$i/libtk.a" -o -f "$i/Makefile" ; then
+ ac_cv_c_tklib=`(cd $i; pwd)`/libtk.a
+ no_tk=""
+ break
+ fi
+ done
+ fi
+ # finally check in a few common install locations
+ if test x"${ac_cv_c_tklib}" = x ; then
+ for i in `ls -d ${prefix}/lib /usr/local/lib 2>/dev/null` ; do
+ # first look for a freshly built dynamically linked library
+ if test -f "$i/lib$installedtklibroot.so" ; then
+ ac_cv_c_tklib=`(cd $i; pwd)`/lib$installedtklibroot.so
+ no_tk=""
+ break
+ # then look for a freshly built statically linked library
+ # if Makefile exists, we assume it's configured and libtcl will be built
+ elif test -f "$i/lib$installedtklibroot.a" -o -f "$i/Makefile" ; then
+ ac_cv_c_tklib=`(cd $i; pwd)`/lib$installedtklibroot.a
+ no_tk=""
+ break
+ fi
+ done
+ fi
+ # check in a few other private locations
+ if test x"${ac_cv_c_tklib}" = x ; then
+ for i in \
+ ${srcdir}/../tk \
+ `ls -dr ${srcdir}/../tk[[0-9]]* 2>/dev/null` ; do
+ # Tk 4.1 and greater puts things in subdirs. Check these first.
+ if test -f "$i/unix/libtk.so" ; then
+ ac_cv_c_tklib=`(cd $i; pwd)`/unix/libtk.so
+ no_tk=
+ break
+ elif test -f "$i/unix/libtk.a" -o -f "$i/unix/Makefile"; then
+ ac_cv_c_tcllib=`(cd $i; pwd)`/unix/libtk.a
+ no_tk=
+ break
+ # look for a freshly built dynamically linked library
+ elif test -f "$i/libtk.so" ; then
+ ac_cv_c_tklib=`(cd $i; pwd)`/libtk.so
+ no_tk=""
+ break
+ # then look for a freshly built statically linked library
+ # if Makefile exists, we assume it's configured and libtcl will be built
+ elif test -f "$i/libtk.a" -o -f "$i/Makefile" ; then
+ ac_cv_c_tklib=`(cd $i; pwd)`/libtk.a
+ no_tk=""
+ break
+ fi
+ done
+ fi
+ # see if one is conveniently installed with the compiler
+ if test x"${ac_cv_c_tklib}" = x ; then
+ AC_REQUIRE([AC_PATH_X])
+ orig_libs="$LIBS"
+ LIBS="$LIBS -l$installedtklibroot $x_libraries $ac_cv_c_tcllib -lm"
+ AC_TRY_RUN([
+ Tcl_AppInit()
+ { exit(0); }], ac_cv_c_tklib="-l$installedtklibroot", ac_cv_c_tklib=""
+ , ac_cv_c_tklib="-l$installedtklibroot")
+ LIBS="${orig_libs}"
+ fi
+ ])
+ if test x"${ac_cv_c_tklib}" = x ; then
+ TKLIB="# no Tk library found"
+ AC_MSG_WARN(Can't find Tk library)
+ else
+ TKLIB=$ac_cv_c_tklib
+ AC_MSG_RESULT(found $TKLIB)
+ no_tk=
+ fi
+fi
+AC_PROVIDE([$0])
+AC_SUBST(TKLIB)
+])
+AC_DEFUN(CY_AC_PATH_TK, [
+ CY_AC_PATH_TKH
+ CY_AC_PATH_TKLIB
+])
+AC_DEFUN(CY_AC_PATH_TCL, [
+ CY_AC_PATH_TCLH
+ CY_AC_PATH_TCLLIB
+])
--- /dev/null
+#! /bin/sh
+#
+# This application is using [incr Tcl]
+#
+# Copyright (C) 1998, 1999 jotOmega dsc, Inc.
+
+# This file is part of BlueGnu testing framework.
+# It asumes that the itclsh3.0 program is on your PATH
+#
+
+#
+# Get the execution path to this script
+#
+execpath=`echo ${0-.} | sed -e 's@/[^/]*$@@'`
+
+#
+# get the name by which bluegnu was invoked and extract the config triplet
+#
+bluegnu=`echo ${0-.} | sed -e 's@^.*/@@'`
+target=`echo $bluegnu | sed -e 's/-bluegnu$//'`
+if [ "$target" != bluegnu ] ; then
+ target="--target=${target}"
+else
+ target=""
+fi
+
+#
+# Find the right interpreter binary to use. If a variable EXPECT exists,
+# it takes precedence over all other tests. Otherwise look for a freshly
+# built one, and then use one in the path.
+#
+if [ x"$EXPECT" != x ] ; then
+ expectbin=$EXPECT
+else
+ if [ -x "$execpath/itclsh3.0" ] ; then
+ expectbin=$execpath/itclsh3.0
+ else
+ expectbin=itclsh3.0
+ fi
+fi
+
+# just to be safe...
+if [ -z "$expectbin" ]; then
+ echo "ERROR: No $expectbin shell found"
+ exit 1
+fi
+
+#
+# Extract a few options from the option list.
+#
+verbose=0
+debug=""
+for a in "$@" ; do
+ case $a in
+ -v|--v|-verb*|--verb*) verbose=`expr $verbose + 1`;;
+ -D0|--D0) debug="-D 0" ;;
+ -D1|--D1) debug="-D 1" ;;
+ esac
+done
+
+if expr $verbose \> 0 \& "$DEBUG" > /dev/null ; then
+ echo Using $expectbin as interpreter for the BlueGnu testing framework.
+fi
+
+#
+# find bluegnu.itcl. First we look in it's installed location, otherwise
+# start if from the source tree.
+#
+for i in $execpath/../lib/bluegnu $execpath/../lib $execpath $execpath/lib ; do
+ if expr $verbose \> 2 \& "$DEBUG" > /dev/null ; then
+ echo Looking for $i/bluegnu.itcl.
+ fi
+ if [ -f $i/bluegnu.itcl ] ; then
+ runpath=$i
+ if expr $verbose \> 0 \& "$DEBUG" > /dev/null ; then
+ echo Using $i/bluegnu.itcl as default main test driver
+ fi
+ break
+ fi
+done
+
+# check for an environment variable
+if [ x"$BLUEGNULIB" != x ] ; then
+ runpath=$BLUEGNULIB
+else
+ BLUEGNULIB=$runpath; export BLUEGNULIB
+fi
+if expr $verbose \> 0 \& "$DEBUG" > /dev/null ; then
+ echo Using $BLUEGNULIB as the BlueGnu library
+fi
+
+#
+# Find the right test framework. If a variable FRAMEWORK exists,
+# it takes precedence over all other frameworks. Otherwise look for the
+# default one.
+if [ x"$FRAMEWORK" != x ] ; then
+ framework=$FRAMEWORK
+else
+ if [ -r "$runpath/bluegnu.itcl" ] ; then
+ framework=bluegnu.itcl
+ else
+ echo "ERROR: $runpath/bluegnu.itcl does not exist."
+ exit 1
+ fi
+fi
+
+if [ x"$runpath" = x ] ; then
+ echo "ERROR: bluegnu.itcl does not exist."
+ exit 1
+fi
+
+if [ ! -r "$runpath/$framework" ] ; then
+ echo "ERROR: $runpath/$framework does not exist."
+else
+ if expr $verbose \> 0 \& "$DEBUG" > /dev/null ; then
+ echo "Using $runpath/$framework as main test driver"
+ fi
+fi
+
+# Find Test Suite Root directory
+#
+if [ x"$TESTSUITEROOT" = x ] ; then
+ TESTSUITEROOT=`pwd`; export TESTSUITEROOT
+else
+ cd $TESTSUITEROOT
+fi
+if expr $verbose \> 0 \& "$DEBUG" > /dev/null ; then
+ echo "Using $TESTSUITEROOT as Test Suite Directory."
+fi
+
+# Start the BlueGnu Test Framework
+#
+if expr $verbose \> 2 \& "$DEBUG" > /dev/null ; then
+ echo Command: $expectbin $debug $runpath/$framework $target ${1+"$@"}
+fi
+exec $expectbin $debug $runpath/$framework $target ${1+"$@"}
--- /dev/null
+#! /bin/ksh
+#
+
+
+exec itkwish2.2 $0.itcl $*
--- /dev/null
+#
+#
+#
+
+set szApplName [file dirname $argv0]/[file root [file tail $argv0]]
+
+# puts "MAIA TK application: $szApplName"
+
+source ${szApplName}Utils.itcl
+
+if [file exists ~/.[file tail ${szApplName}]rc] {
+ puts stderr "Using Resource ~/.[file tail ${szApplName}]rc"
+ if [catch {option readfile ~/.[file tail ${szApplName}]rc} szErrMsg] {
+ puts stderr "error in ~/.[file tail ${szApplName}]rc: $szErrMsg"
+ }
+} elseif [file exists ${szApplName}.rc] {
+ puts stderr "Using Resource ${szApplName}.rc"
+ if [catch {option readfile ${szApplName}.rc} szErrMsg] {
+ puts stderr "error in ${szApplName}.rc: $szErrMsg"
+ }
+}
+
+wm title . "BlueGnu Tk"
+set iLabelWidth 25
+
+frame .options -borderwidth 3
+pack .options -side top -fill both -expand true
+# puts "grid: [grid columnconfigure .options 1 -weight 1]"
+
+set iRow 0
+label .options.lCmd -text "BlueGnu Command Line:" -padx 0 -width $iLabelWidth -anchor e
+entry .options.cmd -relief sunken -textvariable szCommand -width 60
+set wRun [button .options.run -text "Run it" -command run]
+button .options.quit -text Quit -command exit
+grid .options.lCmd -row $iRow -column 0 -sticky w
+grid .options.cmd -row $iRow -column 1 -columnspan 4 -sticky ew
+grid .options.run -row $iRow -column 5 -sticky ew
+grid .options.quit -row $iRow -column 6 -sticky ew
+bind .options.cmd <Return> run
+bind .options.cmd <Control-c> stop
+focus .options.cmd
+
+incr iRow
+set szPWD [exec /bin/sh -c pwd]
+set wPWDentry [entry .options.pwdText -textvariable szPWD]
+set wPWDlabel [label .options.pwdLabel -text "Current Working Dir:" -padx 0 \
+ -width $iLabelWidth -anchor e]
+set wPWD [menubutton .options.pwd -text "Subdirectories" \
+ -menu .options.pwd.menu -relief raised]
+set wPWDmenu [menu .options.pwd.menu -tearoff 0]
+$wPWDmenu add command -label "." -command {setPWD "."}
+$wPWDmenu add command -label ".." -command {setPWD ".."}
+$wPWDmenu add command -label "dummy" -command {setPWD "dummy"}
+setPWD "."
+grid .options.pwdLabel -row $iRow -column 0 -sticky w
+grid .options.pwdText -row $iRow -column 1 -columnspan 4 -sticky ew
+grid .options.pwd -row $iRow -column 5 -columnspan 2 -sticky ew
+set iRowPWD $iRow
+
+incr iRow
+set wEXPECTentry [entry .options.expectEntry \
+ -textvariable szEXPECT -state disabled]
+set wEXPECTlabel [label .options.expectLabel -text env(EXPECT): \
+ -padx 0 -width $iLabelWidth -anchor e]
+set wEXPECT [menubutton .options.expect -text "EXPECT choices" \
+ -menu .options.expect.menu -relief raised]
+set wEXPECTmenu [menu .options.expect.menu -tearoff 0]
+set lTesters [option get $wEXPECTmenu choices {}]
+if [info exists env(EXPECT)] {
+ setEXPECT $env(EXPECT)
+ if {[lsearch -exact $lTesters $szExpect] < 0} {
+ $wEXPECTmenu add command -label "$szExpect" \
+ -command [list setEXPECT "$szExpect"]
+ }
+} else {
+ setEXPECT {}
+}
+foreach szTester $lTesters {
+ #puts "tester choice: >$szTester<"
+ $wEXPECTmenu add command -label "$szTester" \
+ -command [list setEXPECT "$szTester"]
+}
+$wEXPECTmenu add command -label "" \
+ -command [list setEXPECT ""]
+grid .options.expectLabel -row $iRow -column 0 -sticky w
+grid .options.expectEntry -row $iRow -column 1 -columnspan 4 -sticky ew
+grid .options.expect -row $iRow -column 5 -columnspan 2 -sticky ew
+
+incr iRow
+label .options.targetLabel -text Target: -padx 0 -width $iLabelWidth -anchor e
+label .options.targetChoice -textvariable szTarget -relief sunken -anchor w
+menubutton .options.target -text "Target choices" \
+ -menu .options.target.menu -relief raised
+menu .options.target.menu -tearoff 0
+set lChoices [option get .options.target.menu choices {}]
+foreach szChoice $lChoices {
+ .options.target.menu add command -label $szChoice \
+ -command [list set szTarget $szChoice]
+}
+.options.target.menu add command -label "" \
+ -command [list set szTarget ""]
+grid .options.targetLabel -row $iRow -column 0 -sticky w
+grid .options.targetChoice -row $iRow -column 1 -columnspan 4 -sticky ew -padx 2
+grid .options.target -row $iRow -column 5 -columnspan 2 -sticky ew
+
+incr iRow
+label .options.viewLabel -text view: -padx 0 -width $iLabelWidth \
+ -anchor e
+label .options.viewChoice -textvariable szView -relief sunken -anchor w
+menubutton .options.view -text "View choices" \
+ -menu .options.view.menu -relief raised
+menu .options.view.menu -tearoff 0
+set lChoices [option get .options.view.menu choices {}]
+foreach szChoice $lChoices {
+ .options.view.menu add command -label $szChoice \
+ -command [list set szView $szChoice]
+}
+.options.view.menu add command -label "" \
+ -command [list set szView ""]
+grid .options.viewLabel -row $iRow -column 0 -sticky w
+grid .options.viewChoice -row $iRow -column 1 -columnspan 4 -sticky ew -padx 2
+grid .options.view -row $iRow -column 5 -columnspan 2 -sticky ew
+
+incr iRow
+label .options.xipcLabel -text XIPCINSTANCE: \
+ -padx 0 -width $iLabelWidth -anchor e
+label .options.xipcChoice -textvariable szXipc -relief sunken -anchor w
+menubutton .options.xipc -text "XIPCINSTANCE choices" \
+ -menu .options.xipc.menu -relief raised
+menu .options.xipc.menu -tearoff 0
+set lChoices [option get .options.xipc.menu choices {}]
+foreach szChoice $lChoices {
+ .options.xipc.menu add command -label $szChoice \
+ -command [list set szXipc $szChoice]
+}
+.options.xipc.menu add command -label "" \
+ -command [list set szXipc ""]
+grid .options.xipcLabel -row $iRow -column 0 -sticky w
+grid .options.xipcChoice -row $iRow -column 1 -columnspan 4 -sticky ew -padx 2
+grid .options.xipc -row $iRow -column 5 -columnspan 2 -sticky ew
+
+set szTestScript "tools/xterm"
+#set szArguments "\{title=\"\$szTarget -- \$szView\"\}"
+
+incr iRow
+set wTSentry [entry .options.tsText -textvariable szTS -state disabled]
+set wTSlabel [label .options.tsLabel -text "Current Test Scripts Dir:" \
+ -padx 0 \
+ -width $iLabelWidth -anchor e]
+set wTS [menubutton .options.ts -text "Subdirectories" \
+ -menu .options.ts.menu -relief raised]
+set wTSmenu [menu .options.ts.menu -tearoff 0]
+$wTSmenu add command -label "." -command {setTS "."}
+$wTSmenu add command -label ".." -command {setTS ".."}
+setTS "."
+grid .options.tsLabel -row $iRow -column 0 -sticky w
+grid .options.tsText -row $iRow -column 1 -columnspan 4 -sticky ew
+grid .options.ts -row $iRow -column 5 -columnspan 2 -sticky ew
+set iRowTS $iRow
+
+incr iRow
+set wTSLlabel [label .options.tslLabel -text "Selected Test Scripts:" \
+ -padx 0 \
+ -width $iLabelWidth -anchor e]
+frame .options.lists -background blue
+#grid rowconfigure .options.lists 0 -weight 1
+#grid columnconfigure .options.lists 0 -weight 1
+grid .options.lists -row $iRow -column 1 -columnspan 6 -sticky news
+set wLL [scrolledListBox .options.lists.fl]
+set wLR [scrolledListBox .options.lists.fr]
+grid .options.tslLabel -row $iRow -column 0 -sticky wn
+grid rowconfigure .options.lists 0 -weight 1
+grid columnconfigure .options.lists 0 -weight 1
+grid .options.lists.fl -row 0 -column 0 -sticky news
+#grid rowconfigure .options.lists.fr 0 -weight 1
+grid columnconfigure .options.lists 1 -weight 1
+grid .options.lists.fr -row 0 -column 1 -sticky news
+bind $wLR <ButtonRelease-3> [list listTransferSelected %W $wLL]
+bind $wLL <ButtonRelease-1> [list listTransferData %W]
+bind $wLL <ButtonRelease-3> [list listTransferRemoved %W $wLR]
+insertTests $wLR
+
+incr iRow
+set wArguments [entry .options.arguments -textvariable szArguments -width 40]
+label .options.argumentsLabel -text "Arguments:" -padx 0 \
+ -width $iLabelWidth -anchor e
+grid .options.argumentsLabel -row $iRow -column 0 -sticky w
+grid .options.arguments -row $iRow -column 1 -columnspan 6 -sticky ew
+
+incr iRow
+set wTestcase [entry .options.testcase -textvariable szTestcase -width 40]
+label .options.testcaseLabel -text "Testcase ID:" -padx 0 \
+ -width $iLabelWidth -anchor e
+grid .options.testcaseLabel -row $iRow -column 0 -sticky w
+grid .options.testcase -row $iRow -column 1 -columnspan 6 -sticky ew
+
+set szTestcase ""
+lostSelection $wLL
+
+frame .txt
+set wLog [text .txt.log -width 80 -height 10 -borderwidth 2 -relief raised \
+ -setgrid true -yscrollcommand {.txt.scroll set}]
+scrollbar .txt.scroll -command {.txt.log yview}
+pack .txt.scroll -side right -fill y
+pack .txt.log -side left -fill both -expand true
+pack .txt -side top -fill both -expand true
+
+trace variable szPWD w setPWDoverwrite
+trace variable szExpect w setExpect
+trace variable szTarget w cmdUpdate
+trace variable szView w cmdUpdate
+trace variable szXipc w cmdUpdate
+trace variable szTS w setTSoverwrite
+trace variable szArguments w cmdUpdate
+trace variable szTestcase w cmdUpdate
+
--- /dev/null
+!
+! This is the resource file for MAIA Tk
+!
+
+*background: #d9d9d9
+*foreground: black
+*activeBackground: #ececec
+*run.activeBackground: red
+*activeForeground: blue
+*run.activeForeground: yellow
+*selectColor: #b03060
+*selectBackground: #c3c3c3
+*troughColor: #c3c3c3
+*disabledForeground: #a3a3a3
+
+*expect.menu.choices: /home/jann/tools/MAIA/bin/botester \
+ /home/jann/tools/MAIA/bin/ibotester \
+ /home/jann/tools/MAIA/bin/pqltester \
+ /home/jann/tools/MAIA/bin/cpqltester \
+ /home/jann/tools/MAIA/bin/tester \
+ /home/jann/tools/bin/iexpect
+
+*target.menu.choices: BusObj BusObj=Atlas BusObj=Corba \
+ BusObj=TTX/Atlas TTX=Atlas \
+ BusObj=ICR/Atlas ICR=Corba ICR=Atlas \
+ BusObj=PQL/Atlas BusObj=PQL/Corba PQL=Corba PQL=Atlas
+
+*view.menu.choices: testB_spr1 testB_spr2
+*xipc.menu.choices: atsqa1 atsqa2 atsqa3 atsqa4 atsqa5 atsqa6
--- /dev/null
+#
+#
+#
+
+# puts "MAIA TK Utilities"
+
+set szView [file tail $env(CLEARCASE_ROOT)]
+set szXipc $env(XIPCINSTANCE)
+
+proc run {} {
+ global env
+ global szCommand wRun input wLog wRun
+ global szView szXipc
+
+ set env(CLEARCASE_ROOT) /view/$szView
+ set env(XIPCINSTANCE) $szXipc
+
+ set szCmd "xterm -sl 50000 -sb"
+ if {[string length $szCommand] == 0} {
+ set szCommand "$szCmd"
+ } else {
+ append szCmd " -e $szCommand"
+ }
+ if [catch {eval exec "$szCmd &"} input] {
+ $wLog insert end $input
+ bell
+ } else {
+ #fileevent $input readable log
+ $wLog insert end "$env(PS1)$szCommand &\n"
+ $wLog see end
+ #$wRun config -text Stop -command stop
+ }
+}
+
+proc log {} {
+ global input wLog
+
+ if [eof $input] {
+ stop
+ } else {
+ gets $input szLine
+ $wLog insert end "$szLine\n"
+ $wLog see end
+ }
+}
+
+
+proc stop {} {
+ global input wRun
+
+ catch {close $input}
+ $wRun config -text "Run it" -command run
+}
+
+proc cmdUpdate {name1 name2 ops} {
+ global szCommand szTarget szView szXipc \
+ szTestScript szTestcase szArguments
+ global iSelect
+ global lTestScripts lTestcaseIDs lArguments
+
+ switch $name1 {
+ szArguments {
+ set lArguments($iSelect) $szArguments
+ }
+ szTestcase {
+ set lTestcaseIDs($iSelect) $szTestcase
+ }
+ }
+
+ set szCommand "bluegnu "
+ if {[string compare $szTarget ""] != 0} {
+ append szCommand "\"--target=$szTarget"
+ if {[string compare $szView ""] != 0} {
+ append szCommand " view=$szView"
+ }
+ if {[string compare $szXipc ""] != 0} {
+ append szCommand " XIPCINSTANCE=$szXipc"
+ }
+ append szCommand "\" "
+ }
+ foreach i [lsort -integer [array names lTestScripts]] {
+ # puts "test script index = $i"
+ append szCommand "\"$lTestScripts($i)"
+ if {[string compare $lTestcaseIDs($i) ""] !=0} {
+ append szCommand "\[$lTestcaseIDs($i)\]"
+ }
+ if {[string compare $lArguments($i) ""] != 0} {
+ #puts "szArguments: >$lArguments($i)<"
+ append szCommand "=$lArguments($i)"
+ }
+ append szCommand "\" "
+ }
+ #puts "szCommand: >$szCommand<"
+}
+
+proc setPWD {dir} {
+ global szPWD wPWDmenu wPWDentry env
+ #puts "setPWD $dir:"
+ set szPWD $dir
+ #puts "szPWD:: $szPWD"
+ cd $szPWD
+ catch {setTS "."}
+ if {[string compare $szPWD "/"] != 0} {
+ set szPWD "[exec /bin/sh -c pwd]/"
+ regsub "/tmp_mnt" $szPWD "" szPWD
+ }
+ #puts "szPWD>: $szPWD"
+ $wPWDentry insert [$wPWDentry index end] \
+ [string range $szPWD [$wPWDentry index end] end]
+ #update idletasks
+ $wPWDentry icursor end
+
+ if {[$wPWDmenu index end] > 1} {
+ $wPWDmenu delete 2 end
+ }
+ foreach F [lsort [glob *]] {
+ if [file isdirectory $F] {
+ set szFile [file tail $F]
+ $wPWDmenu add command -label $szFile -command "setPWD $szFile"
+ }
+ }
+}
+
+proc setPWDoverwrite {name1 name2 ops} {
+ global wPWDmenu env
+ catch {upvar #0 $name1 szPWD} szErrMsg
+
+ if {[file isdirectory $szPWD]} {
+ trace vdelete szPWD w setPWDoverwrite
+ setPWD $szPWD
+ trace variable szPWD w setPWDoverwrite
+ } else {
+ set szDir {}
+ foreach F [glob -nocomplain "${szPWD}*"] {
+ if [file isdirectory $F] {
+ lappend szDir $F
+ }
+ }
+ # puts "szDir: >$szDir< [llength $szDir]"
+ if {[llength $szDir] == 1} {
+ set szPWD $szDir
+ setPWD $szPWD
+ } elseif {[llength $szDir] == 0} {
+ bell
+ }
+ }
+}
+
+proc checkDir {szDir} {
+ regsub "^.*/home" $szDir "/home" szDir
+ return $szDir
+}
+
+proc setTS {dir} {
+ global szTS szTSdir wTSmenu wTSentry env wLR
+
+ trace vdelete szTS w setTSoverwrite
+ $wTSentry configure -state normal
+ #puts "setTS $dir: [checkDir [exec /bin/sh -c pwd]]"
+ if {[string compare $dir ".."] == 0} {
+ # puts "##szTS: >$szTS<1"
+ set szTStmp [file dirname $szTS]
+ # puts "##szTS: >[set szTStmp [file dirname $szTS]]<2"
+ $wTSentry delete 0 end
+ # puts "##szTS: >$szTS<3"
+ $wTSentry insert end "$szTStmp/"
+ } elseif {[string compare $dir "."] == 0} {
+ set szTStmp "."
+ $wTSentry delete 0 end
+ $wTSentry insert end "$szTStmp/"
+ catch {listRemoved} szErrMsg
+ #puts "err: $szErrMsg"
+ } else {
+ $wTSentry insert end "$dir/"
+ }
+ set szTmp [$wTSentry get]
+ # puts "####### TS: >[set szTmp [$wTSentry get]]<"
+ #puts "######szTS: >$szTS<"
+ catch {insertTests $wLR}
+
+# update idletasks
+# $wTSentry icursor end
+
+ # puts "TS menu index: [$wTSmenu index end]"
+ if {[$wTSmenu index end] != "none"} {
+ $wTSmenu delete 0 end
+ }
+ if {[string compare $szTmp "./"] != 0} {
+ $wTSmenu add command -label .. \
+ -command "setTS .."
+ }
+ foreach F [lsort [glob -nocomplain ${szTmp}*]] {
+ if [file isdirectory $F] {
+ set szFile [file tail $F]
+ $wTSmenu add command -label $szFile \
+ -command "setTS $szFile"
+ }
+ }
+ $wTSentry configure -state disabled
+ trace variable szTS w setTSoverwrite
+ # puts "TS menu end"
+}
+
+proc setEXPECT {dir} {
+ global szExpect wEXPECTentry env
+ # puts "Set env(EXPECT) to $dir"
+
+ trace vdelete szExpect w setExpectOverwrite
+ $wEXPECTentry configure -state normal
+ $wEXPECTentry delete 0 end
+ $wEXPECTentry insert end "$dir"
+ set szExpect $dir
+ $wEXPECTentry configure -state disabled
+ trace variable szExpect w setExpectOverwrite
+}
+
+proc setTSoverwrite {name1 name2 ops} {
+ global wTSmenu env
+ catch {upvar #0 $name1 szTS} szErrMsg
+
+ # puts "szTS >$szTS<"
+ #setTS $szTS
+}
+
+proc setExpectOverwrite {name1 name2 ops} {
+ #global wEmenu env
+ catch {upvar #0 $name1 szExpect} szErrMsg
+}
+
+proc setExpect {name1 name2 ops} {
+ global szExpect env
+
+ if {[string length $szExpect] == 0} {
+ catch {unset env(EXPECT)}
+ } else {
+ set env(EXPECT) $szExpect
+ }
+}
+
+proc scrollSet {wScroll geoCmd offset size} {
+ if {$offset != 0.0 || $size != 1.0} {
+ eval $geoCmd; # make sure it is visible
+ $wScroll set $offset $size
+ } else {
+ set manager [lindex $geoCmd 0]
+ $manager forget $wScroll; # hide it
+ }
+}
+
+proc scrolledListBox {w args} {
+ frame $w -width 200
+ grid rowconfigure $w 0 -weight 1
+ grid columnconfigure $w 0 -weight 1
+ listbox $w.list \
+ -xscrollcommand [list scrollSet $w.xscroll \
+ [list grid $w.xscroll -row 1 -column 0 -sticky we]] \
+ -yscrollcommand [list scrollSet $w.yscroll \
+ [list grid $w.yscroll -row 0 -column 1 -sticky ns]]
+ eval {$w.list configure} $args
+ scrollbar $w.xscroll -orient horizontal \
+ -command [list $w.list xview]
+ scrollbar $w.yscroll -orient vertical \
+ -command [list $w.list yview]
+ grid $w.list $w.yscroll -sticky news
+ grid $w.xscroll -sticky news
+ return $w.list
+}
+
+proc listTransferSelected {w wL} {
+ global szTS wLR
+ global lTestScripts lTestcaseIDs lArguments
+
+ set i [lindex [$w curselection] 0]
+ set szTest [$w get $i]
+ set szTestScript [file join $szTS $szTest]
+ # puts "selected: >$szTest<"
+ set i [$wL index end]
+ set lTestScripts($i) $szTestScript
+ set lTestcaseIDs($i) ""
+ set lArguments($i) [getArguments $szTestScript]
+ # puts "set lArguments($i) $lArguments($i)"
+ $wL insert end $szTestScript
+ cmdUpdate lArguments {} u
+}
+
+proc listRemoved {} {
+ global lTestScripts lTestcaseIDs lArguments
+ global wLL szCommand
+
+ if [catch {set jMax [$wLL index end]}] return
+ for {set i $jMax} {$i > 0} {incr i -1} {
+ catch {unset lTestScripts($i)}
+ catch {unset lTestcaseIDs($i)}
+ catch {unset lArguments($i)}
+ $wLL delete $i
+ }
+ set szCommand ""
+}
+
+proc listTransferRemoved {w wL} {
+ global lTestScripts lTestcaseIDs lArguments
+
+ set jMax [$w index end]
+ foreach i [lsort -integer -decreasing [$w curselection]] {
+ # puts "i = $i; jMax = $jMax"
+ if {$i + 1 < $jMax} {
+ for {set j $i} {$j < $jMax - 1} {incr j} {
+ set k [expr $j + 1]
+ # puts "j = $j; k = $k"
+ set lTestScripts($j) $lTestScripts($k)
+ set lTestcaseIDs($j) $lTestcaseIDs($k)
+ set lArguments($j) $lArguments($k)
+ unset lTestScripts($k)
+ unset lTestcaseIDs($k)
+ unset lArguments($k)
+ }
+ } else {
+ unset lTestScripts($i)
+ unset lTestcaseIDs($i)
+ unset lArguments($i)
+ }
+ cmdUpdate lArguments {} u
+ $w delete $i
+ }
+}
+
+proc listTransferData {w} {
+ global iSelect szArguments wArguments szTestcase wTestcase
+ global lTestcaseIDs lArguments
+
+ if {! [catch {set iSelect [lindex [$w curselection] 0]}]} {
+ if {[llength iSelect] == 1} {
+ selection own -command [list lostSelection $w] $w
+ # trace vdelete szArguments w cmdUpdate
+ set szArguments $lArguments($iSelect)
+ $wArguments configure -state normal
+ # trace variable szArguments w cmdUpdate
+ # trace vdelete szTestcase w cmdUpdate
+ set szTestcase $lTestcaseIDs($iSelect)
+ $wTestcase configure -state normal
+ # trace variable szTestcase w cmdUpdate
+ cmdUpdate lArguments {} u
+ }
+ }
+}
+
+proc lostSelection {w} {
+ global wArguments wTestcase
+ global iSelect szArguments szTestcase
+
+ set i [$w index active]
+ # $w selection clear $i
+ # trace vdelete szArguments w cmdUpdate
+ # trace vdelete szTestcase w cmdUpdate
+ # set szArguments ""
+ # set szTestcase ""
+ # trace variable szArguments w cmdUpdate
+ # trace variable szTestcase w cmdUpdate
+ $wArguments configure -state disabled
+ $wTestcase configure -state disabled
+}
+
+proc getArguments {ts} {
+ if [file exists $ts] {
+ set F [open $ts r]
+ set bArg 0
+ set szArgs ""
+ while {[gets $F szLine] >= 0} {
+ switch -regexp $szLine {
+ "Mandatory Arguments:" -
+ "Optional Arguments:" {
+ set bArg 1
+ continue
+ }
+ {^# *$} {
+ set bArg 0
+ continue
+ }
+ {^processTestScriptArgs} {
+ break
+ }
+ default {
+ if {$bArg} {
+ set bRepl [regsub {^# *} $szLine {} szArg]
+ if {! $bRepl} {
+ set bRepl [regsub "^\[ \t ]*set *" \
+ $szLine {} szArg]
+ if {$bRepl} {
+ regsub " " $szArg "=" szArg
+ regsub -all {"} $szArg "" szArg
+ regsub -all "\{" $szArg "" szArg
+ regsub -all "\}" $szArg "" szArg
+ }
+ }
+ if {$bRepl} {
+ regsub { *; *#.*$} $szArg {} szArg
+ if {[string first " " $szArg] >= 0} {
+ append szArgs "\{[string trim $szArg]\} "
+ } else {
+ append szArgs "[string trim $szArg] "
+ }
+ }
+ }
+ }
+ }
+ }
+ close $F
+ return [string trim $szArgs]
+ }
+ return ""
+}
+
+proc insertTests {w} {
+ global szTS
+
+ $w delete 0 end
+ foreach F [lsort [glob -nocomplain ${szTS}/*]] {
+ if {! [file isdirectory $F]} {
+ switch -regexp $F {
+ {~$} -
+ {[.]sql$} -
+ {[.]err$} -
+ {[.]log$} -
+ {[.]out$} -
+ {[.]txt$} -
+ {tclIndex$} {
+ # Nothing to be done, will not be added to list
+ }
+ default {
+ set szFile [file tail $F]
+ $w insert end "$szFile"
+ }
+ }
+ }
+ }
+}
--- /dev/null
+#! /bin/sh
+# Attempt to guess a canonical system name.
+# Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc.
+#
+# This file 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.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Written by Per Bothner <bothner@cygnus.com>.
+# The master version of this file is at the FSF in /home/gd/gnu/lib.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub. If it succeeds, it prints the system name on stdout, and
+# exits with 0. Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit system type (host/target name).
+#
+# Only a few systems have been added to this list; please add others
+# (but try to keep the structure clean).
+#
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 8/24/94.)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+ PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+ alpha:OSF1:[VX]*:*)
+ # After 1.2, OSF1 uses "V1.3" for uname -r.
+ # After 4.x, OSF1 uses "X4.x" for uname -r.
+ echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VX]//'`
+ exit 0 ;;
+ alpha:OSF1:*:*)
+ # 1.2 uses "1.2" for uname -r.
+ echo alpha-dec-osf${UNAME_RELEASE}
+ exit 0 ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit 0 ;;
+ Amiga*:UNIX_System_V:4.0:*)
+ echo m68k-cbm-sysv4
+ exit 0;;
+ amiga:NetBSD:*:*)
+ echo m68k-cbm-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit 0;;
+ Pyramid*:OSx*:*:*)
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit 0 ;;
+ sun4*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ i86pc:SunOS:5.*:*)
+ echo i386-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
+ # it's likely to be more like Solaris than SunOS4.
+ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:*:*)
+ case "`/usr/bin/arch -k`" in
+ Series*|S4*)
+ UNAME_RELEASE=`uname -v`
+ ;;
+ esac
+ # Japanese Language versions have a version number like `4.1.3-JL'.
+ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+ exit 0 ;;
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit 0 ;;
+ atari*:NetBSD:*:*)
+ echo m68k-atari-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sun3*:NetBSD:*:*)
+ echo m68k-sun-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mac68k:NetBSD:*:*)
+ echo m68k-apple-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ mips:*:4*:UMIPS)
+ echo mips-mips-riscos4sysv
+ exit 0 ;;
+ mips:*:5*:RISCos)
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit 0 ;;
+ Night_Hawk:Power_UNIX:*:*)
+ echo powerpc-harris-powerunix
+ exit 0 ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit 0 ;;
+ m88k:*:4*:R4*)
+ echo m88k-motorola-sysv4
+ exit 0 ;;
+ m88k:*:3*:R3*)
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ AViiON:dgux:*:*)
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`uname -p`
+ if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88100 ] ; then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
+ -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
+ else echo i586-dg-dgux${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+ exit 0 ;;
+ M88*:*:R3*:*)
+ # Delta 88k system running SVR3
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+ echo m88k-tektronix-sysv3
+ exit 0 ;;
+ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+ echo m68k-tektronix-bsd
+ exit 0 ;;
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit 0 ;;
+ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ i[34]86:AIX:*:*)
+ echo i386-ibm-aix
+ exit 0 ;;
+ *:AIX:2:3)
+ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+ sed 's/^ //' << EOF >dummy.c
+ #include <sys/systemcfg.h>
+
+ main()
+ {
+ if (!__power_pc())
+ exit(1);
+ puts("powerpc-ibm-aix3.2.5");
+ exit(0);
+ }
+EOF
+ ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
+ rm -f dummy.c dummy
+ echo rs6000-ibm-aix3.2.5
+ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+ echo rs6000-ibm-aix3.2.4
+ else
+ echo rs6000-ibm-aix3.2
+ fi
+ exit 0 ;;
+ *:AIX:*:4)
+ if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then
+ IBM_ARCH=rs6000
+ else
+ IBM_ARCH=powerpc
+ fi
+ if [ -x /usr/bin/oslevel ] ; then
+ IBM_REV=`/usr/bin/oslevel`
+ else
+ IBM_REV=4.${UNAME_RELEASE}
+ fi
+ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+ exit 0 ;;
+ *:AIX:*:*)
+ echo rs6000-ibm-aix
+ exit 0 ;;
+ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+ echo romp-ibm-bsd4.4
+ exit 0 ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
+ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit 0 ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+ exit 0 ;;
+ DPX/2?00:B.O.S.:*:*)
+ echo m68k-bull-sysv3
+ exit 0 ;;
+ 9000/[34]??:4.3bsd:1.*:*)
+ echo m68k-hp-bsd
+ exit 0 ;;
+ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+ echo m68k-hp-bsd4.4
+ exit 0 ;;
+ 9000/[3478]??:HP-UX:*:*)
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+ 9000/7?? | 9000/8?[679] ) HP_ARCH=hppa1.1 ;;
+ 9000/8?? ) HP_ARCH=hppa1.0 ;;
+ esac
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+ exit 0 ;;
+ 3050*:HI-UX:*:*)
+ sed 's/^ //' << EOF >dummy.c
+ #include <unistd.h>
+ int
+ main ()
+ {
+ long cpu = sysconf (_SC_CPU_VERSION);
+ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
+ results, however. */
+ if (CPU_IS_PA_RISC (cpu))
+ {
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+ default: puts ("hppa-hitachi-hiuxwe2"); break;
+ }
+ }
+ else if (CPU_IS_HP_MC68K (cpu))
+ puts ("m68k-hitachi-hiuxwe2");
+ else puts ("unknown-hitachi-hiuxwe2");
+ exit (0);
+ }
+EOF
+ ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
+ rm -f dummy.c dummy
+ echo unknown-hitachi-hiuxwe2
+ exit 0 ;;
+ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+ echo hppa1.1-hp-bsd
+ exit 0 ;;
+ 9000/8??:4.3bsd:*:*)
+ echo hppa1.0-hp-bsd
+ exit 0 ;;
+ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+ echo hppa1.1-hp-osf
+ exit 0 ;;
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit 0 ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit 0 ;;
+ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ CRAY*X-MP:*:*:*)
+ echo xmp-cray-unicos
+ exit 0 ;;
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE}
+ exit 0 ;;
+ CRAY*C90:*:*:*)
+ echo c90-cray-unicos${UNAME_RELEASE}
+ exit 0 ;;
+ CRAY-2:*:*:*)
+ echo cray2-cray-unicos
+ exit 0 ;;
+ hp3[0-9][05]:NetBSD:*:*)
+ echo m68k-hp-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+ i[34]86:BSD/386:*:* | *:BSD/OS:*:*)
+ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:FreeBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+ exit 0 ;;
+ *:NetBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ exit 0 ;;
+ i*:CYGWIN*:*)
+ echo i386-unknown-cygwin32
+ exit 0 ;;
+ p*:CYGWIN*:*)
+ echo powerpcle-unknown-cygwin32
+ exit 0 ;;
+ *:GNU:*:*)
+ echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit 0 ;;
+ *:Linux:*:*)
+ # The BFD linker knows what the default object file format is, so
+ # first see if it will tell us.
+ ld_help_string=`ld --help 2>&1`
+ if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i[345]86"; then
+ echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
+ elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i[345]86linux"; then
+ echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
+ elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i[345]86coff"; then
+ echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0
+ elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then
+ echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
+ elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then
+ echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
+ elif test "${UNAME_MACHINE}" = "alpha" ; then
+ echo alpha-unknown-linux ; exit 0
+ else
+ # Either a pre-BFD a.out linker (linuxoldld) or one that does not give us
+ # useful --help. Gcc wants to distinguish between linuxoldld and linuxaout.
+ test ! -d /usr/lib/ldscripts/. \
+ && echo "${UNAME_MACHINE}-unknown-linuxoldld" && exit 0
+ # Determine whether the default compiler is a.out or elf
+ cat >dummy.c <<EOF
+main(argc, argv)
+int argc;
+char *argv[];
+{
+#ifdef __ELF__
+ printf ("%s-unknown-linux\n", argv[1]);
+#else
+ printf ("%s-unknown-linuxaout\n", argv[1]);
+#endif
+ return 0;
+}
+EOF
+ ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
+ rm -f dummy.c dummy
+ fi ;;
+# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
+# are messed up and put the nodename in both sysname and nodename.
+ i[34]86:DYNIX/ptx:4*:*)
+ echo i386-sequent-sysv4
+ exit 0 ;;
+ i[34]86:*:4.*:* | i[34]86:SYSTEM_V:4.*:*)
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
+ else
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+ i[34]86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+ echo ${UNAME_MACHINE}-unknown-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL
+ else
+ echo ${UNAME_MACHINE}-unknown-sysv32
+ fi
+ exit 0 ;;
+ Intel:Mach:3*:*)
+ echo i386-unknown-mach3
+ exit 0 ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+ exit 0 ;;
+ i860:*:4.*:*) # i860-SVR4
+ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+ else # Add other i860-SVR4 vendors below as they are discovered.
+ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
+ fi
+ exit 0 ;;
+ mini*:CTIX:SYS*5:*)
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit 0 ;;
+ M680[234]0:*:R3V[567]*:*)
+ test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+ 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0)
+ uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4.3 && exit 0 ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+ uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4 && exit 0 ;;
+ m680[234]0:LynxOS:2.[23]*:*)
+ echo m68k-lynx-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit 0 ;;
+ i[34]86:LynxOS:2.[23]*:*)
+ echo i386-lynx-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ TSUNAMI:LynxOS:2.[23]*:*)
+ echo sparc-lynx-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ rs6000:LynxOS:2.[23]*:*)
+ echo rs6000-lynx-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+ exit 0 ;;
+ *:SINIX-*:*:*)
+ if uname -p 2>/dev/null >/dev/null ; then
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ echo ${UNAME_MACHINE}-sni-sysv4
+ else
+ echo ns32k-sni-sysv
+ fi
+ exit 0 ;;
+ mc68*:A/UX:*:*)
+ echo m68k-apple-aux${UNAME_RELEASE}
+ exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+cat >dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+ printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ printf ("%s-next-nextstep%s\n", __ARCHITECTURE__, version==2 ? "2" : "3");
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-unknown-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+ printf ("vax-dec-bsd\n"); exit (0);
+#else
+ printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
+rm -f dummy.c dummy
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+ case `getsysinfo -f cpu_type` in
+ c1*)
+ echo c1-convex-bsd
+ exit 0 ;;
+ c2*)
+ if getsysinfo -f scalar_acc
+ then echo c32-convex-bsd
+ else echo c2-convex-bsd
+ fi
+ exit 0 ;;
+ c34*)
+ echo c34-convex-bsd
+ exit 0 ;;
+ c38*)
+ echo c38-convex-bsd
+ exit 0 ;;
+ c4*)
+ echo c4-convex-bsd
+ exit 0 ;;
+ esac
+fi
+
+#echo '(Unable to guess system type)' 1>&2
+
+exit 1
--- /dev/null
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.7
+# Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
+# Copyright (C) 1998 jotOmega dsc, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+
+ac_prev=
+for ac_option
+do
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ case "$ac_option" in
+ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) ac_optarg= ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case "$ac_option" in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir="$ac_optarg" ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build="$ac_optarg" ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file="$ac_optarg" ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir="$ac_optarg" ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ eval "enable_${ac_feature}=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix="$ac_optarg" ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he)
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+ --cache-file=FILE cache test results in FILE
+ --help print this message
+ --no-create do not create output files
+ --quiet, --silent do not print \`checking...' messages
+ --version print the version of autoconf that created configure
+Directory and file names:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [same as prefix]
+ --bindir=DIR user executables in DIR [EPREFIX/bin]
+ --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
+ --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data in DIR
+ [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data in DIR
+ [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
+ --libdir=DIR object code libraries in DIR [EPREFIX/lib]
+ --includedir=DIR C header files in DIR [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
+ --infodir=DIR info documentation in DIR [PREFIX/info]
+ --mandir=DIR man documentation in DIR [PREFIX/man]
+ --srcdir=DIR find the sources in DIR [configure dir or ..]
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM
+ run sed PROGRAM on installed program names
+EOF
+ cat << EOF
+Host type:
+ --build=BUILD configure for building on BUILD [BUILD=HOST]
+ --host=HOST configure for HOST [guessed]
+ --target=TARGET configure for TARGET [TARGET=HOST]
+Features and packages:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+EOF
+ if test -n "$ac_help"; then
+ echo "--enable and --with options recognized:$ac_help"
+ fi
+ exit 0 ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host="$ac_optarg" ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir="$ac_optarg" ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir="$ac_optarg" ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir="$ac_optarg" ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir="$ac_optarg" ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir="$ac_optarg" ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir="$ac_optarg" ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir="$ac_optarg" ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix="$ac_optarg" ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix="$ac_optarg" ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix="$ac_optarg" ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name="$ac_optarg" ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir="$ac_optarg" ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir="$ac_optarg" ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site="$ac_optarg" ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir="$ac_optarg" ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir="$ac_optarg" ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target="$ac_optarg" ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers)
+ echo "configure generated by autoconf version 2.7"
+ exit 0 ;;
+
+ -with-* | --with-*)
+ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_${ac_package}='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ eval "with_${ac_package}=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes="$ac_optarg" ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries="$ac_optarg" ;;
+
+ -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ ;;
+
+ *)
+ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+ echo "configure: warning: $ac_option: invalid host type" 1>&2
+ fi
+ if test "x$nonopt" != xNONE; then
+ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+ fi
+ nonopt="$ac_option"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+ exec 6>/dev/null
+else
+ exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+ case "$ac_arg" in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+ ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ esac
+done
+
+# NLS nuisances.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LANG+set}" = set; then LANG=C; export LANG; fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=runtest.exp
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_prog=$0
+ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ else
+ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ echo "loading site script $ac_site_file"
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ echo "loading cache $cache_file"
+ . $cache_file
+else
+ echo "creating cache $cache_file"
+ > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='echo $CPP $CPPFLAGS 1>&5;
+$CPP $CPPFLAGS'
+ac_compile='echo ${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5;
+${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5 2>&5'
+ac_link='echo ${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5;
+${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5 2>&5'
+
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+ # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+ ac_n= ac_c='
+' ac_t=' '
+ else
+ ac_n=-n ac_c= ac_t=
+ fi
+else
+ ac_n= ac_c='\c' ac_t=
+fi
+
+
+
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ for ac_dir in $PATH; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CC="gcc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+ test -z "$ac_cv_prog_CC" && ac_cv_prog_CC="cc"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.c <<EOF
+#ifdef __GNUC__
+ yes;
+#endif
+EOF
+if ${CC-cc} -E conftest.c 2>&5 | egrep yes >/dev/null 2>&1; then
+ ac_cv_prog_gcc=yes
+else
+ ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+if test $ac_cv_prog_gcc = yes; then
+ GCC=yes
+ if test "${CFLAGS+set}" != set; then
+ echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+if eval "test \"`echo '$''{'ac_cv_prog_gcc_g'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+ ac_cv_prog_gcc_g=yes
+else
+ ac_cv_prog_gcc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc_g" 1>&6
+ if test $ac_cv_prog_gcc_g = yes; then
+ CFLAGS="-g -O"
+ else
+ CFLAGS="-O"
+ fi
+ fi
+else
+ GCC=
+ test "${CFLAGS+set}" = set || CFLAGS="-g"
+fi
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ for ac_dir in $PATH; do
+ # Account for people who put trailing slashes in PATH elements.
+ case "$ac_dir/" in
+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ for ac_prog in ginstall installbsd scoinst install; do
+ if test -f $ac_dir/$ac_prog; then
+ if test $ac_prog = install &&
+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ # OSF/1 installbsd also uses dspmsg, but is usable.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+ IFS="$ac_save_ifs"
+
+fi
+ if test "${ac_cv_path_install+set}" = set; then
+ INSTALL="$ac_cv_path_install"
+ else
+ # As a last resort, use the slow shell script. We don't cache a
+ # path for INSTALL within a source directory, because that will
+ # break other packages using the cache if that directory is
+ # removed, or if the path is relative.
+ INSTALL="$ac_install_sh"
+ fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+subdirs="doc example testsuite"
+
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs. It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already. You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+ sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=\${\1='\2'}/p" \
+ >> confcache
+if cmp -s $cache_file confcache; then
+ :
+else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+cat > conftest.defs <<\EOF
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) \(.*\)%-D\1=\2%g
+s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
+s%\[%\\&%g
+s%\]%\\&%g
+s%\$%$$%g
+EOF
+DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+rm -f conftest.defs
+
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+ case "\$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "$CONFIG_STATUS generated by autoconf version 2.7"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "\$ac_cs_usage"; exit 0 ;;
+ *) echo "\$ac_cs_usage"; exit 1 ;;
+ esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@CC@%$CC%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@subdirs@%$subdirs%g
+
+CEOF
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust relative srcdir, etc. for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ case "$ac_given_INSTALL" in
+ [/$]*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+ sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file
+fi; done
+rm -f conftest.subs
+
+
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
+if test "$no_recursion" != yes; then
+
+ # Remove --cache-file and --srcdir arguments so they do not pile up.
+ ac_sub_configure_args=
+ ac_prev=
+ for ac_arg in $ac_configure_args; do
+ if test -n "$ac_prev"; then
+ ac_prev=
+ continue
+ fi
+ case "$ac_arg" in
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ ;;
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ ;;
+ *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;;
+ esac
+ done
+
+ for ac_config_dir in doc example testsuite; do
+
+ # Do not complain, so a configure script can configure whichever
+ # parts of a large source tree are present.
+ if test ! -d $srcdir/$ac_config_dir; then
+ continue
+ fi
+
+ echo configuring in $ac_config_dir
+
+ case "$srcdir" in
+ .) ;;
+ *)
+ if test -d ./$ac_config_dir || mkdir ./$ac_config_dir; then :;
+ else
+ { echo "configure: error: can not create `pwd`/$ac_config_dir" 1>&2; exit 1; }
+ fi
+ ;;
+ esac
+
+ ac_popdir=`pwd`
+ cd $ac_config_dir
+
+ case "$srcdir" in
+ .) # No --srcdir option. We are building in place.
+ ac_sub_srcdir=$srcdir ;;
+ /*) # Absolute path.
+ ac_sub_srcdir=$srcdir/$ac_config_dir ;;
+ *) # Relative path.
+ ac_sub_srcdir=../$srcdir/$ac_config_dir ;;
+ esac
+
+ # Check for guested configure; otherwise get Cygnus style configure.
+ if test -f $ac_sub_srcdir/configure; then
+ ac_sub_configure=$ac_sub_srcdir/configure
+ elif test -f $ac_sub_srcdir/configure.in; then
+ ac_sub_configure=$ac_configure
+ else
+ echo "configure: warning: no configuration information is in $ac_config_dir" 1>&2
+ ac_sub_configure=
+ fi
+
+ # The recursion is here.
+ if test -n "$ac_sub_configure"; then
+
+ # Make the cache file name correct relative to the subdirectory.
+ # A "../" for each directory in /$ac_config_dir.
+ ac_dots=`echo $ac_config_dir|sed -e 's%^\./%%' -e 's%[^/]$%&/%' -e 's%[^/]*/%../%g'`
+ case "$cache_file" in
+ /*) ac_sub_cache_file=$cache_file ;;
+ *) # Relative path.
+ ac_sub_cache_file="$ac_dots$cache_file" ;;
+ esac
+ case "$ac_given_INSTALL" in
+ [/$]*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+
+ echo "running ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir"
+ # The eval makes quoting arguments work.
+ if eval ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir
+ then :
+ else
+ { echo "configure: error: $ac_sub_configure failed for $ac_config_dir" 1>&2; exit 1; }
+ fi
+ fi
+
+ cd $ac_popdir
+ done
+fi
+
--- /dev/null
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT(runtest.exp)
+
+AC_PROG_CC
+AC_PROG_INSTALL
+
+AC_CONFIG_SUBDIRS(doc example testsuite)
+
+AC_OUTPUT(Makefile)
--- /dev/null
+total 266
+-rw-r--r-- 1 janw users 5396 Sep 19 21:10 Makefile.in
+-rw-r--r-- 1 janw users 8202 Sep 19 21:18 README.bluegnu
+-rw-r--r-- 1 janw users 12903 Aug 3 1998 README.dejagnu
+-rw-r--r-- 1 janw users 284 Aug 3 1998 TODO.dejagnu
+-rw-r--r-- 1 janw users 19640 Aug 3 1998 aclocal.m4
+-rwxr-xr-x 1 janw users 3323 Sep 19 15:37 bluegnu
+-rwxr-xr-x 1 janw users 43 Feb 11 1999 bluegnutk
+-rw-r--r-- 1 janw users 8456 Sep 17 18:17 bluegnutk.itcl
+-rw-r--r-- 1 janw users 839 Feb 11 1999 bluegnutk.rc
+-rw-r--r-- 1 janw users 10554 Sep 17 18:17 bluegnutkUtils.itcl
+-rwxr-xr-- 1 janw users 17007 Aug 3 1998 config.guess
+-rwxr-xr-x 1 janw users 32591 Aug 3 1998 configure
+-rw-r--r-- 1 janw users 179 Aug 3 1998 configure.in
+-rw-r--r-- 1 janw users 0 Sep 19 21:55 contents
+drwxr-xr-x 2 janw users 1024 Sep 19 21:15 contrib
+-rwxr-xr-x 1 janw users 2204 Aug 3 1998 dejagnu
+drwxr-xr-x 2 janw users 1024 Sep 19 21:55 doc
+drwxr-xr-x 3 janw users 1024 Sep 19 21:55 example
+-rwxr-xr-x 1 janw users 4772 Aug 3 1998 install-sh
+drwxr-xr-x 2 janw users 1024 Sep 19 21:15 lib
+-rwxr-xr-x 1 janw users 650 Aug 3 1998 mkinstalldirs
+-rwxr-xr-- 1 janw users 2102 Aug 3 1998 runtest
+-rwxr-xr-- 1 janw users 33061 Aug 3 1998 runtest.exp
+-rw-r--r-- 1 janw users 7843 Aug 3 1998 site.tmpl
+-rw-r--r-- 1 janw users 77247 Aug 3 1998 tcl-mode.el
+drwxr-xr-x 4 janw users 1024 Sep 19 21:15 testsets
+drwxr-xr-x 7 janw users 1024 Sep 19 21:55 testsuite
+
+contrib:
+total 45
+-rw-r--r-- 1 janw users 868 Aug 3 1998 README
+-rwxr-xr-- 1 janw users 1500 Aug 3 1998 test-g++
+-rwxr-xr-- 1 janw users 8256 Aug 3 1998 test-tool
+-rwxr-xr-x 1 janw users 32055 Aug 3 1998 testit
+
+doc:
+total 1867
+-rw-r--r-- 1 janw users 4796 Sep 19 21:10 Makefile.in
+-rw-r--r-- 1 janw users 7917 Sep 19 21:10 README.tex
+-rw-r--r-- 1 janw users 10840 Sep 19 21:16 READMEdvi.dvi
+-rw-r--r-- 1 janw users 52 Sep 19 15:37 READMEdvi.tex
+-rw-r--r-- 1 janw users 23 Sep 19 21:10 READMEdvi.title
+-rw-r--r-- 1 janw users 9344 Sep 19 21:16 READMEtxt.dvi
+-rw-r--r-- 1 janw users 52 Sep 19 15:37 READMEtxt.tex
+-rwxr-xr-x 1 janw users 22137 Aug 3 1998 configure
+-rw-r--r-- 1 janw users 125 Aug 3 1998 configure.in
+-rw-r--r-- 1 janw users 3289 Sep 18 21:42 dejagnu.1
+-rw-r--r-- 1 janw users 263684 Sep 19 21:52 dejagnu.dvi
+-rw-r--r-- 1 janw users 2041 Sep 19 21:52 dejagnu.info
+-rw-r--r-- 1 janw users 49656 Sep 19 21:52 dejagnu.info-1
+-rw-r--r-- 1 janw users 50053 Sep 19 21:52 dejagnu.info-2
+-rw-r--r-- 1 janw users 47866 Sep 19 21:52 dejagnu.info-3
+-rw-r--r-- 1 janw users 651210 Sep 19 21:52 dejagnu.pdf
+-rw-r--r-- 1 janw users 438510 Sep 19 21:52 dejagnu.ps
+-rw-r--r-- 1 janw users 139117 Aug 3 1998 dejagnu.texi
+-rw-r--r-- 1 janw users 11008 Sep 19 21:52 notice.html
+-rw-r--r-- 1 janw users 78227 Sep 19 21:20 notice.pdf
+-rw-r--r-- 1 janw users 95621 Sep 19 21:20 notice.ps
+
+example:
+total 29
+-rw-r--r-- 1 janw users 2297 Feb 11 1999 Makefile.in
+drwxr-xr-x 3 janw users 1024 Sep 19 21:55 calc
+-rwxr-xr-x 1 janw users 23014 Aug 3 1998 configure
+-rw-r--r-- 1 janw users 159 Aug 3 1998 configure.in
+
+example/calc:
+total 37
+-rw-r--r-- 1 janw users 3336 Feb 11 1999 Makefile.in
+-rw-r--r-- 1 janw users 416 Aug 3 1998 calc.1
+-rw-r--r-- 1 janw users 1380 Aug 3 1998 calc.c
+-rw-r--r-- 1 janw users 225 Aug 3 1998 calc.h.in
+-rwxr-xr-x 1 janw users 25611 Aug 3 1998 configure
+-rw-r--r-- 1 janw users 363 Aug 3 1998 configure.in
+drwxr-xr-x 4 janw users 1024 Sep 19 21:15 testsuite
+
+example/calc/testsuite:
+total 2
+drwxr-xr-x 2 janw users 1024 Sep 19 21:15 calc.test
+drwxr-xr-x 2 janw users 1024 Sep 19 21:15 config
+
+example/calc/testsuite/calc.test:
+total 2
+-rw-r--r-- 1 janw users 1151 Aug 3 1998 calc.exp
+
+example/calc/testsuite/config:
+total 1
+-rw-r--r-- 1 janw users 825 Aug 3 1998 unix.exp
+
+lib:
+total 274
+-rw-r--r-- 1 janw users 2776 Sep 18 19:53 BlueGnu_target.itcl
+-rw-r--r-- 1 janw users 2183 Sep 18 19:53 Default_target.itcl
+-rw-r--r-- 1 janw users 5795 Sep 18 19:53 Types.itcl
+-rw-r--r-- 1 janw users 561 Sep 17 18:18 bluegnu.itcl
+-rw-r--r-- 1 janw users 2959 Aug 3 1998 bug.exp
+-rw-r--r-- 1 janw users 5353 Aug 3 1998 debugger.exp
+-rw-r--r-- 1 janw users 1890 Aug 3 1998 dejagnu.itcl
+-rw-r--r-- 1 janw users 31724 Aug 3 1998 dejagnu.tcl
+-rw-r--r-- 1 janw users 27666 Aug 3 1998 dg.exp
+-rw-r--r-- 1 janw users 340 Aug 3 1998 foo.itcl
+-rw-r--r-- 1 janw users 15692 Aug 3 1998 framework.exp
+-rw-r--r-- 1 janw users 6926 Aug 3 1998 libgloss.exp
+-rw-r--r-- 1 janw users 1499 Sep 17 18:18 nonexpect.itcl
+-rw-r--r-- 1 janw users 22986 Aug 3 1998 remote.exp
+-rw-r--r-- 1 janw users 1069 Aug 3 1998 serverUtils.itcl
+-rw-r--r-- 1 janw users 14175 Aug 3 1998 target.exp
+-rw-r--r-- 1 janw users 537 Sep 17 18:18 tclIndex
+-rw-r--r-- 1 janw users 9084 Sep 17 18:18 testSessionApplication.itcl
+-rw-r--r-- 1 janw users 34819 Sep 17 18:18 testSessionClasses.itcl
+-rw-r--r-- 1 janw users 36461 Sep 17 18:18 testSessionFramework.itcl
+-rw-r--r-- 1 janw users 476 Sep 17 18:18 testSessionUtils.itcl
+-rw-r--r-- 1 janw users 5357 Aug 3 1998 udi.exp
+-rw-r--r-- 1 janw users 2923 Aug 3 1998 util-defs.exp
+-rw-r--r-- 1 janw users 11309 Aug 3 1998 utils.exp
+-rw-r--r-- 1 janw users 7377 Aug 3 1998 vrtx.exp
+-rw-r--r-- 1 janw users 7603 Aug 3 1998 vxworks.exp
+
+testsets:
+total 3
+drwxr-xr-x 4 janw users 1024 Sep 19 21:15 BlueGnu
+drwxr-xr-x 3 janw users 1024 Sep 19 21:15 examples
+-rw-r--r-- 1 janw users 190 Sep 18 19:53 tclIndex
+
+testsets/BlueGnu:
+total 29
+-rw-r--r-- 1 janw users 257 Sep 18 19:53 appendQueue.itcl
+-rw-r--r-- 1 janw users 4325 Sep 18 19:53 clone_output.itcl
+-rw-r--r-- 1 janw users 1364 Sep 18 19:53 locateFile.itcl
+-rw-r--r-- 1 janw users 918 Sep 18 19:53 namespaceVariables.itcl
+-rw-r--r-- 1 janw users 152 Sep 18 19:53 prependQueue.itcl
+-rw-r--r-- 1 janw users 686 Sep 18 19:53 runtest.itcl
+-rw-r--r-- 1 janw users 659 Sep 18 19:53 testNaming.itcl
+drwxr-xr-x 2 janw users 1024 Sep 19 21:15 ts001
+drwxr-xr-x 2 janw users 1024 Sep 19 21:15 ts002
+-rw-r--r-- 1 janw users 968 Sep 18 19:53 types.itcl
+-rw-r--r-- 1 janw users 13282 Sep 18 19:53 verbose.itcl
+
+testsets/BlueGnu/ts001:
+total 1
+-rw-r--r-- 1 janw users 20 Sep 18 19:53 A.itcl
+
+testsets/BlueGnu/ts002:
+total 1
+-rw-r--r-- 1 janw users 20 Sep 18 19:53 A.itcl
+
+testsets/examples:
+total 7
+drwxr-xr-x 2 janw users 1024 Sep 19 21:15 lib
+-rw-r--r-- 1 janw users 54 Sep 18 19:53 tc001
+-rw-r--r-- 1 janw users 73 Sep 18 19:53 tc002
+-rw-r--r-- 1 janw users 97 Sep 18 19:53 ts_001
+-rw-r--r-- 1 janw users 181 Sep 18 19:53 ts_002
+-rw-r--r-- 1 janw users 76 Sep 18 19:53 ts_003
+-rw-r--r-- 1 janw users 228 Sep 18 19:53 versionTcl.itcl
+
+testsets/examples/lib:
+total 2
+-rw-r--r-- 1 janw users 1358 Sep 18 19:53 benchmark.itcl
+
+testsuite:
+total 45
+-rw-r--r-- 1 janw users 3155 Sep 18 20:39 Makefile.in
+drwxr-xr-x 3 janw users 1024 Sep 19 21:15 T
+drwxr-xr-x 3 janw users 1024 Sep 19 21:15 bluegnu.all
+drwxr-xr-x 2 janw users 1024 Sep 19 21:15 config
+-rwxr-xr-x 1 janw users 34637 Aug 3 1998 configure
+-rw-r--r-- 1 janw users 166 Aug 3 1998 configure.in
+drwxr-xr-x 2 janw users 1024 Sep 19 21:15 lib
+drwxr-xr-x 2 janw users 1024 Sep 19 21:15 tools
+
+testsuite/T:
+total 10
+-rw-r--r-- 1 janw users 232 Aug 3 1998 env.exp
+-rw-r--r-- 1 janw users 1355 Aug 3 1998 env.iexp
+-rw-r--r-- 1 janw users 129 Aug 3 1998 foo.exp
+drwxr-xr-x 2 janw users 1024 Sep 19 21:15 subT
+-rw-r--r-- 1 janw users 132 Aug 3 1998 test_000.exp
+-rw-r--r-- 1 janw users 484 Aug 3 1998 test_001.exp
+-rw-r--r-- 1 janw users 453 Aug 3 1998 test_002.exp
+-rw-r--r-- 1 janw users 55 Aug 3 1998 test_003.exp
+-rw-r--r-- 1 janw users 34 Aug 3 1998 test_004.exp
+
+testsuite/T/subT:
+total 1
+-rw-r--r-- 1 janw users 391 Aug 3 1998 test_002.exp
+
+testsuite/bluegnu.all:
+total 32
+-rw-r--r-- 1 janw users 2431 Aug 3 1998 clone_output.test
+-rw-r--r-- 1 janw users 2908 Aug 3 1998 config.test
+-rw-r--r-- 1 janw users 1893 Aug 3 1998 default_procs.tcl
+-rw-r--r-- 1 janw users 1580 Aug 3 1998 libs.exp
+-rw-r--r-- 1 janw users 3486 Aug 3 1998 options.exp
+-rw-r--r-- 1 janw users 4938 Aug 3 1998 remote.test
+-rw-r--r-- 1 janw users 407 Aug 3 1998 stats-sub.exp
+-rw-r--r-- 1 janw users 1626 Aug 3 1998 stats.exp
+-rw-r--r-- 1 janw users 6001 Aug 3 1998 target.test
+drwxr-xr-x 4 janw users 1024 Sep 19 21:15 topdir
+-rw-r--r-- 1 janw users 2750 Aug 3 1998 utils.test
+
+testsuite/bluegnu.all/topdir:
+total 2
+drwxr-xr-x 3 janw users 1024 Sep 19 21:15 subdir1
+drwxr-xr-x 2 janw users 1024 Sep 19 21:15 subdir2
+
+testsuite/bluegnu.all/topdir/subdir1:
+total 3
+-rw-r--r-- 1 janw users 31 Aug 3 1998 subfile1
+-rw-r--r-- 1 janw users 32 Aug 3 1998 subfile2
+drwxr-xr-x 2 janw users 1024 Sep 19 21:15 subsubdir1
+
+testsuite/bluegnu.all/topdir/subdir1/subsubdir1:
+total 1
+-rw-r--r-- 1 janw users 32 Aug 3 1998 subsubfile1
+
+testsuite/bluegnu.all/topdir/subdir2:
+total 1
+-rw-r--r-- 1 janw users 32 Aug 3 1998 subfile2
+
+testsuite/config:
+total 2
+-rw-r--r-- 1 janw users 2008 Aug 3 1998 default.exp
+
+testsuite/lib:
+total 5
+-rw-r--r-- 1 janw users 5114 Aug 3 1998 libsup.exp
+
+testsuite/tools:
+total 1
+-rw-r--r-- 1 janw users 609 Aug 3 1998 env.exp
--- /dev/null
+These are "user" contributed scripts that automate testing. These all
+depend on using "make check", so they are included here as an aid to
+helping others automate their own testing. All of these script do
+report filtering on the output from DejaGnu. test-tool and test-g++
+are basically the same script. test-target is the script I use for our
+quarterly release and it is the most sophisticated. It still uses
+"make check" (a make target that start runtest) to produce the
+results, but tests our entire tool chain for native and crosses. It
+also produces a short summary report that gets emailed, as well as
+summary reports. It does regression analysis using the previous test
+run. testit is a very crude and simple Tk GUI for accessing all the
+testing results. Hope these are helpful to anyone, I'd like to collect
+more from the net as they get developed.
+
+ - rob -
+
--- /dev/null
+#!/bin/sh
+
+# Default DEVOSRCDIR
+if [ "$DEVOSRCDIR" = "" ]; then
+ DEVOSRCDIR=$HOME/devo ; export DEVOSRCDIR
+fi
+
+# Check DEVOSRCDIR
+if [ ! -d "$DEVOSRCDIR" ]; then
+ echo "$0: no directory $DEVOSRCDIR" >&2
+ exit 2
+fi
+
+# Default DEVOBINDIR
+if [ "$DEVOBINDIR" = "" ]; then
+ CPU=`$DEVOSRCDIR/config.guess`
+ if [ $? != 0 ]; then
+ echo "$0: cannot run config.guess" >&2
+ exit 2
+ fi
+ DEVOBINDIR=$HOME/$CPU ; export DEVOBINDIR
+fi
+
+# Check DEVOBINDIR
+if [ ! -d "$DEVOBINDIR" ]; then
+ echo "$0: no directory $DEVOBINDIR" >&2
+ exit 2
+fi
+
+# Default LOGDIR
+if [ "$LOGDIR" = "" ]; then
+ LOGDIR=$HOME/logs ; export LOGDIR
+fi
+
+# Check LOGDIR
+if [ ! -d "$LOGDIR" ]; then
+ echo "$0: no directory $LOGDIR" >&2
+ exit 2
+fi
+
+cd $LOGDIR || exit 2
+
+sum=g++-`date '+%y%m%d'`
+
+$DEVOSRCDIR/dejagnu/contrib/test-tool g++ > $sum 2>&1
+status=$?
+
+cd $DEVOBINDIR/libg++
+make check >/tmp/clgpp$$ 2>&1
+if [ $? != 0 ]; then
+ cd $LOGDIR
+ echo "" >> $sum
+ echo "libg++ fails to make check:" >> $sum
+ tail -20 /tmp/clgpp$$ >> $sum
+ if [ $status = 0 ]; then
+ status=1
+ fi
+fi
+
+cd $DEVOBINDIR/libio
+make check >/tmp/clgpp$$ 2>&1
+if [ $? != 0 ]; then
+ cd $LOGDIR
+ echo "" >> $sum
+ echo "libio fails to make check:" >> $sum
+ tail -20 /tmp/clgpp$$ >> $sum
+ if [ $status = 0 ]; then
+ status=1
+ fi
+fi
+
+cd $DEVOBINDIR/libstdc++
+make check >/tmp/clgpp$$ 2>&1
+if [ $? != 0 ]; then
+ cd $LOGDIR
+ echo "" >> $sum
+ echo "libstdc++ fails to make check:" >> $sum
+ tail -20 /tmp/clgpp$$ >> $sum
+ if [ $status = 0 ]; then
+ status=1
+ fi
+fi
+
+exit $status
--- /dev/null
+#!/bin/sh
+# This script automatically test the given tool with the tool's test cases,
+# reporting anything of interest.
+
+# exits with 1 if there is nothing of interest
+# exits with 0 if there is something interesting
+# exits with 2 if an error occurred
+
+# Syntax: test-tool [-expectedpass] [-keepoutput] [-noupdate] g++|gcc|gdb|...
+#
+# -expectedpass: Turn XFAIL into "pass", XPASS into "fail".
+# The default is XFAIL->fail, XPASS->pass.
+# -keepoutput: Save "make check" output in test-$tool.log.
+# -noupdate: Don't update log files.
+
+# Limitations, don't run this multiple times in one day, unless the -noupdate
+# flag is given.
+
+# Written by Mike Stump <mrs@cygnus.com>
+
+expectedpass=no
+keepoutput=no
+update=yes
+tool=""
+
+for arg in $*
+do
+ case $arg in
+ -expectedpass) expectedpass=yes ;;
+ -keepoutput) keepoutput=yes ;;
+ -noupdate) update=no ;;
+ -*)
+ echo "Usage: [-expectedpass] [-keepoutput] [-noupdate] tool_name" >&2
+ exit 2
+ ;;
+ *)
+ if [ "$tool" != "" ]; then
+ echo "Usage: [-expectedpass] [-keepoutput] [-noupdate] tool_name" >&2
+ exit 2
+ fi
+ tool=$arg
+ ;;
+ esac
+done
+
+# FIXME: It sure would be nice if `testdir' wasn't necessary. :-(
+
+if [ "$tool" = g++ ]; then
+ devoname=gcc
+ checktarget=check-g++
+ testdir=.
+elif [ "$tool" = gcc ]; then
+ devoname=gcc
+ checktarget=check-gcc
+ testdir=.
+elif [ "$tool" = gdb ]; then
+ devoname=gdb
+ checktarget=check
+ testdir=testsuite
+elif [ "$tool" = gas ]; then
+ devoname=gas
+ checktarget=check
+ testdir=testsuite
+elif [ "$tool" = gld -o "$tool" = ld ]; then
+ devoname=ld
+ checktarget=check
+ testdir=.
+elif [ "$tool" = binutils ]; then
+ devoname=binutils
+ checktarget=check
+ testdir=.
+else
+ echo "Only gcc, g++, gdb, gas, gld, and binutils supported." >&2
+ exit 2
+fi
+
+# Default DEVOSRCDIR
+if [ "$DEVOSRCDIR" = "" ]; then
+ DEVOSRCDIR=$HOME/devo ; export DEVOSRCDIR
+fi
+
+# Check DEVOSRCDIR
+if [ ! -d "$DEVOSRCDIR" ]; then
+ echo "$0: no directory $DEVOSRCDIR" >&2
+ exit 2
+fi
+
+# Default DEVOBINDIR
+if [ "$DEVOBINDIR" = "" ]; then
+ CPU=`$DEVOSRCDIR/config.guess`
+ if [ $? != 0 ]; then
+ echo "$0: cannot run config.guess" >&2
+ exit 2
+ fi
+ DEVOBINDIR=$HOME/$CPU ; export DEVOBINDIR
+fi
+
+# Check DEVOBINDIR
+if [ ! -d "$DEVOBINDIR" ]; then
+ echo "$0: no directory $DEVOBINDIR" >&2
+ exit 2
+fi
+
+# Specialize DEVOSRCDIR
+if [ -d "$DEVOSRCDIR/$devoname" ]; then
+ DEVOSRCDIR=$DEVOSRCDIR/$devoname
+else
+ echo "$0: Cannot find source directory." >&2
+ exit 2
+fi
+
+# Default LOGDIR
+if [ "$LOGDIR" = "" ]; then
+ LOGDIR=$HOME/logs ; export LOGDIR
+fi
+
+# Check LOGDIR
+if [ ! -d "$LOGDIR" ]; then
+ echo "$0: no directory $LOGDIR" >&2
+ exit 2
+fi
+
+# Specialize DEVOBINDIR
+if [ -d "$DEVOBINDIR/$devoname" ]; then
+ DEVOBINDIR=$DEVOBINDIR/$devoname
+else
+ echo "$0: Cannot find binary directory." >&2
+ exit 2
+fi
+
+# Binary directory
+cd $DEVOBINDIR || exit 2
+
+TMPDIR=${TMPDIR-/tmp}
+
+tmp=$TMPDIR/$tool-testing.$$a
+tmp1=$TMPDIR/$tool-testing.$$b
+tmp2=$TMPDIR/$tool-testing.$$c
+now_s=$TMPDIR/$tool-testing.$$d
+before_s=$TMPDIR/$tool-testing.$$e
+
+if [ "$keepoutput" = yes ]; then
+ rm -f test-$tool.log
+ make RUNTESTFLAGS="-v -v" $checktarget >test-$tool.log 2>&1
+else
+ make RUNTESTFLAGS="-v -v" $checktarget >/dev/null 2>&1
+fi
+
+# Check for DEJAGNU errors that prevented any output at all.
+if [ ! -f $testdir/$tool.sum ]; then
+ echo "Tests didn't run, probably because of a framework error."
+ if [ "$keepoutput" = yes ]; then
+ echo
+ tail -20 test-$tool.log
+ else
+ echo "Unable to determine why. Rerun with -keepoutput."
+ fi
+ exit 2
+fi
+
+# Canonicalize XFAIL and XPASS so the rest of the script can ignore them.
+if [ "$expectedpass" = yes ]; then
+ sed 's/^XFAIL/PASS(XFAIL)/; s/^XPASS/FAIL(XPASS)/' <$testdir/$tool.sum >$testdir/$tool.1.sum || exit 2
+else
+ sed 's/^XFAIL/FAIL(XFAIL)/; s/^XPASS/PASS(XPASS)/' <$testdir/$tool.sum >$testdir/$tool.1.sum || exit 2
+fi
+mv $testdir/$tool.1.sum $testdir/$tool.sum
+
+todayname=`date '+%y%m%d'`
+if [ "$update" = no ]; then
+ now=$testdir/$tool.sum
+ before=`ls $LOGDIR/$tool-??????.sum | tail -1`
+else
+ mv -f $testdir/$tool.sum $LOGDIR/$tool-$todayname.sum || exit 2
+ mv -f $testdir/$tool.log $LOGDIR/$tool-$todayname.log || exit 2
+
+ now=`ls $LOGDIR/$tool-??????.sum | tail -1`
+ before=`ls $LOGDIR/$tool-??????.sum | tail -2 | sed 1q`
+fi
+trap "rm -f $tmp $tmp1 $tmp2 $now_s $before_s" 0 1 2 3 5 9 13 15
+
+if [ "$before" = "" ]; then
+ echo "Need previous summary to compare against." >&2
+ exit 2
+fi
+
+# Say where the logs are stored so they appear in email messages.
+echo
+echo "Log files: $LOGDIR/$tool-$todayname.*"
+echo
+
+grep '^[PFU][A-Z()]*:' | sort -t ':' +1 "$now" > "$now_s"
+grep '^[PFU][A-Z()]*:' | sort -t ':' +1 "$before" > "$before_s"
+
+grep '^FAIL:' "$now_s" | sed 's/^[^:]*:[ ]*//' >$tmp1
+grep '^PASS' "$before_s" | sed 's/^[^:]*:[ ]*//' | comm -12 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "Tests that now unexpectedly fail, but worked before:"
+ echo
+ cat $tmp2
+ showchangelog=1
+ echo
+fi
+
+grep '^PASS' "$now_s" | sed 's/^[^:]*:[ ]*//' >$tmp1
+grep '^FAIL' "$before_s" | sed 's/^[^:]*:[ ]*//' | comm -12 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "Tests that now work, but didn't before:"
+ echo
+ cat $tmp2
+ echo
+fi
+
+grep '^FAIL:' "$now_s" | sed 's/^[^:]*:[ ]*//' >$tmp1
+grep '^[PFU][A-Z()]*:' "$before_s" | sed 's/^[^:]*:[ ]*//' | comm -23 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "New tests that unexpectedly FAIL:"
+ echo
+ cat $tmp2
+ echo
+fi
+
+grep '^PASS' "$now_s" | sed 's/^[^:]*:[ ]*//' >$tmp1
+grep '^[PFU][A-Z()]*:' "$before_s" | sed 's/^[^:]*:[ ]*//' | comm -23 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "New tests that PASS:"
+ echo
+ cat $tmp2
+ echo
+fi
+
+grep '^[PFU][A-Z()]*:' "$now_s" | sed 's/^[^:]*:[ ]*//' >$tmp1
+grep '^PASS' "$before_s" | sed 's/^[^:]*:[ ]*//' | comm -13 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "Old tests that passed, that have disappeared: (Eeek!)"
+ echo
+ cat $tmp2
+ echo
+fi
+
+grep '^[PFU][A-Z()]*:' "$now_s" | sed 's/^[^:]*:[ ]*//' >$tmp1
+grep '^FAIL' "$before_s" | sed 's/^[^:]*:[ ]*//' | comm -13 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "Old tests that failed, that have disappeared: (Eeek!)"
+ echo
+ cat $tmp2
+ echo
+fi
+
+grep '^FAIL:' "$now_s" | sed 's/^[^:]*:[ ]*//' >$tmp1
+grep '^FAIL' "$before_s" | sed 's/^[^:]*:[ ]*//' | comm -12 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "Tests that still don't work:"
+ echo
+ cat $tmp2
+ echo
+fi
+
+egrep '^(ERROR|WARNING):' "$now" >$tmp1
+
+if grep -s . $tmp1 > /dev/null; then
+ echo "Errors and warnings:"
+ echo
+ cat $tmp1
+ echo
+fi
+
+if [ "$tool" = g++ ]; then
+ if [ -f $DEVOBINDIR/libio/run-make-check ]; then
+ cd $DEVOBINDIR/libio
+ make check >$TMPDIR/clgpp$$ 2>&1
+ if [ $? != 0 ]; then
+ echo
+ echo "libio fails to make check:"
+ tail -20 $TMPDIR/clgpp$$
+ fi
+ fi
+ if [ -f $DEVOBINDIR/libstdc++/run-make-check ]; then
+ cd $DEVOBINDIR/libstdc++
+ make check >$TMPDIR/clgpp$$ 2>&1
+ if [ $? != 0 ]; then
+ echo
+ echo "libstdc++ fails to make check:"
+ tail -20 $TMPDIR/clgpp$$
+ fi
+ fi
+ if [ -f $DEVOBINDIR/libg++/run-make-check ]; then
+ cd $DEVOBINDIR/libg++
+ make check >$TMPDIR/clgpp$$ 2>&1
+ if [ $? != 0 ]; then
+ echo
+ echo "libg++ fails to make check:"
+ tail -20 $TMPDIR/clgpp$$
+ fi
+ fi
+ rm -f $TMPDIR/clgpp$$
+ cd $DEVOBINDIR
+fi
+
+if [ "$devoname" != "" ]; then
+ if [ "$showchangelog" = 1 ]; then
+ echo "Here is what's new in the ChangeLog:"
+ echo
+ diff -c $LOGDIR/$devoname.ChangeLog $DEVOSRCDIR/ChangeLog
+ echo
+ if [ "$tool" = g++ ]; then
+ echo "Here is what's new in the cp/ChangeLog:"
+ echo
+ diff -c $LOGDIR/g++.ChangeLog $DEVOSRCDIR/cp/ChangeLog
+ fi
+ echo
+ fi
+ if [ "$update" != no ]; then
+ # save the old ChangeLog as a reference for next time
+ rm -f $LOGDIR/$devoname.ChangeLog.BAK
+ mv $LOGDIR/$devoname.ChangeLog $LOGDIR/$devoname.ChangeLog.BAK 2>/dev/null
+ cp -p $DEVOSRCDIR/ChangeLog $LOGDIR/$devoname.ChangeLog
+ if [ "$tool" = g++ ]; then
+ rm -f $LOGDIR/g++.ChangeLog.BAK
+ mv $LOGDIR/g++.ChangeLog $LOGDIR/g++.ChangeLog.BAK 2>/dev/null
+ cp -p $DEVOSRCDIR/cp/ChangeLog $LOGDIR/g++.ChangeLog
+ fi
+ fi
+fi
+
+diff $before $now | grep -s . >/dev/null
+if [ $? = 0 ]; then
+ echo "Details:"
+ echo
+ diff $before $now
+ echo
+fi
--- /dev/null
+#!/usr/latest/bin/wish -f
+# Program: testit
+# Tcl version: 7.2 (Tcl/Tk/XF)
+# Tk version: 3.5
+# XF version: 2.2
+#
+
+
+# procedure to show window .
+proc ShowWindow. {args} {# xf ignore me 7
+
+ # Window manager configurations
+ global tkVersion
+ wm positionfrom . user
+ wm sizefrom . ""
+ wm maxsize . 1152 900
+ wm title . {xf}
+
+ # bindings
+ bind . <Button-3> {MenuPopupPost .frame0.menubutton3.m.menu4 %X %Y}
+ bind . <ButtonRelease-3> {MenuPopupRelease .frame0.menubutton3.m.menu4 %W}
+
+ # build widget .frame0
+ frame .frame0 \
+ -background {white} \
+ -borderwidth {2} \
+ -relief {raised}
+
+ # build widget .frame0.menubutton0
+ menubutton .frame0.menubutton0 \
+ -background {white} \
+ -foreground {black} \
+ -menu {.frame0.menubutton0.m} \
+ -text {Summaries}
+
+ # build widget .frame0.menubutton0.m
+ menu .frame0.menubutton0.m \
+ -background {white} \
+ -foreground {black}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/gcc.sum
+
+} \
+ -label {Gcc}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/g++.sum
+
+} \
+ -label {G++}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/gdb.sum
+
+} \
+ -label {Gdb}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/gas.sum
+
+} \
+ -label {Gas}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/binutils.sum
+
+} \
+ -label {Binutils}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/runtest.sum
+
+} \
+ -label {Runtest}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/tcl.sum
+
+} \
+ -label {Tcl}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/expect.sum
+
+} \
+ -label {Expect}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/libg++.sum
+
+} \
+ -label {Libg++}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/libio.sum
+
+} \
+ -label {Libio}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/libm.sum
+
+} \
+ -label {Libm}
+
+ # build widget .frame0.menubutton1
+ menubutton .frame0.menubutton1 \
+ -background {white} \
+ -foreground {black} \
+ -menu {.frame0.menubutton1.m} \
+ -text {Misc}
+
+ # build widget .frame0.menubutton1.m
+ menu .frame0.menubutton1.m \
+ -background {white} \
+ -foreground {black}
+ .frame0.menubutton1.m add command \
+ -command {EndSrc
+destroy .} \
+ -label {Exit}
+ .frame0.menubutton1.m add command \
+ -command {.frame6.frame.text2 delete 0.0 end} \
+ -label {Clear window}
+ .frame0.menubutton1.m add command \
+ -command {dialogbox} \
+ -label {Editor}
+ .frame0.menubutton1.m add command \
+ -command {.frame6.frame.text2 insert 0.0 "Top of tree is $testbase\n"} \
+ -label {Show filename}
+
+ # build widget .frame0.menubutton3
+ menubutton .frame0.menubutton3 \
+ -background {white} \
+ -foreground {black} \
+ -menu {.frame0.menubutton3.m} \
+ -text {Host}
+
+ # build widget .frame0.menubutton3.m
+ menu .frame0.menubutton3.m \
+ -background {white} \
+ -foreground {black}
+ .frame0.menubutton3.m add command \
+ -command {set host "alpha-dec-osf1.3"} \
+ -label {alpha-dec-osf1.3}
+ .frame0.menubutton3.m add command \
+ -command {set host "hppa1.1-hp-hpux"} \
+ -label {hppa1.1-hp-hpux}
+ .frame0.menubutton3.m add command \
+ -command {set host "i386-unknown-sysv4.2"} \
+ -label {i386-unknown-sysv4.2}
+ .frame0.menubutton3.m add command \
+ -command {set host "m68k-hp-hpux"} \
+ -label {m68k-hp-hpux}
+ .frame0.menubutton3.m add command \
+ -command {set host "m68k-sun-sunos4.1.1"} \
+ -label {m68k-sun-sunos4.1.1}
+ .frame0.menubutton3.m add command \
+ -command {set host "mips-dec-ultrix4.2"} \
+ -label {mips-dec-ultrix4.2}
+ .frame0.menubutton3.m add command \
+ -command {set host "mips-sgi-irix4.0.5H"} \
+ -label {mips-sgi-irix4.0.5H}
+ .frame0.menubutton3.m add command \
+ -command {set host "rs6000-ibm-aix3.2"} \
+ -label {rs6000-ibm-aix3.2}
+ .frame0.menubutton3.m add command \
+ -command {set host "sparc-sun-solaris2.3"} \
+ -label {sparc-sun-solaris2.3}
+ .frame0.menubutton3.m add command \
+ -command {set host "sparc-sun-sunos4.1.3"} \
+ -label {sparc-sun-sunos4.1.3}
+
+ # build widget .frame0.menubutton2
+ menubutton .frame0.menubutton2 \
+ -background {white} \
+ -foreground {black} \
+ -menu {.frame0.menubutton2.m} \
+ -text {Target}
+
+ # build widget .frame0.menubutton2.m
+ menu .frame0.menubutton2.m \
+ -background {white} \
+ -foreground {black}
+ .frame0.menubutton2.m add command \
+ -command {set target "a29k-amd-udi"} \
+ -label {a29k-amd-udi}
+ .frame0.menubutton2.m add command \
+ -command {set target "h8300-hms"} \
+ -label {h8300-hms}
+ .frame0.menubutton2.m add command \
+ -command {set target "i386-aout"} \
+ -label {i386-aout}
+ .frame0.menubutton2.m add command \
+ -command {set target "i386-lynx"} \
+ -label {i386-lynx}
+ .frame0.menubutton2.m add command \
+ -command {set target "i960-intel-nindy"} \
+ -label {i960-intel-nindy}
+ .frame0.menubutton2.m add command \
+ -command {set target "i960-vxwork"} \
+ -label {i960-vxworks}
+ .frame0.menubutton2.m add command \
+ -command {set target "m68k-aout"} \
+ -label {m68k-aout}
+ .frame0.menubutton2.m add command \
+ -command {set target "m68k-coff"} \
+ -label {m68k-coff}
+ .frame0.menubutton2.m add command \
+ -command {set target "m68k-lynx"} \
+ -label {m68k-lynx}
+ .frame0.menubutton2.m add command \
+ -command {set target "m68k-vxworks"} \
+ -label {m68k-vxworks}
+ .frame0.menubutton2.m add command \
+ -command {set target "mips-idt-ecoff"} \
+ -label {mips-idt-ecoff}
+ .frame0.menubutton2.m add command \
+ -command {set target "sh-hms"} \
+ -label {sh-hms}
+ .frame0.menubutton2.m add command \
+ -command {set target "sparc-aout"} \
+ -label {sparc-aout}
+ .frame0.menubutton2.m add command \
+ -command {set target "sparc-sun-sunos4.1.3"} \
+ -label {sparc-sun-sunos4.1.3}
+ .frame0.menubutton2.m add command \
+ -command {set target "sparc-vxworks"} \
+ -label {sparc-vxworks}
+ .frame0.menubutton2.m add command \
+ -command {set target "sparclite-aout"} \
+ -label {sparclite-aout}
+ .frame0.menubutton2.m add command \
+ -command {set target "sparclite-coff"} \
+ -label {sparclite-coff}
+ .frame0.menubutton2.m add command \
+ -command {set target "hppa1.1-hp-hpux"} \
+ -label {hppa1.1-hp-hpux}
+ .frame0.menubutton2.m add command \
+ -command {set target "i386-unknown-sysv4.2"} \
+ -label {i386-unknown-sysv4.2}
+ .frame0.menubutton2.m add command \
+ -command {set target "m68k-hp-hpux"} \
+ -label {m68k-hp-hpux}
+ .frame0.menubutton2.m add command \
+ -command {set target "m68k-sun-sunos4.1.1"} \
+ -label {m68k-sun-sunos4.1.1}
+ .frame0.menubutton2.m add command \
+ -command {set target "mips-dec-ultrix4.2"} \
+ -label {mips-dec-ultrix4.2}
+ .frame0.menubutton2.m add command \
+ -command {set target "mips-sgi-irix4.0.5H"} \
+ -label {mips-sgi-irix4.0.5H}
+ .frame0.menubutton2.m add command \
+ -command {set target "rs6000-ibm-aix3.2"} \
+ -label {rs6000-ibm-aix3.2}
+ .frame0.menubutton2.m add command \
+ -command {set target "sparc-sun-solaris2.3"} \
+ -label {sparc-sun-solaris2.3}
+
+ # build widget .frame0.menubutton9
+ menubutton .frame0.menubutton9 \
+ -background {white} \
+ -foreground {black} \
+ -menu {.frame0.menubutton9.m} \
+ -text {Results}
+
+ # build widget .frame0.menubutton9.m
+ menu .frame0.menubutton9.m \
+ -background {white} \
+ -foreground {black}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/gcc
+
+} \
+ -label {Gcc}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/g++
+
+} \
+ -label {G++}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/gdb
+
+} \
+ -label {Gdb}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/gas
+
+} \
+ -label {Gas}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/binutils
+
+} \
+ -label {Binutils}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/runtest
+} \
+ -label {Runtest}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/tcl
+
+} \
+ -label {Tcl}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/expect
+
+} \
+ -label {Expect}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/libg++
+
+} \
+ -label {Libg++}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/libio
+} \
+ -label {Libio}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/libm
+
+} \
+ -label {Libm}
+
+ # build widget .frame0.menubutton10
+ menubutton .frame0.menubutton10 \
+ -background {white} \
+ -foreground {black} \
+ -menu {.frame0.menubutton10.m} \
+ -text {Logs}
+
+ # build widget .frame0.menubutton10.m
+ menu .frame0.menubutton10.m \
+ -background {white} \
+ -foreground {black}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/gcc.log
+
+} \
+ -label {Gcc}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/g++.log
+
+} \
+ -label {G++}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/gdb.log
+
+} \
+ -label {Gdb}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/gas.log
+
+} \
+ -label {Gas}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/binutils.log
+
+} \
+ -label {Binutils}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/runtest.log
+
+} \
+ -label {Runtest}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/tcl.log
+
+} \
+ -label {Tcl}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/expect.log
+
+} \
+ -label {Expect}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/libg++.log
+
+} \
+ -label {Libg++}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/libio.log
+
+} \
+ -label {Libio}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/libm.log
+
+} \
+ -label {Libm}
+
+ # pack widget .frame0
+ pack append .frame0 \
+ .frame0.menubutton0 {left frame center} \
+ .frame0.menubutton1 {right frame center} \
+ .frame0.menubutton3 {left frame center} \
+ .frame0.menubutton2 {left frame center} \
+ .frame0.menubutton9 {left frame center} \
+ .frame0.menubutton10 {left frame center}
+
+ # build widget .frame1
+ frame .frame1 \
+ -background {white} \
+ -borderwidth {2} \
+ -relief {raised}
+
+ # build widget .frame1.message3
+ message .frame1.message3 \
+ -aspect {1500} \
+ -background {white} \
+ -borderwidth {0} \
+ -foreground {black} \
+ -padx {5} \
+ -pady {2} \
+ -relief {raised} \
+ -text {sparc-sun-sunos4.1.3} \
+ -textvariable {host}
+
+ # build widget .frame1.message4
+ message .frame1.message4 \
+ -aspect {1500} \
+ -background {white} \
+ -borderwidth {0} \
+ -foreground {black} \
+ -padx {5} \
+ -pady {2} \
+ -relief {raised} \
+ -text {sparc-sun-sunos4.1.3} \
+ -textvariable {target}
+
+ # pack widget .frame1
+ pack append .frame1 \
+ .frame1.message3 {left frame center} \
+ .frame1.message4 {right frame center}
+
+ # build widget .frame6
+ frame .frame6 \
+ -background {white} \
+ -borderwidth {2} \
+ -relief {raised}
+
+ # build widget .frame6.frame
+ frame .frame6.frame \
+ -background {white} \
+ -relief {raised}
+
+ # build widget .frame6.frame.scrollbar1
+ scrollbar .frame6.frame.scrollbar1 \
+ -background {white} \
+ -command {.frame6.frame.text2 yview} \
+ -foreground {black} \
+ -relief {raised}
+
+ # build widget .frame6.frame.text2
+ text .frame6.frame.text2 \
+ -background {white} \
+ -borderwidth {2} \
+ -foreground {black} \
+ -relief {raised} \
+ -wrap {word} \
+ -yscrollcommand {.frame6.frame.scrollbar1 set}
+
+ # pack widget .frame6.frame
+ pack append .frame6.frame \
+ .frame6.frame.scrollbar1 {left frame center filly} \
+ .frame6.frame.text2 {top frame center expand fill}
+
+ # pack widget .frame6
+ pack append .frame6 \
+ .frame6.frame {top frame center fill}
+
+ # pack widget .
+ pack append . \
+ .frame0 {top frame center fillx} \
+ .frame1 {bottom frame center fillx} \
+ .frame6 {top frame center expand fill}
+
+ .frame6.frame.text2 insert end {}
+
+
+
+ if {"[info procs XFEdit]" != ""} {
+ catch "XFMiscBindWidgetTree ."
+ after 2 "catch {XFEditSetShowWindows}"
+ }
+}
+
+
+# Procedure: Alias
+if {"[info procs Alias]" == ""} {
+proc Alias { args} {
+# xf ignore me 7
+##########
+# Procedure: Alias
+# Description: establish an alias for a procedure
+# Arguments: args - no argument means that a list of all aliases
+# is returned. Otherwise the first parameter is
+# the alias name, and the second parameter is
+# the procedure that is aliased.
+# Returns: nothing, the command that is bound to the alias or a
+# list of all aliases - command pairs.
+# Sideeffects: internalAliasList is updated, and the alias
+# proc is inserted
+##########
+ global internalAliasList
+
+ if {[llength $args] == 0} {
+ return $internalAliasList
+ } {
+ if {[llength $args] == 1} {
+ set xfTmpIndex [lsearch $internalAliasList "[lindex $args 0] *"]
+ if {$xfTmpIndex != -1} {
+ return [lindex [lindex $internalAliasList $xfTmpIndex] 1]
+ }
+ } {
+ if {[llength $args] == 2} {
+ eval "proc [lindex $args 0] {args} {#xf ignore me 4
+return \[eval \"[lindex $args 1] \$args\"\]}"
+ set xfTmpIndex [lsearch $internalAliasList "[lindex $args 0] *"]
+ if {$xfTmpIndex != -1} {
+ set internalAliasList [lreplace $internalAliasList $xfTmpIndex $xfTmpIndex "[lindex $args 0] [lindex $args 1]"]
+ } {
+ lappend internalAliasList "[lindex $args 0] [lindex $args 1]"
+ }
+ } {
+ error "Alias: wrong number or args: $args"
+ }
+ }
+ }
+}
+}
+
+
+# Procedure: GetSelection
+if {"[info procs GetSelection]" == ""} {
+proc GetSelection {} {
+# xf ignore me 7
+##########
+# Procedure: GetSelection
+# Description: get current selection
+# Arguments: none
+# Returns: none
+# Sideeffects: none
+##########
+
+ # the save way
+ set xfSelection ""
+ catch "selection get" xfSelection
+ if {"$xfSelection" == "selection doesn't exist or form \"STRING\" not defined"} {
+ return ""
+ } {
+ return $xfSelection
+ }
+}
+}
+
+
+# Procedure: MenuPopupAdd
+if {"[info procs MenuPopupAdd]" == ""} {
+proc MenuPopupAdd { xfW xfButton xfMenu {xfModifier ""} {xfCanvasTag ""}} {
+# xf ignore me 7
+# the popup menu handling is from (I already gave up with popup handling :-):
+#
+# Copyright 1991,1992 by James Noble.
+# Everyone is granted permission to copy, modify and redistribute.
+# This notice must be preserved on all copies or derivates.
+#
+##########
+# Procedure: MenuPopupAdd
+# Description: attach a popup menu to widget
+# Arguments: xfW - the widget
+# xfButton - the button we use
+# xfMenu - the menu to attach
+# {xfModifier} - a optional modifier
+# {xfCanvasTag} - a canvas tagOrId
+# Returns: none
+# Sideeffects: none
+##########
+ global tk_popupPriv
+
+ set tk_popupPriv($xfMenu,focus) ""
+ set tk_popupPriv($xfMenu,grab) ""
+ if {"$xfModifier" != ""} {
+ set press "$xfModifier-"
+ set motion "$xfModifier-"
+ set release "Any-"
+ } {
+ set press ""
+ set motion ""
+ set release ""
+ }
+
+ bind $xfMenu "<${motion}B${xfButton}-Motion>" "MenuPopupMotion $xfMenu %W %X %Y"
+ bind $xfMenu "<${release}ButtonRelease-${xfButton}>" "MenuPopupRelease $xfMenu %W"
+ if {"$xfCanvasTag" == ""} {
+ bind $xfW "<${press}ButtonPress-${xfButton}>" "MenuPopupPost $xfMenu %X %Y"
+ bind $xfW "<${release}ButtonRelease-${xfButton}>" "MenuPopupRelease $xfMenu %W"
+ } {
+ $xfW bind $xfCanvasTag "<${press}ButtonPress-${xfButton}>" "MenuPopupPost $xfMenu %X %Y"
+ $xfW bind $xfCanvasTag "<${release}ButtonRelease-${xfButton}>" "MenuPopupRelease $xfMenu %W"
+ }
+}
+}
+
+
+# Procedure: MenuPopupMotion
+if {"[info procs MenuPopupMotion]" == ""} {
+proc MenuPopupMotion { xfMenu xfW xfX xfY} {
+# xf ignore me 7
+##########
+# Procedure: MenuPopupMotion
+# Description: handle the popup menu motion
+# Arguments: xfMenu - the topmost menu
+# xfW - the menu
+# xfX - the root x coordinate
+# xfY - the root x coordinate
+# Returns: none
+# Sideeffects: none
+##########
+ global tk_popupPriv
+
+ if {"[info commands $xfW]" != "" && [winfo ismapped $xfW] &&
+ "[winfo class $xfW]" == "Menu" &&
+ [info exists tk_popupPriv($xfMenu,focus)] &&
+ "$tk_popupPriv($xfMenu,focus)" != "" &&
+ [info exists tk_popupPriv($xfMenu,grab)] &&
+ "$tk_popupPriv($xfMenu,grab)" != ""} {
+ set xfPopMinX [winfo rootx $xfW]
+ set xfPopMaxX [expr $xfPopMinX+[winfo width $xfW]]
+ if {$xfX >= $xfPopMinX && $xfX <= $xfPopMaxX} {
+ $xfW activate @[expr $xfY-[winfo rooty $xfW]]
+ if {![catch "$xfW entryconfig @[expr $xfY-[winfo rooty $xfW]] -menu" result]} {
+ if {"[lindex $result 4]" != ""} {
+ foreach binding [bind $xfMenu] {
+ bind [lindex $result 4] $binding [bind $xfMenu $binding]
+ }
+ }
+ }
+ } {
+ $xfW activate none
+ }
+ }
+}
+}
+
+
+# Procedure: MenuPopupPost
+if {"[info procs MenuPopupPost]" == ""} {
+proc MenuPopupPost { xfMenu xfX xfY} {
+# xf ignore me 7
+##########
+# Procedure: MenuPopupPost
+# Description: post the popup menu
+# Arguments: xfMenu - the menu
+# xfX - the root x coordinate
+# xfY - the root x coordinate
+# Returns: none
+# Sideeffects: none
+##########
+ global tk_popupPriv
+
+ if {"[info commands $xfMenu]" != ""} {
+ if {![info exists tk_popupPriv($xfMenu,focus)]} {
+ set tk_popupPriv($xfMenu,focus) [focus]
+ } {
+ if {"$tk_popupPriv($xfMenu,focus)" == ""} {
+ set tk_popupPriv($xfMenu,focus) [focus]
+ }
+ }
+ set tk_popupPriv($xfMenu,grab) $xfMenu
+
+ catch "$xfMenu activate none"
+ catch "$xfMenu post $xfX $xfY"
+ catch "focus $xfMenu"
+ catch "grab -global $xfMenu"
+ }
+}
+}
+
+
+# Procedure: MenuPopupRelease
+if {"[info procs MenuPopupRelease]" == ""} {
+proc MenuPopupRelease { xfMenu xfW} {
+# xf ignore me 7
+##########
+# Procedure: MenuPopupRelease
+# Description: remove the popup menu
+# Arguments: xfMenu - the topmost menu widget
+# xfW - the menu widget
+# Returns: none
+# Sideeffects: none
+##########
+ global tk_popupPriv
+ global tkVersion
+
+ if {"[info commands $xfW]" != "" && [winfo ismapped $xfW] &&
+ "[winfo class $xfW]" == "Menu" &&
+ [info exists tk_popupPriv($xfMenu,focus)] &&
+ "$tk_popupPriv($xfMenu,focus)" != "" &&
+ [info exists tk_popupPriv($xfMenu,grab)] &&
+ "$tk_popupPriv($xfMenu,grab)" != ""} {
+ if {$tkVersion >= 3.0} {
+ catch "grab release $tk_popupPriv($xfMenu,grab)"
+ } {
+ catch "grab none"
+ }
+ catch "focus $tk_popupPriv($xfMenu,focus)"
+ set tk_popupPriv($xfMenu,focus) ""
+ set tk_popupPriv($xfMenu,grab) ""
+ if {"[$xfW index active]" != "none"} {
+ $xfW invoke active; catch "$xfMenu unpost"
+ }
+ }
+ catch "$xfMenu unpost"
+}
+}
+
+
+# Procedure: NoFunction
+if {"[info procs NoFunction]" == ""} {
+proc NoFunction { args} {
+# xf ignore me 7
+##########
+# Procedure: NoFunction
+# Description: do nothing (especially with scales and scrollbars)
+# Arguments: args - a number of ignored parameters
+# Returns: none
+# Sideeffects: none
+##########
+}
+}
+
+
+# Procedure: SN
+if {"[info procs SN]" == ""} {
+proc SN { {xfName ""}} {
+# xf ignore me 7
+##########
+# Procedure: SN
+# Description: map a symbolic name to the widget path
+# Arguments: xfName
+# Returns: the symbolic name
+# Sideeffects: none
+##########
+
+ SymbolicName $xfName
+}
+}
+
+
+# Procedure: SymbolicName
+if {"[info procs SymbolicName]" == ""} {
+proc SymbolicName { {xfName ""}} {
+# xf ignore me 7
+##########
+# Procedure: SymbolicName
+# Description: map a symbolic name to the widget path
+# Arguments: xfName
+# Returns: the symbolic name
+# Sideeffects: none
+##########
+
+ global symbolicName
+
+ if {"$xfName" != ""} {
+ set xfArrayName ""
+ append xfArrayName symbolicName ( $xfName )
+ if {![catch "set \"$xfArrayName\"" xfValue]} {
+ return $xfValue
+ } {
+ if {"[info commands XFProcError]" != ""} {
+ XFProcError "Unknown symbolic name:\n$xfName"
+ } {
+ puts stderr "XF error: unknown symbolic name:\n$xfName"
+ }
+ }
+ }
+ return ""
+}
+}
+
+
+# Procedure: Unalias
+if {"[info procs Unalias]" == ""} {
+proc Unalias { aliasName} {
+# xf ignore me 7
+##########
+# Procedure: Unalias
+# Description: remove an alias for a procedure
+# Arguments: aliasName - the alias name to remove
+# Returns: none
+# Sideeffects: internalAliasList is updated, and the alias
+# proc is removed
+##########
+ global internalAliasList
+
+ set xfIndex [lsearch $internalAliasList "$aliasName *"]
+ if {$xfIndex != -1} {
+ rename $aliasName ""
+ set internalAliasList [lreplace $internalAliasList $xfIndex $xfIndex]
+ }
+}
+}
+
+
+# Procedure: getbase
+proc getbase {} {
+ global env
+ global testbase
+ if [info exists env(TESTBASE)] then {
+ set testbase $env(TESTBASE)
+ } else {
+ set testbase /lisa/test/rob
+ }
+ return $testbase
+}
+
+
+# Procedure: getresult
+proc getresult { name} {
+set tmp "[lsort [glob -nocomplain $name-results-??????-????]]"
+set tmp [lindex $tmp [expr [llength $tmp] - 1]]
+if [string match "" $tmp] then {
+ .frame6.frame.text2 delete 0.0 end
+ .frame6.frame.text2 insert 0.0 "Couldn't find results for: $name\n"
+ return
+} else {
+ return [loadfile $tmp]
+}
+}
+
+# Procedure: dialogbox
+proc dialogbox {} {
+ set w .frame6.top2
+ catch {destroy $w}
+ catch {destroy $w.e1}
+ toplevel $w
+# dpos $w
+ wm title $w "Change Editor"
+ wm iconname $w "Entries"
+ message $w.msg -font -Adobe-times-medium-r-normal--*-180* -aspect 200 \
+ -text "Hey Now. Click the \"OK\" button when you've seen enough."
+ frame $w.frame -borderwidth 10
+ button $w.ok -text OK -command "destroy $w"
+ pack $w.msg $w.frame $w.ok -side top -fill both
+
+ entry $w.frame.e1 -relief sunken -textvariable editor
+ pack $w.frame.e1 -side top -pady 5 -fill x
+ bind $w.frame.e1 <Return> "destroy $w"
+}
+
+# Procedure: loadfile
+proc loadfile { name} {
+if ![file exists $name] then {
+ .frame6.frame.text2 delete 0.0 end
+ .frame6.frame.text2 insert 0.0 "Couldn't find:\t$name\n"
+ return
+}
+
+global editor
+if [info exists editor] then {
+ if ![string match "" $editor] then {
+ catch "exec $editor $name&" tmp
+ if [info exists tmp] then {
+ .frame6.frame.text2 delete 0.0 end
+ .frame6.frame.text2 insert 0.0 "Editor returned $tmp\n"
+ }
+ }
+}
+.frame6.frame.text2 delete 0.0 end
+set fd [open $name r]
+while { [gets $fd line]>=0 } {
+.frame6.frame.text2 insert end "$line\n"
+.frame6.frame.text2 mark set insert 0.0
+}
+close $fd
+unset fd
+}
+
+
+
+# application parsing procedure
+proc XFLocalParseAppDefs {xfAppDefFile} {
+ global xfAppDefaults
+
+ # basically from: Michael Moore
+ if {[file exists $xfAppDefFile] &&
+ [file readable $xfAppDefFile] &&
+ "[file type $xfAppDefFile]" == "link"} {
+ catch "file type $xfAppDefFile" xfType
+ while {"$xfType" == "link"} {
+ if {[catch "file readlink $xfAppDefFile" xfAppDefFile]} {
+ return
+ }
+ catch "file type $xfAppDefFile" xfType
+ }
+ }
+ if {!("$xfAppDefFile" != "" &&
+ [file exists $xfAppDefFile] &&
+ [file readable $xfAppDefFile] &&
+ "[file type $xfAppDefFile]" == "file")} {
+ return
+ }
+ if {![catch "open $xfAppDefFile r" xfResult]} {
+ set xfAppFileContents [read $xfResult]
+ close $xfResult
+ foreach line [split $xfAppFileContents "\n"] {
+ # backup indicates how far to backup. It applies to the
+ # situation where a resource name ends in . and when it
+ # ends in *. In the second case you want to keep the *
+ # in the widget name for pattern matching, but you want
+ # to get rid of the . if it is the end of the name.
+ set backup -2
+ set line [string trim $line]
+ if {[string index $line 0] == "#" || "$line" == ""} {
+ # skip comments and empty lines
+ continue
+ }
+ set list [split $line ":"]
+ set resource [string trim [lindex $list 0]]
+ set i [string last "." $resource]
+ set j [string last "*" $resource]
+ if {$j > $i} {
+ set i $j
+ set backup -1
+ }
+ incr i
+ set name [string range $resource $i end]
+ incr i $backup
+ set widname [string range $resource 0 $i]
+ set value [string trim [lindex $list 1]]
+ if {"$widname" != "" && "$widname" != "*"} {
+ # insert the widget and resourcename to the application
+ # defaults list.
+ if {![info exists xfAppDefaults]} {
+ set xfAppDefaults ""
+ }
+ lappend xfAppDefaults [list $widname [string tolower $name] $value]
+ }
+ }
+ }
+}
+
+# application loading procedure
+proc XFLocalLoadAppDefs {{xfClasses ""} {xfPriority "startupFile"} {xfAppDefFile ""}} {
+ global env
+
+ if {"$xfAppDefFile" == ""} {
+ set xfFileList ""
+ if {[info exists env(XUSERFILESEARCHPATH)]} {
+ append xfFileList [split $env(XUSERFILESEARCHPATH) :]
+ }
+ if {[info exists env(XAPPLRESDIR)]} {
+ append xfFileList [split $env(XAPPLRESDIR) :]
+ }
+ if {[info exists env(XFILESEARCHPATH)]} {
+ append xfFileList [split $env(XFILESEARCHPATH) :]
+ }
+ append xfFileList " /usr/lib/X11/app-defaults"
+ append xfFileList " /usr/X11/lib/X11/app-defaults"
+
+ foreach xfCounter1 $xfClasses {
+ foreach xfCounter2 $xfFileList {
+ set xfPathName $xfCounter2
+ if {[regsub -all "%N" "$xfPathName" "$xfCounter1" xfResult]} {
+ set xfPathName $xfResult
+ }
+ if {[regsub -all "%T" "$xfPathName" "app-defaults" xfResult]} {
+ set xfPathName $xfResult
+ }
+ if {[regsub -all "%S" "$xfPathName" "" xfResult]} {
+ set xfPathName $xfResult
+ }
+ if {[regsub -all "%C" "$xfPathName" "" xfResult]} {
+ set xfPathName $xfResult
+ }
+ if {[file exists $xfPathName] &&
+ [file readable $xfPathName] &&
+ ("[file type $xfPathName]" == "file" ||
+ "[file type $xfPathName]" == "link")} {
+ catch "option readfile $xfPathName $xfPriority"
+ if {"[info commands XFParseAppDefs]" != ""} {
+ XFParseAppDefs $xfPathName
+ } {
+ if {"[info commands XFLocalParseAppDefs]" != ""} {
+ XFLocalParseAppDefs $xfPathName
+ }
+ }
+ } {
+ if {[file exists $xfCounter2/$xfCounter1] &&
+ [file readable $xfCounter2/$xfCounter1] &&
+ ("[file type $xfCounter2/$xfCounter1]" == "file" ||
+ "[file type $xfCounter2/$xfCounter1]" == "link")} {
+ catch "option readfile $xfCounter2/$xfCounter1 $xfPriority"
+ if {"[info commands XFParseAppDefs]" != ""} {
+ XFParseAppDefs $xfCounter2/$xfCounter1
+ } {
+ if {"[info commands XFLocalParseAppDefs]" != ""} {
+ XFLocalParseAppDefs $xfCounter2/$xfCounter1
+ }
+ }
+ }
+ }
+ }
+ }
+ } {
+ # load a specific application defaults file
+ if {[file exists $xfAppDefFile] &&
+ [file readable $xfAppDefFile] &&
+ ("[file type $xfAppDefFile]" == "file" ||
+ "[file type $xfAppDefFile]" == "link")} {
+ catch "option readfile $xfAppDefFile $xfPriority"
+ if {"[info commands XFParseAppDefs]" != ""} {
+ XFParseAppDefs $xfAppDefFile
+ } {
+ if {"[info commands XFLocalParseAppDefs]" != ""} {
+ XFLocalParseAppDefs $xfAppDefFile
+ }
+ }
+ }
+ }
+}
+
+# application setting procedure
+proc XFLocalSetAppDefs {{xfWidgetPath "."}} {
+ global xfAppDefaults
+
+ if {![info exists xfAppDefaults]} {
+ return
+ }
+ foreach xfCounter $xfAppDefaults {
+ if {"$xfCounter" == ""} {
+ break
+ }
+ set widname [lindex $xfCounter 0]
+ if {[string match $widname ${xfWidgetPath}] ||
+ [string match "${xfWidgetPath}*" $widname]} {
+ set name [string tolower [lindex $xfCounter 1]]
+ set value [lindex $xfCounter 2]
+ # Now lets see how many tcl commands match the name
+ # pattern specified.
+ set widlist [info command $widname]
+ if {"$widlist" != ""} {
+ foreach widget $widlist {
+ # make sure this command is a widget.
+ if {![catch "winfo id $widget"] &&
+ [string match "${xfWidgetPath}*" $widget]} {
+ catch "$widget configure -$name $value"
+ }
+ }
+ }
+ }
+ }
+}
+
+
+
+# startup source
+proc StartupSrc {args} {
+global testbase
+global hostlist
+global targlist
+global host
+
+set host [exec config.guess]
+set target $host
+}
+
+
+# end source
+proc EndSrc {} {
+.frame6.frame.text2 delete 0.0 end
+}
+
+# startup source
+StartupSrc
+
+# initialize global variables
+global {editor}
+set {editor} {}
+global {fsBox}
+set {fsBox(activeBackground)} {}
+set {fsBox(activeForeground)} {}
+set {fsBox(all)} {0}
+set {fsBox(background)} {}
+set {fsBox(button)} {0}
+set {fsBox(extensions)} {0}
+set {fsBox(font)} {}
+set {fsBox(foreground)} {}
+set {fsBox(internalPath)} {/offsite/rob/DejaGnu/devo/dejagnu}
+set {fsBox(name)} {}
+set {fsBox(path)} {/offsite/rob/DejaGnu/devo/dejagnu}
+set {fsBox(pattern)} {*}
+set {fsBox(scrollActiveForeground)} {}
+set {fsBox(scrollBackground)} {}
+set {fsBox(scrollForeground)} {}
+set {fsBox(scrollSide)} {left}
+set {fsBox(showPixmap)} {0}
+global {host}
+set {host} {sparc-sun-sunos4.1.3}
+global {result}
+set {result} {can't read "editor": no such variable}
+global {target}
+set {target} {sparc-sun-sunos4.1.3}
+global {testbase}
+set {testbase} {/lisa/test/rob}
+
+# please don't modify the following
+# variables. They are needed by xf.
+global {autoLoadList}
+set {autoLoadList(testit)} {0}
+global {internalAliasList}
+set {internalAliasList} {}
+global {moduleList}
+set {moduleList(testit)} {}
+global {preloadList}
+set {preloadList(xfInternal)} {}
+global {symbolicName}
+set {symbolicName(binutils)} {.frame0.menubutton7}
+set {symbolicName(dialogbox)} {.top2}
+set {symbolicName(editor)} {.top2.entry4}
+set {symbolicName(g++)} {.frame0.menubutton4}
+set {symbolicName(gas)} {.frame0.menubutton6}
+set {symbolicName(gdb)} {.frame0.menubutton5}
+set {symbolicName(host)} {.frame0.menubutton3.m}
+set {symbolicName(hostlist)} {.frame0.menubutton3}
+set {symbolicName(logs)} {.frame0.menubutton10}
+set {symbolicName(misc)} {.frame0.menubutton1}
+set {symbolicName(ok)} {.top2.button7}
+set {symbolicName(results)} {.frame0.menubutton9}
+set {symbolicName(root)} {.}
+set {symbolicName(sum)} {.frame0.menubutton0}
+set {symbolicName(targlist)} {.frame0.menubutton2}
+global {xfWmSetPosition}
+set {xfWmSetPosition} {}
+global {xfWmSetSize}
+set {xfWmSetSize} {}
+global {xfAppDefToplevels}
+set {xfAppDefToplevels} {}
+
+# display/remove toplevel windows.
+ShowWindow.
+
+# load default bindings.
+if {[info exists env(XF_BIND_FILE)] &&
+ "[info procs XFShowHelp]" == ""} {
+ source $env(XF_BIND_FILE)
+}
+
+# parse and apply application defaults.
+XFLocalLoadAppDefs Testit
+XFLocalSetAppDefs
+
+# end source
+EndSrc
+
+# eof
+#
+
--- /dev/null
+#! /bin/sh
+#
+# This scripts should start a fully compatible DejaGnu runtest
+# application using [incr Expect] and Classes compatible with [incr Tcl]
+#
+# Copyright (C) 1998 jotOmega dsc, Inc.
+
+# This file is part of BlueGnu.
+# It asumes that the iexpect program is on your PATH
+#
+
+#
+# Get the execution path to this script
+#
+execpath=`echo ${0-.} | sed -e 's@/[^/]*$@@'`
+
+#
+# get the name by which dejagnu was invoked and extract the config triplet
+#
+dejagnu=`echo ${0-.} | sed -e 's@^.*/@@'`
+target=`echo $dejagnu | sed -e 's/-dejagnu$//'`
+if [ "$target" != dejagnu ] ; then
+ target="--target ${target}"
+else
+ target=""
+fi
+
+#
+# Find the right expect binary to use. If a variable EXPECT exists,
+# it takes precedence over all other tests. Otherwise look for a freshly
+# built one, and then use one in the path.
+#
+if [ x"$EXPECT" != x ] ; then
+ expectbin=$EXPECT
+else
+ if [ -x "$execpath/expect" ] ; then
+ expectbin=$execpath/iexpect
+ else
+ expectbin=iexpect
+ fi
+fi
+
+# just to be safe...
+if [ -z "$expectbin" ]; then
+ echo "ERROR: No $expectbin shell found"
+ exit 1
+fi
+
+#
+# Extract a few options from the option list.
+#
+verbose=0
+debug=""
+for a in "$@" ; do
+ case $a in
+ -v|--v|-verb*|--verb*) verbose=`expr $verbose + 1`;;
+ -D0|--D0) debug="-D 0" ;;
+ -D1|--D1) debug="-D 1" ;;
+ esac
+done
+
+if expr $verbose \> 0 > /dev/null ; then
+ echo Expect binary is $expectbin
+fi
+
+#
+# find dejagnu.itcl. First we look in it's installed location, otherwise
+# start if from the source tree.
+#
+for i in $execpath/../lib/bluegnu $execpath ; do
+ if expr $verbose \> 1 > /dev/null ; then
+ echo Looking for $i/dejagnu.itcl.
+ fi
+ if [ -f $i/dejagnu.itcl ] ; then
+ runpath=$i
+ if expr $verbose \> 0 > /dev/null ; then
+ echo Using $i/dejagnu.itcl as main test driver
+ fi
+ fi
+done
+# check for an environment variable
+if [ x"$BLUEGNULIBS" != x ] ; then
+ runpath=$BLUEGNULIBS
+ if expr $verbose \> 0 > /dev/null ; then
+ echo Using $BLUEGNULIBS/dejagnu.itcl as main test driver
+ fi
+fi
+if [ x"$runpath" = x ] ; then
+ echo "ERROR: dejagnu.itcl does not exist."
+ exit 1
+fi
+
+exec $expectbin $debug -- $runpath/dejagnu.itcl $target ${1+"$@"}
--- /dev/null
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+srcdir = @srcdir@
+
+mandir = $(prefix)/man
+man1dir = $(mandir)/man1
+infodir = $(prefix)/info
+
+MAKEINFO = makeinfo
+TEXI2DVI = TEXINPUTS=$(TEXIDIR):$(srcdir):$$TEXINPUTS texi2dvi
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = $(INSTALL)
+INSTALL_DATA = $(INSTALL)
+
+# Where to find texinfo.tex to format docn with TeX
+TEXIDIR = $(srcdir)/../../texinfo
+
+MANPAGES= $(srcdir)/dejagnu.1
+DEJAGNU = dejagnu.dvi dejagnu.info dejagnu.ps dejagnu.pdf
+README = ../README.bluegnu notice.ps notice.pdf notice.html
+
+%.dvi: %.tex
+ latex $<
+%.pdf: %.dvi
+ dvipdfm -o $@ $<
+%.html: %.dvi
+ rm -fr $(basename $@)
+ rm -f $@
+ latex2html -t "`cat $(basename $<).title`" -split 0 $(basename $<).tex
+ ln -s $(basename $@)/$@
+
+all:
+
+doc: ${README} ${DEJAGNU}
+
+dejagnu.pdf: dejagnu.dvi
+
+READMEtxt.dvi: READMEtxt.tex README.tex
+READMEdvi.dvi: READMEdvi.tex README.tex
+
+../README.bluegnu: READMEtxt.dvi
+ dvidoc $< >$@
+
+notice.ps: READMEdvi.dvi
+ dvips $< -o $@
+
+notice.pdf: READMEdvi.dvi
+ dvipdfm -o $@ $<
+
+notice.html: READMEdvi.dvi
+ rm -fr $(basename $<)
+ rm -f $@
+ latex2html -t "`cat $(basename $<).title`" -split 0 $(basename $<).tex
+ cp $(basename $<)/$(basename $<).html notice.html
+
+######################################################################
+# DOCUMENTATION TARGETS
+# TeX output
+dejagnu.dvi: $(srcdir)/dejagnu.texi
+ $(TEXI2DVI) $(srcdir)/dejagnu.texi
+
+# info file for online browsing
+dejagnu.info: $(srcdir)/dejagnu.texi
+ $(MAKEINFO) -I $(srcdir) -o dejagnu.info $(srcdir)/dejagnu.texi
+
+dejagnu.ps: dejagnu.dvi
+ dvips -f dejagnu.dvi > dejagnu.ps
+
+# different targets for -ms, -mm, -me
+# Try to use a recent texi2roff. v2 was put on prep in jan91.
+# If you want an index, see texi2roff doc for postprocessing
+# and add -i to texi2roff invocations below.
+# Workarounds for texi2roff-2 (probably fixed in later texi2roff's, delete
+# correspondint -e lines when later texi2roff's are current)
+# + @ifinfo's deleted explicitly due to texi2roff-2 bug w nested constructs.
+# + @c's deleted explicitly because texi2roff sees texinfo commands in them
+# + @ (that's at-BLANK) not recognized by texi2roff, turned into blank
+# + @alphaenumerate is ridiculously new, turned into @enumerate
+
+# roff output (-ms)
+dejagnu.ms: $(srcdir)/dejagnu.texi
+ sed -e '/\\input texinfo/d' \
+ -e '/@c TEXI2ROFF-KILL/,/@c END TEXI2ROFF-KILL/d' \
+ -e '/^@ifinfo/,/^@end ifinfo/d' \
+ -e '/^@c/d' \
+ -e 's/{.*,,/{/' \
+ -e 's/@ / /g' \
+ -e 's/^@alphaenumerate/@enumerate/g' \
+ -e 's/^@end alphaenumerate/@end enumerate/g' \
+ $(srcdir)/dejagnu.texi | \
+ $(TEXI2ROFF) -ms | \
+ sed -e 's/---/\\(em/g' >dejagnu.ms
+
+# roff output (-mm)
+# '@noindent's removed due to texi2roff-2 mm bug; if yours is newer,
+# try leaving them in
+dejagnu.mm: $(srcdir)/dejagnu.texi
+ sed -e '/\\input texinfo/d' \
+ -e '/@c TEXI2ROFF-KILL/,/@c END TEXI2ROFF-KILL/d' \
+ -e '/^@ifinfo/,/^@end ifinfo/d' \
+ -e '/^@c/d' \
+ -e 's/{.*,,/{/' \
+ -e '/@noindent/d' \
+ -e 's/@ / /g' \
+ -e 's/^@alphaenumerate/@enumerate/g' \
+ -e 's/^@end alphaenumerate/@end enumerate/g' \
+ $(srcdir)/dejagnu.texi | \
+ $(TEXI2ROFF) -mm | \
+ sed -e 's/---/\\(em/g' >dejagnu.mm
+
+# roff output (-me)
+dejagnu.me: $(srcdir)/dejagnu.texi
+ sed -e '/\\input texinfo/d' \
+ -e '/@c TEXI2ROFF-KILL/,/@c END TEXI2ROFF-KILL/d' \
+ -e '/^@ifinfo/,/^@end ifinfo/d' \
+ -e '/^@c/d' \
+ -e 's/{.*,,/{/' \
+ -e 's/@ / /g' \
+ -e 's/^@alphaenumerate/@enumerate/g' \
+ -e 's/^@end alphaenumerate/@end enumerate/g' \
+ $(srcdir)/dejagnu.texi | \
+ $(TEXI2ROFF) -me | \
+ sed -e 's/---/\\(em/g' >dejagnu.me
+
+######################################################################
+
+clean mostlyclean:
+ -rm -f \#* *~ core *.o a.out xgdb *.x
+ -rm -f core *.aux *.log
+ -rm -f dejagnu.cp \
+ dejagnu.fn dejagnu.ky dejagnu.log dejagnu.pg dejagnu.toc \
+ dejagnu.tp dejagnu.vr dejagnu.cps dejagnu.fns dejagnu.kys \
+ dejagnu.pgs dejagnu.tps dejagnu.vrs
+
+clean-info:
+ -rm -rf *.info*
+
+distclean: clean
+ -rm -f Makefile config.status config.log config.cache gdbme.c
+ -rm -fr READMEdvi
+
+maintainer-clean realclean: clean clean-info
+ -rm -f Makefile config.status config.log config.cache gdbme.c
+ -rm -fr READMEdvi
+ -rm -f *.pdf *.ps *.html
+
+install:
+ $(srcdir)/../mkinstalldirs $(man1dir)
+ for i in $(MANPAGES) ; do \
+ $(INSTALL_DATA) $$i \
+ $(man1dir)/$(program_prefix)`echo $$i |sed -e \
+ 's@^.*doc/@@'` ; \
+ done
+ $(srcdir)/../mkinstalldirs $(bindir) $(infodir)
+ for i in *.info* ; do \
+ $(INSTALL_DATA) $$i $(infodir)/$$i ; \
+ done
+
+Makefile: $(srcdir)/Makefile.in $(host_makefile_frag) config.status
+ @echo "Rebuilding the Makefile..."
+ $(SHELL) ./config.status
+
+configure:
+ @echo "Rebuilding configure..."
+ @cd ${srcdir}; autoconf
+
+config.status: $(srcdir)/configure
+ @echo "Rebuilding config.status..."
+ $(SHELL) ./config.status --recheck
--- /dev/null
+%%
+%%
+
+\begin{document}
+
+\title{Release Notice\\BlueGnu Testing Framework\\
+Version 2.0.3}
+\author{Jan-Willem Neurdenburg\\jotOmega dsc\\
+56 Brigham Hill Road\\Grafton~MA~~01519-1135\\
+neurdenburgj@acm.org\\Tel: (508) 839-0276\\Fax: (508) 839-7267}
+
+\maketitle
+
+\section{Introduction}
+BlueGnu is a framework for testing other programs. It has been created
+to be compatible with DejaGnu. Its purpose is to provide a single
+front end for all tests. Beyond this, BlueGnu offers several
+advantages for testing:
+
+\begin{itemize}
+
+\item The flexibility and consistency of the BlueGnu framework makes it
+easy to write tests for any program, with the exception of GUI
+applications.
+
+\item BlueGnu provides a layer of abstraction, which makes all tests
+(if correctly written) portable to any host or target where a program
+must be tested.
+
+\item BlueGnu is written in [incr Tcl], which in turn is based on Tcl
+(Tool Command Language). The framework comprises two parts:
+\begin{enumerate}
+\item the testing framework,
+\item the test-suites or test-sets themselves.
+\end{enumerate}
+
+\item BlueGnu will work with any Tcl based interpreter as long as
+[incr Tcl] has been included. You can include 'expect', 'Tk', and/or
+other extensions.
+
+\item Includes DejaGnu release 1.6
+
+\end{itemize}
+
+\section{Requirements}
+The following modules should have been installed, before you can
+install and/or use BlueGnu:
+
+\begin{itemize}
+\item Tcl release 8.0 or higher,
+\item incr Tcl release 3.0 or higher.
+\end{itemize}
+
+Any other extensions that is compatible with Tcl release 8.0 can be used
+as well.
+
+\section{Structure and Contents of the Release}
+
+The root directory of the release contains the README files with
+installation instructions and the files needed to build and install
+this product. It also contains the executable scripts of the
+BlueGnu testing framework.
+
+The top-level directories are listed below:
+
+\begin{description}
+\item[lib:] the packages and procedures that make the BlueGnu and
+DejaGnu testing framework. This also includes the default target
+definition files.
+
+\item[testsets:] the BlueGnu test-suites and test examples. It contains
+the following subdirectories.
+
+\begin{description}
+\item[BlueGnu:]
+test scripts to test the testing framework itself.
+
+\item[examples:]
+test suite and test script examples.
+
+\item[config, lib, tools:]
+currently empty, but can be used for
+test-set dependent configuration files, library files, and tools.
+\end{description}
+
+\item[config:]
+currently empty.
+
+\item[doc:] the DejaGnu texinfo source and the documentation in
+'info', 'dvi', 'ps', and 'pdf' representation, respectively
+dejagnu.info*, dejagnu.dvi, dejagnu.ps, and dejagnu.pdf. A DejaGnu man
+page is also available.
+
+It also contains
+the \TeX{} version (README.tex) of this document as well as the 'dvi', 'ps'
+'html', and 'pdf' representation, respectively notice.dvi, notice.ps,
+notice.html, and notice.pdf.
+
+\item[testsuite:] contains a mixture of DejaGnu and BlueGnu test
+scripts.
+
+\item[contrib:] contains examples how DejaGnu is used at Cygnus.
+
+\item[example:] contains a full DejaGnu test framework example for testing the program 'calc' which is also included.
+
+\end{description}
+
+\section{Installation and use under Unix}
+
+Before you can install and use BlueGnu you need to have installed the
+following three packages:
+\begin{itemize}
+\item Tcl version 8.0.3
+\item Tk version 8.0.3
+\item incr Tcl version 3.0.1
+\end{itemize}
+The source for these packages should all be located in one directory.
+The subdirectory in the directory should be:
+\begin{itemize}
+\item tcl8.0.3
+\item tk8.0.3
+\item itcl3.0.1
+\end{itemize}
+
+The following examples use the command `./configure
+--prefix=/tools/...`. This will install all packages in a directory
+``/tools''. When you omit the ``--prefix''-switch then the
+installation default will be the directory ``/usr/local''.
+
+\subsection{Installation of needed Packages}
+
+When you have not installed Tcl and the other needed extensions, then
+you need to retrieve the sources from ``www.tcltk.com/itcl''. You need
+to `gunzip` the files and do a `tar xf` of all these packages in one
+directory, let's call this directory ``TclTk''.
+
+From the directory ``TclTk'', you should do the following to install
+the packages:
+
+\begin{verbatim}
+% cd tcl8.0.3/unix
+% ./configure --prefix=/tools/tcl8.0.3 --enable-gcc --enable-shared
+% make
+% mkdir /tools/tcl8.0.3
+% make install
+% cd ../../tk8.0.3/unix
+% ./configure --prefix=/tools/tk8.0.3 --enable-gcc --enable-shared
+% make
+% mkdir /tools/tk8.0.3
+% make install
+% cd ../../itcl3.0.1
+% ./configure --prefix=/tools/itcl3.0.1 --enable-gcc --enable-shared
+% make
+% mkdir /tools/itcl3.0.1
+% make install
+\end{verbatim}
+
+\subsection{Installing BlueGnu}
+You can now `gunzip` and `tar xf` the BlueGnu version 2.0.3 in the
+directory ``TckTk''. This will create the directory
+``bluegnu2.0.3''. Now do the following:
+
+\begin{verbatim}
+% cd bluegnu2.0.3
+% ./configure --prefix=/tools/bluegnu2.0.3
+% make
+% mkdir /tools/bluegnu2.0.3
+% make install
+\end{verbatim}
+
+This will install BlueGnu in the directories:
+\begin{itemize}
+\item /tools/bluegnu2.0.3/bin
+\item /tools/bluegnu2.0.3/lib/bluegnu
+\item /tools/bluegnu2.0.3/info
+\item /tools/bluegnu2.0.3/man
+\end{itemize}
+
+\subsection{Using BlueGnu}
+When you have installed [incr Tcl] and BlueGnu and you have the
+respective ``bin'' directories in your PATH variable, then you can
+start running some tests. You can go into the BlueGnu source directory
+``bluegnu2.0.3/testsets/examples'' and run the following:
+
+\begin{verbatim}
+% bluegnu versionTcl.itcl
+% bluegnu ts_001
+% bluegnu ts_002
+% bluegnu ts_003
+\end{verbatim}
+
+The above test result should all be PASS. The following test will give
+a result UNKNOWN, because no pass/fail instruction have been given.
+
+\begin{verbatim}
+% bluegnu tc001
+\end{verbatim}
+
+The last test you can run will fail in its simple form:
+
+\begin{verbatim}
+% bluegnu tc002
+\end{verbatim}
+
+But will pass if you execute the test as follows:
+
+\begin{verbatim}
+% bluegnu tc002[English]
+\end{verbatim}
+
+This is because the test scripts need a test case identifier to find
+the correct benchmark code.
+
+\section{Changes}
+\subsection{Version 2.0.3}
+This being the first public release it is not to useful to list all
+the changes. BlueGnu has been modeled after DejaGnu and is a complete
+new implementation which has been tested thoroughly. When
+documentation is being written more changes will be made. An example
+of some of these changes as a result of this documentation effort can
+be found in the test-suites ts\verb+_+001, ts\verb+_+002, and
+ts\verb+_+003. The first two are not as easy to write as the
+third. The test suite ts\verb+_+001 is a script implementation of the
+command line:
+\begin{verbatim}
+% cd bluegnu2.0.3/testsets
+% bluegnu examples/tc002[English=B] \
+> "examples/tc002[Dutch=B]={MSG=Hallo Wereld}"
+\end{verbatim}
+This may be useful for simple tests but when you want to write more
+complex test-suite scripts you would like some more flexibility, so two
+procedures were introduced, which are shown in test-suite ts\verb+_+002. This
+makes writing rather complex so the procedures have become part of
+the procedures 'appendQueue', 'prependQueue', and 'runtest'. The
+resulting script is shown in test-suit ts\verb+_+003.
+
+Changes like this will be made in the future!
+
+\section{Future Enhancements}
+The following enhancements are being planned:
+\begin{itemize}
+\item Target code will be made into a class with methods 'start',
+'load', 'exit', and 'version'. Instead of the current
+'$<$target$>$\verb+_+start', '$<$target$>$\verb+_+load', '$<$target$>$\verb+_+exit', and
+'$<$target$>$\verb+_+version', which have been taken from DejaGnu.
+
+\item Procedures will be created that make it easy to test WEB
+application from the framework.
+
+\item Other enhancements will be made depending on the use of the
+framework in testing different applications.
+\end{itemize}
+\end{document}
\ No newline at end of file
--- /dev/null
+%%
+%%
+
+\documentclass[12pt]{article}
+\input{README}
--- /dev/null
+BlueGnu Release Notice
--- /dev/null
+%%
+%%
+
+\documentclass[10pt]{dvidoc}
+\input{README}
+
--- /dev/null
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.4
+# Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Initialize some other variables.
+subdirs=
+
+ac_prev=
+for ac_option
+do
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ case "$ac_option" in
+ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) ac_optarg= ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case "$ac_option" in
+
+ -build | --build | --buil | --bui | --bu | --b)
+ ac_prev=build ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=* | --b=*)
+ build="$ac_optarg" ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file="$ac_optarg" ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ eval "enable_${ac_feature}=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix="$ac_optarg" ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he)
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+ --cache-file=FILE cache test results in FILE
+ --help print this message
+ --no-create do not create output files
+ --quiet, --silent do not print \`checking...' messages
+ --version print the version of autoconf that created configure
+Directory and file names:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=PREFIX install architecture-dependent files in PREFIX
+ [same as prefix]
+ --srcdir=DIR find the sources in DIR [configure dir or ..]
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
+Host type:
+ --build=BUILD configure for building on BUILD [BUILD=HOST]
+ --host=HOST configure for HOST [guessed]
+ --target=TARGET configure for TARGET [TARGET=HOST]
+Features and packages:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+--enable and --with options recognized:$ac_help
+EOF
+ exit 0 ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host="$ac_optarg" ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix="$ac_optarg" ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix="$ac_optarg" ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix="$ac_optarg" ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name="$ac_optarg" ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site="$ac_optarg" ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir="$ac_optarg" ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target="$ac_optarg" ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers)
+ echo "configure generated by autoconf version 2.4"
+ exit 0 ;;
+
+ -with-* | --with-*)
+ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_${ac_package}='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ eval "with_${ac_package}=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes="$ac_optarg" ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries="$ac_optarg" ;;
+
+ -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ ;;
+
+ *)
+ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+ echo "configure: warning: $ac_option: invalid host type" 1>&2
+ fi
+ if test "x$nonopt" != xNONE; then
+ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+ fi
+ nonopt="$ac_option"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+ exec 6>/dev/null
+else
+ exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+ case "$ac_arg" in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+ ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ esac
+done
+
+# NLS nuisances.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LANG+set}" = set; then LANG=C; export LANG; fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=dejagnu.texi
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_prog=$0
+ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ else
+ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ echo "loading site script $ac_site_file"
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ echo "loading cache $cache_file"
+ . $cache_file
+else
+ echo "creating cache $cache_file"
+ > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5 2>&5'
+ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5 2>&5'
+
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+ # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+ ac_n= ac_c='
+' ac_t=' '
+ else
+ ac_n=-n ac_c= ac_t=
+ fi
+else
+ ac_n= ac_c='\c' ac_t=
+fi
+
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+ if test -f $ac_dir/install-sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install-sh -c"
+ break
+ elif test -f $ac_dir/install.sh; then
+ ac_aux_dir=$ac_dir
+ ac_install_sh="$ac_aux_dir/install.sh -c"
+ break
+ fi
+done
+if test -z "$ac_aux_dir"; then
+ { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+# Find a good install program. We prefer a C program (faster),
+# so one script is as good as another. But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ for ac_dir in $PATH; do
+ # Account for people who put trailing slashes in PATH elements.
+ case "$ac_dir/" in
+ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+ *)
+ # OSF1 and SCO ODT 3.0 have their own names for install.
+ for ac_prog in ginstall installbsd scoinst install; do
+ if test -f $ac_dir/$ac_prog; then
+ if test $ac_prog = install &&
+ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+ # AIX install. It has an incompatible calling convention.
+ # OSF/1 installbsd also uses dspmsg, but is usable.
+ :
+ else
+ ac_cv_path_install="$ac_dir/$ac_prog -c"
+ break 2
+ fi
+ fi
+ done
+ ;;
+ esac
+ done
+ IFS="$ac_save_ifs"
+ # As a last resort, use the slow shell script.
+ test -z "$ac_cv_path_install" && ac_cv_path_install="$ac_install_sh"
+fi
+ INSTALL="$ac_cv_path_install"
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs. It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already. You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+ sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=\${\1='\2'}/p" \
+ >> confcache
+if cmp -s $cache_file confcache; then
+ :
+else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+cat > conftest.defs <<\EOF
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) \(.*\)%-D\1=\2%g
+s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
+s%\[%\\&%g
+s%\]%\\&%g
+s%\$%$$%g
+EOF
+DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
+rm -f conftest.defs
+
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+ case "\$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "$CONFIG_STATUS generated by autoconf version 2.4"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "\$ac_cs_usage"; exit 0 ;;
+ *) echo "\$ac_cs_usage"; exit 1 ;;
+ esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g$/@g/; /@g$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g$/%g/' > conftest.subs <<\CEOF
+$ac_vpsub
+$extrasub
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+
+CEOF
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust relative srcdir, etc. for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+ case "$ac_given_INSTALL" in
+ [/$]*) INSTALL="$ac_given_INSTALL" ;;
+ *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+ esac
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+ sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file
+fi; done
+rm -f conftest.subs
+
+
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
--- /dev/null
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT(dejagnu.texi)
+AC_PROG_INSTALL
+AC_OUTPUT(Makefile)
--- /dev/null
+.TH runtest 1 "31 Dec 1992"
+.SH NAME
+runtest \- the DejaGnu test driver program
+.SH SYNOPSIS
+.B runtest
+[ options ]
+.SH DESCRIPTION
+.I DejaGnu
+is a framework for running test suites on GNU tools. It is written in
+expect, which uses TCL (Tool command language).
+.B runtest
+is the test driver program; use it to control what tests to run,
+and variations on how to run them.
+
+You can find a comprehensive description of DejaGnu and \fBruntest\fR in
+.I
+The DejaGnu Testing Framework
+or its Info version,
+.BR dejagnu.info .
+.SH OPTIONS
+.TP
+.B --all
+Print all test output to screen. By default, only unexpected results are
+displayed.
+.TP
+.BI --baud \ rate
+Set the baud rate for a serial line connection. Some serial interface
+programs (like \fBtip\fR) don't use this value but instead use a separate
+initialization file.
+.TP
+.BI --connect \ type
+The type of connection to use. The choices are
+.BR rlogin ,
+.BR telnet ,
+.BR rsh ,
+.BR kermit ,
+.BR tip
+and
+.BR mondfe .
+.TP
+.B --debug
+Turn on
+.B expect
+internal debugging output. All output is logged to
+a file called \fBdbg.out\fR.
+The output of the \fB--strace\fR also goes into this file.
+.TP
+.B --help
+Prints out a help screen and then exits.
+.TP
+.BI --host \ type
+The configuration string for the host.
+.TP
+.BI --ignore \ test1.exp\ test2.exp\ ...
+Do not run the specified tests.
+.TP
+.BI --mail \ \'name1\ name2\ ...\'
+Electronic mail addresses to receive test results.
+.TP
+.BI --name \ hostname
+The network hostname of the target board.
+.TP
+.BI --objdir \ path
+\fIpath\fR is a directory containing compiled test code.
+.TP
+.BI --outdir \ directory
+The name of a directory for test log output.
+.TP
+.B --reboot
+Reboot the target board when \fBruntest\fR initializes
+(if supported).
+.TP
+.BI --srcdir \ path
+\fIpath\fR is a directory containing test directories.
+.TP
+.BI --strace \ N
+Turns on
+.B expect
+internal tracing to \fIN\fR levels deep.
+.TP
+.BI --target \ type
+The configuration string for the target.
+.TP
+.BI --tool \ toolname
+Specify the tool to be tested. \fItoolname\fR controls the test suite
+applied, and the associated initialization module.
+.TP
+.B --verbose,\ -v
+Turns on more debugging output from test cases and DejaGnu utility code.
+Use more than once to increase output further.
+.TP
+.B --version,\ -V
+Prints out the versions of DejaGnu, expect and Tcl.
+.TP
+.B -D[number]
+Activate the Tcl debugger.\fBnumber\fR can be either 1 or 0. If it is
+1, then the expect shell will break when it starts to run. All ^C's
+drop DejaGnu back to the debugger prompt. A 0 starts DejaGnu like
+normal, but a ^C drops to the debugger prompt.
+.TP 0
+Any file name on the command line is assumed to be a subset
+of the test names to run. Usually these are the names of the
+expect test driver, ie... special.exp.
+
+Makefile style variables are used to specify tool names and their
+flags; these and other configuration dependent values are saved in the
+file \fBsite.exp\fR, created during configuration.
+.SH EXIT CODES
+.B runtest
+sets the exit code to 1 if any of the tests failed, or
+sets it to 0 if all the tests passed.
+.SH SEE ALSO
+.I The DejaGnu Testing Framework
+.RB ( dejagnu.info ).
+This is the DejaGnu manual; its source is the Texinfo file
+.B
+doc/dejagnu.texi
+in the DejaGnu distribution.
+.SH AUTHOR
+Rob Savoye (rob@welcomehome.org)
--- /dev/null
+This is Info file dejagnu.info, produced by Makeinfo version 1.68 from
+the input file ./dejagnu.texi.
+
+START-INFO-DIR-ENTRY
+* DejaGnu: (dejagnu). The GNU testing framework.
+END-INFO-DIR-ENTRY
+
+ Copyright (C) 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+
+ Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+ Permission is granted to copy and distribute modified versions of
+this manual under the conditions for verbatim copying, provided also
+that the entire resulting derived work is distributed under the terms
+of a permission notice identical to this one.
+
+ Permission is granted to copy and distribute translations of this
+manual into another language, under the above conditions for modified
+versions.
+
+\1f
+Indirect:
+dejagnu.info-1: 845
+dejagnu.info-2: 49656
+dejagnu.info-3: 98864
+\1f
+Tag Table:
+(Indirect)
+Node: Top\7f845
+Node: Overview\7f1569
+Node: What is New\7f3526
+Node: Running Tests\7f4893
+Node: Sample Test\7f8001
+Node: Design Goals\7f9824
+Node: Posix\7f11617
+Node: Future Directions\7f17145
+Node: Tcl and Expect\7f17988
+Node: Invoking runtest\7f18731
+Node: Customizing\7f31866
+Node: Config Values\7f34287
+Node: Master Config File\7f40542
+Node: Local Config File\7f44541
+Node: Personal Config File\7f46789
+Node: Internals\7f47575
+Node: Names\7f49656
+Node: Init Module\7f51171
+Node: DejaGnu Builtins\7f55274
+Node: framework.exp\7f56083
+Node: remote.exp\7f65293
+Node: utils.exp\7f69799
+Node: target.exp\7f73522
+Node: debugger.exp\7f76091
+Node: Target Dependent\7f77622
+Node: Cross Targets\7f80980
+Node: Input Files\7f86280
+Node: Output Files\7f87772
+Node: Summary\7f88390
+Node: Detail\7f90141
+Node: Debug\7f91993
+Node: Tests\7f95959
+Node: Writing\7f96405
+Node: Debugging\7f98864
+Node: Adding\7f101241
+Node: Hints\7f103253
+Node: Variables\7f106051
+Node: Extending\7f107396
+Node: Adding Tools\7f107928
+Node: Adding Targets\7f116563
+Node: Porting\7f118758
+Node: Installation\7f119227
+Node: Configuring DejaGnu\7f119607
+Node: Installing DejaGnu\7f121510
+Node: Index\7f122634
+\1f
+End Tag Table
--- /dev/null
+This is Info file dejagnu.info, produced by Makeinfo version 1.68 from
+the input file ./dejagnu.texi.
+
+START-INFO-DIR-ENTRY
+* DejaGnu: (dejagnu). The GNU testing framework.
+END-INFO-DIR-ENTRY
+
+ Copyright (C) 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+
+ Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+ Permission is granted to copy and distribute modified versions of
+this manual under the conditions for verbatim copying, provided also
+that the entire resulting derived work is distributed under the terms
+of a permission notice identical to this one.
+
+ Permission is granted to copy and distribute translations of this
+manual into another language, under the above conditions for modified
+versions.
+
+\1f
+File: dejagnu.info, Node: Top, Next: Overview, Up: (dir)
+
+DejaGnu
+*******
+
+ DejaGnu is a framework for running test suites on software tools.
+
+ This file describes version 1.3 of DejaGnu.
+
+* Menu:
+
+* Overview:: What is DejaGnu?
+* What is New:: What is new in this release.
+* Invoking runtest:: Using `runtest', the main test driver
+* Customizing:: Setting `runtest' defaults
+* Internals:: The DejaGnu implementation
+* Tests:: How to write a test case
+* Extending:: New tools, new targets, and new hosts
+* Installation:: Configuring and Installing DejaGnu
+* Index:: Index
+
+\1f
+File: dejagnu.info, Node: Overview, Next: What is New, Prev: Top, Up: Top
+
+What is DejaGnu?
+****************
+
+ DejaGnu is a framework for testing other programs. Its purpose is to
+provide a single front end for all tests. Beyond this, DejaGnu offers
+several advantages for testing:
+
+ 1. The flexibility and consistency of the DejaGnu framework make it
+ easy to write tests for any program.
+
+ 2. DejaGnu provides a layer of abstraction which allows you to write
+ tests that are portable to any host or target where a program must
+ be tested. For instance, a test for GDB can run (from any Unix
+ based host) on any target architecture that DejaGnu supports.
+ Currently DejaGnu runs tests on several single board computers,
+ whose operating software ranges from just a boot monitor to a
+ full-fledged, Unix-like realtime OS.
+
+ 3. All tests have the same output format. This makes it easy to
+ integrate testing into other software development processes.
+ DejaGnu's output is designed to be parsed by other filtering
+ script, and it is also human readable.
+
+ DejaGnu is written in `expect', which in turn uses "Tcl"--Tool
+command language.
+
+ Running tests requires two things: the testing framework, and the
+test suites themselves. Tests are usually written in `expect' using
+Tcl, but you can also use a Tcl script to run a test suite that is not
+based on `expect'. (`expect' script filenames conventionally use
+`.exp' as a suffix; for example, the main implementation of the DejaGnu
+test driver is in the file `runtest.exp'.)
+
+* Menu:
+
+* Running Tests:: A first look at running DejaGnu tests
+* Sample Test:: What does a DejaGnu test case look like?
+* Design Goals:: Goals behind DejaGnu
+* Posix:: DejaGnu conforms to POSIX 1003.3
+* Future Directions:: Where is DejaGnu going?
+* Tcl and Expect:: Reading more about Tcl and Expect
+
+\1f
+File: dejagnu.info, Node: What is New, Next: Invoking runtest, Prev: Overview, Up: Top
+
+What is new in this release ?
+*****************************
+
+ This release has a number of substantial changes over version 1.2.
+The most visible change is that the version of expect and Tcl included
+in the release are up-to-date with the current stable net releases.
+Other changes are:
+
+ 1. The config sub-system in DejaGnu has been completely redesigned.
+ It now supports testing on remote hosts as well as remote targets.
+
+ 2. More builtin support for building target binaries with the correct
+ linker flags. Currently this only works with GCC, preferably with a
+ target support by `libgloss'.
+
+ 3. Lots of little bug fixes from a year of heavy use here at Cygnus
+ Support.
+
+ 4. DejaGnu now uses `autoconf' for configuration.
+
+ 5. New test cases for DejaGnu have been added for the new features,
+ plus the "-tool" option bug in the 1.2 testsuite has been fixed.
+
+ 6. The `--tool' option is now optional.
+
+ 7. `runtest' when searching for test drivers ignores all directories
+ named SCCS, RCS, and CVS.
+
+ 8. There is now a generic keyword based test harness that uses
+ comments in source code to control how each test case gets built
+ and run.
+
+ 9. There is now some support for running a testsuite with multiple
+ passes.
+
+
+\1f
+File: dejagnu.info, Node: Running Tests, Next: Sample Test, Up: Overview
+
+Running existing tests
+======================
+
+ To run tests from an existing collection, first use `configure' as
+usual to set up the source directory containing the tests. Then try
+running
+
+ make check
+
+ If the `check' target exists, it usually saves you some trouble--for
+instance, it can set up any auxiliary programs or other files needed by
+the tests.
+
+ Once you have run `make check' to build any auxiliary files, you
+might want to call the test driver `runtest' directly to repeat the
+tests. You may also have to call `runtest' directly for test
+collections with no `check' target in the `Makefile'.
+
+ Typically, you must use two command-line options: `--tool', to
+specify which set of tests to run(1), and `--srcdir', to specify where
+to find test directories.
+
+ For example, if the directory `gdb/testsuite' contains a collection
+of DejaGnu tests for GDB, you can run them like this:
+
+ eg$ cd gdb/testsuite
+ eg$ runtest --tool gdb
+*Test output follows, ending with:*
+
+ === gdb Summary ===
+
+ # of expected passes 508
+ # of expected failures 103
+ /usr/latest/bin/gdb version 4.14.4 -nx
+
+ You can use the option `--srcdir' to point to some other directory
+containing a collection of tests:
+
+ eg$ runtest --tool gdb --srcdir /devo/gdb/testsuite
+
+ These examples assume a "native" configuration, where the same
+computer runs both `runtest' and the tests themselves. When you have a
+"cross" configuration, the tests run on a different computer,
+controlled by the host running `runtest'. In this situation, you need
+the option `--name' to specify the network address for the other
+computer:
+
+ eg$ runtest --tool gdb --name vx9.munist.com
+
+ If you always use the same option values, you can record them in a
+file called `site.exp', rather than typing them each time. *Note
+Setting defaults for `runtest' options: Config Values.
+
+ By default, `runtest' prints only the names of the tests it runs,
+output from any tests that have unexpected results, and a summary
+showing how many tests passed and how many failed. To display output
+from all tests (whether or not they behave as expected), use the
+`--all' option. For more verbose output about processes being run,
+communication, and so on, use `--verbose'. To see even more output, use
+multiple `--verbose' options. *Note Using `runtest': Invoking runtest,
+for a more detailed explanation of each `runtest' option.
+
+ Test output goes into two files in your current directory: summary
+output in `TOOL.sum', and detailed output in `TOOL.log'. (TOOL refers
+to the collection of tests; for example, after a run with `--tool gdb',
+look for output files `gdb.sum' and `gdb.log'.) *Note The files
+DejaGnu writes: Output Files.
+
+ ---------- Footnotes ----------
+
+ (1) `--tool' selects a particular suite of tests, *not* the name of
+the executable program to run. *Note Configuration dependent values:
+Config Values, for information on the variables that you can use to
+specify the names of programs to run.
+
+\1f
+File: dejagnu.info, Node: Sample Test, Next: Design Goals, Prev: Running Tests, Up: Overview
+
+What does a DejaGnu test look like?
+===================================
+
+ Each DejaGnu test is an `expect' script; the tests vary widely in
+complexity, depending on the nature of the tool and the feature tested.
+
+ Here is a very simple GDB test--one of the simplest tests shipped
+with DejaGnu (extracted from `gdb.t00/echo.exp'):(1)
+
+ # send a string to the GDB stdin:
+ send "echo Hello world!\n"
+
+ # inspect the GDB stdout for the correct reply,
+ # and determine whether the test passes or fails:
+ expect {
+ -re "Hello world.*$prompt $" { pass "Echo test" }
+ -re "$prompt $" { fail "Echo test" }
+ timeout { fail "(timeout) Echo test" }
+ }
+
+ Though brief, this example is a complete test. It illustrates some
+of the main features of DejaGnu test scripts:
+
+ * The test case does not start the tested program (GDB in this case);
+ all test scripts for interactive tools can assume the
+ corresponding tool is running.
+
+ * Comments start with `#'.
+
+ * The main commands you use to control a tested program are `send'
+ (to give it commands) and `expect' (to analyze its responses).
+
+ * The `expect' command uses a list of pairs; a pattern (regular
+ expression if `-re' specified), followed by an action to run if the
+ pattern matches output from the program. Only the action for the
+ *first* matching pattern will execute.
+
+ * Test cases use the commands `pass' and `fail' to record the test
+ outcome.
+
+ ---------- Footnotes ----------
+
+ (1) More recent GDB tests use the `gdb_test' procedure. An
+equivalent test using that procedure is ` gdb_test "echo Hello world!"
+"Hello world!" '
+
+\1f
+File: dejagnu.info, Node: Design Goals, Next: Posix, Prev: Sample Test, Up: Overview
+
+Design goals
+============
+
+ DejaGnu grew out of the internal needs of Cygnus Support. Cygnus
+maintains and enhances a variety of free programs in many different
+environments, and we needed a testing tool that:
+
+ * is useful to developers while fixing bugs;
+
+ * automates running many tests during a software release process;
+
+ * is portable among a variety of host computers;
+
+ * supports cross-development testing;
+
+ * permits testing interactive programs, like GDB; and
+
+ * permits testing batch oriented programs, like GCC.
+
+ Some of the requirements proved challenging. For example,
+interactive programs do not lend themselves very well to automated
+testing. But all the requirements are important: for instance, it is
+imperative to make sure that GDB works as well when cross-debugging as
+it does in a native configuration.
+
+ Probably the greatest challenge was testing in a cross-development
+environment (which can be a real nightmare). Most cross-development
+environments are customized by each developer. Even when buying
+packaged boards from vendors there are many differences. The
+communication interfaces vary from a serial line to ethernet. DejaGnu
+was designed with a modular communication setup, so that each kind of
+communication can be added as required, and supported thereafter. Once
+a communication procedure is coded, any test can use it. Currently
+DejaGnu can use `rsh', `rlogin', `telnet', `tip', `kermit', and
+`mondfe' for remote communications.
+
+ Julia Menapace first coined the term "Deja Gnu" to describe an
+earlier testing framework at Cygnus Support. When we replaced it with
+the Expect-based framework, it was like DejaGnu all over again...
+
+\1f
+File: dejagnu.info, Node: Posix, Next: Future Directions, Prev: Design Goals, Up: Overview
+
+A POSIX conforming test framework
+=================================
+
+ DejaGnu conforms to the POSIX standard for test frameworks.
+
+ POSIX standard 1003.3 defines what a testing framework needs to
+provide, in order to permit the creation of POSIX conformance test
+suites. This standard is primarily oriented to running POSIX
+conformance tests, but its requirements also support testing of features
+not related to POSIX conformance. POSIX 1003.3 does not specify a
+particular testing framework, but at this time there is only one other
+POSIX conforming test framework: TET.(1)
+
+ The POSIX documentation refers to "assertions". An assertion is a
+description of behavior. For example, if a standard says "The sun
+shall shine", a corresponding assertion might be "The sun is shining."
+A test based on this assertion would pass or fail depending on whether
+it is daytime or nighttime. It is important to note that the standard
+being tested is never 1003.3; the standard being tested is some other
+standard, for which the assertions were written.
+
+ As there is no test suite to test *testing frameworks* for POSIX
+1003.3 conformance, verifying conformance to this standard is done by
+repeatedly reading the standard and experimenting. One of the main
+things 1003.3 does specify is the set of allowed output messages, and
+their definitions. Four messages are supported for a required feature
+of POSIX conforming systems, and a fifth for a conditional feature.
+DejaGnu supports the use of all five output messages; in this sense a
+test suite that uses exactly these messages can be considered POSIX
+conforming. These definitions specify the output of a test case:
+
+`PASS'
+ A test has succeeded. That is, it demonstrated that the assertion
+ is true.
+
+`XFAIL'
+ POSIX 1003.3 does not incorporate the notion of expected failures,
+ so `PASS', instead of `XPASS', must also be returned for test
+ cases which were expected to fail and did not. This means that
+ `PASS' is in some sense more ambiguous than if `XPASS' is also
+ used. For information on `XPASS' and `XFAIL', see *Note Using
+ `runtest': Invoking runtest.
+
+`FAIL'
+ A test *has* produced the bug it was intended to capture. That is,
+ it has demonstrated that the assertion is false. The `FAIL'
+ message is based on the test case only. Other messages are used to
+ indicate a failure of the framework.
+
+ As with `PASS', POSIX tests must return `FAIL' rather than `XFAIL'
+ even if a failure was expected.
+
+`UNRESOLVED'
+ A test produced indeterminate results. Usually, this means the
+ test executed in an unexpected fashion; this outcome requires that
+ a human being go over results, to determine if the test should
+ have passed or failed. This message is also used for any test
+ that requires human intervention because it is beyond the
+ abilities of the testing framework. Any unresolved test should
+ resolved to `PASS' or `FAIL' before a test run can be considered
+ finished.
+
+ Note that for POSIX, each assertion must produce a test result
+ code. If the test isn't actually run, it must produce `UNRESOLVED'
+ rather than just leaving that test out of the output. This means
+ that you have to be careful when writing tests, to not carelessly
+ use tcl statements like `return'--if you alter the flow of control
+ of the tcl code you must insure that every test still produces
+ some result code.
+
+ Here are some of the ways a test may wind up `UNRESOLVED':
+
+ * A test's execution is interrupted.
+
+ * A test does not produce a clear result. This is usually
+ because there was an `ERROR' from DejaGnu while processing
+ the test, or because there were three or more `WARNING'
+ messages. Any `WARNING' or `ERROR' messages can invalidate
+ the output of the test. This usually requires a human being
+ to examine the output to determine what really happened--and
+ to improve the test case.
+
+ * A test depends on a previous test, which fails.
+
+ * The test was set up incorrectly.
+
+`UNTESTED'
+ A test was not run. This is a placeholder, used when there is no
+ real test case yet.
+
+The only remaining output message left is intended to test features that
+are specified by the applicable POSIX standard as conditional:
+
+`UNSUPPORTED'
+ There is no support for the tested case. This may mean that a
+ conditional feature of an operating system, or of a compiler, is
+ not implemented. DejaGnu also uses this message when a testing
+ environment (often a "bare board" target) lacks basic support for
+ compiling or running the test case. For example, a test for the
+ system subroutine `gethostname' would never work on a target board
+ running only a boot monitor.
+
+ DejaGnu uses the same output procedures to produce these messages for
+all test suites, and these procedures are already known to conform to
+POSIX 1003.3. For a DejaGnu test suite to conform to POSIX 1003.3, you
+must avoid the `setup_xfail' procedure as described in the `PASS'
+section above, and you must be careful to return `UNRESOLVED' where
+appropriate, as described in the `UNRESOLVED' section above.
+
+ ---------- Footnotes ----------
+
+ (1) TET was created by Unisoft for a consortium comprised of X/Open,
+Unix International, and the Open Software Foundation.
+
+\1f
+File: dejagnu.info, Node: Future Directions, Next: Tcl and Expect, Prev: Posix, Up: Overview
+
+Future directions
+=================
+
+ In the near future, there are two parallel directions for DejaGnu
+development. The first is to add support for more hosts and targets.
+
+ The second would permit testing programs with a more complex
+interface, whether text based or GUI based. Two components already
+exist: a Tcl based X window toolkit, and a terminal package for
+`expect'. Both of these could be merged into DejaGnu in a way that
+permits testing programs that run in each environment.
+
+ Meanwhile, we hope DejaGnu enables the creation of test suites for
+conformance to ANSI C and C++, to POSIX, and to other standards. We
+encourage you to make any test suites you create freely available,
+under the same terms as DejaGnu itself.
+
+\1f
+File: dejagnu.info, Node: Tcl and Expect, Prev: Future Directions, Up: Overview
+
+Tcl and Expect
+==============
+
+ Tcl was introduced in a paper by John K. Ousterhout at the 1990
+Winter Usenix conference, `Tcl: An Embeddable Command Language'. That
+paper is included in PostScript form in the `doc' subdirectory of the
+Tcl distribution. The version of Tcl included in DejaGnu at this time is
+Tcl 7.4p3.
+
+ Don Libes introduced `expect' in his paper `expect: Curing Those
+Uncontrollable Fits of Interaction' at the 1990 Summer Usenix
+conference. The paper is included in PostScript form in the `expect'
+distribution (as are several other papers about `expect'). The version
+of expect included in DejaGnu at this time is expect 5.18.0.
+
+\1f
+File: dejagnu.info, Node: Invoking runtest, Next: Customizing, Prev: What is New, Up: Top
+
+Using `runtest'
+***************
+
+ `runtest' is the executable test driver for DejaGnu. You can
+specify two kinds of things on the `runtest' command line: command line
+options, and Tcl variables for the test scripts. The options are
+listed alphabetically below.
+
+ `runtest' returns an exit code of `1' if any test has an unexpected
+result; otherwise (if all tests pass or fail as expected) it returns
+`0' as the exit code.
+
+ `runtest' flags the outcome of each test as one of these cases.
+(*Note A POSIX conforming test framework: Posix, for a discussion of
+how POSIX specifies the meanings of these cases.)
+
+`PASS'
+ The most desirable outcome: the test succeeded, and was expected to
+ succeed.
+
+`XPASS'
+ A pleasant kind of failure: a test was expected to fail, but
+ succeeded. This may indicate progress; inspect the test case to
+ determine whether you should amend it to stop expecting failure.
+
+`FAIL'
+ A test failed, although it was expected to succeed. This may
+ indicate regress; inspect the test case and the failing software
+ to locate the bug.
+
+`XFAIL'
+ A test failed, but it was expected to fail. This result indicates
+ no change in a known bug. If a test fails because the operating
+ system where the test runs lacks some facility required by the
+ test, the outcome is `UNSUPPORTED' instead.
+
+`UNRESOLVED'
+ Output from a test requires manual inspection; the test suite
+ could not automatically determine the outcome. For example, your
+ tests can report this outcome is when a test does not complete as
+ expected.
+
+`UNTESTED'
+ A test case is not yet complete, and in particular cannot yet
+ produce a `PASS' or `FAIL'. You can also use this outcome in dummy
+ "tests" that note explicitly the absence of a real test case for a
+ particular property.
+
+`UNSUPPORTED'
+ A test depends on a conditionally available feature that does not
+ exist (in the configured testing environment). For example, you
+ can use this outcome to report on a test case that does not work
+ on a particular target because its operating system support does
+ not include a required subroutine.
+
+ `runtest' may also display the following messages:
+
+`ERROR'
+ Indicates a major problem (detected by the test case itself) in
+ running the test. This is usually an unrecoverable error, such as
+ a missing file or loss of communication to the target. (POSIX
+ test suites should not emit this message; use `UNSUPPORTED',
+ `UNTESTED', or `UNRESOLVED' instead, as appropriate.)
+
+`WARNING'
+ Indicates a possible problem in running the test. Usually warnings
+ correspond to recoverable errors, or display an important message
+ about the following tests.
+
+`NOTE'
+ An informational message about the test case.
+
+ This is the full set of command line options that `runtest'
+recognizes. Arguments may be abbreviated to the shortest unique string.
+
+ runtest --tool TOOL [ TESTSUITE.exp ... ]
+ [ TESTSUITE.exp="testfile1 ..." ]
+ [ TCLVAR=VALUE... ]
+ [ --all ] [ --baud BAUD-RATE ] [ --connect TYPE ]
+ [ --debug ] [ --help ] [ --host STRING ]
+ [ --mail "NAME ..." ] [ --name STRING ]
+ [ --name NAME ] [ --outdir PATH ]
+ [ --objdir PATH ] [ --reboot ]
+ [ --srcdir PATH ] [ --strace N ]
+ [ --target STRING --build STRING ]
+ [ -v | --verbose ] [ -V | --version ] [ --DN ]
+
+`--tool TOOL'
+ TOOL specifies what set of tests to run, and what initialization
+ module to use. TOOL is used *only* for these two purposes: it is
+ *not* used to name the executable program to test. Executable
+ tool names (and paths) are recorded in `site.exp' (*note
+ Configuration dependent values: Config Values.), and you can
+ override them by specifying Tcl variables on the command line.
+
+ For example, including `--tool gcc' on the `runtest' command line
+ runs tests from all test subdirectories whose names match `gcc.*',
+ and uses one of the initialization modules named
+ `config/*-gcc.exp'. To specify the name of the compiler (perhaps
+ as an alternative path to what `runtest' would use by default), use
+ `GCC=BINNAME' on the `runtest' command line.
+
+`TESTSUITE.exp ...'
+ Specify the names of testsuites to run. By default, `runtest'
+ runs all tests for the tool, but you can restrict it to particular
+ testsuites by giving the names of the `.exp' `expect' scripts that
+ control them.
+
+ TESTSUITE.exp may not include path information; use plain
+ filenames.
+
+`TESTFILE.exp="testfile1 ..."'
+ Specify a subset of tests in a suite to run. For compiler or
+ assembler tests, which often use a single `.exp' script covering
+ many different source files, this option allows you to further
+ restrict the tests by listing particular source files to compile.
+ Some tools even support wildcards here. The wildcards supported
+ depend upon the tool, but typically they are `?', `*', and
+ `[chars]'.
+
+`TCLVAR=VALUE'
+ You can define Tcl variables for use by your test scripts in the
+ same style used with `make' for environment variables. For
+ example, `runtest GDB=gdb.old' defines a variable called `GDB';
+ when your scripts refer to `$GDB' in this run, they use the value
+ `gdb.old'.
+
+ The default Tcl variables used for most tools are defined in the
+ main DejaGnu `Makefile'; their values are captured in the
+ `site.exp' file. *Note Configuration dependent values: Config
+ Values.
+
+`--all'
+ Display all test output. By default, `runtest' shows only the
+ output of tests that produce unexpected results; that is, tests
+ with status `FAIL' (unexpected failure), `XPASS' (unexpected
+ success), or `ERROR' (a severe error in the test case itself).
+ Specify `--all' to see output for tests with status `PASS'
+ (success, as expected) `XFAIL' (failure, as expected), or
+ `WARNING' (minor error in the test case itself).
+
+`--baud BAUD-RATE'
+`-b BAUD-RATE'
+ Set the default baud rate to something other than 9600. (Some
+ serial interface programs, like `tip', use a separate
+ initialization file instead of this value.)
+
+`--connect TYPE'
+ Connect to a target testing environment as specified by TYPE, if
+ the target is not the computer running `runtest'. For example, use
+ `--connect' to change the program used to connect to a "bare
+ board" boot monitor. The choices for TYPE in the DejaGnu 1.0
+ distribution are `rlogin', `telnet', `rsh', `tip', `kermit', and
+ `mondfe'.
+
+ The default for this option depends on the configuration (*note
+ Remote targets supported: Cross Targets.). The default is chosen
+ to be the most convenient communication method available, but
+ often other alternatives work as well; you may find it useful to
+ try alternative connect methods if you suspect a communication
+ problem with your testing target.
+
+`--debug'
+ Turns on the `expect' internal debugging output. Debugging output
+ is displayed as part of the `runtest' output, and logged to a file
+ called `dbg.log'. The extra debugging output does *not* appear on
+ standard output, unless the verbose level is greater than 2 (for
+ instance, to see debug output immediately, specify `--debug -v
+ -v'). The debugging output shows all attempts at matching the test
+ output of the tool with the scripted patterns describing expected
+ output. The output generated with `--strace' also goes into
+ `dbg.log'.
+
+`--help'
+`-he'
+ Prints out a short summary of the `runtest' options, then exits
+ (even if you also specify other options).
+
+`--host STRING'
+ STRING is a full configuration "triple" name as used by
+ `configure'. Use this option to override the default string
+ recorded by your configuration's choice of host. This choice does
+ not change how anything is actually configured unless -build is
+ also specified; it affects *only* DejaGnu procedures that compare
+ the host string with particular values. The procedures `ishost',
+ `istarget', `isnative', and `setup_xfail' are affected by
+ `--host'. In this usage, `host' refers to the machine that the
+ tests are to be run on, which may not be the same as the `build'
+ machine. If `--build' is also specified, then `--host' refers to
+ the machine that the tests wil, be run on, not the machine DejaGnu
+ is run on.
+
+`--build STRING'
+ STRING is a full configuration "triple" name as used by
+ `configure'. This is the type of machine DejaGnu and the tools to
+ be tested are built on. For a normal cross this is the same as the
+ host, but for a canadian cross, they are seperate.
+
+`--name NAME'
+ NAME is a name for the particular testing target machine (for
+ cross testing). If the testing target has IP network support (for
+ example, `RPC' or `NFS'), this is the network name for the target
+ itself. (NAME is *not the configuration string* you specify as a
+ target with `configure'; the `--name' option names a particular
+ target, rather than describing a class of targets.) For targets
+ that connect in other ways, the meaning of the NAME string depends
+ on the connection method. *Note Remote targets supported: Cross
+ Targets.
+
+`--name STRING'
+ Specify a network name of testing target or its host. The
+ particular names that are meaningful with `--name' will depend on
+ your site configuration, and on the connection protocol: for
+ example, `tip' connections require names from a serial line
+ configuration file (usually called `/etc/remote'), while `telnet'
+ connections use IP hostnames.
+
+`--objdir PATH'
+ Use PATH as the top directory containing any auxiliary compiled
+ test code. This defaults to `.'. Use this option to locate
+ pre-compiled test code. You can normally prepare any auxiliary
+ files needed with `make'.
+
+`--outdir PATH'
+ Write output logs in directory PATH. The default is `.', the
+ directory where you start `runtest'. This option affects only the
+ summary and the detailed log files `TOOL.sum' and `TOOL.log'. The
+ DejaGnu debug log `dbg.log' always appears (when requested) in the
+ local directory.
+
+`--reboot'
+ Reboot the target board when `runtest' initializes. Usually, when
+ running tests on a separate target board, it is safer to reboot
+ the target to be certain of its state. However, when developing
+ test scripts, rebooting takes a lot of time.
+
+`--srcdir PATH'
+ Use PATH as the top directory for test scripts to run. `runtest'
+ looks in this directory for any subdirectory whose name begins
+ with the toolname (specified with `--tool'). For instance, with
+ `--tool gdb', `runtest' uses tests in subdirectories `gdb.*' (with
+ the usual shell-like filename expansion). If you do not use
+ `--srcdir', `runtest' looks for test directories under the current
+ working directory.
+
+`--strace N'
+ Turn on internal tracing for `expect', to N levels deep. By
+ adjusting the level, you can control the extent to which your
+ output expands multi-level Tcl statements. This allows you to
+ ignore some levels of `case' or `if' statements. Each procedure
+ call or control structure counts as one "level".
+
+ The output is recorded in the same file, `dbg.log', used for output
+ from `--debug'.
+
+`--target STRING'
+ Use this option to override the default setting (running native
+ tests). STRING is a full configuration "triple" name(1) as used
+ by `configure'. This option changes the configuration `runtest'
+ uses for the default tool names, and other setup information.
+ *Note Using `configure': (configure.info)Using configure, for
+ details about `configure' names.
+
+`--verbose'
+`-v'
+ Turns on more output. Repeating this option increases the amount
+ of output displayed. Level one (`-v') is simply test output. Level
+ two (`-v -v') shows messages on options, configuration, and process
+ control. Verbose messages appear in the detailed (`*.log') log
+ file, but not in the summary (`*.sum') log file.
+
+`--version'
+`-V'
+ Prints out the version numbers of DejaGnu, `expect' and Tcl, and
+ exits without running any tests.
+
+`-D0'
+`-D1'
+ Start the internal Tcl debugger. The Tcl debugger supports
+ breakpoints, single stepping, and other common debugging
+ activities. (See `A Debugger for Tcl Applications' by Don Libes.
+ (2))
+
+ If you specify `-D1', the `expect' shell stops at a breakpoint as
+ soon as DejaGnu invokes it.
+
+ If you specify `-D0', DejaGnu starts as usual, but you can enter
+ the debugger by sending an interrupt (e.g. by typing <C-c>).
+
+ ---------- Footnotes ----------
+
+ (1) Configuration triples have the form `CPU-VENDOR-OS'.
+
+ (2) Distributed in PostScript form with `expect' as the file
+`expect/tcl-debug.ps'.
+
+\1f
+File: dejagnu.info, Node: Customizing, Next: Internals, Prev: Invoking runtest, Up: Top
+
+Setting `runtest' defaults
+**************************
+
+ The site configuration file, `site.exp', captures
+configuration-dependent values and propagates them to the DejaGnu test
+environment using Tcl variables. This ties the DejaGnu test scripts
+into the `configure' and `make' programs.
+
+ DejaGnu supports more than one `site.exp' file. The multiple
+instances of `site.exp' are loaded in a fixed order built into DejaGnu
+(the more local last). The first file loaded is the optional
+`~/.dejagnurc', then the local files, and finally the global file.
+
+ 1. There is am optional "master" `site.exp', capturing configuration
+ values that apply to DejaGnu across the board, in each
+ configuration-specific subdirectory of the DejaGnu library
+ directory. `runtest' loads these values first. *Note Configuring
+ and Installing DejaGnu: Installation. The master `site.exp'
+ contains the default values for all targets and hosts supported by
+ DejaGnu. This master file is identified by setting the environment
+ variable `DEJAGNU' to the name of the file. This is also refered
+ to as the "global" config file.
+
+ 2. Any directory containing a configured test suite also has a
+ `site.exp', capturing configuration values specific to the tool
+ under test. Since `runtest' loads these values last, the
+ individual test configuration can either rely on and use, or
+ override, any of the global values from the "master" `site.exp'.
+
+ You can usually generate or update the testsuite `site.exp' by
+ typing `make site.exp' in the test suite directory, after the test
+ suite is configured.
+
+ 3. You can also have a file in your home directory called
+ `.dejagnurc'. This gets loaded first before the other config
+ files. Usually this is used for personal stuff, like setting
+ `all_flag' so all the output gets printed, or verbosity levels.
+
+ You can further override the default values in a user-editable
+section of any `site.exp', or by setting variables on the `runtest'
+command line.
+
+* Menu:
+
+* Config Values:: Variables used in the configuration file.
+* Master Config File:: The master configuration file.
+* Local Config File:: The local configuration file.
+* Personal Config File:: The personal configuration file.
+
+\1f
+File: dejagnu.info, Node: Config Values, Next: Master Config File, Up: Customizing
+
+Config Variables
+----------------
+
+ DejaGnu uses a named array in Tcl to hold all the info for each
+machine. In the case of a canadian cross, this means host information as
+well as target information. The named array is called `target_info',
+and it has two indices. The following fields are part of the array.
+
+`name'
+ The name of the target. (mostly for error messages) This should
+ also be the string used for this target's array. It should also
+ be the same as the linker script so we can find them dynamically.
+ This should be the same as the argument used for `push_target{}'.
+
+`ldflags'
+ This is the linker flags required to produce a fully linked
+ executable. For `libgloss' supported targets this is usually just
+ the name of the linker script.
+
+`config'
+ The target canonical for this target. This is used by some init
+ files to make sure the target is supported.
+
+`cflags'
+ The flags required to produce an object file from a source file.
+
+`connect'
+ This is the connectmode for this target. This is for both IP and
+ serial connections. Typically this is either `telnet', `rlogin',
+ or `rsh'.
+
+`target'
+ This is the hostname of the target. This is for TCP/IP based
+ connections, and is also used for version of tip that use
+ /etc/remote.
+
+`serial'
+ This is the serial port. This is typically /dev/tty? or com?:.
+
+`netport'
+ This is the IP port. This is commonly used for telneting to target
+ boards that are connected to a terminal server. In that case the
+ IP port specifies the which serial port to use.
+
+`baud'
+ This is the baud rate for a serial port connection.
+
+`x10'
+ This is the parameters for an x10 controller. These are simple
+ devices that let us power cycle or reset a target board remotely.
+
+`fileid'
+ This is the fileid or spawn id of of the connection.
+
+`prompt'
+ a glob style pattern to recognize the prompt.
+
+`abbrev'
+ abbreviation for tool init files.
+
+`ioport'
+ This is the port for I/O on dual port systems. In this
+ configuration, the main serial port `0' is usually used for stdin
+ and stdout, which the second serial port can be used for debugging.
+
+ The first index into the array is the same value as used in the
+`name' field. This is usually a short version of the name of the target
+board. For an example, here's the settings I use for my `Motorola's'
+`IDP' board and my `Motorola' 6U VME `MVME135-1' board. (both m68k
+targets)
+
+ # IDP board
+ set target_info(idp,name) "idp"
+ set target_info(idp,ldflags) "-Tidp.ld"
+ set target_info(idp,config) m68k-unknown-aout
+ set target_info(idp,cflags) ""
+ set target_info(idp,connect) telnet
+ set target_info(idp,target) "s7"
+ set target_info(idp,serial) "tstty7"
+ set target_info(idp,netport) "wharfrat:1007"
+ set target_info(idp,baud) "9600"
+ # MVME 135 board
+ set target_info(idp,name) "mvme"
+ set target_info(idp,ldflags) "-Tmvme.ld"
+ set target_info(idp,config) m68k-unknown-aout
+ set target_info(idp,cflags) ""
+ set target_info(idp,connect) telnet
+ set target_info(idp,target) "s8"
+ set target_info(idp,serial) "tstty8"
+ set target_info(idp,netport) "wharfrat:1008"
+ set target_info(idp,baud) "9600"
+
+ DejaGnu can use this information to switch between multiple targets
+in one test run. This is done through the use of the `push_target'
+procedure, which is discussed elsewhere.
+
+ This array can also hold information for a remote host, which is used
+when testing a candain cross. In this case, the only thing different is
+the index is just `host'. Here's the settings I use to run tests on my
+NT machine while running DejaGnu on a Unix machine. (in this case a
+Linux box)
+
+ set target_info(host,name) "nt-host"
+ set target_info(host,config) "386-unknown-winnt"
+ set target_info(host,connect) "telnet"
+ set target_info(host,target) "ripple"
+
+ There is more info on how to use these variables in the sections on
+the config files. *Note Configuration Files: Master Config File.
+
+ In the user editable second section of `site.exp', you can not only
+override the configuration variables captured in the first section, but
+also specify default values for all the `runtest' command line options.
+Save for `--debug', `--help', and `--version', each command line
+option has an associated Tcl variable. Use the Tcl `set' command to
+specify a new default value (as for the configuration variables). The
+following table describes the correspondence between command line
+options and variables you can set in `site.exp'. *Note Running the
+Tests: Invoking runtest, for explanations of the command-line options.
+
+ runtest Tcl
+ option variable description
+ __________ ________ ___________________________________________
+
+ --all all_flag display all test results if set
+
+ --baud baud set the default baud rate to something other
+ than 9600.
+ --connect connectmode `rlogin', `telnet', `rsh',
+ `kermit', `tip', or `mondfe'
+
+ --outdir outdir directory for `TOOL.sum' and `TOOL.log'
+
+ --objdir objdir directory for pre-compiled binaries
+
+ --reboot reboot reboot the target if set to `"1"';
+ do not reboot if set to `"0"' (the default)
+
+ --srcdir srcdir directory of test subdirectories
+
+ --strace tracelevel a number: Tcl trace depth
+
+ --tool tool name of tool to test; identifies init, test subdir
+
+ --verbose verbose verbosity level. As option, use multiple times;
+ as variable, set a number, 0 or greater
+ --target target_triplet The canonical configuration string for the target.
+ --host host_triplet The canonical configuration string for the host.
+ --build build_triplet The canonical configuration string for the
+ build host.
+
+\1f
+File: dejagnu.info, Node: Master Config File, Next: Local Config File, Prev: Config Values, Up: Customizing
+
+Master Config File
+------------------
+
+ The master config file is where all the target specific config
+variables get set for a whole site get set. The idea is that for a
+centralized testing lab where people have to share a target between
+multiple developers. There are settings for both remote targets and
+remote hosts. Here's an example of a Master Config File (also called
+the Global config file) for a *canadian cross*. A canadian cross is
+when you build and test a cross compiler on a machine other than the
+one it's to be hosted on.
+
+ Here we have the config settings for our California office. Note that
+all config values are site dependant. Here we have two sets of values
+that we use for testing m68k-aout cross compilers. As both of these
+target boards has a different debugging protocol, we test on both of
+them in sequence.
+
+ global CFLAGS
+ global CXXFLAGS
+
+ case "$target_triplet" in {
+ { "native" } {
+ set target_abbrev unix
+ }
+ { "m68*-unknown-aout" } {
+ set target_abbrev "rom68k"
+ # IDP target # IDP board with rom68k monitor
+ set target_info(idp,name) "idp"
+ set target_info(idp,ldflags) "-Tidp.ld"
+ set target_info(idp,config) m68k-unknown-aout
+ set target_info(idp,cflags) ""
+ set target_info(idp,connect) telnet
+ set target_info(idp,target) "s7"
+ set target_info(idp,serial) "tstty12"
+ set target_info(idp,netport) "truckin:1007"
+ set target_info(idp,baud) "9600"
+ # MVME target # Motorola MVME 135 with BUG monitor
+ set target_info(mvme,name) "mvme"
+ set target_info(mvme,ldflags) "-Tmvme.ld"
+ set target_info(mvme,config) m68k-unknown-aout
+ set target_info(mvme,cflags) ""
+ set target_info(mvme,connect) telnet
+ set target_info(mvme,target) "s4"
+ set target_info(mvme,serial) "tstty8"
+ set target_info(mvme,netport) "truckin:1004"
+ set target_info(mvme,baud) "9600"
+ }
+ }
+
+ In this case, we have support for several remote hosts for our
+m68k-aout cross compiler. Typically the remote Unix hosts run DejaGnu
+locally, but we also use them for debugging the testsuites when we find
+problems in running on remote hosts. Expect won't run on NT, so DejaGnu
+is run on the local build machine, and it'll connect to the NT host and
+run all the tests for this cross compiler on that host.
+
+ case "$host_triplet" in {
+ "native" {
+ }
+ "i?86-*-linux*" { # Linux host
+ set target_info(host,name) "linux-host"
+ set target_info(host,config) $host_triplet
+ set target_info(host,connect) rlogin
+ set target_info(host,target) chinadoll
+ }
+ "i?86-*-winnt # NT host
+ set target_info(host,name) "nt-host"
+ set target_info(host,config) i386-unknown-winnt
+ set target_info(host,connect) telnet
+ set target_info(host,target) ripple
+ }
+ "hppa*-hp-hpux*" { # HP-UX host
+ set target_info(host,name) "hpux-host"
+ set target_info(host,config) $host_triplet
+ set target_info(host,connect) rlogin
+ set target_info(host,target) slipknot
+ }
+ "sparc-sun-sunos*" { # SunOS (sun4)
+ set target_info(host,name) "sunos-host"
+ set target_info(host,config) $host_triplet
+ set target_info(host,connect) rlogin
+ set target_info(host,target) darkstar
+ }
+ }
+
+\1f
+File: dejagnu.info, Node: Local Config File, Next: Personal Config File, Prev: Master Config File, Up: Customizing
+
+Local Config File
+-----------------
+
+ It is usually more convenient to keep these "manual overrides" in the
+`site.exp' local to each test directory, rather than in the "master"
+`site.exp' in the DejaGnu library.
+
+ All local `site.exp' usually files have two sections, separated by
+comment text. The first section is the part that is generated by
+`make'. It is essentially a collection of Tcl variable definitions
+based on `Makefile' environment variables. Since they are generated by
+`make', they contain the values as specified by `configure'. (You can
+also customize these values by using the `--site' option to
+`configure'.) In particular, this section contains the `Makefile'
+variables for host and target configuration data. Do not edit this
+first section; if you do, your changes are replaced next time you run
+`make'.
+
+ The first section starts with:
+
+ ## these variables are automatically generated by make ##
+ # Do not edit here. If you wish to override these values
+ # add them to the last section
+
+ In the second section, you can override any default values (locally
+to DejaGnu) for all the variables. The second section can also contain
+your preferred defaults for all the command line options to `runtest'.
+This allows you to easily customize `runtest' for your preferences in
+each configured test-suite tree, so that you need not type options
+repeatedly on the command line. (The second section may also be empty,
+if you do not wish to override any defaults.)
+
+ The first section ends with this line:
+
+ ## All variables above are generated by configure. Do Not Edit ##
+
+ You can make any changes under this line. If you wish to redefine a
+variable in the top section, then just put a duplicate value in this
+second section. Usually the values defined in this config file are
+related to the configuration of the test run. This is the ideal place to
+set the variables `host_triplet', `build_triplet', `target_triplet'.
+All other variables are tool dependant. ie for testing a compiler, the
+value for CC might be set to a freshly built binary, as opposed to one
+in the user's path.
+
+\1f
+File: dejagnu.info, Node: Personal Config File, Prev: Local Config File, Up: Customizing
+
+Personal Config File
+--------------------
+
+ The personal config file is used to customize `runtest's' behaviour
+for each person. It's typically used to set the user prefered setting
+for verbosity, and any experimental Tcl procedures. My personal
+`~/.dejagnurc' file looks like:
+
+ set all_flag 1
+ set RLOGIN /usr/ucb/rlogin
+ set RSH /usr/ucb/rsh
+
+ Here I set `all_flag' so I see all the test cases that PASS along
+with the ones that FAIL. I also set RLOGIN and `RSH' to the BSD
+version. I have `kerberos' installed, and when I rlogin to a target
+board, it usually isn't supported. So I use the non secure versions of
+these programs rather than the default that's in my path.
+
+\1f
+File: dejagnu.info, Node: Internals, Next: Tests, Prev: Customizing, Up: Top
+
+The DejaGnu Implementation
+**************************
+
+ DejaGnu is entirely written in `expect', which uses Tcl as a command
+language. `expect' serves as a very programmable shell; you can run
+any program, as with the usual Unix command shells--but once the
+program is started, your `expect' script has fully programmable control
+of its input and output. This does not just apply to the programs
+under test; `expect' can also run any auxiliary program, such as `diff'
+or `sh', with full control over its input and output.
+
+ DejaGnu itself is merely a framework for the set of test suites
+distributed separately for each GNU tool. Future releases of GNU tools
+will include even more tests, developed throughout the free software
+community.
+
+ `runtest' is the glue to tie together and manage the test scripts.
+The `runtest' program is actually a simple Bourne shell script that
+locates a copy of the `expect' shell and then starts the main Tcl code,
+`runtest.exp'. `runtest.exp' itself has these essential functions:
+
+ 1. Parse the command line options, load the library files, and load
+ the default configuration files.
+
+ 2. Locating the individual test scripts. `runtest.exp' locates the
+ tests by exploiting a straightforward naming convention based on
+ the string you specify with the `--tool' option.
+
+ 3. Providing an extended test environment, by defining additional Tcl
+ procedures beyond those already in `expect'.
+
+ 4. Locating target-dependent functions, to standardize the test
+ environment across a wide variety of test platforms.
+
+* Menu:
+
+* Names:: Conventions for using tool names
+* Init Module:: Initialization module
+* DejaGnu Builtins:: DejaGnu provides these Tcl procedures
+* Target Dependent:: Procedures supplied by the init module
+* Cross Targets:: Remote targets supported
+* Input Files:: The files DejaGnu depends on
+* Output Files:: The files DejaGnu produces
+
--- /dev/null
+This is Info file dejagnu.info, produced by Makeinfo version 1.68 from
+the input file ./dejagnu.texi.
+
+START-INFO-DIR-ENTRY
+* DejaGnu: (dejagnu). The GNU testing framework.
+END-INFO-DIR-ENTRY
+
+ Copyright (C) 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+
+ Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+ Permission is granted to copy and distribute modified versions of
+this manual under the conditions for verbatim copying, provided also
+that the entire resulting derived work is distributed under the terms
+of a permission notice identical to this one.
+
+ Permission is granted to copy and distribute translations of this
+manual into another language, under the above conditions for modified
+versions.
+
+\1f
+File: dejagnu.info, Node: Names, Next: Init Module, Up: Internals
+
+Conventions for using tool names
+================================
+
+ DejaGnu uses `$tool', the name of the tool under test, to tie
+together the testing configuration in a straightforward but flexible
+way. If there is only one testsuite for a particular application, then
+`$tool' is optional.
+
+ `$tool' is *not* used to invoke the tool, since sites that run
+multiple configurations of a particular tool often call each
+configuration by a different name. `runtest' uses the
+configuration-dependent variables captured in `site.exp' to determine
+how to call each tool.
+
+ `runtest' uses tool names to find directories containing tests.
+`runtest' scans the source directory (specified with `--srcdir') for
+all directories whose names start with the tool name. It is a common
+practice to put a period after the tool part of the name. For instance,
+directories that start with `g++.' contain G++ tests. To add a new
+test, just put it in any directory (create an entirely new directory,
+if you wish) whose name follows this convention.
+
+ A test is any file in an appropriately named subdirectory whose name
+ends in `.exp' (the conventional way of naming `expect' scripts).
+These simple naming conventions make it as simple as possible to
+install new tests: all you must do is put the test in the right
+directory.
+
+ `runtest' sorts the tests in each subdirectory by name (using the
+Tcl `lsort' command) and runs them in the resulting order.
+
+\1f
+File: dejagnu.info, Node: Init Module, Next: DejaGnu Builtins, Prev: Names, Up: Internals
+
+Initialization module
+=====================
+
+ The initialization module (or "init file") has two purposes: to
+provide tool and target dependent procedures, and to start up an
+interactive tool to the point where it is ready to operate. The latter
+includes establishing communications with the target. All the tests for
+interactive programs assume that the tool is already running and
+communicating. Initialization modules for non-interactive programs may
+only need to supply the support functions.
+
+ Each test suite directory must contain (in its `config'
+subdirectory) a separate initialization module for each target. The
+appropriate init file is can be named several ways. The prefered name is
+the *os* part of the canonical configuration name with `.exp' as the
+suffix. An example would be that for an `m68k-coff' system, the
+`target_os' part would be `coff'. The next way is for system where
+there are short filenames, or a shortcut is desired to refer to the OS
+name for that target. This is uses the value of `$target_abbrev' rather
+than the `target_os'.
+
+ The final file looked for is simply `default.exp'. If there is only
+one operating system to support, then this file can be used. It's main
+purpose is to offer some support for new operating systems, or for
+unsupported cross targets. The last file looked for is `unknown.exp'.
+This is usually limited to error handling for unsupported targets. It's
+whole contents is typically.
+
+ perror "Sorry, there is no support for this target"
+ exit 1
+
+ At the beginning of the init file, you must first determine the
+proper executable name of the tool to execute, since the actual name of
+the tool to be tested my vary from system to system. Here's an example
+for the GNU C compiler.
+
+ global AR
+ # look for the archiver ar
+ if ![info exists AR] {
+ set AR [findfile $base_dir/../../binutils/ar $base_dir/../../binutils/ar [tr
+ ansform ar]]
+ verbose "AR defaulting to $AR" 2
+ }
+ }
+
+ global CFLAGS
+ if ![info exists CFLAGS] then {
+ set CFLAGS ""
+ }
+
+ It is always a good idea to first check the variable, and only set
+it if it has not yet been defined. Often the proper value of `AR' is
+set on the command line that invokes `runtest'.
+
+ The `findfile' procedure takes as it's first argument a file name to
+look for. The second argument is returned if the file is found, and the
+third argument is returned if the file is not found. `base_dir' is set
+internally by DejaGnu to the top level directory of the object tree.
+
+ The `transform' procedure takes as its argument the native name of a
+tool (such as `gcc' for the compiler), and returns the name as
+configured for that tool in the current installation. (For example, a
+cross-compiling version of GNU CC that generates MIPS code may be
+installed with a name like `mips-idt-ecoff-gcc'.)
+
+ In a test running native, writing the Tcl code for initialization is
+usually quite simple. For cross configurations, however, more elaborate
+instructions are usually needed to describe how to talk to a remote
+target.
+
+ Each initialization module defines up to four procedures with
+standard names and purposes. The names of these procedures begin with
+`$tool', the string that identifies tests for a particular tool:
+`$tool_start', `$tool_load', `$tool_exit', and `$tool_version'. For
+example, the start procedure for GDB is called `gdb_start'. (Since
+start procedures are used differently for batch and interactive tools,
+however, `runtest' itself never calls the start procedure. Init files
+for interactive tools are expected to end by running the start
+procedure.)
+
+ The initialization module is also a good place to call `load_lib' to
+get any collections of utility procedures meant for a family of test
+cases, and to set up default values for any additional Tcl variables
+needed for a specific set of tests.
+
+ *Note Target dependent procedures: Target Dependent, for full
+descriptions of these procedures.
+
+\1f
+File: dejagnu.info, Node: DejaGnu Builtins, Next: Target Dependent, Prev: Init Module, Up: Internals
+
+DejaGnu procedures
+==================
+
+ DejaGnu provides these Tcl procedures for use in test scripts. You
+can also use any standard `expect' or Tcl function. These procedures
+are stored in libraries, which DejaGnu loads at runtime. Here's
+explanation of the library procedures that get loaded at runtime. All
+other librarys are optional, and need to be loaded by the testsuite.
+
+* Menu:
+
+* framework.exp:: Core Internal Procedures.
+* remote.exp:: Procedures for remote communication.
+* utils.exp:: Utility procedures.
+* target.exp:: Cross target procedures.
+* debugger.exp:: Procedures for debugging your Tcl code.
+
+\1f
+File: dejagnu.info, Node: framework.exp, Next: remote.exp, Up: DejaGnu Builtins
+
+Core Internal Procedures
+------------------------
+
+ *Note A POSIX conforming test framework: Posix, for more detailed
+explanations of the test outcomes (`FAIL', `PASS', `UNTESTED',
+`UNRESOLVED', `UNSUPPORTED').
+
+`perror "STRING NUMBER"'
+ Declares a severe error in the testing framework itself. `perror'
+ writes in the log files a message beginning with `ERROR',
+ appending the argument STRING. If the optional NUMBER is supplied,
+ then this is used to set the internal count of errors to that
+ value.
+
+ As a side effect, `perror' also changes the effect of the next
+ `pass' or `fail' command: the test outcome becomes `UNRESOLVED',
+ since an automatic `PASS' or `FAIL' cannot be trusted after a
+ severe error in the test framework. If the optional numeric value
+ is `0', then there are no further side effects to calling this
+ function, and the following test outcome doesn't become
+ `UNRESOLVED'. This can be used for errors with no known side
+ effects.
+
+`warning "STRING NUMBER"'
+ Declares detection of a minor error in the test case itself.
+ `warning' writes in the log files a message beginning with
+ `WARNING', appending the argument STRING. Use `warning' rather
+ than `error' for cases (such as communication failure to be
+ followed by a retry) where the test case can recover from the
+ error. If the optional NUMBER is supplied, then this is used to
+ set the internal count of warnings to that value.
+
+ As a side effect, `warning_threshold' or more calls to `warning'
+ in a single test case also changes the effect of the next `pass'
+ or `fail' command: the test outcome becomes `UNRESOLVED' since an
+ automatic `PASS' or `FAIL' may not be trustworthy after many
+ warnings. If the optional numeric value is `0', then there are no
+ further side effects to calling this function, and the following
+ test outcome doesn't become `UNRESOLVED'. This can be used for
+ errors with no known side effects.
+
+`note "STRING"'
+ Appends an informational message to the log file. `note' writes
+ in the log files a message beginning with `NOTE', appending the
+ argument STRING. Use `note' sparingly. `verbose' should be used
+ for most such messages, but in cases where a message is needed in
+ the log file regardless of the verbosity level use `note'.
+
+`pass "STRING"'
+ Declares a test to have passed. `pass' writes in the log files a
+ message beginning with `PASS' (or `XPASS', if failure was
+ expected), appending the argument STRING.
+
+`fail "STRING"'
+ Declares a test to have failed. `fail' writes in the log files a
+ message beginning with `FAIL' (or `XFAIL', if failure was
+ expected), appending the argument STRING.
+
+`unresolved "STRING"'
+ Declares a test to have an unresolved outcome. `unresolved' writes
+ in the log file a message beginning with `UNRESOLVED', appending
+ the argument STRING. This usually means the test did not execute
+ as expected, and a human being must go over results to determine
+ if it passed or failed (and to improve the test case).
+
+`untested "STRING"'
+ Declares a test was not run. `untested' writes in the log file a
+ message beginning with `UNTESTED', appending the argument STRING.
+ For example, you might use this in a dummy test whose only role is
+ to record that a test does not yet exist for some feature.
+
+`unsupported "STRING"'
+ Declares that a test case depends on some facility that does not
+ exist in the testing environment. `unsupported' writes in the log
+ file a message beginning with `UNSUPPORTED', appending the argument
+ STRING.
+
+`get_warning_threshold'
+ Returns the current value of `warning_threshold'. The default
+ value is 3.
+
+`set_warning_threshold THRESHOLD'
+ Sets the value of `warning_threshold'. A value of `0' disables
+ it: calls to `warning' will not turn a `PASS' or `FAIL' into an
+ `UNRESOLVED'.
+
+`transform "TOOLNAME"'
+ Generates a string for the name of a tool as it was configured and
+ installed, given its native name (as the argument TOOLNAME). This
+ makes the assumption that all tools are installed using the same
+ naming conventions: it extrapolates from the invocation name for
+ `runtest'. For example, if you call `runtest' as
+ `m68k-vxworks-runtest', the result of ` transform "gcc" ' is
+ `m68k-vxworks-gcc'.
+
+`ishost "HOST"'
+ Tests for a particular *host* environment. If the currently
+ configured host matches the argument string, the result is `1';
+ otherwise the result is `0'. HOST must be a full three-part
+ `configure' host name; in particular, you may not use the shorter
+ nicknames supported by `configure' (but you can use wildcard
+ characters, using shell syntax, to specify sets of names).
+
+`istarget "TARGET"'
+ Tests for a particular *target* environment. If the currently
+ configured target matches the argument string, the result is `1';
+ otherwise the result is `0'. TARGET must be a full three-part
+ `configure' target name; in particular, you may not use the
+ shorter nicknames supported by `configure' (but you can use
+ wildcard characters, using shell syntax, to specify sets of
+ names). If it is passed a `NULL' string, then it returns the name
+ of the build canonical configuration.
+
+`isbuild "HOST"'
+ Tests for a particular *build host* environment. If the currently
+ configured host matches the argument string, the result is `1';
+ otherwise the result is `0'. HOST must be a full three-part
+ `configure' host name; in particular, you may not use the shorter
+ nicknames supported by `configure' (but you can use wildcard
+ characters, using shell syntax, to specify sets of names). If it is
+ passed a `NULL' string, then it returns the name of the build
+ canonical configuration.
+
+ item is3way "HOST" Tests for a canadian cross. This is when the
+ tests will be run on a remotly hosted cross compiler. If it is a
+ canadian cross, then the result is `1'; otherwise the result is
+ `0'.
+
+`isnative'
+ Tests whether the current configuration has the same host and
+ target. When it runs in a *native* configuration this procedure
+ returns a `1'; otherwise it returns a `0'.
+
+`load_lib "LIBRARY-FILE"'
+ Loads the file LIBRARY-FILE by searching a fixed path built into
+ `runtest'. If DejaGnu has been installed, it looks in a path
+ starting with the installed library directory. If you are running
+ DejaGnu directly from a source directory, without first running
+ `make install', this path defaults to the current directory. In
+ either case, it then looks in the current directory for a directory
+ called `lib'. If there are duplicate definitions, the last one
+ loaded takes precedence over the earlier ones.
+
+`setup_xfail "CONFIG [BUGID]"'
+ Declares that the test is expected to fail on a particular set of
+ configurations. The CONFIG argument must be a list of full
+ three-part `configure' target name; in particular, you may not use
+ the shorter nicknames supported by `configure' (but you can use the
+ common shell wildcard characters to specify sets of names). The
+ BUGID argument is optional, and used only in the logging file
+ output; use it as a link to a bug-tracking system such as GNATS
+ (*note Overview: (gnats.info)Overview.).
+
+ Once you use `setup_xfail', the `fail' and `pass' procedures
+ produce the messages `XFAIL' and `XPASS' respectively, allowing
+ you to distinguish expected failures (and unexpected success!)
+ from other test outcomes.
+
+ *Warning:* you must clear the expected failure after using
+ `setup_xfail' in a test case. Any call to `pass' or `fail' clears
+ the expected failure implicitly; if the test has some other
+ outcome, e.g. an error, you can call `clear_xfail' to clear the
+ expected failure explicitly. Otherwise, the expected-failure
+ declaration applies to whatever test runs next, leading to
+ surprising results.
+
+`clear_xfail CONFIG'
+ Cancel an expected failure (previously declared with `setup_xfail')
+ for a particular set of configurations. The CONFIG argument is a
+ list of configuration target names. It is only necessary to call
+ `clear_xfail' if a test case ends without calling either `pass' or
+ `fail', after calling `setup_xfail'.
+
+`verbose [-log] [-n] [--] "STRING" NUMBER'
+ Test cases can use this function to issue helpful messages
+ depending on the number of `--verbose' options on the `runtest'
+ command line. It prints STRING if the value of the variable
+ `verbose' is higher than or equal to the optional NUMBER. The
+ default value for NUMBER is 1. Use the optional `-log' argument
+ to cause STRING to always be added to the log file, even if it
+ won't be printed. Use the optional `-n' argument to print STRING
+ without a trailing newline. Use the optional `--' argument if
+ STRING begins with "-".
+
+\1f
+File: dejagnu.info, Node: remote.exp, Next: utils.exp, Prev: framework.exp, Up: DejaGnu Builtins
+
+Remote Communication Procedures
+-------------------------------
+
+`lib/remote.exp' defines these functions, for establishing and managing
+communications:
+
+ *Procedures to establish a connection:* Each of these procedures
+tries to establish the connection up to three times before returning.
+Warnings (if retries will continue) or errors (if the attempt is
+abandoned) report on communication failures. The result for any of
+these procedures is either `-1', when the connection cannot be
+established, or the spawn ID returned by the `expect' command `spawn'.
+
+ It use the value of the `connect' field in the `target_info' array
+(was `connectmode' as the type of connection to make. Current supported
+connection types are tip, kermit, telnet, rsh, rlogin, and netdata. If
+the `--reboot' option was used on the runtest command line, then the
+target is rebooted before the connection is made.
+
+`remote_open TYPE'
+ *Remote Connection Procedure.* This is passed *host* or *target*.
+ Host or target refers to whether it is a connection to a remote
+ target, or a remote host. This opens the connection to the desired
+ target or host using the default values in the configuration
+ system. It returns that `spawn_id' of the process that manages the
+ connection. This value can be used in `expect' or `exp_send'
+ statements, or passed to other procedures that need the connection
+ process's id. This also sets the `fileid' field in the
+ `target_info' array.
+
+`remote_close SHELLID'
+ *shellid* is value returned by a call to `remote_open'. This
+ closes the connection to the target so resources can be used by
+ others. This parameter can be left off if the `fileid' field in the
+ `target_info' array is set.
+
+`telnet HOSTNAME PORT'
+`rlogin HOSTNAME'
+`rsh HOSTNAME'
+ *IP network procedures.* HOSTNAME refers to the IP address or name
+ (for example, an entry in `/etc/hosts') for this target. The
+ procedure names reflect the Unix utility used to establish a
+ connection. The optional PORT is used to specify the IP port
+ number. The value of the `netport' field in the `target_info'
+ array is used. (was `$netport') This value has two parts, the
+ hostname and the port number, seperated by a *:*. If `host' or
+ `target' is used in the `hostname' field, than the config array is
+ used for all information.
+
+`tip PORT'
+ *Serial line procedure.* Connect using the Unix utility `tip'.
+ PORT must be a name from the `tip' configuration file
+ `/etc/remote'. Often, this is called `hardwire', or something
+ like `ttya'. This file holds all the configuration data for the
+ serial port. The value of the `serial' field in the `target_info'
+ array is used. (was `$serialport') If `host' or `target' is used
+ in the `port' field, than the config array is used for all
+ information.
+
+`kermit PORT BPS'
+ *Serial line procedure.* Connect using the program `kermit'.
+ PORT is the device name, e.g. `/dev/ttyb'. BPS is the line speed
+ to use (in bits per second) for the connection. The value of the
+ `serial' field in the `target_info' array is used. (was
+ `$serialport') If `host' or `target' is used in the `port' field,
+ than the config array is used for all information.
+
+*Procedures to manage a connection:*
+
+`tip_download SPAWNID FILE'
+ Download `FILE' to the process SPAWNID (the value returned when
+ the connection was established), using the `~put' command under
+ `tip'. Most often used for single board computers that require
+ downloading programs in ASCII S-records. Returns `1' if an error
+ occurs, `0' otherwise.
+
+`exit_remote_shell SPAWNID'
+ Exits a remote process started by any of the connection procedures.
+ SPAWNID is the result of the connection procedure that started the
+ remote process.
+
+`download FILE [ SPAWNID ]'
+ After you establish a connection to a target, you can download
+ programs using this command. `download' reads in FILE (object
+ code in S-record format) and writes it to the device controlling
+ this SPAWNID. (From the point of view of the target, the S-record
+ file comes in via standard input.)
+
+ If you have more than one target active, you can use the optional
+ argument SPAWNID to specify an alternative target (the default is
+ the most recently established SPAWNID.)
+
+\1f
+File: dejagnu.info, Node: utils.exp, Next: target.exp, Prev: remote.exp, Up: DejaGnu Builtins
+
+Utility Procedures
+------------------
+
+`lib/utils.exp' defines these utility procedures:
+
+`getdirs DIR'
+`getdirs DIR PATTERN'
+ Returns a list of all the directories in the single directory DIR
+ that match PATTERN. If you do not specify PATTERN, `getdirs'
+ assumes `*'. You may use the common shell wildcard characters in
+ PATTERN. If no directories match the pattern, then a `NULL' string
+ is returned.
+
+`find DIR PATTERN'
+ Search for files whose names match PATTERN (using shell wildcard
+ characters for filename expansion). Search subdirectories
+ recursively, starting at DIR. The result is the list of files
+ whose names match; if no files match, the result is empty.
+ Filenames in the result include all intervening subdirectory
+ names. If no files match the pattern, then a `NULL' string is
+ returned.
+
+`which BINARY'
+ Searches the execution path for an executable file BINARY, like
+ the the BSD `which' utility. This procedure uses the shell
+ environment variable `PATH'. It returns `0' if the binary is not
+ in the path, or if there is no `PATH' environment variable. If
+ BINARY is in the path, it returns the full path to BINARY.
+
+`grep FILENAME REGEXP'
+
+`grep FILENAME REGEXP line'
+ Search the file called FILENAME (a fully specified path) for lines
+ that contain a match for regular expression REGEXP. The result is
+ a list of all the lines that match. If no lines match, the result
+ is an empty string. Specify REGEXP using the standard regular
+ expression style used by the Unix utility program `grep'.
+
+ Use the optional third argument `line' to start lines in the result
+ with the line number in FILENAME. (This argument is simply an
+ option flag; type it just as shown--`line'.)
+
+`diff FILENAME FILENAME'
+ Compares the two files and returns a 1 if they match, or a 0 if
+ they don't. If `verbose' is set, then it'll print the differences
+ to the screen.
+
+`slay NAME'
+ This look in the process tabel for NAME and send it a unix
+ `SIGINT', killing the process.
+
+`absolute PATH'
+ This procedure takes the relative PATH, and converts it to an
+ absolute path.
+
+`psource FILENAME'
+ This sources the file FILENAME, and traps all errors. It also
+ ignores all extraneous output. If there was an error it returns a
+ 1, otherwise it returns a 0.
+
+`prune LIST PATTERN'
+ Remove elements of the Tcl list LIST. Elements are fields
+ delimited by spaces. The result is a copy of LIST, without any
+ elements that match PATTERN. You can use the common shell
+ wildcard characters to specify PATTERN.
+
+`setenv VAR VAL'
+ Sets the variable VAR to the value VAL.
+
+`unsetenv VAR'
+ Unsets the environment variable VAR
+
+`getenv VAR'
+ returns the value of VAR in the environment if it exists,
+ otherwise it returns `NULL'.
+
+`runtest_file_p RUNTESTS TESTCASE'
+ Search RUNTESTS for TESTCASE and return 1 if found, 0 if not.
+ RUNTESTS is a list of two elements. The first is the pathname of
+ the testsuite expect script running. The second is a copy of what
+ was on the right side of the `=' if `foo.exp="..."' was specified,
+ or an empty string if no such argument is present. This is used
+ by tools like compilers where each testcase is a file.
+
+`prune_system_crud SYSTEM TEXT'
+ For system SYSTEM, delete text the host or target operating system
+ might issue that will interfere with pattern matching of program
+ output in TEXT. An example is the message that is printed if a
+ shared library is out of date.
+
+\1f
+File: dejagnu.info, Node: target.exp, Next: debugger.exp, Prev: utils.exp, Up: DejaGnu Builtins
+
+Cross target procedure
+----------------------
+
+`lib/target.exp' defines these utility procedures:
+
+`push_target *name*'
+ This makes the target named *name* be the current target
+ connection. The value of *name* is an index into the `target_info'
+ array and is set in the global config file.
+
+`pop_target'
+ This unsets the current target connection.
+
+`list_targets'
+ This lists all the supported targets for this architecture.
+
+`push_host *name*'
+ This makes the host named *name* be the current remote host
+ connection. The value of *name* is an index into the `target_info'
+ array and is set in the global config file.
+
+`pop_host'
+ This unsets the current host connection.
+
+ This invokes the compiler as set by `CC' to compile the file
+ *file*. The default options for many cross compilation targets are
+ *guessed* by DejaGnu, and these options can be added to by passing
+ in more parameters as arguments to `compile'. Optionally, this will
+ also use the value of the `cflags' field in the target config
+ array. If the host is not the same as the build machines, then then
+ compiler is run on the remote host using `execute_anywhere'.
+
+ This produces an archive file. Any parameters passed to `archive'
+ are used in addition to the default flags. Optionally, this will
+ also use the value of the `arflags' field in the target config
+ array. If the host is not the same as the build machines, then then
+ archiver is run on the remote host using `execute_anywhere'.
+
+ This generates an index for the archive file for systems that
+ aren't POSIX yet. Any parameters passed to `ranlib' are used in
+ for the flags.
+
+`execute_anywhere *cmdline*'
+ This executes the *cmdline* on the proper host. This should be used
+ as a replacement for the Tcl command `exec' as this version
+ utilizes the target config info to execute this command on the
+ build machine or a remote host. All config information for the
+ remote host must be setup to have this command work. If this is a
+ canadian cross, (where we test a cross compiler that runs on a
+ different host then where DejaGnu is running) then a connection is
+ made to the remote host and the command is executed there. It
+ returns either *REMOTERROR* (for an error) or the output produced
+ when the command was executed. This is used for running the tool
+ to be tested, not a test case.
+
+\1f
+File: dejagnu.info, Node: debugger.exp, Prev: target.exp, Up: DejaGnu Builtins
+
+Debugging Procedures
+--------------------
+
+ `lib/debugger.exp' defines these utility procedures:
+
+`dumpvars *expr*'
+ This takes a csh style regular expression (glob rules) and prints
+ the values of the global variable names that match. It is
+ abbreviated as `dv'
+
+`dumplocals *expr*'
+ This takes a csh style regular expression (glob rules) and prints
+ the values of the local variable names that match. It is
+ abbreviated as `dl'.
+
+`dumprocs *expr*'
+ This takes a csh style regular expression (glob rules) and prints
+ the body of all procs that match. It is abbreviated as `dp'
+
+`dumpwatch *expr*'
+ This takes a csh style regular expression (glob rules) and prints
+ all the watchpoints. It is abbreviated as `dw'.
+
+`watchunset *var*'
+ This breaks program execution when the variable *var* is unset. It
+ is abbreviated as `wu'.
+
+`watchwrite *var*'
+ This breaks program execution when the variable *var* is written.
+ It is abbreviated as `ww'.
+
+`watchread *var*'
+ This breaks program execution when the variable *var* is read. It
+ is abbreviated as `wr'.
+
+`watchdel *watch*'
+ This deletes a the watchpoint for *watch*. It is abbreviated as
+ `wd'.
+
+`print *var*'
+ This prints the value of the variable *var*. It is abbreviated as
+ `p'.
+
+`quit'
+ This makes runtest exit. It is abbreviated as `q'.
+
+`bt'
+ This prints a backtrace of the executed Tcl commands.
+
+\1f
+File: dejagnu.info, Node: Target Dependent, Next: Cross Targets, Prev: DejaGnu Builtins, Up: Internals
+
+Target dependent procedures
+===========================
+
+ Each combination of target and tool requires some target-dependent
+procedures. The names of these procedures have a common form: the tool
+name, followed by an underbar `_', and finally a suffix describing the
+procedure's purpose. For example, a procedure to extract the version
+from GDB is called `gdb_version'. *Note Initialization Module: Init
+Module, for a discussion of how DejaGnu arranges to find the right
+procedures for each target.
+
+ `runtest' itself calls only two of these procedures, `TOOL_exit' and
+`TOOL_version'; these procedures use no arguments.
+
+ The other two procedures, `TOOL_start' and `TOOL_load', are only
+called by the test suites themselves (or by testsuite-specific
+initialization code); they may take arguments or not, depending on the
+conventions used within each test suite.
+
+`TOOL_start'
+ Starts a particular tool. For an interactive tool, `TOOL_start'
+ starts and initializes the tool, leaving the tool up and running
+ for the test cases; an example is `gdb_start', the start function
+ for GDB. For a batch oriented tool, `TOOL_start' is optional; the
+ recommended convention is to let `TOOL_start' run the tool,
+ leaving the output in a variable called `comp_output'. Test
+ scripts can then analyze `$comp_output' to determine the test
+ results. An example of this second kind of start function is
+ `gcc_start', the start function for GCC.
+
+ `runtest' itself *does not call* `TOOL_start'. The initialization
+ module `TOOL_init.exp' must call `TOOL_start' for interactive
+ tools; for batch-oriented tools, each individual test script calls
+ `TOOL_start' (or makes other arrangements to run the tool).
+
+`TOOL_load'
+ Loads something into a tool. For an interactive tool, this
+ conditions the tool for a particular test case; for example,
+ `gdb_load' loads a new executable file into the debugger. For
+ batch oriented tools, `TOOL_load' may do nothing--though, for
+ example, the GCC support uses `gcc_load' to load and run a binary
+ on the target environment. Conventionally, `TOOL_load' leaves the
+ output of any program it runs in a variable called `exec_output'.
+ Writing `TOOL_load' can be the most complex part of extending
+ DejaGnu to a new tool or a new target, if it requires much
+ communication coding or file downloading.
+
+ Test scripts call `TOOL_load'.
+
+`TOOL_exit'
+ Cleans up (if necessary) before `runtest' exits. For interactive
+ tools, this usually ends the interactive session. You can also use
+ `TOOL_exit' to remove any temporary files left over from the tests.
+
+ `runtest' calls `TOOL_exit'.
+
+`TOOL_version'
+ Prints the version label and number for TOOL. This is called by
+ the DejaGnu procedure that prints the final summary report. The
+ output should consist of the full path name used for the tested
+ tool, and its version number.
+
+ `runtest' calls `TOOL_version'.
+
+ The usual convention for return codes from any of these procedures
+(although it is not required by `runtest') is to return `0' if the
+procedure succeeded, `1' if it failed, and `-1' if there was a
+communication error.
+
+\1f
+File: dejagnu.info, Node: Cross Targets, Next: Input Files, Prev: Target Dependent, Up: Internals
+
+Remote targets supported
+========================
+
+ The DejaGnu distribution includes support for the following remote
+targets. You can set the target name and the connect mode in the
+`site.exp' file (using the Tcl variables `targetname' and
+`connectmode', respectively), or on the `runtest' command line (using
+`--name' and `--connect').
+
+*AMD 29000, with UDI protocol*
+ Configure DejaGnu for target `a29k-amd-udi'. (Cygnus `configure'
+ also recognizes the abbreviation `udi29k'.) Then, to run tests,
+ use the `runtest' target name to specify whether you want to use a
+ simulator, or a particular hardware board. The particular string
+ to use with `--name' will depend on your UDI setup file, `udi_soc'
+ (if `udi_soc' is not in your working directory, the environment
+ variable `UDICONF' should contain a path to this file). For
+ example, if your UDI setup file includes these lines:
+
+ iss AF_UNIX * isstip -r /home/gnu/29k/src/osboot/sim/osboot
+ mon AF_UNIX * montip -t serial -baud 9600 -com /dev/ttyb
+
+* *
+ You can use `--name iss' to run tests on the simulator, and
+ `--name mon' to run tests on the 29K hardware. See the
+ manufacturer's manuals for more information on UDI and `udi_soc'.
+
+ The default connect protocol is `mondfe' with either back end.
+ `mondfe' is the only shell DejaGnu supports for UDI targets.
+ `mondfe' is an AMD specific monitor program freely available from
+ AMD.
+
+ *Warning:* This target requires GDB version 4.7.2 (or greater).
+ Earlier versions of GDB do not fully support the `load' command on
+ this target, so DejaGnu has no way to load executable files from
+ the debugger.
+
+*Motorola 680x0 boards, a.out or COFF object format*
+ Configure DejaGnu for any remote target matching `m68k-*'.
+
+ *Warning:* Most `m68k-*' configurations run all tests only for
+ native testing (when the target is the same as the host). When you
+ specify most of these targets for a cross configuration, you will
+ only be able to use tests that run completely within the host (for
+ example, tests of the binary utilities such as the archiver; or
+ compiler tests that only generate code rather than running it).
+
+ To run a.out or COFF binaries on a remote M68K, you must configure
+ DejaGnu for a particular target board. `m68k-abug' is an example.
+ (In general for an embedded environment, because it does not have
+ absolute addresses, a.out is not a good choice for output format
+ in any case; most often S-records or Hex-32 are used instead.)
+
+*Motorola 68K MVME 135 board running ABug boot monitor*
+ Configure for `m68k-abug-aout' or `m68k-abug-coff' (as a target).
+ This boot monitor can only download S-records; therefore, the
+ DejaGnu tests for this environment require a linker command script
+ to convert either output format to S-records, setting the default
+ addresses for `.text', `.bss', and `.data'.
+
+ With this configuration, the default for `--connect' is `tip'.
+ `tip' is the only communications protocol supported for connecting
+ to `m68k-abug-*' targets. `tip' uses an ASCII downloader (the
+ `~put' command) to load S-records into the target board. The
+ `--name' string must be a machine name that `tip' understands (for
+ example, on some `tip' implementations it must be an entry from
+ the initialization file for `tip'; this file is sometimes called
+ `/etc/remote').
+
+ See your system documentation for information on how to create new
+ entries in `/etc/remote'. (Some UNIX systems are distributed with
+ at least one default entry with a name resembling `hardwire'; if
+ your system has one, you can edit it, or make a modified copy with
+ a new name.) When you have a working `/etc/remote' entry
+ ABUGTARGET, you should be able to type `tip ABUGTARGET', and get
+ the prompt `135ABUG>' from the board. Use the same ABUGTARGET
+ string with `runtest --name'.
+
+*Motorola IDP board running the rom68k boot monitor*
+ This is the same in functionality as the MVME board running the
+ `BUG' boot monitor. Only the monitor commands and the addresses are
+ different.
+
+*VxWorks (Motorola 68K or Intel 960)*
+ Configure DejaGnu for either `m68k-wrs-vxworks' (abbreviated
+ `vxworks68') or `i960-wrs-vxworks' (abbreviated `vxworks960').
+ Since both targets support IP addressing, specify the network
+ address (for example, a host name from `/etc/hosts') with `--name'.
+
+ The default connect protocol is `rlogin', but you can use any of
+ `--connect rlogin', `--connect telnet', or `--connect rsh'.
+
+ Test scripts need no special code to load programs into these
+ targets; since VxWorks supports NFS, all you must do is ensure
+ test programs are on an exported filesystem.
+
+ When you compile for VxWorks, use the linker `-r' option to make
+ the linker output relocatable--at least if you want to use library
+ routines. Many standard C routines are included in VxWorks; often
+ no additional libraries are needed. See your VxWorks system
+ documentation for additional details.
+
+\1f
+File: dejagnu.info, Node: Input Files, Next: Output Files, Prev: Cross Targets, Up: Internals
+
+The files DejaGnu reads
+=======================
+
+ The `runtest' program used to invoke DejaGnu is a short shell script
+generated by `make' during the configuration process. Its main task is
+to read the main test framework driver, `runtest.exp'.
+
+ `runtest.exp', in turn, reads `expect' code from certain other
+files, in this order:
+
+ 1. Each of the `site.exp' local definition files available. *Note
+ Setting `runtest' defaults: Customizing, for details.
+
+ 2. `lib/utils.exp', a collection of utility procedures. *Note
+ DejaGnu Builtins: DejaGnu Builtins, for descriptions of these
+ procedures.
+
+ 3. `lib/framework.exp', a file of subroutines meant for `runtest'
+ itself rather than for general-purpose use in both `runtest' and
+ test suites.
+
+ 4. `debugger.exp', Don Libes' Tcl Debugger. (See `A Debugger for Tcl
+ Applications' by Don Libes. This paper is distributed with
+ `expect' in PostScript form as the file `expect/tcl-debug.ps'.)
+
+ 5. `lib/remote.exp', a collection of subroutines meant for connecting
+ to remote machines.
+
+ 6. `lib/target.exp', a collection of subroutines used for the
+ configuration systems in DejaGnu. These procedures typically
+ manipulate or utilize the configuration system.
+
+ 7. An initialization file `TOOL_init.exp'. *Note Initialization
+ module: Init Module, for more discussion of init files.
+
+\1f
+File: dejagnu.info, Node: Output Files, Prev: Input Files, Up: Internals
+
+The files DejaGnu writes
+========================
+
+ `runtest' always writes two kinds of output files: summary logs and
+detailed logs. The contents of both of these are determined by your
+tests.
+
+ For troubleshooting, a third kind of output file is useful: use
+`--debug' to request an output file showing details of what `expect' is
+doing internally.
+
+* Menu:
+
+* Summary:: Files that summarize tests
+* Detail:: Files that contain complete test results
+* Debug:: Logging expect internal actions
+
+\1f
+File: dejagnu.info, Node: Summary, Next: Detail, Up: Output Files
+
+Summary log
+-----------
+
+ `runtest' always produces a summary output file `TOOL.sum'. This
+summary shows the names of all test files run; for each test file, one
+line of output from each `pass' command (showing status `PASS' or
+`XPASS') or `fail' command (status `FAIL' or `XFAIL'); trailing summary
+statistics that count passing and failing tests (expected and
+unexpected); and the full pathname and version number of the tool
+tested. (All possible outcomes, and all errors, are always reflected in
+the summary output file, regardless of whether or not you specify
+`--all'.)
+
+ If any of your tests use the procedures `unresolved', `unsupported',
+or `untested', the summary output also tabulates the corresponding
+outcomes.
+
+ For example, after `runtest --tool binutils', look for a summary log
+in `binutils.sum'. Normally, `runtest' writes this file in your
+current working directory; use the `--outdir' option to select a
+different directory.
+
+Here is a short sample summary log:
+
+ Test Run By rob on Mon May 25 21:40:57 PDT 1992
+ === gdb tests ===
+ Running ./gdb.t00/echo.exp ...
+ PASS: Echo test
+ Running ./gdb.all/help.exp ...
+ PASS: help add-symbol-file
+ PASS: help aliases
+ PASS: help breakpoint "bre" abbreviation
+ FAIL: help run "r" abbreviation
+ Running ./gdb.t10/crossload.exp ...
+ PASS: m68k-elf (elf-big) explicit format; loaded
+ XFAIL: mips-ecoff (ecoff-bigmips) "ptype v_signed_char" signed
+ C types
+ === gdb Summary ===
+ # of expected passes 5
+ # of expected failures 1
+ # of unexpected failures 1
+ /usr/latest/bin/gdb version 4.6.5 -q
+
+\1f
+File: dejagnu.info, Node: Detail, Next: Debug, Prev: Summary, Up: Output Files
+
+Detailed log
+------------
+
+ `runtest' also saves a detailed log file `TOOL.log', showing any
+output generated by tests as well as the summary output. For example,
+after `runtest --tool binutils', look for a detailed log in
+`binutils.log'. Normally, `runtest' writes this file in your current
+working directory; use the `--outdir' option to select a different
+directory.
+
+Here is a brief example showing a detailed log for G++ tests:
+
+ Test Run By rob on Mon May 25 21:40:43 PDT 1992
+
+ === g++ tests ===
+
+ --- Running ./g++.other/t01-1.exp ---
+ PASS: operate delete
+
+ --- Running ./g++.other/t01-2.exp ---
+ FAIL: i960 bug EOF
+ p0000646.C: In function `int warn_return_1 ()':
+ p0000646.C:109: warning: control reaches end of non-void function
+ p0000646.C: In function `int warn_return_arg (int)':
+ p0000646.C:117: warning: control reaches end of non-void function
+ p0000646.C: In function `int warn_return_sum (int, int)':
+ p0000646.C:125: warning: control reaches end of non-void function
+ p0000646.C: In function `struct foo warn_return_foo ()':
+ p0000646.C:132: warning: control reaches end of non-void function
+
+ --- Running ./g++.other/t01-4.exp ---
+ FAIL: abort
+ 900403_04.C:8: zero width for bit-field `foo'
+ --- Running ./g++.other/t01-3.exp ---
+ FAIL: segment violation
+ 900519_12.C:9: parse error before `;'
+ 900519_12.C:12: Segmentation violation
+ /usr/latest/bin/gcc: Internal compiler error: program cc1plus got
+ fatal signal
+
+ === g++ Summary ===
+
+ # of expected passes 1
+ # of expected failures 3
+ /usr/ps/bin/g++ version cygnus-2.0.1
+
+\1f
+File: dejagnu.info, Node: Debug, Prev: Detail, Up: Output Files
+
+Logging `expect' internal actions
+---------------------------------
+
+ With the `--debug' option, you can request a log file showing the
+output from `expect' itself, running in debugging mode. This file
+(`dbg.log', in the directory where you start `runtest') shows each
+pattern `expect' considers in analyzing test output.
+
+ This file reflects each `send' command, showing the string sent as
+input to the tool under test; and each `expect' command, showing each
+pattern it compares with the tool output.
+
+ The log messages for `expect' begin with a message of the form
+
+ expect: does {TOOL OUTPUT} (spawn_id N) match pattern
+ {EXPECTED PATTERN}?
+
+For every unsuccessful match, `expect' issues a `no' after this
+message; if other patterns are specified for the same `expect' command,
+they are reflected also, but without the first part of the message
+(`expect...match pattern').
+
+ When `expect' finds a match, the log for the successful match ends
+with `yes', followed by a record of the `expect' variables set to
+describe a successful match. Here is an excerpt from the debugging log
+for a GDB test:
+
+ send: sent {break gdbme.c:34\n} to spawn id 6
+ expect: does {} (spawn_id 6) match pattern {Breakpoint.*at.* file
+ gdbme.c, line 34.*\(gdb\) $}? no
+ {.*\(gdb\) $}? no
+ expect: does {} (spawn_id 0) match pattern {<return>}? no
+ {\(y or n\) }? no
+ {buffer_full}? no
+ {virtual}? no
+ {memory}? no
+ {exhausted}? no
+ {Undefined}? no
+ {command}? no
+ break gdbme.c:34
+ Breakpoint 8 at 0x23d8: file gdbme.c, line 34.
+ (gdb) expect: does {break gdbme.c:34\r\nBreakpoint 8 at 0x23d8:
+ file gdbme.c, line 34.\r\n(gdb) } (spawn_id 6) match pattern
+ {Breakpoint.*at.* file gdbme.c, line 34.*\(gdb\) $}? yes
+ expect: set expect_out(0,start) {18}
+ expect: set expect_out(0,end) {71}
+ expect: set expect_out(0,string) {Breakpoint 8 at 0x23d8: file
+ gdbme.c, line 34.\r\n(gdb) }
+ expect: set expect_out(spawn_id) {6}
+ expect: set expect_out(buffer) {break gdbme.c:34\r\nBreakpoint 8
+ at 0x23d8: file gdbme.c, line 34.\r\n(gdb) }
+ PASS: 70 0 breakpoint line number in file
+
+This example exhibits three properties of `expect' and DejaGnu that
+might be surprising at first glance:
+
+ * Empty output for the first attempted match. The first set of
+ attempted matches shown ran against the output `{}'--that is, no
+ output. `expect' begins attempting to match the patterns supplied
+ immediately; often, the first pass is against incomplete output (or
+ completely before all output, as in this case).
+
+ * Interspersed tool output. The beginning of the log entry for the
+ second attempted match may be hard to spot: this is because the
+ prompt `(gdb) ' appears on the same line, just before the `expect:'
+ that marks the beginning of the log entry.
+
+ * Fail-safe patterns. Many of the patterns tested are fail-safe
+ patterns provided by GDB testing utilities, to reduce possible
+ indeterminacy. It is useful to anticipate potential variations
+ caused by extreme system conditions (GDB might issue the message
+ `virtual memory exhausted' in rare circumstances), or by changes in
+ the tested program (`Undefined command' is the likeliest outcome if
+ the name of a tested command changes).
+
+ The pattern `{<return>}' is a particularly interesting fail-safe
+ to notice; it checks for an unexpected <RET> prompt. This may
+ happen, for example, if the tested tool can filter output through a
+ pager.
+
+ These fail-safe patterns (like the debugging log itself) are
+ primarily useful while developing test scripts. Use the `error'
+ procedure to make the actions for fail-safe patterns produce
+ messages starting with `ERROR' on the `runtest' standard output,
+ and in the detailed log file.
+
+\1f
+File: dejagnu.info, Node: Tests, Next: Extending, Prev: Internals, Up: Top
+
+How To Write a Test Case
+************************
+
+* Menu:
+
+* Writing:: Writing a test case
+* Debugging:: Debugging a test case
+* Adding:: Adding a test case to a test suite
+* Hints:: Hints on writing a test case
+* Variables:: Special variables used by test cases
+
+\1f
+File: dejagnu.info, Node: Writing, Next: Debugging, Up: Tests
+
+Writing a test case
+===================
+
+ The easiest way to prepare a new test case is to base it on an
+existing one for a similar situation. There are two major categories
+of tests: batch or interactive. Batch oriented tests are usually
+easier to write.
+
+ The GCC tests are a good example of batch oriented tests. All GCC
+tests consist primarily of a call to a single common procedure, since
+all the tests either have no output, or only have a few warning
+messages when successfully compiled. Any non-warning output is a test
+failure. All the C code needed is kept in the test directory. The test
+driver, written in `expect', need only get a listing of all the C files
+in the directory, and compile them all using a generic procedure. This
+procedure and a few others supporting for these tests are kept in the
+library module `lib/c-torture.exp' in the GCC test suite. Most tests
+of this kind use very few `expect' features, and are coded almost
+purely in Tcl.
+
+Writing the complete suite of C tests, then, consisted of these steps:
+
+ 1. Copying all the C code into the test directory. These tests were
+ based on the C-torture test created by Torbjorn Granlund (on
+ behalf of the Free Software Foundation) for GCC development.
+
+ 2. Writing (and debugging) the generic `expect' procedures for
+ compilation.
+
+ 3. Writing the simple test driver: its main task is to search the
+ directory (using the Tcl procedure `glob' for filename expansion
+ with wildcards) and call a Tcl procedure with each filename. It
+ also checks for a few errors from the testing procedure.
+
+ Testing interactive programs is intrinsically more complex. Tests
+for most interactive programs require some trial and error before they
+are complete.
+
+ However, some interactive programs can be tested in a simple fashion
+reminiscent of batch tests. For example, prior to the creation of
+DejaGnu, the GDB distribution already included a wide-ranging testing
+procedure. This procedure was very robust, and had already undergone
+much more debugging and error checking than many recent DejaGnu test
+cases. Accordingly, the best approach was simply to encapsulate the
+existing GDB tests, for reporting purposes. Thereafter, new GDB tests
+built up a family of `expect' procedures specialized for GDB testing.
+
+ `gdb.t10/crossload.exp' is a good example of an interactive test.
+
--- /dev/null
+This is Info file dejagnu.info, produced by Makeinfo version 1.68 from
+the input file ./dejagnu.texi.
+
+START-INFO-DIR-ENTRY
+* DejaGnu: (dejagnu). The GNU testing framework.
+END-INFO-DIR-ENTRY
+
+ Copyright (C) 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+
+ Permission is granted to make and distribute verbatim copies of this
+manual provided the copyright notice and this permission notice are
+preserved on all copies.
+
+ Permission is granted to copy and distribute modified versions of
+this manual under the conditions for verbatim copying, provided also
+that the entire resulting derived work is distributed under the terms
+of a permission notice identical to this one.
+
+ Permission is granted to copy and distribute translations of this
+manual into another language, under the above conditions for modified
+versions.
+
+\1f
+File: dejagnu.info, Node: Debugging, Next: Adding, Prev: Writing, Up: Tests
+
+Debugging a test case
+=====================
+
+These are the kinds of debugging information available from DejaGnu:
+
+ 1. Output controlled by test scripts themselves, explicitly allowed
+ for by the test author. This kind of debugging output appears in
+ the detailed output recorded in the `TOOL.log' file. To do the
+ same for new tests, use the `verbose' procedure (which in turn
+ uses the variable also called `verbose') to control how much
+ output to generate. This will make it easier for other people
+ running the test to debug it if necessary. Whenever possible, if
+ `$verbose' is `0', there should be no output other than the output
+ from `pass', `fail', `error', and `warning'. Then, to whatever
+ extent is appropriate for the particular test, allow successively
+ higher values of `$verbose' to generate more information. Be kind
+ to other programmers who use your tests: provide for a lot of
+ debugging information.
+
+ 2. Output from the internal debugging functions of Tcl and `expect'.
+ There is a command line options for each; both forms of debugging
+ output are recorded in the file `dbg.log' in the current directory.
+
+ Use `--debug' for information from the `expect' level; it
+ generates displays of the `expect' attempts to match the tool
+ output with the patterns specified (*note Debug Log: Debug.). This
+ output can be very helpful while developing test scripts, since it
+ shows precisely the characters received. Iterating between the
+ latest attempt at a new test script and the corresponding
+ `dbg.log' can allow you to create the final patterns by "cut and
+ paste". This is sometimes the best way to write a test case.
+
+ Use `--strace' to see more detail at the Tcl level; this shows how
+ Tcl procedure definitions expand, as they execute. The associated
+ number controls the depth of definitions expanded; see the
+ discussion of `--strace' in *Note Running the Tests: Invoking
+ runtest.
+
+ 3. Finally, if the value of `verbose' is 3 or greater, `runtest'
+ turns on the `expect' command `log_user'. This command prints all
+ `expect' actions to the `expect' standard output, to the detailed
+ log file, and (if `--debug' is on) to `dbg.log'.
+
+\1f
+File: dejagnu.info, Node: Adding, Next: Hints, Prev: Debugging, Up: Tests
+
+Adding a test case to a test suite
+==================================
+
+ There are two slightly different ways to add a test case. One is to
+add the test case to an existing directory. The other is to create a new
+directory to hold your test. The existing test directories represent
+several styles of testing, all of which are slightly different; examine
+the directories for the tool of interest to see which (if any) is most
+suitable.
+
+ Adding a GCC test can be very simple: just add the C code to any
+directory beginning with `gcc.' and it runs on the next `runtest --tool
+gcc'.
+
+ To add a test to GDB, first add any source code you will need to the
+test directory. Then you can either create a new `expect' file, or add
+your test to an existing one (any file with a `.exp' suffix). Creating
+a new `.exp' file is probably a better idea if the test is
+significantly different from existing tests. Adding it as a separate
+file also makes upgrading easier. If the C code has to be already
+compiled before the test will run, then you'll have to add it to the
+`Makefile.in' file for that test directory, then run `configure' and
+`make'.
+
+ Adding a test by creating a new directory is very similar:
+
+ 1. Create the new directory. All subdirectory names begin with the
+ name of the tool to test; e.g. G++ tests might be in a directory
+ called `g++.other'. There can be multiple test directories that
+ start with the same tool name (such as `g++').
+
+ 2. Add the new directory name to the `configdirs' definition in the
+ `configure.in' file for the test suite directory. This way when
+ `make' and `configure' next run, they include the new directory.
+
+ 3. Add the new test case to the directory, as above.
+
+ 4. To add support in the new directory for configure and make, you
+ must also create a `Makefile.in' and a `configure.in'. *Note What
+ Configure Does: (configure.info)What Configure Does.
+
+\1f
+File: dejagnu.info, Node: Hints, Next: Variables, Prev: Adding, Up: Tests
+
+Hints on writing a test case
+============================
+
+ There may be useful existing procedures already written for your
+test in the `lib' directory of the DejaGnu distribution. *Note DejaGnu
+Builtins: DejaGnu Builtins.
+
+ It is safest to write patterns that match *all* the output generated
+by the tested program; this is called "closure". If a pattern does not
+match the entire output, any output that remains will be examined by
+the *next* `expect' command. In this situation, the precise boundary
+that determines which `expect' command sees what is very sensitive to
+timing between the `expect' task and the task running the tested tool.
+As a result, the test may sometimes appear to work, but is likely to
+have unpredictable results. (This problem is particularly likely for
+interactive tools, but can also affect batch tools--especially for
+tests that take a long time to finish.) The best way to ensure closure
+is to use the `-re' option for the `expect' command to write the
+pattern as a full regular expressions; then you can match the end of
+output using a `$'. It is also a good idea to write patterns that
+match all available output by using `.*\' after the text of interest;
+this will also match any intervening blank lines. Sometimes an
+alternative is to match end of line using `\r' or `\n', but this is
+usually too dependent on terminal settings.
+
+ Always escape punctuation, such as `(' or `"', in your patterns; for
+example, write `\('. If you forget to escape punctuation, you will
+usually see an error message like `extra characters after close-quote'.
+
+ If you have trouble understanding why a pattern does not match the
+program output, try using the `--debug' option to `runtest', and
+examine the debug log carefully. *Note Debug Log: Debug.
+
+ Be careful not to neglect output generated by setup rather than by
+the interesting parts of a test case. For example, while testing GDB,
+I issue a send `set height 0\n' command. The purpose is simply to make
+sure GDB never calls a paging program. The `set height' command in GDB
+does not generate any output; but running *any* command makes GDB issue
+a new `(gdb) ' prompt. If there were no `expect' command to match this
+prompt, the output `(gdb) ' begins the text seen by the next `expect'
+command--which might make *that* pattern fail to match.
+
+ To preserve basic sanity, I also recommended that no test ever pass
+if there was any kind of problem in the test case. To take an extreme
+case, tests that pass even when the tool will not spawn are misleading.
+Ideally, a test in this sort of situation should not fail either.
+Instead, print an error message by calling one of the DejaGnu procedures
+`error' or `warning'.
+
+\1f
+File: dejagnu.info, Node: Variables, Prev: Hints, Up: Tests
+
+Special variables used by test cases
+====================================
+
+ Your test cases can use these variables, with conventional meanings
+(as well as the variables saved in `site.exp' *note Setting `runtest'
+defaults: Customizing.):
+
+ *These variables are available to all test cases.*
+
+`prms_id'
+ The tracking system (e.g. GNATS) number identifying a corresponding
+ bugreport. (`0' if you do not specify it in the test script.)
+
+`bug_id'
+ An optional bug id; may reflect a bug identification from another
+ organization. (`0' if you do not specify it.)
+
+`subdir'
+ The subdirectory for the current test case.
+
+ *These variables should never be changed. They appear in most
+ tests.*
+
+`expect_out(buffer)'
+ The output from the last command. This is an internal variable set
+ by `expect'.
+
+`exec_output'
+ This is the output from a `TOOL_load' command. This only applies
+ to tools like GCC and GAS which produce an object file that must
+ in turn be executed to complete a test.
+
+`comp_output'
+ This is the output from a `TOOL_start' command. This is
+ conventionally used for batch oriented programs, like GCC and GAS,
+ that may produce interesting output (warnings, errors) without
+ further interaction.
+
+\1f
+File: dejagnu.info, Node: Extending, Next: Installation, Prev: Tests, Up: Top
+
+New Tools, Targets, or Hosts
+****************************
+
+ The most common ways to extend the DejaGnu framework are: adding a
+suite of tests for a new tool to be tested; adding support for testing
+on a new target; and porting `runtest' to a new host.
+
+* Menu:
+
+* Adding Tools:: How to add tests for a new tool
+* Adding Targets:: How to add a new target
+* Porting:: Porting DejaGnu to a new host
+
+\1f
+File: dejagnu.info, Node: Adding Tools, Next: Adding Targets, Up: Extending
+
+Writing tests for a new tool
+============================
+
+ In general, the best way to learn how to write (code or even prose)
+is to read something similar. This principle applies to test cases and
+to test suites. Unfortunately, well-established test suites have a way
+of developing their own conventions: as test writers become more
+experienced with DejaGnu and with Tcl, they accumulate more utilities,
+and take advantage of more and more features of `expect' and Tcl in
+general.
+
+ Inspecting such established test suites may make the prospect of
+creating an entirely new test suite appear overwhelming. Nevertheless,
+it is quite straightforward to get a new test suite going.
+
+ There is one test suite that is guaranteed not to grow more elaborate
+over time: both it and the tool it tests were created expressly to
+illustrate what it takes to get started with DejaGnu. The `example/'
+directory of the DejaGnu distribution contains both an interactive tool
+called `calc', and a test suite for it. Reading this test suite, and
+experimenting with it, is a good way to supplement the information in
+this section. (Thanks to Robert Lupton for creating `calc' and its
+test suite--and also the first version of this section of the manual!)
+
+ To help orient you further in this task, here is an outline of the
+steps to begin building a test suite for a program EXAMPLE.
+
+ 1. Create or select a directory to contain your new collection of
+ tests. Change to that directory (shown here as `testsuite'):
+
+ eg$ cd testsuite/
+
+ 2. Create a `configure.in' file in this directory, to control
+ configuration-dependent choices for your tests. So far as DejaGnu
+ is concerned, the important thing is to set a value for the
+ variable `target_abbrev'; this value is the link to the init file
+ you will write soon. (For simplicity, we assume the environment
+ is Unix, and use `unix' as the value.)
+
+ What else is needed in `configure.in' depends on the requirements
+ of your tool, your intended test environments, and which
+ `configure' system you use. This example is a minimal
+ `configure.in' for use with Cygnus Configure. (For an alternative
+ based on the FSF `autoconf' system, see the `calc' example
+ distributed with DejaGnu.) Replace EXAMPLE with the name of your
+ program:
+
+ # This file is a shell script fragment
+ # for use with Cygnus configure.
+
+ srctrigger="EXAMPLE.0"
+ srcname="The DejaGnu EXAMPLE tests"
+
+ # per-host:
+
+ # per-target:
+
+ # everything defaults to unix for a target
+ target_abbrev=unix
+
+ # post-target:
+
+ 3. Create `Makefile.in', the source file used by `configure' to build
+ your `Makefile'. Its leading section should as usual contain the
+ values that `configure' may override:
+
+ srcdir = .
+ prefix = /usr/local
+
+ exec_prefix = $(prefix)
+ bindir = $(exec_prefix)/bin
+ libdir = $(exec_prefix)/lib
+ tooldir = $(libdir)/$(target_alias)
+
+ datadir = $(exec_prefix)/lib/dejagnu
+
+ RUNTEST = runtest
+ RUNTESTFLAGS =
+ FLAGS_TO_PASS =
+
+ #### host, target, site specific Makefile frags come in here.
+
+ This should be followed by the standard targets at your site. To
+ begin with, they need not do anything--for example, these
+ definitions will do:
+
+
+ all:
+
+ info:
+
+ install-info:
+
+ install:
+ uninstall:
+
+ clean:
+ -rm -f *~ core *.info*
+
+ It is also a good idea to make sure your `Makefile' can rebuild
+ itself if `Makefile.in' changes, with a target like this (which
+ works for either Cygnus or FSF Configure):
+
+ Makefile : $(srcdir)/Makefile.in $(host_makefile_frag) \
+ $(target_makefile_frag)
+ $(SHELL) ./config.status
+
+ You also need to include two targets important to DejaGnu: `check',
+ to run the tests, and `site.exp', to set up the Tcl copies of
+ configuration-dependent values. The `check' target must run
+ `runtest --tool EXAMPLE':
+
+ check: site.exp all
+ $(RUNTEST) $(RUNTESTFLAGS) $(FLAGS_TO_PASS) \
+ --tool EXAMPLE --srcdir $(srcdir)
+
+ The `site.exp' target should usually set up (among other things!) a
+ Tcl variable for the name of your program:
+
+ site.exp: ./config.status Makefile
+ @echo "Making a new config file..."
+ -@rm -f ./tmp?
+ @touch site.exp
+
+ -@mv site.exp site.bak
+ @echo "## these variables are automatically\
+ generated by make ##" > ./tmp0
+ @echo "# Do not edit here. If you wish to\
+ override these values" >> ./tmp0
+ @echo "# add them to the last section" >> ./tmp0
+ @echo "set host_os ${host_os}" >> ./tmp0
+ @echo "set host_alias ${host_alias}" >> ./tmp0
+ @echo "set host_cpu ${host_cpu}" >> ./tmp0
+ @echo "set host_vendor ${host_vendor}" >> ./tmp0
+ @echo "set target_os ${target_os}" >> ./tmp0
+ @echo "set target_alias ${target_alias}" >> ./tmp0
+ @echo "set target_cpu ${target_cpu}" >> ./tmp0
+ @echo "set target_vendor ${target_vendor}" >> ./tmp0
+ @echo "set host_triplet ${host_canonical}" >> ./tmp0
+ @echo "set target_triplet ${target_canonical}">>./tmp0
+ @echo "set tool binutils" >> ./tmp0
+ @echo "set srcdir ${srcdir}" >> ./tmp0
+ @echo "set objdir `pwd`" >> ./tmp0
+ @echo "set EXAMPLENAME EXAMPLE" >> ./tmp0
+ @echo "## All variables above are generated by\
+ configure. Do Not Edit ##" >> ./tmp0
+ @cat ./tmp0 > site.exp
+ @sed < site.bak \
+ -e '1,/^## All variables above are.*##/ d' \
+ >> site.exp
+ -@rm -f ./tmp?
+
+ 4. Create a directory (in `testsuite/') called `config/':
+
+ eg$ mkdir config
+
+ 5. Make an init file in this directory; its name must start with the
+ `target_abbrev' value, so call it `config/unix.exp'. This is the
+ file that contains the target-dependent procedures; fortunately,
+ most of them do not have to do very much in order for `runtest' to
+ run.
+
+ If EXAMPLE is not interactive, you can get away with this minimal
+ `unix.exp' to begin with:
+
+ proc foo_exit {} {}
+ proc foo_version {} {}
+
+ If EXAMPLE is interactive, however, you might as well define a
+ start routine *and invoke it* by using an init file like this:
+
+ proc foo_exit {} {}
+ proc foo_version {} {}
+
+ proc foo_start {} {
+ global EXAMPLENAME
+ spawn $EXAMPLENAME
+ expect {
+ -re "" {}
+ }
+ }
+ foo_start
+
+ 6. Create a directory whose name begins with your tool's name, to
+ contain tests:
+
+ eg$ mkdir EXAMPLE.0
+
+ 7. Create a sample test file in `EXAMPLE.0'. Its name must end with
+ `.exp'; you can use `first-try.exp' To begin with, just write
+ there a line of Tcl code to issue a message:
+
+ send_user "Testing: one, two...\n"
+
+ 8. Back in the `testsuite/' (top level) directory, run
+
+ eg$ configure
+
+ (You may have to specify more of a path, if a suitable `configure'
+ is not available in your execution path.)
+
+ 9. You are now ready to triumphantly type `make check' or `runtest
+ --tool EXAMPLE'. You should see something like this:
+
+ Test Run By rhl on Fri Jan 29 16:25:44 EST 1993
+
+ === EXAMPLE tests ===
+
+ Running ./EXAMPLE.0/first-try.exp ...
+ Testing: one, two...
+
+ === EXAMPLE Summary ===
+
+ There is no output in the summary, because so far the example does
+ not call any of the procedures that establish a test outcome.
+
+ 10. Begin writing some real tests. For an interactive tool, you should
+ probably write a real exit routine in fairly short order; in any
+ case, you should also write a real version routine soon.
+
+\1f
+File: dejagnu.info, Node: Adding Targets, Next: Porting, Prev: Adding Tools, Up: Extending
+
+Adding a target
+===============
+
+ DejaGnu has some additional requirements for target support, beyond
+the general-purpose provisions of Cygnus `configure'. `runtest' must
+actively communicate with the target, rather than simply generating or
+managing code for the target architecture. Therefore, each tool
+requires an initialization module for each target. For new targets, you
+must supply a few Tcl procedures to adapt DejaGnu to the target. This
+permits DejaGnu itself to remain target independent. *Note
+Initialization module: Init Module, for a discussion of the naming
+conventions that enable DejaGnu to locate and use init files.
+
+ Usually the best way to write a new initialization module is to edit
+an existing initialization module; some trial and error will be
+required. If necessary, you can use the `--debug' option to see what
+is really going on.
+
+ When you code an initialization module, be generous in printing
+information controlled by the `verbose' procedure (*note DejaGnu
+procedures: DejaGnu Builtins.).
+
+ Most of the work is in getting the communications right.
+Communications code (for several situations involving IP networks or
+serial lines) is available in a DejaGnu library file, `lib/remote.exp'.
+*Note DejaGnu Builtins: DejaGnu Builtins.
+
+ If you suspect a communication problem, try running the connection
+interactively from `expect'. (There are three ways of running `expect'
+as an interactive interpreter. You can run `expect' with no arguments,
+and control it completely interactively; or you can use `expect -i'
+together with other command-line options and arguments; or you can run
+the command `interpreter' from any `expect' procedure. Use `return' to
+get back to the calling procedure (if any), or `return -tcl' to make
+the calling procedure itself return to its caller; use `exit' or
+end-of-file to leave `expect' altogether.) Run the program whose name
+is recorded in `$connectmode', with the arguments in `$targetname', to
+establish a connection. You should at least be able to get a prompt
+from any target that is physically connected.
+
+\1f
+File: dejagnu.info, Node: Porting, Prev: Adding Targets, Up: Extending
+
+Porting to a new host
+=====================
+
+ The task of porting DejaGnu is basically that of porting Tcl and
+`expect'. Tcl and `expect', as distributed with DejaGnu, both use
+`autoconf'; they should port automatically to most Unix systems.
+
+ Once Tcl and `expect' are ported, DejaGnu should run. Most system
+dependencies are taken care of by using `expect' as the main command
+shell.
+
+\1f
+File: dejagnu.info, Node: Installation, Next: Index, Prev: Extending, Up: Top
+
+Installing DejaGnu
+******************
+
+ Once you have the DejaGnu source unpacked and available, you must
+first configure the software to specify where it is to run (and the
+associated defaults); then you can proceed to installing it.
+
+* Menu:
+
+* Configuring DejaGnu::
+* Installing DejaGnu::
+
+\1f
+File: dejagnu.info, Node: Configuring DejaGnu, Next: Installing DejaGnu, Up: Installation
+
+Configuring the DejaGnu test driver
+===================================
+
+ It is usually best to configure in a directory separate from the
+source tree, specifying where to find the source with the optional
+`--srcdir' option to `configure'. DejaGnu uses the GNU `autoconf' to
+configure itself. For more info on using autoconf, read the GNU
+autoconf manual. To configure, execute the `configure' program, no
+other options are required. For an example, to configure in a seperate
+tree for objects, execute the configure script from the source tree
+like this:
+
+ ../dejagnu-1.3/configure
+
+ DejaGnu doesn't care at config time if it's for testing a native
+system or a cross system. That is determined at runtime by using the
+config files.
+
+ You may also want to use the `configure' option `--prefix' to
+specify where you want DejaGnu and its supporting code installed. By
+default, installation is in subdirectories of `/usr/local', but you can
+select any alternate directory ALTDIR by including `--prefix=ALTDIR' on
+the `configure' command line. (This value is captured in the Makefile
+variables `prefix' and `exec_prefix'.)
+
+ Save for a small number of example tests, the DejaGnu distribution
+itself does not include any test suites; these are available separately.
+Test suites for the GNU compiler (testing both GCC and G++) and for the
+GNU binary utilities are distributed in parallel with the DejaGnu
+distribution (but packaged as separate files). The test suite for the
+GNU debugger is distributed in parallel with each release of GDB
+itself, starting with GDB 4.9. After configuring the top-level DejaGnu
+directory, unpack and configure the test directories for the tools you
+want to test; then, in each test directory, run `make' to build
+auxiliary programs required by some of the tests.
+
+\1f
+File: dejagnu.info, Node: Installing DejaGnu, Prev: Configuring DejaGnu, Up: Installation
+
+Installing DejaGnu
+==================
+
+ To install DejaGnu in your filesystem (either in `/usr/local', or as
+specified by your `--prefix' option to `configure'), execute
+
+ eg$ make install
+
+`make install' does these things for DejaGnu:
+
+ 1. Look in the path specified for executables (`$exec_prefix') for
+ directories called `lib' and `bin'. If these directories do not
+ exist, `make install' creates them.
+
+ 2. Create another directory in the `lib' directory, called `dejagnu'.
+
+ 3. Copy the `runtest' shell script into `$exec_prefix/bin'.
+
+ 4. Copy all the library files (used to support the framework) into
+ `$exec_prefix/lib/dejagnu'.
+
+ 5. Copy `runtest.exp' into `$exec_prefix/lib/dejagnu'. This is the
+ main Tcl code implementing DejaGnu.
+
+
+ Each test suite collection comes with simple installation
+instructions in a `README' file; in general, the test suites are
+designed to be unpacked in the source directory for the corresponding
+tool, and extract into a directory called `testsuite'.
+
+\1f
+File: dejagnu.info, Node: Index, Prev: Installation, Up: Top
+
+Index
+*****
+
+* Menu:
+
+* --all (runtest option): Invoking runtest.
+* --baud (runtest option): Invoking runtest.
+* --build (runtest option): Invoking runtest.
+* --connect (runtest option): Invoking runtest.
+* --debug (runtest option): Invoking runtest.
+* --help (runtest option): Invoking runtest.
+* --host (runtest option): Invoking runtest.
+* --name (runtest option): Invoking runtest.
+* --objdir (runtest option): Invoking runtest.
+* --outdir (runtest option): Invoking runtest.
+* --reboot (runtest option): Invoking runtest.
+* --srcdir (runtest option): Invoking runtest.
+* --strace (runtest option): Invoking runtest.
+* --target (runtest option): Invoking runtest.
+* --tool (runtest option): Invoking runtest.
+* --tool and naming conventions: Names.
+* --verbose (runtest option): Invoking runtest.
+* --version (runtest option): Invoking runtest.
+* -b (runtest option): Invoking runtest.
+* -V (runtest option): Invoking runtest.
+* -v (runtest option): Invoking runtest.
+* .exp: Overview.
+* absolute PATH: utils.exp.
+* adding a target: Adding Targets.
+* adding a test case: Adding.
+* all_flag: Config Values.
+* ambiguity, required for POSIX: Posix.
+* archive object files: target.exp.
+* auxiliary files, building: Running Tests.
+* auxiliary programs: Configuring DejaGnu.
+* auxiliary test programs: Invoking runtest.
+* baud: Config Values.
+* baud rate, specifying: Invoking runtest.
+* bps, specifying: Invoking runtest.
+* bt: debugger.exp.
+* bug number: Variables.
+* bug number, extra: Variables.
+* bug_id: Variables.
+* build config name, changing: Invoking runtest.
+* build host configuration test: framework.exp.
+* build_triplet: Config Values.
+* built in procedures, DejaGnu: DejaGnu Builtins.
+* C torture test: Writing.
+* canadian cross configuration test: framework.exp.
+* cancelling expected failure: framework.exp.
+* check makefile target: Running Tests.
+* clear_xfail CONFIG: framework.exp.
+* Closing a remote connection: remote.exp.
+* command line option variables: Config Values.
+* command line options: Invoking runtest.
+* command line Tcl variable definition: Invoking runtest.
+* communications procedures: remote.exp.
+* comp_output: Variables.
+* comparing files: utils.exp.
+* compile a file: target.exp.
+* configuration dependent defaults: Config Values.
+* configuring DejaGnu: Installation.
+* connecting to target: Invoking runtest.
+* connectmode: Config Values.
+* converting relative paths to absolute: utils.exp.
+* Core Internal Procedures: framework.exp.
+* cross configuration: Running Tests.
+* current test subdirectory: Variables.
+* dbg.log file: Invoking runtest.
+* debug log: Debug.
+* debug log for test cases: Invoking runtest.
+* debugger.exp: debugger.exp.
+* debugging a test case: Debugging.
+* default options, controlling: Config Values.
+* defaults, option: Config Values.
+* defaults, setting in init file: Init Module.
+* DejaGnu configuration: Installation.
+* DejaGnu test driver: Invoking runtest.
+* DejaGnu, the name: Design Goals.
+* Delete a watchpoint.: debugger.exp.
+* design goals: Design Goals.
+* detailed log: Detail.
+* diff FILENAME FILENAME: utils.exp.
+* directories matching a pattern: utils.exp.
+* directory names and --tool: Names.
+* download a file: remote.exp.
+* download FILE [ SPAWNID ]: remote.exp.
+* download, tip: remote.exp.
+* dumplocals *expr*: debugger.exp.
+* dumprocs *expr*: debugger.exp.
+* dumpvars *expr*: debugger.exp.
+* dumpwatch *expr*: debugger.exp.
+* echo.exp: Sample Test.
+* ERROR <1>: framework.exp.
+* ERROR: Invoking runtest.
+* example: Sample Test.
+* exec_output: Variables.
+* exec_prefix, configure options.: Configuring DejaGnu.
+* execute_anywhere *cmdline*: target.exp.
+* executing commands remotely: target.exp.
+* existing tests, running: Running Tests.
+* exit code from runtest: Invoking runtest.
+* exit procedure, tested tools: Target Dependent.
+* exit_remote_shell SPAWNID: remote.exp.
+* exp filename suffix: Names.
+* expect internal tracing: Invoking runtest.
+* expect script names: Overview.
+* expect scripting language: Tcl and Expect.
+* expect_out(buffer): Variables.
+* expected failure <1>: framework.exp.
+* expected failure: Invoking runtest.
+* expected failure, cancelling: framework.exp.
+* FAIL <1>: Invoking runtest.
+* FAIL: Posix.
+* fail "STRING": framework.exp.
+* failing test, expected: Invoking runtest.
+* failing test, unexpected: Invoking runtest.
+* failure, expected: framework.exp.
+* failure, POSIX definition: Posix.
+* filename for test files: Names.
+* files matching a pattern: utils.exp.
+* find DIR PATTERN: utils.exp.
+* findfile: Init Module.
+* finding file differences: utils.exp.
+* future directions: Future Directions.
+* gdb.t00/echo.exp: Sample Test.
+* get_warning_threshold: framework.exp.
+* getdirs DIR: utils.exp.
+* getdirs DIR PATTERN: utils.exp.
+* getenv VAR: utils.exp.
+* getting environment variables: utils.exp.
+* GNATS bug number: Variables.
+* Granlund, Torbjorn: Writing.
+* grep FILENAME REGEXP: utils.exp.
+* grep FILENAME REGEXP line: utils.exp.
+* help with runtest: Invoking runtest.
+* hints on test case writing: Hints.
+* host config name, changing: Invoking runtest.
+* host configuration test: framework.exp.
+* host, explained: Installation.
+* host_triplet: Config Values.
+* ignoretests: Config Values.
+* init file name: Init Module.
+* init file, purpose: Init Module.
+* initialization: Init Module.
+* input files: Input Files.
+* installed tool name: framework.exp.
+* installing DejaGnu: Installing DejaGnu.
+* internal details: Internals.
+* invoking: Invoking runtest.
+* IP network procedures: remote.exp.
+* isbuild "HOST": framework.exp.
+* ishost "HOST": framework.exp.
+* isnative: framework.exp.
+* istarget "TARGET": framework.exp.
+* kermit PORT BPS: remote.exp.
+* kermit, remote testing via: Invoking runtest.
+* last command output: Variables.
+* lib/debugger.exp: debugger.exp.
+* lib/remote.exp: remote.exp.
+* lib/target.exp: target.exp.
+* lib/utils.exp: utils.exp.
+* Libes, Don: Tcl and Expect.
+* list, pruning: utils.exp.
+* list_targets: target.exp.
+* lists supported targets: target.exp.
+* load library file: framework.exp.
+* load procedure, tested tools: Target Dependent.
+* load_lib "LIBRARY-FILE": framework.exp.
+* local site.exp: Local Config File.
+* log files, where to write: Invoking runtest.
+* Lupton, Robert: Adding Tools.
+* make builds part of tests: Configuring DejaGnu.
+* make check: Running Tests.
+* master site.exp: Master Config File.
+* Menapace, Julia: Design Goals.
+* mondfe: Cross Targets.
+* mondfe, remote testing via: Invoking runtest.
+* name "DejaGnu": Design Goals.
+* name for remote test machine: Invoking runtest.
+* name transformations: framework.exp.
+* name, initialization module: Init Module.
+* naming conventions: Names.
+* naming tests to run: Invoking runtest.
+* native configuration: Running Tests.
+* native configuration test: framework.exp.
+* network (IP) procedures: remote.exp.
+* NOTE <1>: framework.exp.
+* NOTE: Invoking runtest.
+* note "STRING": framework.exp.
+* objdir: Config Values.
+* object directory: Invoking runtest.
+* Opening a remote connection: remote.exp.
+* operating principles: Internals.
+* option defaults: Config Values.
+* option list, runtest: Invoking runtest.
+* options: Invoking runtest.
+* options for runtest, common: Running Tests.
+* options, Tcl variables for defaults: Config Values.
+* order of tests: Names.
+* Ousterhout, John K.: Tcl and Expect.
+* outdir: Config Values.
+* output directory: Invoking runtest.
+* output files: Output Files.
+* output, additional: Invoking runtest.
+* overriding site.exp: Customizing.
+* overview: Overview.
+* PASS <1>: Invoking runtest.
+* PASS: Posix.
+* pass "STRING": framework.exp.
+* path lookup: utils.exp.
+* pattern match, directory: utils.exp.
+* pattern match, filenames: utils.exp.
+* perror "STRING NUMBER": framework.exp.
+* personal config site.exp: Personal Config File.
+* pop_host: target.exp.
+* pop_target: target.exp.
+* porting to a new host: Porting.
+* POSIX conformance: Posix.
+* prefix, configure options: Configuring DejaGnu.
+* print *var*: debugger.exp.
+* Print a backtrace: debugger.exp.
+* Print global variable values: debugger.exp.
+* Print local variable value: debugger.exp.
+* Print procedure bodies: debugger.exp.
+* Print watchpoints: debugger.exp.
+* Printing variable values: debugger.exp.
+* PRMS bug number: Variables.
+* prms_id: Variables.
+* problem, detected by test case: Invoking runtest.
+* prune LIST PATTERN: utils.exp.
+* prune_system_crud SYSTEM TEXT: utils.exp.
+* pruning system output, examining program output: utils.exp.
+* psource FILENAME: utils.exp.
+* push_host *name*: target.exp.
+* push_target *name*: target.exp.
+* quit: debugger.exp.
+* Quiting DejaGnu: debugger.exp.
+* ranlib a file: target.exp.
+* reboot: Config Values.
+* rebooting remote targets: Invoking runtest.
+* regular expression, file contents: utils.exp.
+* remote connection procedures: remote.exp.
+* remote connection, ending: remote.exp.
+* remote test machine name: Invoking runtest.
+* remote testbed, connecting to: Invoking runtest.
+* remote testing: Cross Targets.
+* remote testing via kermit: Invoking runtest.
+* remote testing via mondfe: Invoking runtest.
+* remote testing via rlogin: Invoking runtest.
+* remote testing via rsh: Invoking runtest.
+* remote testing via telnet: Invoking runtest.
+* remote testing via tip: Invoking runtest.
+* remote.exp: remote.exp.
+* remote_close SHELLID: remote.exp.
+* remote_open TYPE: remote.exp.
+* rlogin HOSTNAME: remote.exp.
+* rlogin, remote testing via: Invoking runtest.
+* rsh HOSTNAME: remote.exp.
+* rsh, remote testing via: Invoking runtest.
+* running: Invoking runtest.
+* running tests: Running Tests.
+* runtest description: Invoking runtest.
+* runtest exit code: Invoking runtest.
+* runtest option defaults: Config Values.
+* runtest option list: Invoking runtest.
+* runtest, listing options: Invoking runtest.
+* runtest, most common options: Running Tests.
+* runtest, variable defns on cmdline: Invoking runtest.
+* runtest.exp: Internals.
+* runtest_file_p RUNTESTS TESTCASE: utils.exp.
+* runtests: Config Values.
+* searching file contents: utils.exp.
+* selecting a range of tests <1>: utils.exp.
+* selecting a range of tests: Invoking runtest.
+* selecting tests for a tool: Invoking runtest.
+* serial download, tip: remote.exp.
+* serial line connection, kermit: remote.exp.
+* serial line connection, tip: remote.exp.
+* set current host: target.exp.
+* set current target: target.exp.
+* set_warning_threshold THRESHOLD: framework.exp.
+* setenv VAR VAL: utils.exp.
+* setting defaults for DejaGnu variables: Config Values.
+* setting environment variables: utils.exp.
+* setting up targets: Init Module.
+* setup_xfail "CONFIG [BUGID]": framework.exp.
+* site.exp: Customizing.
+* site.exp for all of DejaGnu: Master Config File.
+* site.exp for each person: Personal Config File.
+* site.exp for each tool: Local Config File.
+* site.exp, multiple: Customizing.
+* slay NAME: utils.exp.
+* slaying processes: utils.exp.
+* source directory: Invoking runtest.
+* sourcing Tcl files: utils.exp.
+* special variables: Variables.
+* specifying target name: Invoking runtest.
+* specifying the build config name: Invoking runtest.
+* specifying the host config name: Invoking runtest.
+* specifying the target configuration: Invoking runtest.
+* srcdir: Config Values.
+* standard conformance: POSIX 1003.3: Posix.
+* start procedure, tested tools: Target Dependent.
+* starting interactive tools: Init Module.
+* starting the tcl debugger: Invoking runtest.
+* subdir: Variables.
+* success, POSIX definition: Posix.
+* successful test: Invoking runtest.
+* successful test, unexpected: Invoking runtest.
+* suffix, expect scripts: Overview.
+* summary log: Summary.
+* target configuration test: framework.exp.
+* target configuration, specifying: Invoking runtest.
+* target dependent procedures: Target Dependent.
+* target machine name: Invoking runtest.
+* target, explained: Installation.
+* target.exp: target.exp.
+* target_triplet: Config Values.
+* targetname: Config Values.
+* targets: Cross Targets.
+* tcl: Tcl and Expect.
+* tcl debugger: Invoking runtest.
+* Tcl variables for option defaults: Config Values.
+* Tcl variables, defining for runtest: Invoking runtest.
+* TCLVAR=VALUE: Invoking runtest.
+* telnet HOSTNAME PORT: remote.exp.
+* telnet, remote testing via: Invoking runtest.
+* terminating remote connection: remote.exp.
+* test case cannot run: Invoking runtest.
+* test case messages: Invoking runtest.
+* test case warnings: Invoking runtest.
+* test case, debugging: Debugging.
+* test case, declaring ambiguity: framework.exp.
+* test case, declaring failure: framework.exp.
+* test case, declaring no support: framework.exp.
+* test case, declaring no test: framework.exp.
+* test case, declaring success: framework.exp.
+* test case, ERROR in: framework.exp.
+* test case, expecting failure: framework.exp.
+* test case, informational messages: framework.exp.
+* test case, WARNING in: framework.exp.
+* test case, WARNING threshold: framework.exp.
+* test case, writing: Tests.
+* test cases, debug log: Invoking runtest.
+* test directories, naming: Names.
+* test filename: Names.
+* test output, displaying all: Invoking runtest.
+* test programs, auxiliary: Invoking runtest.
+* test suite distributions: Configuring DejaGnu.
+* test, failing: Invoking runtest.
+* test, successful: Invoking runtest.
+* test, unresolved outcome: Invoking runtest.
+* test, unsupported: Invoking runtest.
+* tests, running: Running Tests.
+* tests, running order: Names.
+* tests, running specifically <1>: utils.exp.
+* tests, running specifically: Invoking runtest.
+* TET: Posix.
+* tip PORT: remote.exp.
+* tip, remote testing via: Invoking runtest.
+* tip_download SPAWNID FILE: remote.exp.
+* tool: Config Values.
+* tool command language: Tcl and Expect.
+* tool initialization: Init Module.
+* tool name, as installed: framework.exp.
+* tool names and naming conventions: Names.
+* TOOL_exit: Target Dependent.
+* TOOL_load: Target Dependent.
+* TOOL_start: Target Dependent.
+* TOOL_version: Target Dependent.
+* tracelevel: Config Values.
+* tracing Tcl commands: Invoking runtest.
+* transform: Init Module.
+* transform "TOOLNAME": framework.exp.
+* transform tool name: framework.exp.
+* turning on output: Invoking runtest.
+* unexpected success: Invoking runtest.
+* UNRESOLVED <1>: Invoking runtest.
+* UNRESOLVED: Posix.
+* unresolved "STRING": framework.exp.
+* unset current host: target.exp.
+* unset current target: target.exp.
+* unsetenv VAR: utils.exp.
+* unsetting environment variables: utils.exp.
+* UNSUPPORTED <1>: Invoking runtest.
+* UNSUPPORTED: Posix.
+* unsupported "STRING": framework.exp.
+* unsupported test: Invoking runtest.
+* UNTESTED <1>: Invoking runtest.
+* UNTESTED: Posix.
+* untested "STRING": framework.exp.
+* untested properties: Invoking runtest.
+* utilities, loading from init file: Init Module.
+* utils.exp: utils.exp.
+* variables for all tests: Variables.
+* variables for option defaults: Config Values.
+* variables of DejaGnu, defaults: Customizing.
+* verbose: Config Values.
+* verbose [-log] [-n] [-] "STRING" NUMBER: framework.exp.
+* verbose builtin function: framework.exp.
+* version numbers: Invoking runtest.
+* version procedure, tested tools: Target Dependent.
+* VxWorks, link with -r: Cross Targets.
+* WARNING <1>: framework.exp.
+* WARNING: Invoking runtest.
+* warning "STRING NUMBER": framework.exp.
+* Watch when a variable is read: debugger.exp.
+* Watch when a variable is unset: debugger.exp.
+* Watch when a variable is written: debugger.exp.
+* watchdel *watch*: debugger.exp.
+* watchread *var*: debugger.exp.
+* watchunset *var*: debugger.exp.
+* watchwrite *var*: debugger.exp.
+* What is New: What is New.
+* which BINARY: utils.exp.
+* writing a test case: Tests.
+* XFAIL <1>: Invoking runtest.
+* XFAIL: Posix.
+* XFAIL, avoiding for POSIX: Posix.
+* XFAIL, producing: framework.exp.
+* XPASS: Invoking runtest.
+* XPASS, producing: framework.exp.
+
+
--- /dev/null
+#! /bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+#
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+tranformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+ case $1 in
+ -c) instcmd="$cpprog"
+ shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd="$stripprog"
+ shift
+ continue;;
+
+ -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+ shift
+ continue;;
+
+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+ shift
+ continue;;
+
+ *) if [ x"$src" = x ]
+ then
+ src=$1
+ else
+ # this colon is to work around a 386BSD /bin/sh bug
+ :
+ dst=$1
+ fi
+ shift
+ continue;;
+ esac
+done
+
+if [ x"$src" = x ]
+then
+ echo "install: no input file specified"
+ exit 1
+else
+ true
+fi
+
+if [ x"$dir_arg" != x ]; then
+ dst=$src
+ src=""
+
+ if [ -d $dst ]; then
+ instcmd=:
+ else
+ instcmd=mkdir
+ fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+ if [ -f $src -o -d $src ]
+ then
+ true
+ else
+ echo "install: $src does not exist"
+ exit 1
+ fi
+
+ if [ x"$dst" = x ]
+ then
+ echo "install: no destination specified"
+ exit 1
+ else
+ true
+ fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+ if [ -d $dst ]
+ then
+ dst="$dst"/`basename $src`
+ else
+ true
+ fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+# this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+ pathcomp="${pathcomp}${1}"
+ shift
+
+ if [ ! -d "${pathcomp}" ] ;
+ then
+ $mkdirprog "${pathcomp}"
+ else
+ true
+ fi
+
+ pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+ $doit $instcmd $dst &&
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+ if [ x"$transformarg" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ dstfile=`basename $dst $transformbasename |
+ sed $transformarg`$transformbasename
+ fi
+
+# don't allow the sed command to completely eliminate the filename
+
+ if [ x"$dstfile" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ true
+ fi
+
+# Make a temp file name in the proper directory.
+
+ dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+ $doit $instcmd $src $dsttmp &&
+
+ trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing. If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+ $doit $rmcmd -f $dstdir/$dstfile &&
+ $doit $mvcmd $dsttmp $dstdir/$dstfile
+
+fi &&
+
+
+exit 0
--- /dev/null
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Last modified: 1994-03-25
+# Public domain
+
+errstatus=0
+
+for file in ${1+"$@"} ; do
+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+ shift
+
+ pathcomp=
+ for d in ${1+"$@"} ; do
+ pathcomp="$pathcomp$d"
+ case "$pathcomp" in
+ -* ) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp" 1>&2
+ mkdir "$pathcomp" || errstatus=$?
+ fi
+
+ pathcomp="$pathcomp/"
+ done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
--- /dev/null
+#!/bin/sh
+#
+# runtest -- basically all this script does is find the proper expect shell
+# and then
+# run BlueGnu. <neurdenburgj@acm.org>
+#
+
+#
+# Get the execution path to this script and the current directory.
+#
+execpath=`echo ${0-.} | sed -e 's@/[^/]*$@@'`
+# rootme=`pwd`
+
+#
+# get the name by which bluegnu was invoked and extract the config triplet
+#
+bluegnu=`echo ${0-.} | sed -e 's@^.*/@@'`
+target=`echo $bluegnu | sed -e 's/-runtest$//'`
+if [ "$target" != runtest ] ; then
+ target="--target ${target}"
+else
+ target=""
+fi
+
+#
+# Find the right expect binary to use. If a variable EXPECT exists,
+# it takes precedence over all other tests. Otherwise look for a freshly
+# built one, and then use one in the path.
+#
+if [ x"$EXPECT" != x ] ; then
+ expectbin=$EXPECT
+else
+ if [ -x "$execpath/expect" ] ; then
+ expectbin=$execpath/expect
+ else
+ expectbin=expect
+ fi
+fi
+
+# just to be safe...
+if [ -z "$expectbin" ]; then
+ echo "ERROR: No expect shell found"
+ exit 1
+fi
+
+#
+# Extract a few options from the option list.
+#
+verbose=0
+debug=""
+for a in "$@" ; do
+ case $a in
+ -v|--v|-verb*|--verb*) verbose=`expr $verbose + 1`;;
+ -D0|--D0) debug="-D 0" ;;
+ -D1|--D1) debug="-D 1" ;;
+ esac
+done
+
+if expr $verbose \> 0 > /dev/null ; then
+ echo Expect binary is $expectbin
+fi
+
+#
+# find runtest.exp. First we look in it's installed location, otherwise
+# start if from the source tree.
+#
+for i in $execpath/../lib/bluegnu $execpath ; do
+ if expr $verbose \> 1 > /dev/null ; then
+ echo Looking for $i/runtest.exp.
+ fi
+ if [ -f $i/runtest.exp ] ; then
+ runpath=$i
+ if expr $verbose \> 0 > /dev/null ; then
+ echo Using $i/runtest.exp as main test driver
+ fi
+ fi
+done
+# check for an environment variable
+if [ x"$BLUEGNULIBS" != x ] ; then
+ runpath=$BLUEGNULIBS
+ if expr $verbose \> 0 > /dev/null ; then
+ echo Using $BLUEGNULIBS/runtest.exp as main test driver
+ fi
+fi
+if [ x"$runpath" = x ] ; then
+ echo "ERROR: runtest.exp does not exist."
+ exit 1
+fi
+
+exec $expectbin $debug -- $runpath/runtest.exp $target ${1+"$@"}
--- /dev/null
+# Test Framework Driver
+# Copyright (C) 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+# Copyright (C) 1998 jotOmega dsc, 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+#
+
+# This file was written by Rob Savoye. (rob@welcomehome.org)
+# and modified by Jan-Willem Neurdenburg. (neurdenburgj@acm.org)
+
+set frame_version 1.3
+if ![info exists argv0] {
+ send_error "Must use a version of Expect greater than 5.0\n"
+ exit 1
+}
+
+#
+# trap some signals so we know whats happening. These definitions are only
+# temporary until we read in the library stuff
+#
+trap { send_user "\nterminated\n"; exit 1 } SIGTERM
+trap { send_user "\ninterrupted by user\n"; exit 1 } SIGINT
+trap { send_user "\nsegmentation violation\n"; exit 1 } SIGSEGV
+trap { send_user "\nsigquit\n"; exit 1 } SIGQUIT
+
+#
+# Initialize a few global variables used by all tests.
+# `reset_vars' resets several of these, we define them here to document their
+# existence. In fact, it would be nice if all globals used by some interface
+# of bluegnu proper were documented here.
+#
+# Keep these all lowercase. Interface variables used by the various
+# testsuites (eg: the gcc testsuite) should be in all capitals
+# (eg: TORTURE_OPTIONS).
+#
+set mail_logs 0 ;# flag for mailing of summary and diff logs
+set psum_file "latest" ;# file name of previous summary to diff against
+set testcnt 0 ;# number of testcases that ran
+set passcnt 0 ;# number of testcases that passed
+set failcnt 0 ;# number of testcases that failed
+set xfailcnt 0 ;# number of testcases expected to fail which did
+set xpasscnt 0 ;# number of testcases that passed unexpectedly
+set warncnt 0 ;# number of warnings
+set errcnt 0 ;# number of errors
+set unsupportedcnt 0 ;# number of testcases that can't run
+set unresolvedcnt 0 ;# number of testcases whose result is unknown
+set untestedcnt 0 ;# number of untested testcases
+set exit_status 0 ;# exit code returned by this program
+set xfail_flag 0
+set xfail_prms 0
+set sum_file "" ;# name of the file that contains the summary log
+set base_dir "" ;# the current working directory
+set logname "" ;# the users login name
+set passwd ""
+set prms_id 0 ;# GNATS prms id number
+set bug_id 0 ;# optional bug id number
+set dir "" ;# temp variable for directory names
+set srcdir "." ;# source directory containing the test suite
+set ignoretests "" ;# list of tests to not execute
+set objdir "." ;# directory where test case binaries live
+set makevars "" ;# FIXME: Is this used anywhere?
+set reboot 0
+set configfile site.exp ;# (local to this file)
+set multipass "" ;# list of passes and var settings
+set target_abbrev "unix" ;# environment (unix, sim, vx, etc.).
+set errno ""; ;#
+#
+# set communication parameters here
+#
+set netport ""
+set targetname ""
+set connectmode ""
+set serialport ""
+set baud ""
+#
+# These describe the host and target environments.
+#
+set build_triplet "" ;# type of architecture to run tests on
+set build_os "" ;# type of os the tests are running on
+set build_vendor "" ;# vendor name of the OS or workstation the test are running on
+set build_cpu "" ;# type of the cpu tests are running on
+set host_triplet "" ;# type of architecture to run tests on, sometimes remotely
+set host_os "" ;# type of os the tests are running on
+set host_vendor "" ;# vendor name of the OS or workstation the test are running on
+set host_cpu "" ;# type of the cpu tests are running on
+set target_triplet "" ;# type of architecture to run tests on, final remote
+set target_os "" ;# type of os the tests are running on
+set target_vendor "" ;# vendor name of the OS or workstation the test are running on
+set target_cpu "" ;# type of the cpu tests are running on
+set target_alias "" ;# standard abbreviation of target
+
+#
+# some convenience abbreviations
+#
+if ![info exists hex] {
+ set hex "0x\[0-9A-Fa-f\]+"
+}
+if ![info exists decimal] {
+ set decimal "\[0-9\]+"
+}
+
+#
+# set the base dir (current working directory)
+#
+set base_dir [pwd]
+
+#
+# These are tested in case they are not initialized in $configfile. They are
+# tested here instead of the init module so they can be overridden by command
+# line options.
+#
+if ![info exists all_flag] {
+ set all_flag 0
+}
+if ![info exists binpath] {
+ set binpath ""
+}
+if ![info exists debug] {
+ set debug 0
+}
+if ![info exists options] {
+ set options ""
+}
+if ![info exists outdir] {
+ set outdir "."
+}
+if ![info exists reboot] {
+ set reboot 1
+}
+if ![info exists all_runtests] {
+ # FIXME: Can we create an empty array?
+ # we don't have to (JWN 20 March 1998)
+ #set all_runtests(empty) ""
+}
+if ![info exists tracelevel] {
+ set tracelevel 0
+}
+if ![info exists verbose] {
+ set verbose 0
+}
+
+#
+# verbose [-n] [-log] [--] message [level]
+#
+# Print MESSAGE if the verbose level is >= LEVEL.
+# The default value of LEVEL is 1.
+# "-n" says to not print a trailing newline.
+# "-log" says to add the text to the log file even if it won't be printed.
+# Note that the apparent behaviour of `send_user' dictates that if the message
+# is printed it is also added to the log file.
+# Use "--" if MESSAGE begins with "-".
+#
+# This is defined here rather than in framework.exp so we can use it
+# while still loading in the support files.
+#
+proc verbose { args } {
+ global verbose
+ set newline 1
+ set logfile 0
+
+ set i 0
+ if { [string index [lindex $args 0] 0] == "-" } {
+ for { set i 0 } { $i < [llength $args] } { incr i } {
+ if { [lindex $args $i] == "--" } {
+ incr i
+ break
+ } elseif { [lindex $args $i] == "-n" } {
+ set newline 0
+ } elseif { [lindex $args $i] == "-log" } {
+ set logfile 1
+ } elseif { [string index [lindex $args $i] 0] == "-" } {
+ clone_output "ERROR: verbose: illegal argument: [lindex $args $i]"
+ return
+ } else {
+ break
+ }
+ }
+ if { [llength $args] == $i } {
+ clone_output "ERROR: verbose: nothing to print"
+ return
+ }
+ }
+
+ set level 1
+ if { [llength $args] > $i + 1 } {
+ set level [lindex $args [expr $i+1]]
+ }
+ set message [lindex $args $i]
+
+ if { $verbose >= $level } {
+ # There is no need for the "--" argument here, but play it safe.
+ # We assume send_user also sends the text to the log file (which
+ # appears to be the case though the docs aren't clear on this).
+ if { $newline } {
+ send_user -- "$message\n"
+ } else {
+ send_user -- "$message"
+ }
+ } elseif { $logfile } {
+ if { $newline } {
+ send_log "$message\n"
+ } else {
+ send_log "$message"
+ }
+ }
+}
+
+#
+# Transform a tool name to get the installed name.
+# target_triplet is the canonical target name. target_alias is the
+# target name used when configure was run.
+#
+proc transform { name } {
+ global target_triplet
+ global target_alias
+ global host_triplet
+
+ if [string match $target_triplet $host_triplet] {
+ return $name
+ }
+ if [string match "native" $target_triplet] {
+ return $name
+ }
+ if [string match "" $target_triplet] {
+ return $name
+ } else {
+ set tmp ${target_alias}-${name}
+ verbose "Transforming $name to $tmp"
+ return $tmp
+ }
+}
+
+#
+# findfile arg0 [arg1] [arg2]
+#
+# Find a file and see if it exists. If you only care about the false
+# condition, then you'll need to pass a null "" for arg1.
+# arg0 is the filename to look for. If the only arg,
+# then that's what gets returned. If this is the
+# only arg, then if it exists, arg0 gets returned.
+# if it doesn't exist, return only the prog name.
+# arg1 is optional, and it's what gets returned if
+# the file exists.
+# arg2 is optional, and it's what gets returned if
+# the file doesn't exist.
+#
+proc findfile { args } {
+ # look for the file
+ verbose "Seeing if [lindex $args 0] exists." 2
+ if [file exists [lindex $args 0]] {
+ if { [llength $args] > 1 } {
+ verbose "Found file, returning [lindex $args 1]"
+ return [lindex $args 1]
+ } else {
+ verbose "Found file, returning [lindex $args 0]"
+ return [lindex $args 0]
+ }
+ } else {
+ if { [llength $args] > 2 } {
+ verbose "Didn't find file, returning [lindex $args 2]"
+ return [lindex $args 2]
+ } else {
+ verbose "Didn't find file, returning [file tail [lindex $args 0]]"
+ return [transform [file tail [lindex $args 0]]]
+ }
+ }
+}
+
+#
+# load_file [-1] [--] file1 [ file2 ... ]
+#
+# Utility to source a file. All are sourced in order unless the flag "-1"
+# is given in which case we stop after finding the first one.
+# The result is 1 if a file was found, 0 if not.
+# If a tcl error occurs while sourcing a file, we print an error message
+# and exit.
+#
+# ??? Perhaps add an optional argument of some descriptive text to add to
+# verbose and error messages (eg: -t "library file" ?).
+#
+proc load_file { args } {
+ set i 0
+ set only_one 0
+ if { [lindex $args $i] == "-1" } {
+ set only_one 1
+ incr i
+ }
+ if { [lindex $args $i] == "--" } {
+ incr i
+ }
+
+ set found 0
+ foreach file [lrange $args $i end] {
+ verbose "Looking for $file" 2
+ if [file exists $file] {
+ set found 1
+ verbose "Found $file"
+ if { [catch "uplevel #0 source $file"] == 1 } {
+ send_error "ERROR: tcl error sourcing $file.\n"
+ global errorInfo
+ if [info exists errorInfo] {
+ send_error "$errorInfo\n"
+ }
+ exit 1
+ }
+ if $only_one {
+ break
+ }
+ }
+ }
+ return $found
+}
+
+#
+# Parse the arguments the first time looking for these. We will ultimately
+# parse them twice. Things are complicated because:
+# - we want to parse --verbose early on
+# - we don't want config files to override command line arguments
+# (eg: $base_dir/$configfile vs --host/--target; $BLUEGNU vs --baud,
+# --connectmode, and --name)
+# - we need some command line arguments before we can process some config files
+# (eg: --objdir before $objdir/$configfile, --host/--target before $BLUEGNU)
+# The use of `arg_host_triplet' and `arg_target_triplet' lets us avoid parsing
+# the arguments three times.
+#
+
+set arg_host_triplet ""
+set arg_target_triplet ""
+set arg_build_triplet ""
+set argc [ llength $argv ]
+for { set i 0 } { $i < $argc } { incr i } {
+ set option [lindex $argv $i]
+
+ # make all options have two hyphens
+ switch -glob -- $option {
+ "--*" {
+ }
+ "-*" {
+ set option "-$option"
+ }
+ }
+
+ # split out the argument for options that take them
+ switch -glob -- $option {
+ "--*=*" {
+ set optarg [lindex [split $option =] 1]
+ }
+ "--ba*" -
+ "--bu*" -
+ "--co*" -
+ "--ho*" -
+ "--i*" -
+ "--m*" -
+ "--n*" -
+ "--ob*" -
+ "--ou*" -
+ "--sr*" -
+ "--st*" -
+ "--ta*" -
+ "--to*" {
+ incr i
+ set optarg [lindex $argv $i]
+ }
+ }
+
+ switch -glob -- $option {
+ "--bu*" { # (--build) the build host configuration
+ set arg_build_triplet $optarg
+ continue
+ }
+
+ "--ho*" { # (--host) the host configuration
+ set arg_host_triplet $optarg
+ continue
+ }
+
+ "--ob*" { # (--objdir) where the test case object code lives
+ set objdir $optarg
+ continue
+ }
+
+ "--sr*" { # (--srcdir) where the testsuite source code lives
+ set srcdir $optarg
+ continue
+ }
+
+ "--ta*" { # (--target) the target configuration
+ set arg_target_triplet $optarg
+ continue
+ }
+
+ "--to*" { # (--tool) specify tool name
+ set tool $optarg
+ continue
+ }
+
+ "--v" -
+ "--verb*" { # (--verbose) verbose output
+ incr verbose
+ continue
+ }
+ }
+}
+verbose "Verbose level is $verbose"
+
+#
+# get the users login name
+#
+if [string match "" $logname] {
+ if [info exists env(USER)] {
+ set logname $env(USER)
+ } else {
+ if [info exists env(LOGNAME)] {
+ set logname $env(LOGNAME)
+ } else {
+ # try getting it with whoami
+ catch "set logname [exec whoami]" tmp
+ if [string match "*couldn't find*to execute*" $tmp] {
+ # try getting it with who am i
+ unset tmp
+ catch "set logname [exec who am i]" tmp
+ if [string match "*Command not found*" $tmp] {
+ send_user "ERROR: couldn't get the users login name\n"
+ set logname "Unknown"
+ } else {
+ set logname [lindex [split $logname " !"] 1]
+ }
+ }
+ }
+ }
+}
+verbose "Login name is $logname"
+
+#
+# Begin sourcing the config files.
+# All are sourced in order.
+#
+# Search order:
+# $HOME/.bluegnurc -> $base_dir/$configfile -> $objdir/$configfile
+# -> installed -> $BLUEGNU
+#
+# ??? It might be nice to do $HOME last as it would allow it to be the
+# ultimate override. Though at present there is still $BLUEGNU.
+#
+# For the normal case, we rely on $base_dir/$configfile to set
+# host_triplet and target_triplet.
+#
+
+load_file ~/.bluegnurc $base_dir/$configfile
+
+#
+# If objdir didn't get set in $base_dir/$configfile, set it to $base_dir.
+# Make sure we source $objdir/$configfile in case $base_dir/$configfile doesn't
+# exist and objdir was given on the command line.
+#
+
+if [expr [string match "." $objdir] || [string match $srcdir $objdir]] {
+ set objdir $base_dir
+} else {
+ load_file $objdir/$configfile
+}
+verbose "Using test sources in $srcdir"
+verbose "Using test binaries in $objdir"
+
+set execpath [file dirname $argv0]
+set libdir [file dirname $execpath]/bluegnu
+if [info exists env(BLUEGNULIBS)] {
+ set libdir $env(BLUEGNULIBS)
+}
+verbose "Using $libdir to find libraries"
+
+#
+# If the host or target was given on the command line, override the above
+# config files. We allow $BLUEGNU to massage them though in case it would
+# ever want to do such a thing.
+#
+if { $arg_host_triplet != "" } {
+ set host_triplet $arg_host_triplet
+}
+if { $arg_build_triplet != "" } {
+ set build_triplet $arg_build_triplet
+}
+
+# if we only specify --host, then that must be the build machne too, and we're
+# stuck using the old functionality of a simple cross test
+if [expr { $build_triplet == "" && $host_triplet != "" } ] {
+ set build_triplet $host_triplet
+}
+# if we only specify --build, then we'll use that as the host too
+if [expr { $build_triplet != "" && $host_triplet == "" } ] {
+ set host_triplet $build_triplet
+}
+unset arg_host_triplet arg_build_triplet
+
+#
+# If the build machine type hasn't been specified by now, use config.guess.
+#
+
+if [expr { $build_triplet == "" && $host_triplet == ""} ] {
+ # find config.guess
+ foreach dir "$libdir $libdir/.. $srcdir/.. $srcdir/../.." {
+ verbose "Looking for $dir" 2
+ if [file exists $dir/config.guess] {
+ set config_guess $dir/config.guess
+ verbose "Found $dir/config.guess"
+ break
+ }
+ }
+
+ # get the canonical config name
+ if ![info exists config_guess] {
+ send_error "ERROR: Couldn't guess configuration.\n"
+ exit 1
+ }
+ catch "exec $config_guess" build_triplet
+ case $build_triplet in {
+ { "No uname command or uname output not recognized" "Unable to guess system type" } {
+ verbose "WARNING: Uname output not recognized"
+ set build_triplet unknown
+ }
+ }
+ verbose "Assuming build host is $build_triplet"
+ if { $host_triplet == "" } {
+ set host_triplet $build_triplet
+ }
+
+}
+
+#
+# Figure out the target. If the target hasn't been specified, then we have to assume
+# we are native.
+#
+if { $arg_target_triplet != "" } {
+ set target_triplet $arg_target_triplet
+} elseif { $target_triplet == "" } {
+ set target_triplet $build_triplet
+ verbose "Assuming native target is $target_triplet" 2
+}
+unset arg_target_triplet
+#
+# Default target_alias to target_triplet.
+#
+if ![info exists target_alias] {
+ set target_alias $target_triplet
+}
+
+#
+# Find and load the global config file if it exists.
+# The global config file is used to set the connect mode and other
+# parameters specific to each particular target.
+# These files assume the host and target have been set.
+#
+
+if { [load_file -- $libdir/$configfile] == 0 } {
+ # If $BLUEGNU isn't set either then there isn't any global config file.
+ # Warn the user as there really should be one.
+ if { ! [info exists env(BLUEGNU)] } {
+ send_error "WARNING: Couldn't find the global config file.\n"
+ }
+}
+
+if [info exists env(BLUEGNU)] {
+ if { [load_file -- $env(BLUEGNU)] == 0 } {
+ # It may seem odd to only issue a warning if there isn't a global
+ # config file, but issue an error if $BLUEGNU is erroneously defined.
+ # Since $BLUEGNU is set there is *supposed* to be a global config file,
+ # so the current behaviour seems reasonable.
+ send_error "ERROR: global config file $env(BLUEGNU) not found.\n"
+ exit 1
+ }
+}
+
+#
+# parse out the config parts of the triplet name
+#
+
+# build values
+if { $build_cpu == "" } {
+ regsub -- "-.*-.*" ${build_triplet} "" build_cpu
+}
+if { $build_vendor == "" } {
+ regsub -- "^\[a-z0-9\]*-" ${build_triplet} "" build_vendor
+ regsub -- "-.*" ${build_vendor} "" build_vendor
+}
+if { $build_os == "" } {
+ regsub -- ".*-.*-" ${build_triplet} "" build_os
+}
+
+# host values
+if { $host_cpu == "" } {
+ regsub -- "-.*-.*" ${host_triplet} "" host_cpu
+}
+if { $host_vendor == "" } {
+ regsub -- "^\[a-z0-9\]*-" ${host_triplet} "" host_vendor
+ regsub -- "-.*" ${host_vendor} "" host_vendor
+}
+if { $host_os == "" } {
+ regsub -- ".*-.*-" ${host_triplet} "" host_os
+}
+
+# target values
+if { $target_cpu == "" } {
+ regsub -- "-.*-.*" ${target_triplet} "" target_cpu
+}
+if { $target_vendor == "" } {
+ regsub -- "^\[a-z0-9\]*-" ${target_triplet} "" target_vendor
+ regsub -- "-.*" ${target_vendor} "" target_vendor
+}
+if { $target_os == "" } {
+ regsub -- ".*-.*-" ${target_triplet} "" target_os
+}
+
+#
+# Parse the command line arguments.
+#
+
+set argc [ llength $argv ]
+for { set i 0 } { $i < $argc } { incr i } {
+ set option [ lindex $argv $i ]
+
+ # make all options have two hyphens
+ switch -glob -- $option {
+ "--*" {
+ }
+ "-*" {
+ set option "-$option"
+ }
+ }
+
+ # split out the argument for options that take them
+ switch -glob -- $option {
+ "--*=*" {
+ set optarg [lindex [split $option =] 1]
+ }
+ "--ba*" -
+ "--bu*" -
+ "--co*" -
+ "--ho*" -
+ "--i*" -
+ "--m*" -
+ "--n*" -
+ "--ob*" -
+ "--ou*" -
+ "--sr*" -
+ "--st*" -
+
+ "--ta*" -
+ "--to*" {
+ incr i
+ set optarg [lindex $argv $i]
+ }
+ }
+
+ switch -glob -- $option {
+ "--V*" -
+ "--vers*" { # (--version) version numbers
+ send_user "Expect version is\t[exp_version]\n"
+ send_user "Tcl version is\t\t[ info tclversion ]\n"
+ send_user "Framework version is\t$frame_version\n"
+ exit
+ }
+
+ "--v*" { # (--verbose) verbose output
+ # Already parsed.
+ continue
+ }
+
+ "--bu*" { # (--build) the build host configuration
+ # Already parsed (and don't set again). Let $BLUEGNU rename it.
+ continue
+ }
+
+ "--ho*" { # (--host) the host configuration
+ # Already parsed (and don't set again). Let $BLUEGNU rename it.
+ continue
+ }
+
+ "--ta*" { # (--target) the target configuration
+ # Already parsed (and don't set again). Let $BLUEGNU rename it.
+ continue
+ }
+
+ "--a*" { # (--all) print all test output to screen
+ set all_flag 1
+ verbose "Print all test output to screen"
+ continue
+ }
+
+ "--ba*" { # (--baud) the baud to use for a serial line
+ set baud $optarg
+ verbose "The baud rate is now $baud"
+ continue
+ }
+
+ "--co*" { # (--connect) the connection mode to use
+ set connectmode $optarg
+ verbose "Comm method is $connectmode"
+ continue
+ }
+
+ "--d*" { # (--debug) expect internal debugging
+ if [file exists ./dbg.log] {
+ catch "exec rm -f ./dbg.log"
+ }
+ if { $verbose > 2 } {
+ exp_internal -f dbg.log 1
+ } else {
+ exp_internal -f dbg.log 0
+ }
+ verbose "Expect Debugging is ON"
+ continue
+ }
+
+ "--D[01]" { # (-Debug) turn on Tcl debugger
+ verbose "Tcl debugger is ON"
+ continue
+ }
+
+ "--m*" { # (--mail) mail the output
+ set mailing_list $optarg
+ set mail_logs 1
+ verbose "Mail results to $mailing_list"
+ continue
+ }
+
+ "--r*" { # (--reboot) reboot the target
+ set reboot 1
+ verbose "Will reboot the target (if supported)"
+ continue
+ }
+
+ "--ob*" { # (--objdir) where the test case object code lives
+ # Already parsed, but parse again to make sure command line
+ # options override any config file.
+ set objdir $optarg
+ verbose "Using test binaries in $objdir"
+ continue
+ }
+
+ "--ou*" { # (--outdir) where to put the output files
+ set outdir $optarg
+ verbose "Test output put in $outdir"
+ continue
+ }
+
+ "*.exp" { # specify test names to run
+ set all_runtests($option) ""
+ verbose "Running only tests $option"
+ continue
+ }
+
+ "*.exp=*" { # specify test names to run
+ set j [string first "=" $option]
+ set tmp [list [string range $option 0 [expr $j - 1]] \
+ [string range $option [expr $j + 1] end]]
+ set all_runtests([lindex $tmp 0]) [lindex $tmp 1]
+ verbose "Running only tests $option"
+ unset tmp j
+ continue
+ }
+
+ "--i*" { # (--ignore) specify test names to exclude
+ set ignoretests $optarg
+ verbose "Ignoring test $ignoretests"
+ continue
+ }
+
+ "--sr*" { # (--srcdir) where the testsuite source code lives
+ # Already parsed, but parse again to make sure command line
+ # options override any config file.
+
+ set srcdir $optarg
+ continue
+ }
+
+ "--st*" { # (--strace) expect trace level
+ set tracelevel $optarg
+ strace $tracelevel
+ verbose "Source Trace level is now $tracelevel"
+ continue
+ }
+
+ "--n*" { # (--name) the target's name
+ # ??? `targetname' is a confusing word to use here.
+ set targetname $optarg
+ verbose "Target name is now $targetname"
+ continue
+ }
+
+ "--to*" { # (--tool) specify tool name
+ set tool $optarg
+ verbose "Testing $tool"
+ continue
+ }
+
+ "[A-Z]*=*" { # process makefile style args like CC=gcc, etc...
+ if [regexp "^(\[A-Z_\]+)=(.*)$" $option junk var val] {
+ if {0 > [lsearch -exact $makevars $var]} {
+ lappend makevars "$var"
+ set $var $val
+ } else {
+ set $var [concat [set $var] $val]
+ }
+ verbose "$var is now [set $var]"
+ #append makevars "set $var $val;" ;# FIXME: Used anywhere?
+ unset junk var val
+ } else {
+ send_error "Illegal variable specification:\n"
+ send_error "$option\n"
+ }
+ continue
+ }
+
+ "--he*" { # (--help) help text
+ send_user "USAGE: bluegnu \[options...\]\n"
+ send_user "\t--all (-a)\t\tPrint all test output to screen\n"
+ send_user "\t--baud (-ba)\t\tThe baud rate\n"
+ send_user "\t--build \[string\]\t\tThe canonical config name of the build machine\n"
+ send_user "\t--host \[string\]\t\tThe canonical config name of the host machine\n"
+ send_user "\t--target \[string\]\tThe canonical config name of the target board\n"
+ send_user "\t--connect (-co)\t\[type\]\tThe type of connection to use\n"
+ send_user "\t--debug (-de)\t\tSet expect debugging ON\n"
+ send_user "\t--help (-he)\t\tPrint help text\n"
+ send_user "\t--ignore \[name(s)\]\tThe names of specific tests to ignore\n"
+ send_user "\t--mail \[name(s)\]\tWho to mail the results to\n"
+ send_user "\t--name \[name\]\t\tThe hostname of the target board\n"
+ send_user "\t--objdir \[name\]\t\tThe test suite binary directory\n"
+ send_user "\t--outdir \[name\]\t\tThe directory to put logs in\n"
+ send_user "\t--reboot \[name\]\t\tReboot the target (if supported)\n"
+ send_user "\t--srcdir \[name\]\t\tThe test suite source code directory\n"
+ send_user "\t--strace \[number\]\tSet expect tracing ON\n"
+ send_user "\t--tool\[name(s)\]\t\tRun tests on these tools\n"
+ send_user "\t--verbose (-v)\t\tEmit verbose output\n"
+ send_user "\t--version (-V)\t\tEmit all version numbers\n"
+ send_user "\t--D\[0-1\]\t\tTcl debugger\n"
+ send_user "\tscript.exp\[=arg(s)\]\tRun these tests only\n"
+ send_user "\tMakefile style arguments can also be used, ex. CC=gcc\n\n"
+ exit 0
+ }
+
+ default {
+ send_error "\nIllegal Argument \"$option\"\n"
+ send_error "try \"bluegnu --help\" for option list\n"
+ exit 1
+ }
+
+ }
+}
+
+#
+# check for a few crucial variables
+#
+if ![info exists tool] {
+ send_error "WARNING: No tool specified\n"
+ set tool ""
+}
+
+#
+# initialize a few Tcl variables to something other than their default
+#
+if { $verbose > 2 } {
+ log_user 1
+} else {
+ log_user 0
+}
+
+set timeout 10
+
+#
+# load_lib -- load a library by sourcing it
+#
+# If there a multiple files with the same name, stop after the first one found.
+# The order is first look in the install dir, then in a parallel dir in the
+# source tree, (up one or two levels), then in the current dir.
+#
+proc load_lib { file } {
+ global verbose libdir srcdir base_dir execpath tool
+
+ # ??? We could use `load_file' here but then we'd lose the "library file"
+ # specific text in verbose and error messages. Worth it?
+ set found 0
+ foreach dir "$libdir $libdir/lib [file dirname [file dirname $srcdir]]/bluegnu/lib $srcdir/lib . [file dirname [file dirname [file dirname $srcdir]]]/bluegnu/lib" {
+ verbose "Looking for library file $dir/$file" 2
+ if [file exists $dir/$file] {
+ set found 1
+ verbose "Loading library file $dir/$file"
+ if { [catch "uplevel #0 source $dir/$file"] == 1 } {
+ send_error "ERROR: tcl error sourcing library file $dir/$file.\n"
+ global errorInfo
+ if [info exists errorInfo] {
+ send_error "$errorInfo\n"
+ }
+ exit 1
+ }
+ break
+ }
+ }
+ if { $found == 0 } {
+ send_error "ERROR: Couldn't find library file $file.\n"
+ exit 1
+ }
+}
+
+#
+# load the testing framework libraries
+#
+load_lib utils.exp
+load_lib framework.exp
+load_lib debugger.exp
+load_lib remote.exp
+load_lib target.exp
+
+#
+# open log files
+#
+open_logs
+
+# print the config info
+clone_output "Test Run By $logname on [timestamp -format %c]"
+if [is3way] {
+ clone_output "Target is $target_triplet"
+ clone_output "Host is $host_triplet"
+ clone_output "Build is $build_triplet"
+} else {
+ if [isnative] {
+ clone_output "Native configuration is $target_triplet"
+ } else {
+ clone_output "Target is $target_triplet"
+ clone_output "Host is $host_triplet"
+ }
+}
+
+clone_output "\n\t\t=== $tool tests ===\n"
+
+#
+# Find the tool init file. This is in the config directory of the tool's
+# testsuite directory. These used to all be named $target_abbrev-$tool.exp,
+# but as the $tool variable goes away, it's now just $target_abbrev.exp.
+# First we look for a file named with both the abbrev and the tool names.
+# Then we look for one named with just the abbrev name. Finally, we look for
+# a file called default, which is the default actions, as some tools could
+# be purely host based. Unknown is mostly for error trapping.
+#
+
+set found 0
+if ![info exists target_abbrev] {
+ set target_abbrev "unix"
+}
+foreach dir "${srcdir}/config ${srcdir}/../config ${srcdir}/../../config ${srcdir}/../../../config" {
+ foreach initfile "${target_abbrev}-${tool}.exp ${target_abbrev}.exp ${target_os}.exp default.exp unknown.exp" {
+ verbose "Looking for tool init file ${dir}/${initfile}" 2
+ if [file exists ${dir}/${initfile}] {
+ set found 1
+ verbose "Using ${dir}/${initfile} as tool init file."
+ if [catch "uplevel #0 source ${dir}/${initfile}"]==1 {
+ send_error "ERROR: tcl error sourcing tool init file ${dir}/${initfile}.\n"
+ if [info exists errorInfo] {
+ send_error "$errorInfo\n"
+ }
+ exit 1
+ }
+ break
+ }
+ }
+ if $found {
+ break
+ }
+}
+
+if { $found == 0 } {
+ send_error "ERROR: Couldn't find tool init file.\n"
+ exit 1
+}
+unset found
+
+#
+# Trap some signals so we know what's happening. These replace the previous
+# ones because we've now loaded the library stuff.
+#
+if ![exp_debug] {
+ foreach sig "{SIGTERM {terminated}} \
+ {SIGINT {interrupted by user}} \
+ {SIGQUIT {interrupted by user}} \
+ {SIGSEGV {segmentation violation}}" {
+ trap { send_error "Got a [trap -name] signal, [lindex $sig 1]\n"; \
+ log_summary } [lindex $sig 0]
+ verbose "setting trap for [lindex $sig 0] to \"[lindex $sig 1]\"" 1
+ }
+}
+
+#
+# main test execution loop
+#
+
+if [info exists errorInfo] {
+ unset errorInfo
+}
+reset_vars
+# FIXME: The trailing '/' is deprecated and will go away at some point.
+# Do not assume $srcdir has a trailing '/'.
+append srcdir "/"
+# make sure we have only single path delimiters
+regsub -all "//*" $srcdir "/" srcdir
+
+# If multiple passes requested, set them up. Otherwise prepare just one.
+# The format of `MULTIPASS' is a list of elements containing
+# "{ name var1=value1 ... }" where `name' is a generic name for the pass and
+# currently has no other meaning.
+
+if { [info exists MULTIPASS] } {
+ set multipass $MULTIPASS
+}
+if { $multipass == "" } {
+ set multipass { "" }
+}
+
+foreach pass $multipass {
+ # multipass_name is set for `record_test' to use (see framework.exp).
+ if { [lindex $pass 0] != "" } {
+ set multipass_name [lindex $pass 0]
+ clone_output "Running pass `$multipass_name' ..."
+ } else {
+ set multipass_name ""
+ }
+ set restore ""
+ foreach varval [lrange $pass 1 end] {
+ # FIXME: doesn't handle a=b=c.
+ set tmp [split $varval "="]
+ set var [lindex $tmp 0]
+ # Save previous value.
+ if [info exists $var] {
+ lappend restore "$var [list [eval concat \$$var]]"
+ } else {
+ lappend restore "$var"
+ }
+ # Handle "CFLAGS=$CFLAGS foo".
+ # FIXME: Do we need to `catch' this?
+ eval set $var \[concat [lindex $tmp 1]\]
+ verbose "$var is now [eval concat \$$var]"
+ unset tmp var
+ }
+
+ # look for the top level testsuites. if $tool doesn't
+ # exist and there are no subdirectories in $srcdir, then
+ # we default to srcdir.
+ set test_top_dirs [lsort [getdirs ${srcdir} "$tool*"]]
+ if { ${test_top_dirs} == "" } {
+ set test_top_dirs ${srcdir}
+ }
+ verbose "Top level testsuite dirs are ${test_top_dirs}" 2
+ foreach dir "${test_top_dirs}" {
+ foreach test_name [lsort [find ${dir} *.exp]] {
+ if { ${test_name} == "" } {
+ continue
+ }
+ # Ignore this one if asked to.
+ if ![string match "" ${ignoretests}] {
+ if { 0 <= [lsearch ${ignoretests} [file tail ${test_name}]]} {
+ continue
+ }
+ }
+ # Get the path after the $srcdir so we know the subdir we're in.
+ set subdir ""
+ regsub $srcdir [file dirname $test_name] "" subdir
+ if { "$srcdir" == "$subdir/" } {
+ set subdir ""
+ }
+ # Check to see if the range of tests is limited,
+ # set `runtests' to a list of two elements: the script name
+ # and any arguments ("" if none).
+ if { [array size all_runtests] > 0 } {
+ if { 0 > [lsearch [array names all_runtests] [file tail $test_name]]} {
+ continue
+ }
+ set runtests [list [file tail $test_name] $all_runtests([file tail $test_name])]
+ } else {
+ set runtests [list [file tail $test_name] ""]
+ }
+ clone_output "Running $test_name ..."
+ set prms_id 0
+ set bug_id 0
+ set test_result ""
+ if [file exists $test_name] {
+ if { [catch "uplevel #0 source $test_name"] == 1 } {
+ # We can't call `perror' here, it resets `errorInfo'
+ # before we want to look at it. Also remember that perror
+ # increments `errcnt'. If we do call perror we'd have to
+ # reset errcnt afterwards.
+ clone_output "ERROR: tcl error sourcing $test_name."
+ if [info exists errorInfo] {
+ clone_output "ERROR: $errorInfo"
+ unset errorInfo
+ }
+ }
+ } else {
+ # This should never happen, but maybe if the file got removed
+ # between the `find' above and here.
+ perror "$test_name does not exist."
+ # ??? This is a hack. We want to send a message to stderr and
+ # to the summary file (just like perror does), but we don't
+ # want the next testcase to get a spurious "unresolved" because
+ # errcnt != 0. Calling `clone_output' is also supposed to be a
+ # no-no (see the comments for clone_output).
+ set errcnt 0
+ }
+ }
+ }
+
+ # Restore the variables set by this pass.
+ foreach varval $restore {
+ if { [llength $varval] > 1 } {
+ verbose "Restoring [lindex $varval 0] to [lindex $varval 1]" 4
+ set [lindex $varval 0] [lindex $varval 1]
+ } else {
+ verbose "Restoring [lindex $varval 0] to `unset'" 4
+ unset [lindex $varval 0]
+ }
+ }
+}
+
+#
+# all done, cleanup
+#
+if { [info procs ${tool}_exit] != "" } {
+ if {[catch "${tool}_exit" tmp]} {
+ # ??? We can get away with calling `warning' here without ensuring
+ # `warncnt' isn't changed because we're about to exit.
+ warning "${tool}_exit failed:\n$tmp"
+ }
+}
+
+log_summary
--- /dev/null
+#
+# site.tmpl -- Sample template for a global config file.
+# NOTE: This file contains mostly site specific
+# configuration data that is custom to Cygnus
+# Support. You'll have to change most of the
+# values to work at your site.
+# Written by rob@welcomehome.org
+#
+
+#
+# transform -- transform a tool name to get the installed name. We only define
+# this if there wasn't one. This was the global config file can
+# override how the tool names are calculated.
+#
+
+#
+# uncomment this if you wish to redefine the transform procedure
+#
+
+#if ![string match "transform" [info procs transform]] then {
+# proc transform { name } {
+# global target_triplet
+#
+# if [string match "" $target_triplet] then {
+# return $name
+# } else {
+# return ${target_triplet}-$name
+# }
+# }
+#}
+
+set noargs 0
+set noresults 0
+set nosignals 0
+
+#
+# Set default setting for all know targets
+#
+case "$target_triplet" in {
+ { "hppa*-*-proelf*" } {
+
+ # By default we'll use the Winbond for testing, use the OKI
+ # only if explicitly asked for.
+ case "$target_triplet" in {
+ { "hppa*-oki-proelf*" } {
+ set target_abbrev hppro
+ set targetname op50n
+ set serialport hellcab:1024
+ set netport {}
+ set baud 9600
+ }
+ default {
+ set target_abbrev hppro
+ set targetname w89k
+ set serialport hellcab:1023
+ set netport {}
+ set baud 9600
+ }
+ }
+
+ # Now stuff that's common to all proelf targets.
+ # We can't pass arguments or do IO with the PA boards, nor do we
+ # get status results or signals back from the board.
+ set noargs 1
+ set noresults 1
+ set nosignals 1
+ set noinferiorio 1
+
+ # Disgusting hack because directories in libgloss don't
+ # necessarily match the value in target_cpu.
+ set target_cpu "pa"
+
+ # The proelf targets are absurdly slow downloading, so we limit
+ # the number of tests we run on them
+ set TORTURE_OPTIONS [list \
+ { -O0 -g } { -O2 } \
+ { -O2 -fomit-frame-pointer -finline-functions -funroll-all-loops }]
+
+ set target_info(target,name) $targetname
+ set target_info(target,ldflags) "-T$targetname.ld"
+ set target_info(target,config) "hppa1.1-hp-proelf"
+ set target_info(target,cflags) "-T$targetname.ld"
+ set target_info(target,connect) ""
+ set target_info(target,target) ""
+ set target_info(target,serial) $serialport
+ set target_info(target,netport) $netport
+ set target_info(target,baud) $baud
+ }
+ { "i386-*-aout" } {
+ set target_abbrev aout
+ set connectmode ""
+ set targetname ""
+ set netport ""
+ set serialport ""
+ set baud ""
+ }
+ { "m68k-mvme135-*" } { # Motorola MVME135 board running Bug monitor
+ set target_abbrev bug
+ set connectmode "telnet"
+ append targetname "s8"
+ append serialport "/dev/ttyr8"
+ append netport "termserv:90008"
+ append baud "9600"
+ append CFLAGS "-Tmvme135.ld"
+ append CXXFLAGS "-Tmvme135.ld"
+ }
+ { "m68k-idp-*" "m68k-rom68k-*" } { # Motorola IDP board running rom68k monitor
+ append target_abbrev idp
+ append connectmode "telnet"
+ append targetname "s12"
+ append serialport "/dev/tstty12"
+ append netport "termserv:900012"
+ append baud "9600"
+ append CFLAGS "-Tidp.ld"
+ append CXXFLAGS "-Tidp.ld"
+ }
+ { "m68k-*-aout" } {
+ append target_abbrev aout
+ append connectmode ""
+ append targetname ""
+ append netport ""
+ append serialport ""
+ append baud ""
+ }
+ { "m68k-est-coff" } {
+ append target_abbrev est
+ append connectmode telnet
+ append targetname est
+ append serialport /dev/ttyb
+ append netport ""
+ append baud 9600
+ set noargs 1
+ set noresults 1
+ set nosignals 1
+ append CFLAGS -Tidp.ld
+ append CXXFLAGS -Tidp.ld
+ }
+ { "m68k-cpu32bug-coff" } {
+ append target_abbrev cpu32bug
+ append connectmode telnet
+ append targetname cpu32bug
+ append serialport /dev/ttyb
+ append netport ""
+ append baud 9600
+ set noargs 1
+ set noresults 1
+ set nosignals 1
+ append CFLAGS -Tidp.ld
+ append CXXFLAGS -Tidp.ld
+ }
+ { "m68k-*-coff" } {
+ set target_abbrev rom68k
+ set connectmode telnet
+ set targetname rom68k
+ set serialport /dev/ttya
+ set netport ""
+ set baud 9600
+ set noargs 1
+ set noresults 1
+ set nosignals 1
+ set CFLAGS -Tidp.ld
+ set CXXFLAGS -Tidp.ld
+ }
+ { "i960-*-nindy" } {
+ append target_abbrev nind
+ append connectmode ""
+ append targetname ""
+ append netport ""
+ append serialport ""
+ append baud ""
+ }
+ { "m68*-*-vxworks" "m68*-vxworks" } { # Motorola MVME167 board running VxWorks
+ append target_abbrev vx
+ append connectmode "telnet"
+ append targetname "foobar"
+ append serialport "/dev/tstty16"
+ append netport "termserv:900016"
+ append baud "9600"
+ append CFLAGS "-r"
+ append CXXFLAGS "-r"
+ append LDFLAGS "-r"
+ }
+ { "m68*-*-spectra" "m68*-spectra-*" } {
+ append target_abbrev vrtx
+ append connectmode ""
+ append targetname ""
+ append netport ""
+ append serialport ""
+ append baud ""
+ }
+ { "sparc-*-vxworks" } {
+ append target_abbrev vx
+ append connectmode ""
+ append targetname ""
+ append netport ""
+ append serialport ""
+ append baud ""
+ append CFLAGS "-r"
+ append CXXFLAGS "-r"
+ append LDFLAGS "-r"
+ }
+ { "i960-*-vxworks" } {
+ append target_abbrev vx
+ append connectmode "telnet"
+ append targetname "barfoo"
+ append netport ""
+ append serialport ""
+ append baud "9600"
+ append CFLAGS "-r"
+ append CXXFLAGS "-r"
+ append LDFLAGS "-r"
+ }
+ { "a29k-*-udi" } {
+ append target_abbrev udi
+ append connectmode "mondfe"
+ append targetname "ser"
+ append netport ""
+ append serialport ""
+ append baud ""
+ }
+ { "a29k-isstip-*" } {
+ append target_abbrev itip
+ append connectmode "mondfe"
+ append targetname "isst"
+ append netport ""
+ append serialport ""
+ append baud ""
+ }
+ { "mips-idt-ecoff" } {
+ append target_abbrev mips
+ append connectmode ""
+ append targetname ""
+ append netport ""
+ append serialport ""
+ append baud ""
+ }
+ { "h8300*-*-*" } {
+ append target_abbrev sim
+ append connectmode ""
+ append targetname ""
+ append netport ""
+ append serialport ""
+ append baud ""
+ }
+ { "h8500*-*-*" } {
+ append target_abbrev sim
+ append connectmode ""
+ append targetname ""
+ append netport ""
+ append serialport ""
+ append baud ""
+ }
+ { "sh-*-*" } {
+ append target_abbrev sh
+ append connectmode ""
+ append targetname ""
+ append netport ""
+ append serialport ""
+ append baud ""
+ }
+ { "sparc-*-aout" } {
+ append target_abbrev aout
+ append connectmode ""
+ append targetname ""
+ append netport ""
+ append serialport ""
+ append baud ""
+ }
+ { "sparclite-*-*" } {
+ append target_abbrev slite
+ append connectmode "aload"
+ append targetname ""
+ append netport ""
+ append serialport ""
+ append baud ""
+ append CFLAGS "-Tex930"
+ append CXXFLAGS ""
+ }
+ { "sparclitefrwcompat-*-*" } {
+ append target_abbrev frwcom
+ append connectmode ""
+ append targetname ""
+ append netport ""
+ append serialport ""
+ append baud ""
+ }
+ default {
+ # For now only run default gdbserver framework for lynx cross
+ # targets in the future it should be the default for any cross
+ # targets not explicitly handled above.
+ if { $host_triplet != $target_triplet } then {
+ set target_abbrev gdbserver
+ set targetname extended-remote
+ append connectmode ""
+ append netport ""
+ append serialport ""
+ append baud ""
+ } else {
+ append target_abbrev unix
+ append connectmode ""
+ append targetname ""
+ append netport ""
+ append serialport ""
+ append baud ""
+ }
+ }
+}
--- /dev/null
+;; tcl.el --- Tcl code editing commands for Emacs
+
+;; Copyright (C) 1994 Free Software Foundation, Inc.
+
+;; Maintainer: Tom Tromey <tromey@busco.lanl.gov>
+;; Author: Tom Tromey <tromey@busco.lanl.gov>
+;; Chris Lindblad <cjl@lcs.mit.edu>
+;; Keywords: languages tcl modes
+;; Version: 1.49
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 1, or (at your option)
+;; any later version.
+
+;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+;; HOW TO INSTALL:
+;; Put the following forms in your .emacs to enable autoloading of Tcl
+;; mode, and auto-recognition of ".tcl" files.
+;;
+;; (autoload 'tcl-mode "tcl" "Tcl mode." t)
+;; (autoload 'inferior-tcl "tcl" "Run inferior Tcl process." t)
+;; (setq auto-mode-alist (append '(("\\.tcl$" . tcl-mode)) auto-mode-alist))
+;;
+;; If you plan to use the interface to the TclX help files, you must
+;; set the variable tcl-help-directory-list to point to the topmost
+;; directories containing the TclX help files. Eg:
+;;
+;; (setq tcl-help-directory-list '("/usr/local/lib/tclx/help"))
+;;
+;; Also you will want to add the following to your .emacs:
+;;
+;; (autoload 'tcl-help-on-word "tcl" "Help on Tcl commands" t)
+;;
+;; FYI a *very* useful thing to do is nroff all the Tk man pages and
+;; put them in a subdir of the help system.
+;;
+
+;;; Commentary:
+
+;; LCD Archive Entry:
+;; tcl|Tom Tromey|tromey@busco.lanl.gov|
+;; Major mode for editing Tcl|
+;; 1995/12/07 18:27:47|1.49|~/modes/tcl.el.Z|
+
+;; CUSTOMIZATION NOTES:
+;; * tcl-proc-list can be used to customize a list of things that
+;; "define" other things. Eg in my project I put "defvar" in this
+;; list.
+;; * tcl-typeword-list is similar, but uses font-lock-type-face.
+;; * tcl-keyword-list is a list of keywords. I've generally used this
+;; for flow-control words. Eg I add "unwind_protect" to this list.
+;; * tcl-type-alist can be used to minimally customize indentation
+;; according to context.
+
+;; Change log:
+;; tcl.el,v
+;; Revision 1.49 1995/12/07 18:27:47 tromey
+;; (add-log-tcl-defun): Don't use tcl-beginning-of-defun; just go to end
+;; of line before searching.
+;;
+;; Revision 1.48 1995/12/07 18:18:21 tromey
+;; (add-log-tcl-defun): Now uses tcl-beginning-of-defun.
+;;
+;; Revision 1.47 1995/08/22 17:49:45 tromey
+;; (tcl-hilit): New function from "Chris Alfeld" <calfeld@math.utah.edu>
+;; (tcl-mode): Call it
+;;
+;; Revision 1.46 1995/08/07 16:02:01 tromey
+;; (tcl-do-auto-fill): Only fill past fill-column; for 19.29.
+;; (tcl-auto-fill-mode): Use force-mode-line-update.
+;;
+;; Revision 1.45 1995/07/23 23:51:25 tromey
+;; (tcl-word-no-props): New function.
+;; (tcl-figure-type): Use it.
+;; (tcl-current-word): Ditto.
+;;
+;; Revision 1.44 1995/07/23 20:26:47 tromey
+;; Doc fixes.
+;;
+;; Revision 1.43 1995/07/17 19:59:49 tromey
+;; (inferior-tcl-mode): Use modeline-process if it exists.
+;;
+;; Revision 1.42 1995/07/17 19:55:25 tromey
+;; XEmacs currently must use tcl-internal-end-of-defun
+;;
+;; Revision 1.41 1995/07/14 21:54:56 tromey
+;; Changes to make menus work in XEmacs.
+;; From Mike Scheidler <c23mts@kocrsv01.delcoelect.com>
+;;
+;; Revision 1.40 1995/07/11 03:13:15 tromey
+;; (tcl-mode): Customize for new dabbrev.
+;;
+;; Revision 1.39 1995/07/09 21:58:03 tromey
+;; (tcl-do-fill-paragraph): New function.
+;; (tcl-mode): Set up for paragraph filling.
+;;
+;; Revision 1.38 1995/07/09 21:30:32 tromey
+;; (tcl-mode): Fixes to 19.29 paragraph variables.
+;;
+;; Revision 1.37 1995/07/09 18:52:16 tromey
+;; (tcl-do-auto-fill): Set fill-prefix.
+;;
+;; Revision 1.36 1995/07/09 01:07:57 tromey
+;; (tcl-imenu-create-index-function): Work with imenu from Emacs 19.29
+;;
+;; Revision 1.35 1995/06/27 20:12:00 tromey
+;; (tcl-type-alist): More itcl changes.
+;;
+;; Revision 1.34 1995/06/27 20:06:05 tromey
+;; More changes for itcl.
+;; Bug fixes for Emacs 19.29.
+;;
+;; Revision 1.33 1995/06/27 20:01:29 tromey
+;; (tcl-set-proc-regexp): Allow leading spaces.
+;; (tcl-proc-list): Changes for itcl.
+;; (tcl-typeword-list): Ditto.
+;; (tcl-keyword-list): Ditto.
+;;
+;; Revision 1.32 1995/05/11 22:12:49 tromey
+;; (tcl-type-alist): Include entry for "proc".
+;;
+;; Revision 1.31 1995/05/10 23:38:12 tromey
+;; (tcl-add-fsf-menu): Use make-lucid-menu-keymap, not
+;; "make-xemacs-menu-keymap".
+;;
+;; Revision 1.30 1995/05/10 18:22:21 tromey
+;; Bug fix in menu code for XEmacs.
+;;
+;; Revision 1.29 1995/05/09 21:36:53 tromey
+;; Changed "Lucid Emacs" to "XEmacs".
+;; Tcl's popup menu now added to existing one, courtesy
+;; dfarmer@evolving.com (Doug Farmer)
+;;
+;; Revision 1.28 1995/04/08 19:52:50 tromey
+;; (tcl-outline-level): New function
+;; (tcl-mode): Added outline-handling stuff.
+;; From Jesper Pedersen <blackie@imada.ou.dk>
+;;
+;; Revision 1.27 1994/10/11 02:01:27 tromey
+;; (tcl-mode): imenu-create-index-function made buffer local.
+;;
+;; Revision 1.26 1994/09/01 18:06:24 tromey
+;; Added filename completion in inferior tcl mode
+;;
+;; Revision 1.25 1994/08/22 15:56:24 tromey
+;; tcl-load-file default to current buffer.
+;;
+;; Revision 1.24 1994/08/21 20:33:05 tromey
+;; Fixed bug in tcl-guess-application.
+;;
+;; Revision 1.23 1994/08/21 03:54:45 tromey
+;; Keybindings don't overshadown comint bindings.
+;;
+;; Revision 1.22 1994/07/26 00:46:07 tromey
+;; Emacs 18 changes from Carl Witty.
+;;
+;; Revision 1.21 1994/07/14 22:49:21 tromey
+;; Added ";;;###autoload" comments where appropriate.
+;;
+; Revision 1.20 1994/06/05 16:57:22 tromey
+; tcl-current-word does the right thing in inferior-tcl-mode.
+;
+; Revision 1.19 1994/06/03 21:09:19 tromey
+; Another menu fix.
+;
+; Revision 1.18 1994/06/03 20:39:14 tromey
+; Fixed menu bug.
+;
+; Revision 1.17 1994/06/03 00:47:15 tromey
+; Fixed bug in bug-reporting code.
+;
+; Revision 1.16 1994/05/26 05:06:14 tromey
+; Menu items now sensitive as appropriate.
+;
+; Revision 1.15 1994/05/22 20:38:11 tromey
+; Added bug-report keybindings and menu entries.
+;
+; Revision 1.14 1994/05/22 20:18:28 tromey
+; Even more compile stuff.
+;
+; Revision 1.13 1994/05/22 20:17:15 tromey
+; Moved emacs version checking code to very beginning.
+;
+; Revision 1.12 1994/05/22 20:14:59 tromey
+; Compile fixes.
+;
+; Revision 1.11 1994/05/22 20:12:44 tromey
+; Fixed mark-defun for 19.23.
+; More menu fixes.
+;
+; Revision 1.10 1994/05/22 20:02:03 tromey
+; Fixed bug with M-;.
+; Wrote bug-reporting code.
+;
+; Revision 1.9 1994/05/22 05:26:51 tromey
+; Fixes for imenu.
+;
+; Revision 1.8 1994/05/22 03:38:07 tromey
+; Fixed menu support.
+;
+; Revision 1.7 1994/05/03 01:23:42 tromey
+; *** empty log message ***
+;
+; Revision 1.6 1994/04/23 16:23:36 tromey
+; Wrote tcl-indent-for-comment
+;
+;;
+;; 18-Mar-1994 Tom Tromey Fourth beta release.
+;; Added {un,}comment-region to menu. Idea from
+;; Mike Scheidler <c23mts@kocrsv01.delcoelect.com>
+;; 17-Mar-1994 Tom Tromey
+;; Fixed tcl-restart-with-file. Bug fix attempt in
+;; tcl-internal-end-of-defun.
+;; 16-Mar-1994 Tom Tromey Third beta release
+;; Added support code for menu (from Tcl mode written by
+;; schmid@fb3-s7.math.TU-Berlin.DE (Gregor Schmid)).
+;; 12-Mar-1994 Tom Tromey
+;; Better documentation for inferior-tcl-buffer. Wrote
+;; tcl-restart-with-file. Wrote Lucid Emacs menu (but no
+;; code to install it).
+;; 12-Mar-1994 Tom Tromey
+;; Wrote tcl-guess-application. Another stab at making
+;; tcl-omit-ws-regexp work.
+;; 10-Mar-1994 Tom Tromey Second beta release
+;; Last Modified: Thu Mar 10 01:24:25 1994 (Tom Tromey)
+;; Wrote perl-mode style line indentation command.
+;; Wrote more documentation. Added tcl-continued-indent-level.
+;; Integrated help code.
+;; 8-Mar-1994 Tom Tromey
+;; Last Modified: Tue Mar 8 11:58:44 1994 (Tom Tromey)
+;; Bug fixes.
+;; 6-Mar-1994 Tom Tromey
+;; Last Modified: Sun Mar 6 18:55:41 1994 (Tom Tromey)
+;; Updated auto-newline support.
+;; 6-Mar-1994 Tom Tromey Beta release
+;; Last Modified: Sat Mar 5 17:24:32 1994 (Tom Tromey)
+;; Wrote tcl-hashify-buffer. Other minor bug fixes.
+;; 5-Mar-1994 Tom Tromey
+;; Last Modified: Sat Mar 5 16:11:20 1994 (Tom Tromey)
+;; Wrote electric-hash code.
+;; 3-Mar-1994 Tom Tromey
+;; Last Modified: Thu Mar 3 02:53:40 1994 (Tom Tromey)
+;; Added code to handle auto-fill in comments.
+;; Added imenu support code.
+;; Cleaned up code.
+;; Better font-lock support.
+;; 28-Feb-1994 Tom Tromey
+;; Last Modified: Mon Feb 28 14:08:05 1994 (Tom Tromey)
+;; Made tcl-figure-type more easily configurable.
+;; 28-Feb-1994 Tom Tromey
+;; Last Modified: Mon Feb 28 01:02:58 1994 (Tom Tromey)
+;; Wrote inferior-tcl mode.
+;; 16-Feb-1994 Tom Tromey
+;; Last Modified: Wed Feb 16 17:05:19 1994 (Tom Tromey)
+;; Added support for font-lock-mode.
+;; 29-Oct-1993 Tom Tromey
+;; Last Modified: Sun Oct 24 17:39:14 1993 (Tom Tromey)
+;; Patches from Guido Bosch to make things work with Lucid Emacs.
+;; 22-Oct-1993 Tom Tromey
+;; Last Modified: Fri Oct 22 15:26:46 1993 (Tom Tromey)
+;; Made many characters have "_" syntax class; suggested by Guido
+;; Bosch <Guido.Bosch@loria.fr>. Note that this includes the "$"
+;; character, which might be a change you'd notice.
+;; 21-Oct-1993 Tom Tromey
+;; Last Modified: Thu Oct 21 20:28:40 1993 (Tom Tromey)
+;; More fixes for tcl-omit-ws-regexp.
+;; 20-Oct-1993 Tom Tromey
+;; Started keeping history. Fixed tcl-{beginning,end}-of-defun.
+;; Added some code to make things work with Emacs 18.
+
+;; THANKS TO:
+;; Guido Bosch <Guido.Bosch@loria.fr>
+;; pgs1002@esc.cam.ac.uk (Dr P.G. Sjoerdsma)
+;; Mike Scheidler <c23mts@kocrsv01.delcoelect.com>
+;; Matt Newman <men@charney.colorado.edu>
+;; rwhitby@research.canon.oz.au (Rod Whitby)
+;; h9118101@hkuxa.hku.hk (Yip Chi Lap [Beta])
+;; Pertti Tapio Kasanen <ptk@delta.hut.fi>
+;; schmid@fb3-s7.math.TU-Berlin.DE (Gregor Schmid)
+;; warsaw@nlm.nih.gov (Barry A. Warsaw)
+;; Carl Witty <cwitty@ai.mit.edu>
+;; T. V. Raman <raman@crl.dec.com>
+;; Jesper Pedersen <blackie@imada.ou.dk>
+;; dfarmer@evolving.com (Doug Farmer)
+;; "Chris Alfeld" <calfeld@math.utah.edu>
+
+;; KNOWN BUGS:
+;; * indent-region should skip blank lines. (It does in v19, so I'm
+;; not motivated to fix it here).
+;; * In Tcl "#" is not always a comment character. This can confuse
+;; tcl.el in certain circumstances. For now the only workaround is
+;; to enclose offending hash characters in quotes or precede it with
+;; a backslash. Note that using braces won't work -- quotes change
+;; the syntax class of characters between them, while braces do not.
+;; The electric-# mode helps alleviate this problem somewhat.
+;; * indent-tcl-exp is untested.
+;; * Doesn't work under Emacs 18 yet.
+;; * There's been a report that font-lock does strange things under
+;; Lucid Emacs 19.6. For instance in "proc foobar", the space
+;; before "foobar" is highlighted.
+
+;; TODO:
+;; * make add-log-tcl-defun smarter. should notice if we are in the
+;; middle of a defun, or between defuns. should notice if point is
+;; on first line of defun (or maybe even in comments before defun).
+;; * Allow continuation lines to be indented under the first argument
+;; of the preceeding line, like this:
+;; [list something \
+;; something-else]
+;; * There is a request that indentation work like this:
+;; button .fred -label Fred \
+;; -command {puts fred}
+;; * Should have tcl-complete-symbol that queries the inferior process.
+;; * Should have describe-symbol that works by sending the magic
+;; command to a tclX process.
+;; * Need C-x C-e binding (tcl-eval-last-exp).
+;; * Write indent-region function that is faster than indenting each
+;; line individually.
+;; * tcl-figure-type should stop at "beginning of line" (only ws
+;; before point, and no "\" on previous line). (see tcl-real-command-p).
+;; * overrides some comint keybindings; fix.
+;; * Trailing \ will eat blank lines. Should deal with this.
+;; (this would help catch some potential bugs).
+;; * Inferior should display in half the screen, not the whole screen.
+;; * Indentation should deal with "switch".
+;; * Consider writing code to find help files automatically (for
+;; common cases).
+;; * `#' shouldn't insert `\#' when point is in string.
+
+\f
+
+;;; Code:
+
+;; I sure wish Emacs had a package that made it easy to extract this
+;; sort of information.
+(defconst tcl-using-emacs-19 (string-match "19\\." emacs-version)
+ "Nil unless using Emacs 19 (XEmacs or FSF).")
+
+;; FIXME this will break on Emacs 19.100.
+(defconst tcl-using-emacs-19-23
+ (string-match "19\\.\\(2[3-9]\\|[3-9][0-9]\\)" emacs-version)
+ "Nil unless using Emacs 19-23 or later.")
+
+(defconst tcl-using-xemacs-19 (string-match "XEmacs" emacs-version)
+ "Nil unless using XEmacs).")
+
+(require 'comint)
+
+;; When compiling under GNU Emacs, load imenu during compilation. If
+;; you have 19.22 or earlier, comment this out, or get imenu.
+(and (fboundp 'eval-when-compile)
+ (eval-when-compile
+ (if (and (string-match "19\\." emacs-version)
+ (not (string-match "XEmacs" emacs-version)))
+ (require 'imenu))
+ ()))
+
+(defconst tcl-version "1.49")
+(defconst tcl-maintainer "Tom Tromey <tromey@drip.colorado.edu>")
+
+;;
+;; User variables.
+;;
+
+(defvar tcl-indent-level 4
+ "*Indentation of Tcl statements with respect to containing block.")
+
+(defvar tcl-continued-indent-level 4
+ "*Indentation of continuation line relative to first line of command.")
+
+(defvar tcl-auto-newline nil
+ "*Non-nil means automatically newline before and after braces
+inserted in Tcl code.")
+
+(defvar tcl-tab-always-indent t
+ "*Control effect of TAB key.
+If t (the default), always indent current line.
+If nil and point is not in the indentation area at the beginning of
+the line, a TAB is inserted.
+Other values cause the first possible action from the following list
+to take place:
+
+ 1. Move from beginning of line to correct indentation.
+ 2. Delete an empty comment.
+ 3. Move forward to start of comment, indenting if necessary.
+ 4. Move forward to end of line, indenting if necessary.
+ 5. Create an empty comment.
+ 6. Move backward to start of comment, indenting if necessary.")
+
+(defvar tcl-use-hairy-comment-detector t
+ "*If not `nil', the the more complicated, but slower, comment
+detecting function is used. This variable is only used in GNU Emacs
+19 (the fast function is always used elsewhere).")
+
+(defvar tcl-electric-hash-style 'smart
+ "*Style of electric hash insertion to use.
+Possible values are 'backslash, meaning that `\\' quoting should be
+done; 'quote, meaning that `\"' quoting should be done; 'smart,
+meaning that the choice between 'backslash and 'quote should be
+made depending on the number of hashes inserted; or nil, meaning that
+no quoting should be done. Any other value for this variable is
+taken to mean 'smart. The default is 'smart.")
+
+(defvar tcl-help-directory-list nil
+ "*List of topmost directories containing TclX help files")
+
+(defvar tcl-use-smart-word-finder t
+ "*If not nil, use a better way of finding the current word when
+looking up help on a Tcl command.")
+
+(defvar tcl-application "wish"
+ "*Name of Tcl application to run in inferior Tcl mode.")
+
+(defvar tcl-command-switches nil
+ "*Switches to supply to `tcl-application'.")
+
+(defvar tcl-prompt-regexp "^\\(% \\|\\)"
+ "*If not nil, a regexp that will match the prompt in the inferior process.
+If nil, the prompt is the name of the application with \">\" appended.
+
+The default is \"^\\(% \\|\\)\", which will match the default primary
+and secondary prompts for tclsh and wish.")
+
+(defvar inferior-tcl-source-command "source %s\n"
+ "*Format-string for building a Tcl command to load a file.
+This format string should use `%s' to substitute a file name
+and should result in a Tcl expression that will command the
+inferior Tcl to load that file. The filename will be appropriately
+quoted for Tcl.")
+
+;;
+;; Keymaps, abbrevs, syntax tables.
+;;
+
+(defvar tcl-mode-abbrev-table nil
+ "Abbrev table in use in Tcl-mode buffers.")
+(if tcl-mode-abbrev-table
+ ()
+ (define-abbrev-table 'tcl-mode-abbrev-table ()))
+
+(defvar tcl-mode-map ()
+ "Keymap used in Tcl mode.")
+
+(defvar tcl-mode-syntax-table nil
+ "Syntax table in use in Tcl-mode buffers.")
+(if tcl-mode-syntax-table
+ ()
+ (setq tcl-mode-syntax-table (make-syntax-table))
+ (modify-syntax-entry ?% "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?@ "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?& "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?* "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?+ "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?- "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?. "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?: "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?! "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?$ "_" tcl-mode-syntax-table) ; FIXME use "'"?
+ (modify-syntax-entry ?/ "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?~ "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?< "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?= "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?> "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?| "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?\( "()" tcl-mode-syntax-table)
+ (modify-syntax-entry ?\) ")(" tcl-mode-syntax-table)
+ (modify-syntax-entry ?\; "." tcl-mode-syntax-table)
+ (modify-syntax-entry ?\n "> " tcl-mode-syntax-table)
+ (modify-syntax-entry ?\f "> " tcl-mode-syntax-table)
+ (modify-syntax-entry ?# "< " tcl-mode-syntax-table))
+
+(defvar inferior-tcl-mode-map nil
+ "Keymap used in Inferior Tcl mode.")
+
+;; XEmacs menu.
+(defvar tcl-xemacs-menu
+ '(["Beginning of function" tcl-beginning-of-defun t]
+ ["End of function" tcl-end-of-defun t]
+ ["Mark function" tcl-mark-defun t]
+ ["Indent region" indent-region (tcl-mark)]
+ ["Comment region" comment-region (tcl-mark)]
+ ["Uncomment region" tcl-uncomment-region (tcl-mark)]
+ "----"
+ ["Show Tcl process buffer" inferior-tcl t]
+ ["Send function to Tcl process" tcl-eval-defun
+ (and inferior-tcl-buffer (get-buffer inferior-tcl-buffer))]
+ ["Send region to Tcl process" tcl-eval-region
+ (and inferior-tcl-buffer (get-buffer inferior-tcl-buffer))]
+ ["Send file to Tcl process" tcl-load-file
+ (and inferior-tcl-buffer (get-buffer inferior-tcl-buffer))]
+ ["Restart Tcl process with file" tcl-restart-with-file t]
+ "----"
+ ["Tcl help" tcl-help-on-word tcl-help-directory-list]
+ ["Send bug report" tcl-submit-bug-report t])
+ "XEmacs menu for Tcl mode.")
+
+;; GNU Emacs does menus via keymaps. Do it in a function in case we
+;; later decide to add it to inferior Tcl mode as well.
+(defun tcl-add-fsf-menu (map)
+ (define-key map [menu-bar] (make-sparse-keymap))
+ ;; This fails in Emacs 19.22 and earlier.
+ (require 'lmenu)
+ (let ((menu (make-lucid-menu-keymap "Tcl" tcl-xemacs-menu)))
+ (define-key map [menu-bar tcl] (cons "Tcl" menu))
+ ;; The following is intended to compute the key sequence
+ ;; information for the menu. It doesn't work.
+ (x-popup-menu nil menu)))
+
+(defun tcl-fill-mode-map ()
+ (define-key tcl-mode-map "{" 'tcl-electric-char)
+ (define-key tcl-mode-map "}" 'tcl-electric-brace)
+ (define-key tcl-mode-map "[" 'tcl-electric-char)
+ (define-key tcl-mode-map "]" 'tcl-electric-char)
+ (define-key tcl-mode-map ";" 'tcl-electric-char)
+ (define-key tcl-mode-map "#" 'tcl-electric-hash)
+ ;; FIXME.
+ (define-key tcl-mode-map "\e\C-a" 'tcl-beginning-of-defun)
+ ;; FIXME.
+ (define-key tcl-mode-map "\e\C-e" 'tcl-end-of-defun)
+ ;; FIXME.
+ (define-key tcl-mode-map "\e\C-h" 'tcl-mark-defun)
+ (define-key tcl-mode-map "\e\C-q" 'indent-tcl-exp)
+ (define-key tcl-mode-map "\177" 'backward-delete-char-untabify)
+ (define-key tcl-mode-map "\t" 'tcl-indent-command)
+ (define-key tcl-mode-map "\M-;" 'tcl-indent-for-comment)
+ (define-key tcl-mode-map "\M-\C-x" 'tcl-eval-defun)
+ (define-key tcl-mode-map "\C-c\C-b" 'tcl-submit-bug-report)
+ (and (fboundp 'comment-region)
+ (define-key tcl-mode-map "\C-c\C-c" 'comment-region))
+ (define-key tcl-mode-map "\C-c\C-i" 'tcl-help-on-word)
+ (define-key tcl-mode-map "\C-c\C-v" 'tcl-eval-defun)
+ (define-key tcl-mode-map "\C-c\C-f" 'tcl-load-file)
+ (define-key tcl-mode-map "\C-c\C-t" 'inferior-tcl)
+ (define-key tcl-mode-map "\C-c\C-x" 'tcl-eval-region)
+ (define-key tcl-mode-map "\C-c\C-s" 'switch-to-tcl)
+
+ ;; Make menus.
+ (if (and tcl-using-emacs-19 (not tcl-using-xemacs-19))
+ (progn
+ (tcl-add-fsf-menu tcl-mode-map))))
+
+(defun tcl-fill-inferior-map ()
+ (define-key inferior-tcl-mode-map "\t" 'comint-dynamic-complete)
+ (define-key inferior-tcl-mode-map "\M-?"
+ 'comint-dynamic-list-filename-completions)
+ (define-key inferior-tcl-mode-map "\e\C-a" 'tcl-beginning-of-defun)
+ (define-key inferior-tcl-mode-map "\e\C-e" 'tcl-end-of-defun)
+ (define-key inferior-tcl-mode-map "\177" 'backward-delete-char-untabify)
+ (define-key inferior-tcl-mode-map "\M-\C-x" 'tcl-eval-defun)
+ (define-key inferior-tcl-mode-map "\C-c\C-b" 'tcl-submit-bug-report)
+ (define-key inferior-tcl-mode-map "\C-c\C-i" 'tcl-help-on-word)
+ (define-key inferior-tcl-mode-map "\C-c\C-v" 'tcl-eval-defun)
+ (define-key inferior-tcl-mode-map "\C-c\C-f" 'tcl-load-file)
+ (define-key inferior-tcl-mode-map "\C-c\C-t" 'inferior-tcl)
+ (define-key inferior-tcl-mode-map "\C-c\C-x" 'tcl-eval-region)
+ (define-key inferior-tcl-mode-map "\C-c\C-s" 'switch-to-tcl))
+
+(if tcl-mode-map
+ ()
+ (setq tcl-mode-map (make-sparse-keymap))
+ (tcl-fill-mode-map))
+
+(if inferior-tcl-mode-map
+ ()
+ ;; FIXME Use keymap inheritance here? FIXME we override comint
+ ;; keybindings here. Maybe someone has a better set?
+ (setq inferior-tcl-mode-map (copy-keymap comint-mode-map))
+ (tcl-fill-inferior-map))
+
+
+(defvar inferior-tcl-buffer nil
+ "*The current inferior-tcl process buffer.
+
+MULTIPLE PROCESS SUPPORT
+===========================================================================
+To run multiple Tcl processes, you start the first up with
+\\[inferior-tcl]. It will be in a buffer named `*inferior-tcl*'.
+Rename this buffer with \\[rename-buffer]. You may now start up a new
+process with another \\[inferior-tcl]. It will be in a new buffer,
+named `*inferior-tcl*'. You can switch between the different process
+buffers with \\[switch-to-buffer].
+
+Commands that send text from source buffers to Tcl processes -- like
+`tcl-eval-defun' or `tcl-load-file' -- have to choose a process to
+send to, when you have more than one Tcl process around. This is
+determined by the global variable `inferior-tcl-buffer'. Suppose you
+have three inferior Lisps running:
+ Buffer Process
+ foo inferior-tcl
+ bar inferior-tcl<2>
+ *inferior-tcl* inferior-tcl<3>
+If you do a \\[tcl-eval-defun] command on some Lisp source code, what
+process do you send it to?
+
+- If you're in a process buffer (foo, bar, or *inferior-tcl*),
+ you send it to that process.
+- If you're in some other buffer (e.g., a source file), you
+ send it to the process attached to buffer `inferior-tcl-buffer'.
+This process selection is performed by function `inferior-tcl-proc'.
+
+Whenever \\[inferior-tcl] fires up a new process, it resets
+`inferior-tcl-buffer' to be the new process's buffer. If you only run
+one process, this does the right thing. If you run multiple
+processes, you can change `inferior-tcl-buffer' to another process
+buffer with \\[set-variable].")
+
+;;
+;; Hooks and other customization.
+;;
+
+(defvar tcl-mode-hook nil
+ "Hook run on entry to Tcl mode.
+
+Several functions exist which are useful to run from your
+`tcl-mode-hook' (see each function's documentation for more
+information):
+
+ tcl-guess-application
+ Guesses a default setting for `tcl-application' based on any
+ \"#!\" line at the top of the file.
+ tcl-hashify-buffer
+ Quotes all \"#\" characters that don't correspond to actual
+ Tcl comments. (Useful when editing code not originally created
+ with this mode).
+ tcl-auto-fill-mode
+ Auto-filling of Tcl comments.
+
+Emacs 19 users can add functions to the hook with `add-hook':
+
+ (add-hook 'tcl-mode-hook 'tcl-guess-application)
+
+Emacs 18 users must use `setq':
+
+ (setq tcl-mode-hook (cons 'tcl-guess-application tcl-mode-hook))")
+
+
+(defvar inferior-tcl-mode-hook nil
+ "Hook for customizing Inferior Tcl mode.")
+
+(defvar tcl-proc-list
+ '("proc" "method" "itcl_class")
+ "List of commands whose first argument defines something.
+This exists because some people (eg, me) use \"defvar\" et al.
+Call `tcl-set-proc-regexp' and `tcl-set-font-lock-keywords'
+after changing this list.")
+
+(defvar tcl-proc-regexp nil
+ "Regexp to use when matching proc headers.")
+
+(defvar tcl-typeword-list
+ '("global" "upvar" "inherit" "public" "protected" "common")
+ "List of Tcl keywords denoting \"type\". Used only for highlighting.
+Call `tcl-set-font-lock-keywords' after changing this list.")
+
+;; Generally I've picked control operators to be keywords.
+(defvar tcl-keyword-list
+ '("if" "then" "else" "elseif" "for" "foreach" "break" "continue" "while"
+ "eval" "case" "in" "switch" "default" "exit" "error" "proc" "return"
+ "uplevel" "constructor" "destructor" "itcl_class" "loop" "for_array_keys"
+ "for_recursive_glob" "for_file")
+ "List of Tcl keywords. Used only for highlighting.
+Default list includes some TclX keywords.
+Call `tcl-set-font-lock-keywords' after changing this list.")
+
+(defvar tcl-font-lock-keywords nil
+ "Keywords to highlight for Tcl. See variable `font-lock-keywords'.
+This variable is generally set from `tcl-proc-regexp',
+`tcl-typeword-list', and `tcl-keyword-list' by the function
+`tcl-set-font-lock-keywords'.")
+
+;; FIXME need some way to recognize variables because array refs look
+;; like 2 sexps.
+(defvar tcl-type-alist
+ '(
+ ("proc" nil tcl-expr tcl-commands)
+ ("method" nil tcl-expr tcl-commands)
+ ("destructor" tcl-commands)
+ ("constructor" tcl-commands)
+ ("expr" tcl-expr)
+ ("catch" tcl-commands)
+ ("if" tcl-expr "then" tcl-commands)
+ ("elseif" tcl-expr "then" tcl-commands)
+ ("elseif" tcl-expr tcl-commands)
+ ("if" tcl-expr tcl-commands)
+ ("while" tcl-expr tcl-commands)
+ ("for" tcl-commands tcl-expr tcl-commands tcl-commands)
+ ("foreach" nil nil tcl-commands)
+ ("for_file" nil nil tcl-commands)
+ ("for_array_keys" nil nil tcl-commands)
+ ("for_recursive_glob" nil nil nil tcl-commands)
+ ;; Loop handling is not perfect, because the third argument can be
+ ;; either a command or an expr, and there is no real way to look
+ ;; forward.
+ ("loop" nil tcl-expr tcl-expr tcl-commands)
+ ("loop" nil tcl-expr tcl-commands)
+ )
+ "Alist that controls indentation.
+\(Actually, this really only controls what happens on continuation lines).
+Each entry looks like `(KEYWORD TYPE ...)'.
+Each type entry describes a sexp after the keyword, and can be one of:
+* nil, meaning that this sexp has no particular type.
+* tcl-expr, meaning that this sexp is an arithmetic expression.
+* tcl-commands, meaning that this sexp holds Tcl commands.
+* a string, which must exactly match the string at the corresponding
+ position for a match to be made.
+
+For example, the entry for the \"loop\" command is:
+
+ (\"loop\" nil tcl-expr tcl-commands)
+
+This means that the \"loop\" command has three arguments. The first
+argument is ignored (for indentation purposes). The second argument
+is a Tcl expression, and the last argument is Tcl commands.")
+
+(defvar tcl-explain-indentation nil
+ "If not `nil', debugging message will be printed during indentation.")
+
+\f
+
+;;
+;; Work around differences between various versions of Emacs.
+;;
+
+;; We use this because Lemacs 19.9 has what we need.
+(defconst tcl-pps-has-arg-6
+ (or tcl-using-emacs-19
+ (and tcl-using-xemacs-19
+ (condition-case nil
+ (progn
+ (parse-partial-sexp (point) (point) nil nil nil t)
+ t)
+ (error nil))))
+ "t if using an emacs which supports sixth (\"commentstop\") argument
+to parse-partial-sexp.")
+
+;; Its pretty bogus to have to do this, but there is no easier way to
+;; say "match not syntax-1 and not syntax-2". Too bad you can't put
+;; \s in [...]. This sickness is used in Emacs 19 to match a defun
+;; starter. (It is used for this in v18 as well).
+;;(defconst tcl-omit-ws-regexp
+;; (concat "^\\(\\s"
+;; (mapconcat 'char-to-string "w_.()\"\\$'/" "\\|\\s")
+;; "\\)\\S(*")
+;; "Regular expression that matches everything except space, comment
+;;starter, and comment ender syntax codes.")
+
+;; FIXME? Instead of using the hairy regexp above, we just use a
+;; simple one.
+;;(defconst tcl-omit-ws-regexp "^[^] \t\n#}]\\S(*"
+;; "Regular expression used in locating function definitions.")
+
+;; Here's another stab. I think this one actually works. Now the
+;; problem seems to be that there is a bug in Emacs 19.22 where
+;; end-of-defun doesn't really use the brace matching the one that
+;; trails defun-prompt-regexp.
+(defconst tcl-omit-ws-regexp "^[^ \t\n#}][^\n}]+}*[ \t]+")
+
+(defun tcl-internal-beginning-of-defun (&optional arg)
+ "Move backward to next beginning-of-defun.
+With argument, do this that many times.
+Returns t unless search stops due to end of buffer."
+ (interactive "p")
+ (if (or (null arg) (= arg 0))
+ (setq arg 1))
+ (let (success)
+ (while (progn
+ (setq arg (1- arg))
+ (and (>= arg 0)
+ (setq success
+ (re-search-backward tcl-omit-ws-regexp nil 'move 1))))
+ (while (and (looking-at "[]#}]")
+ (setq success
+ (re-search-backward tcl-omit-ws-regexp nil 'move 1)))))
+ (beginning-of-line)
+ (not (null success))))
+
+(defun tcl-internal-end-of-defun (&optional arg)
+ "Move forward to next end of defun.
+An end of a defun is found by moving forward from the beginning of one."
+ (interactive "p")
+ (if (or (null arg) (= arg 0)) (setq arg 1))
+ (let ((start (point)))
+ ;; Was forward-char. I think this works a little better.
+ (forward-line)
+ (tcl-beginning-of-defun)
+ (while (> arg 0)
+ (while (and (re-search-forward tcl-omit-ws-regexp nil 'move 1)
+ (progn (beginning-of-line) t)
+ (looking-at "[]#}]")
+ (progn (forward-line) t)))
+ (let ((next-line (save-excursion
+ (forward-line)
+ (point))))
+ (while (< (point) next-line)
+ (forward-sexp)))
+ (forward-line)
+ (if (> (point) start) (setq arg (1- arg))))))
+
+;; In Emacs 19, we can use begining-of-defun as long as we set up a
+;; certain regexp. In Emacs 18, we need our own function.
+(fset 'tcl-beginning-of-defun
+ (if tcl-using-emacs-19
+ 'beginning-of-defun
+ 'tcl-internal-beginning-of-defun))
+
+;; Ditto end-of-defun.
+(fset 'tcl-end-of-defun
+ (if (and tcl-using-emacs-19 (not tcl-using-xemacs-19))
+ 'end-of-defun
+ 'tcl-internal-end-of-defun))
+
+;; Internal mark-defun that is used for losing Emacsen.
+(defun tcl-internal-mark-defun ()
+ "Put mark at end of Tcl function, point at beginning."
+ (interactive)
+ (push-mark (point))
+ (tcl-end-of-defun)
+ (if tcl-using-emacs-19
+ (push-mark (point) nil t)
+ (push-mark (point)))
+ (tcl-beginning-of-defun)
+ (backward-paragraph))
+
+;; In GNU Emacs 19-23 and later, mark-defun works as advertised. I
+;; don't know about XEmacs, so for now it and Emacs 18 just lose.
+(fset 'tcl-mark-defun
+ (if tcl-using-emacs-19-23
+ 'mark-defun
+ 'tcl-internal-mark-defun))
+
+;; In GNU Emacs 19, mark takes an additional "force" argument. I
+;; don't know about XEmacs, so I'm just assuming it is the same.
+;; Emacs 18 doesn't have this argument.
+(defun tcl-mark ()
+ "Return mark, or nil if none."
+ (if tcl-using-emacs-19
+ (mark t)
+ (mark)))
+
+\f
+
+;;
+;; Some helper functions.
+;;
+
+(defun tcl-set-proc-regexp ()
+ "Set `tcl-proc-regexp' from variable `tcl-proc-list'."
+ (setq tcl-proc-regexp (concat "^\\s-*\\("
+ (mapconcat 'identity tcl-proc-list "\\|")
+ "\\)[ \t]+")))
+
+(defun tcl-set-font-lock-keywords ()
+ "Set `tcl-font-lock-keywords'.
+Uses variables `tcl-proc-regexp' and `tcl-keyword-list'."
+ (setq tcl-font-lock-keywords
+ (list
+ ;; Names of functions (and other "defining things").
+ (list (concat tcl-proc-regexp "\\([^ \t\n]+\\)")
+ 2 'font-lock-function-name-face)
+
+ ;; Names of type-defining things.
+ (list (concat "\\(\\s-\\|^\\)\\("
+ ;; FIXME Use 'regexp-quote?
+ (mapconcat 'identity tcl-typeword-list "\\|")
+ "\\)\\(\\s-\\|$\\)")
+ 2 'font-lock-type-face)
+
+ ;; Keywords. Only recognized if surrounded by whitespace.
+ ;; FIXME consider using "not word or symbol", not
+ ;; "whitespace".
+ (cons (concat "\\(\\s-\\|^\\)\\("
+ ;; FIXME Use regexp-quote?
+ (mapconcat 'identity tcl-keyword-list "\\|")
+ "\\)\\(\\s-\\|$\\)")
+ 2)
+ )))
+
+(if tcl-proc-regexp
+ ()
+ (tcl-set-proc-regexp))
+
+(if tcl-font-lock-keywords
+ ()
+ (tcl-set-font-lock-keywords))
+
+\f
+
+;;
+;; The mode itself.
+;;
+
+;;;###autoload
+(defun tcl-mode ()
+ "Major mode for editing Tcl code.
+Expression and list commands understand all Tcl brackets.
+Tab indents for Tcl code.
+Paragraphs are separated by blank lines only.
+Delete converts tabs to spaces as it moves back.
+
+Variables controlling indentation style:
+ tcl-indent-level
+ Indentation of Tcl statements within surrounding block.
+ tcl-continued-indent-level
+ Indentation of continuation line relative to first line of command.
+
+Variables controlling user interaction with mode (see variable
+documentation for details):
+ tcl-tab-always-indent
+ Controls action of TAB key.
+ tcl-auto-newline
+ Non-nil means automatically newline before and after braces, brackets,
+ and semicolons inserted in Tcl code.
+ tcl-electric-hash-style
+ Controls action of `#' key.
+ tcl-use-hairy-comment-detector
+ If t, use more complicated, but slower, comment detector.
+ This variable is only used in GNU Emacs 19.
+ tcl-use-smart-word-finder
+ If not nil, use a smarter, Tcl-specific way to find the current
+ word when looking up help on a Tcl command.
+
+Turning on Tcl mode calls the value of the variable `tcl-mode-hook'
+with no args, if that value is non-nil. Read the documentation for
+`tcl-mode-hook' to see what kinds of interesting hook functions
+already exist.
+
+Commands:
+\\{tcl-mode-map}"
+ (interactive)
+ (kill-all-local-variables)
+ (use-local-map tcl-mode-map)
+ (setq major-mode 'tcl-mode)
+ (setq mode-name "Tcl")
+ (setq local-abbrev-table tcl-mode-abbrev-table)
+ (set-syntax-table tcl-mode-syntax-table)
+
+ (make-local-variable 'paragraph-start)
+ (make-local-variable 'paragraph-separate)
+ (if (and tcl-using-emacs-19-23
+ (>= emacs-minor-version 29))
+ (progn
+ ;; In Emacs 19.29, you aren't supposed to start these with a
+ ;; ^.
+ (setq paragraph-start "$\\|\f")
+ (setq paragraph-separate paragraph-start))
+ (setq paragraph-start (concat "^$\\|" page-delimiter))
+ (setq paragraph-separate paragraph-start))
+ (make-local-variable 'paragraph-ignore-fill-prefix)
+ (setq paragraph-ignore-fill-prefix t)
+ (make-local-variable 'fill-paragraph-function)
+ (setq fill-paragraph-function 'tcl-do-fill-paragraph)
+
+ (make-local-variable 'indent-line-function)
+ (setq indent-line-function 'tcl-indent-line)
+ ;; Tcl doesn't require a final newline.
+ ;; (make-local-variable 'require-final-newline)
+ ;; (setq require-final-newline t)
+
+ (make-local-variable 'comment-start)
+ (setq comment-start "# ")
+ (make-local-variable 'comment-start-skip)
+ (setq comment-start-skip "#+ *")
+ (make-local-variable 'comment-column)
+ (setq comment-column 40)
+ (make-local-variable 'comment-end)
+ (setq comment-end "")
+
+ (make-local-variable 'outline-regexp)
+ (setq outline-regexp "[^\n\^M]")
+ (make-local-variable 'outline-level)
+ (setq outline-level 'tcl-outline-level)
+
+ (make-local-variable 'font-lock-keywords)
+ (setq font-lock-keywords tcl-font-lock-keywords)
+
+ ;; The following only really makes sense under GNU Emacs 19.
+ (make-local-variable 'imenu-create-index-function)
+ (setq imenu-create-index-function 'tcl-imenu-create-index-function)
+ (make-local-variable 'parse-sexp-ignore-comments)
+
+ ;; Settings for new dabbrev code.
+ (make-local-variable 'dabbrev-case-fold-search)
+ (setq dabbrev-case-fold-search nil)
+ (make-local-variable 'dabbrev-case-replace)
+ (setq dabbrev-case-replace nil)
+ (make-local-variable 'dabbrev-abbrev-skip-leading-regexp)
+ (setq dabbrev-abbrev-skip-leading-regexp "[$!]")
+ (make-local-variable 'dabbrev-abbrev-char-regexp)
+ (setq dabbrev-abbrev-char-regexp "\\sw\\|\\s_")
+
+ (if tcl-using-emacs-19
+ (progn
+ ;; This can only be set to t in Emacs 19 and XEmacs.
+ ;; Emacs 18 and Epoch lose.
+ (setq parse-sexp-ignore-comments t)
+ ;; XEmacs has defun-prompt-regexp, but I don't believe
+ ;; that it works for end-of-defun -- only for
+ ;; beginning-of-defun.
+ (make-local-variable 'defun-prompt-regexp)
+ (setq defun-prompt-regexp tcl-omit-ws-regexp)
+ ;; The following doesn't work in Lucid Emacs 19.6, but maybe
+ ;; it will appear in later versions.
+ (make-local-variable 'add-log-current-defun-function)
+ (setq add-log-current-defun-function 'add-log-tcl-defun))
+ (setq parse-sexp-ignore-comments nil))
+
+ ;; Put Tcl menu into menubar for XEmacs. This happens
+ ;; automatically for GNU Emacs.
+ (if (and tcl-using-xemacs-19
+ current-menubar
+ (not (assoc "Tcl" current-menubar)))
+ (progn
+ (set-buffer-menubar (copy-sequence current-menubar))
+ (add-menu nil "Tcl" tcl-xemacs-menu)))
+ ;; Append Tcl menu to popup menu for XEmacs.
+ (if (and tcl-using-xemacs-19 (boundp 'mode-popup-menu))
+ (setq mode-popup-menu
+ (cons (concat mode-name " Mode Commands") tcl-xemacs-menu)))
+
+ ;; If hilit19 is loaded, add our stuff.
+ (if (featurep 'hilit19)
+ (tcl-hilit))
+
+ (run-hooks 'tcl-mode-hook))
+
+\f
+
+;; This is used for braces, brackets, and semi (except for closing
+;; braces, which are handled specially).
+(defun tcl-electric-char (arg)
+ "Insert character and correct line's indentation."
+ (interactive "p")
+ ;; Indent line first; this looks better if parens blink.
+ (tcl-indent-line)
+ (self-insert-command arg)
+ (if (and tcl-auto-newline (= last-command-char ?\;))
+ (progn
+ (newline)
+ (tcl-indent-line))))
+
+;; This is used for closing braces. If tcl-auto-newline is set, can
+;; insert a newline both before and after the brace, depending on
+;; context. FIXME should this be configurable? Does anyone use this?
+(defun tcl-electric-brace (arg)
+ "Insert character and correct line's indentation."
+ (interactive "p")
+ ;; If auto-newlining and there is stuff on the same line, insert a
+ ;; newline first.
+ (if tcl-auto-newline
+ (progn
+ (if (save-excursion
+ (skip-chars-backward " \t")
+ (bolp))
+ ()
+ (tcl-indent-line)
+ (newline))
+ ;; In auto-newline case, must insert a newline after each
+ ;; brace. So an explicit loop is needed.
+ (while (> arg 0)
+ (insert last-command-char)
+ (tcl-indent-line)
+ (newline)
+ (setq arg (1- arg))))
+ (self-insert-command arg))
+ (tcl-indent-line))
+
+\f
+
+(defun tcl-indent-command (&optional arg)
+ "Indent current line as Tcl code, or in some cases insert a tab character.
+If tcl-tab-always-indent is t (the default), always indent current line.
+If tcl-tab-always-indent is nil and point is not in the indentation
+area at the beginning of the line, a TAB is inserted.
+Other values of tcl-tab-always-indent cause the first possible action
+from the following list to take place:
+
+ 1. Move from beginning of line to correct indentation.
+ 2. Delete an empty comment.
+ 3. Move forward to start of comment, indenting if necessary.
+ 4. Move forward to end of line, indenting if necessary.
+ 5. Create an empty comment.
+ 6. Move backward to start of comment, indenting if necessary."
+ (interactive "p")
+ (cond
+ ((not tcl-tab-always-indent)
+ ;; Indent if in indentation area, otherwise insert TAB.
+ (if (<= (current-column) (current-indentation))
+ (tcl-indent-line)
+ (self-insert-command arg)))
+ ((eq tcl-tab-always-indent t)
+ ;; Always indent.
+ (tcl-indent-line))
+ (t
+ ;; "Perl-mode" style TAB command.
+ (let* ((ipoint (point))
+ (eolpoint (progn
+ (end-of-line)
+ (point)))
+ (comment-p (tcl-in-comment)))
+ (cond
+ ((= ipoint (save-excursion
+ (beginning-of-line)
+ (point)))
+ (beginning-of-line)
+ (tcl-indent-line)
+ ;; If indenting didn't leave us in column 0, go to the
+ ;; indentation. Otherwise leave point at end of line. This
+ ;; is a hack.
+ (if (= (point) (save-excursion
+ (beginning-of-line)
+ (point)))
+ (end-of-line)
+ (back-to-indentation)))
+ ((and comment-p (looking-at "[ \t]*$"))
+ ;; Empty comment, so delete it. We also delete any ";"
+ ;; characters at the end of the line. I think this is
+ ;; friendlier, but I don't know how other people will feel.
+ (backward-char)
+ (skip-chars-backward " \t;")
+ (delete-region (point) eolpoint))
+ ((and comment-p (< ipoint (point)))
+ ;; Before comment, so skip to it.
+ (tcl-indent-line)
+ (indent-for-comment))
+ ((/= ipoint eolpoint)
+ ;; Go to end of line (since we're not there yet).
+ (goto-char eolpoint)
+ (tcl-indent-line))
+ ((not comment-p)
+ (tcl-indent-line)
+ (tcl-indent-for-comment))
+ (t
+ ;; Go to start of comment. We don't leave point where it is
+ ;; because we want to skip comment-start-skip.
+ (tcl-indent-line)
+ (indent-for-comment)))))))
+
+(defun tcl-indent-line ()
+ "Indent current line as Tcl code.
+Return the amount the indentation changed by."
+ (let ((indent (calculate-tcl-indent nil))
+ beg shift-amt
+ (case-fold-search nil)
+ (pos (- (point-max) (point))))
+ (beginning-of-line)
+ (setq beg (point))
+ (cond ((eq indent nil)
+ (setq indent (current-indentation)))
+ (t
+ (skip-chars-forward " \t")
+ (if (listp indent) (setq indent (car indent)))
+ (cond ((= (following-char) ?})
+ (setq indent (- indent tcl-indent-level)))
+ ((= (following-char) ?\])
+ (setq indent (- indent 1))))))
+ (skip-chars-forward " \t")
+ (setq shift-amt (- indent (current-column)))
+ (if (zerop shift-amt)
+ (if (> (- (point-max) pos) (point))
+ (goto-char (- (point-max) pos)))
+ (delete-region beg (point))
+ (indent-to indent)
+ ;; If initial point was within line's indentation,
+ ;; position after the indentation. Else stay at same point in text.
+ (if (> (- (point-max) pos) (point))
+ (goto-char (- (point-max) pos))))
+ shift-amt))
+
+(defun tcl-figure-type ()
+ "Determine type of sexp at point.
+This is either 'tcl-expr, 'tcl-commands, or nil. Puts point at start
+of sexp that indicates types.
+
+See documentation for variable `tcl-type-alist' for more information."
+ (let ((count 0)
+ result
+ word-stack)
+ (while (and (< count 5)
+ (not result))
+ (condition-case nil
+ (progn
+ ;; FIXME should use "tcl-backward-sexp", which would skip
+ ;; over entire variables, etc.
+ (backward-sexp)
+ (if (looking-at "[a-zA-Z_]+")
+ (let ((list tcl-type-alist)
+ entry)
+ (setq word-stack (cons (tcl-word-no-props) word-stack))
+ (while (and list (not result))
+ (setq entry (car list))
+ (setq list (cdr list))
+ (let ((index 0))
+ (while (and entry (<= index count))
+ ;; Abort loop if string does not match word on
+ ;; stack.
+ (and (stringp (car entry))
+ (not (string= (car entry)
+ (nth index word-stack)))
+ (setq entry nil))
+ (setq entry (cdr entry))
+ (setq index (1+ index)))
+ (and (> index count)
+ (not (stringp (car entry)))
+ (setq result (car entry)))
+ )))
+ (setq word-stack (cons nil word-stack))))
+ (error nil))
+ (setq count (1+ count)))
+ (and tcl-explain-indentation
+ (message "Indentation type %s" result))
+ result))
+
+(defun calculate-tcl-indent (&optional parse-start)
+ "Return appropriate indentation for current line as Tcl code.
+In usual case returns an integer: the column to indent to.
+Returns nil if line starts inside a string, t if in a comment."
+ (save-excursion
+ (beginning-of-line)
+ (let* ((indent-point (point))
+ (case-fold-search nil)
+ (continued-line
+ (save-excursion
+ (if (bobp)
+ nil
+ (backward-char)
+ (= ?\\ (preceding-char)))))
+ (continued-indent-value (if continued-line
+ tcl-continued-indent-level
+ 0))
+ state
+ containing-sexp
+ found-next-line)
+ (if parse-start
+ (goto-char parse-start)
+ (tcl-beginning-of-defun))
+ (while (< (point) indent-point)
+ (setq parse-start (point))
+ (setq state (parse-partial-sexp (point) indent-point 0))
+ (setq containing-sexp (car (cdr state))))
+ (cond ((or (nth 3 state) (nth 4 state))
+ ;; Inside comment or string. Return nil or t if should
+ ;; not change this line
+ (nth 4 state))
+ ((null containing-sexp)
+ ;; Line is at top level.
+ continued-indent-value)
+ (t
+ ;; Set expr-p if we are looking at the expression part of
+ ;; an "if", "expr", etc statement. Set commands-p if we
+ ;; are looking at the body part of an if, while, etc
+ ;; statement. FIXME Should check for "for" loops here.
+ (goto-char containing-sexp)
+ (let* ((sexpr-type (tcl-figure-type))
+ (expr-p (eq sexpr-type 'tcl-expr))
+ (commands-p (eq sexpr-type 'tcl-commands))
+ (expr-start (point)))
+ ;; Find the first statement in the block and indent
+ ;; like it. The first statement in the block might be
+ ;; on the same line, so what we do is skip all
+ ;; "virtually blank" lines, looking for a non-blank
+ ;; one. A line is virtually blank if it only contains
+ ;; a comment and whitespace. FIXME continued comments
+ ;; aren't supported. They are a wart on Tcl anyway.
+ ;; We do it this funky way because we want to know if
+ ;; we've found a statement on some line _after_ the
+ ;; line holding the sexp opener.
+ (goto-char containing-sexp)
+ (forward-char)
+ (if (and (< (point) indent-point)
+ (looking-at "[ \t]*\\(#.*\\)?$"))
+ (progn
+ (forward-line)
+ (while (and (< (point) indent-point)
+ (looking-at "[ \t]*\\(#.*\\)?$"))
+ (setq found-next-line t)
+ (forward-line))))
+ (if (or continued-line
+ (/= (char-after containing-sexp) ?{)
+ expr-p)
+ (progn
+ ;; Line is continuation line, or the sexp opener
+ ;; is not a curly brace, or we are are looking at
+ ;; an `expr' expression (which must be split
+ ;; specially). So indentation is column of first
+ ;; good spot after sexp opener (with some added
+ ;; in the continued-line case). If there is no
+ ;; nonempty line before the indentation point, we
+ ;; use the column of the character after the sexp
+ ;; opener.
+ (if (>= (point) indent-point)
+ (progn
+ (goto-char containing-sexp)
+ (forward-char))
+ (skip-chars-forward " \t"))
+ (+ (current-column) continued-indent-value))
+ ;; After a curly brace, and not a continuation line.
+ ;; So take indentation from first good line after
+ ;; start of block, unless that line is on the same
+ ;; line as the opening brace. In this case use the
+ ;; indentation of the opening brace's line, plus
+ ;; another indent step. If we are in the body part
+ ;; of an "if" or "while" then the indentation is
+ ;; taken from the line holding the start of the
+ ;; statement.
+ (if (and (< (point) indent-point)
+ found-next-line)
+ (current-indentation)
+ (if commands-p
+ (goto-char expr-start)
+ (goto-char containing-sexp))
+ (+ (current-indentation) tcl-indent-level)))))))))
+
+\f
+
+(defun indent-tcl-exp ()
+ "Indent each line of the Tcl grouping following point."
+ (interactive)
+ (let ((indent-stack (list nil))
+ (contain-stack (list (point)))
+ (case-fold-search nil)
+ outer-loop-done inner-loop-done state ostate
+ this-indent last-sexp continued-line
+ (next-depth 0)
+ last-depth)
+ (save-excursion
+ (forward-sexp 1))
+ (save-excursion
+ (setq outer-loop-done nil)
+ (while (and (not (eobp)) (not outer-loop-done))
+ (setq last-depth next-depth)
+ ;; Compute how depth changes over this line
+ ;; plus enough other lines to get to one that
+ ;; does not end inside a comment or string.
+ ;; Meanwhile, do appropriate indentation on comment lines.
+ (setq inner-loop-done nil)
+ (while (and (not inner-loop-done)
+ (not (and (eobp) (setq outer-loop-done t))))
+ (setq ostate state)
+ (setq state (parse-partial-sexp (point) (progn (end-of-line) (point))
+ nil nil state))
+ (setq next-depth (car state))
+ (if (and (car (cdr (cdr state)))
+ (>= (car (cdr (cdr state))) 0))
+ (setq last-sexp (car (cdr (cdr state)))))
+ (if (or (nth 4 ostate))
+ (tcl-indent-line))
+ (if (or (nth 3 state))
+ (forward-line 1)
+ (setq inner-loop-done t)))
+ (if (<= next-depth 0)
+ (setq outer-loop-done t))
+ (if outer-loop-done
+ nil
+ ;; If this line had ..))) (((.. in it, pop out of the levels
+ ;; that ended anywhere in this line, even if the final depth
+ ;; doesn't indicate that they ended.
+ (while (> last-depth (nth 6 state))
+ (setq indent-stack (cdr indent-stack)
+ contain-stack (cdr contain-stack)
+ last-depth (1- last-depth)))
+ (if (/= last-depth next-depth)
+ (setq last-sexp nil))
+ ;; Add levels for any parens that were started in this line.
+ (while (< last-depth next-depth)
+ (setq indent-stack (cons nil indent-stack)
+ contain-stack (cons nil contain-stack)
+ last-depth (1+ last-depth)))
+ (if (null (car contain-stack))
+ (setcar contain-stack
+ (or (car (cdr state))
+ (save-excursion
+ (forward-sexp -1)
+ (point)))))
+ (forward-line 1)
+ (setq continued-line
+ (save-excursion
+ (backward-char)
+ (= (preceding-char) ?\\)))
+ (skip-chars-forward " \t")
+ (if (eolp)
+ nil
+ (if (and (car indent-stack)
+ (>= (car indent-stack) 0))
+ ;; Line is on an existing nesting level.
+ (setq this-indent (car indent-stack))
+ ;; Just started a new nesting level.
+ ;; Compute the standard indent for this level.
+ (let ((val (calculate-tcl-indent
+ (if (car indent-stack)
+ (- (car indent-stack))))))
+ (setcar indent-stack
+ (setq this-indent val))
+ (setq continued-line nil)))
+ (cond ((not (numberp this-indent)))
+ ((= (following-char) ?})
+ (setq this-indent (- this-indent tcl-indent-level)))
+ ((= (following-char) ?\])
+ (setq this-indent (- this-indent 1))))
+ ;; Put chosen indentation into effect.
+ (or (null this-indent)
+ (= (current-column)
+ (if continued-line
+ (+ this-indent tcl-indent-level)
+ this-indent))
+ (progn
+ (delete-region (point) (progn (beginning-of-line) (point)))
+ (indent-to
+ (if continued-line
+ (+ this-indent tcl-indent-level)
+ this-indent)))))))))
+ )
+
+\f
+
+;;
+;; Interfaces to other packages.
+;;
+
+(defun tcl-imenu-create-index-function ()
+ "Generate alist of indices for imenu."
+ (let ((re (concat tcl-proc-regexp "\\([^ \t\n{]+\\)"))
+ alist prev-pos)
+ (goto-char (point-min))
+ (imenu-progress-message prev-pos 0)
+ (save-match-data
+ (while (re-search-forward re nil t)
+ (imenu-progress-message prev-pos)
+ ;; Position on start of proc name, not beginning of line.
+ (setq alist (cons
+ (cons (buffer-substring (match-beginning 2) (match-end 2))
+ (match-beginning 2))
+ alist))))
+ (imenu-progress-message prev-pos 100)
+ (nreverse alist)))
+
+;; FIXME Definition of function is very ad-hoc. Should use
+;; tcl-beginning-of-defun. Also has incestuous knowledge about the
+;; format of tcl-proc-regexp.
+(defun add-log-tcl-defun ()
+ "Return name of Tcl function point is in, or nil."
+ (save-excursion
+ (end-of-line)
+ (if (re-search-backward (concat tcl-proc-regexp "\\([^ \t\n{]+\\)") nil t)
+ (buffer-substring (match-beginning 2)
+ (match-end 2)))))
+
+(defun tcl-outline-level ()
+ (save-excursion
+ (skip-chars-forward " \t")
+ (current-column)))
+
+\f
+
+;;
+;; Helper functions for inferior Tcl mode.
+;;
+
+;; This exists to let us delete the prompt when commands are sent
+;; directly to the inferior Tcl. See gud.el for an explanation of how
+;; it all works (I took it from there). This stuff doesn't really
+;; work as well as I'd like it to. But I don't believe there is
+;; anything useful that can be done.
+(defvar inferior-tcl-delete-prompt-marker nil)
+
+(defun tcl-filter (proc string)
+ (let ((inhibit-quit t))
+ (save-excursion
+ (set-buffer (process-buffer proc))
+ (goto-char (process-mark proc))
+ ;; Delete prompt if requested.
+ (if (marker-buffer inferior-tcl-delete-prompt-marker)
+ (progn
+ (delete-region (point) inferior-tcl-delete-prompt-marker)
+ (set-marker inferior-tcl-delete-prompt-marker nil)))))
+ (if tcl-using-emacs-19
+ (comint-output-filter proc string)
+ (funcall comint-output-filter string)))
+
+(defun tcl-send-string (proc string)
+ (save-excursion
+ (set-buffer (process-buffer proc))
+ (goto-char (process-mark proc))
+ (beginning-of-line)
+ (if (looking-at comint-prompt-regexp)
+ (set-marker inferior-tcl-delete-prompt-marker (point))))
+ (comint-send-string proc string))
+
+(defun tcl-send-region (proc start end)
+ (save-excursion
+ (set-buffer (process-buffer proc))
+ (goto-char (process-mark proc))
+ (beginning-of-line)
+ (if (looking-at comint-prompt-regexp)
+ (set-marker inferior-tcl-delete-prompt-marker (point))))
+ (comint-send-region proc start end))
+
+(defun switch-to-tcl (eob-p)
+ "Switch to inferior Tcl process buffer.
+With argument, positions cursor at end of buffer."
+ (interactive "P")
+ (if (get-buffer inferior-tcl-buffer)
+ (pop-to-buffer inferior-tcl-buffer)
+ (error "No current inferior Tcl buffer"))
+ (cond (eob-p
+ (push-mark)
+ (goto-char (point-max)))))
+
+(defun inferior-tcl-proc ()
+ "Return current inferior Tcl process.
+See variable `inferior-tcl-buffer'."
+ (let ((proc (get-buffer-process (if (eq major-mode 'inferior-tcl-mode)
+ (current-buffer)
+ inferior-tcl-buffer))))
+ (or proc
+ (error "No Tcl process; see variable `inferior-tcl-buffer'"))))
+
+(defun tcl-eval-region (start end &optional and-go)
+ "Send the current region to the inferior Tcl process.
+Prefix argument means switch to the Tcl buffer afterwards."
+ (interactive "r\nP")
+ (let ((proc (inferior-tcl-proc)))
+ (tcl-send-region proc start end)
+ (tcl-send-string proc "\n")
+ (if and-go (switch-to-tcl t))))
+
+(defun tcl-eval-defun (&optional and-go)
+ "Send the current defun to the inferior Tcl process.
+Prefix argument means switch to the Tcl buffer afterwards."
+ (interactive "P")
+ (save-excursion
+ (tcl-end-of-defun)
+ (let ((end (point)))
+ (tcl-beginning-of-defun)
+ (tcl-eval-region (point) end)))
+ (if and-go (switch-to-tcl t)))
+
+\f
+
+;;
+;; Inferior Tcl mode itself.
+;;
+
+(defun inferior-tcl-mode ()
+ "Major mode for interacting with Tcl interpreter.
+
+A Tcl process can be started with M-x inferior-tcl.
+
+Entry to this mode runs the hooks comint-mode-hook and
+inferior-tcl-mode-hook, in that order.
+
+You can send text to the inferior Tcl process from other buffers
+containing Tcl source.
+
+Variables controlling Inferior Tcl mode:
+ tcl-application
+ Name of program to run.
+ tcl-command-switches
+ Command line arguments to `tcl-application'.
+ tcl-prompt-regexp
+ Matches prompt.
+ inferior-tcl-source-command
+ Command to use to read Tcl file in running application.
+ inferior-tcl-buffer
+ The current inferior Tcl process buffer. See variable
+ documentation for details on multiple-process support.
+
+The following commands are available:
+\\{inferior-tcl-mode-map}"
+ (interactive)
+ (comint-mode)
+ (setq comint-prompt-regexp (or tcl-prompt-regexp
+ (concat "^"
+ (regexp-quote tcl-application)
+ ">")))
+ (setq major-mode 'inferior-tcl-mode)
+ (setq mode-name "Inferior Tcl")
+ (if (boundp 'modeline-process)
+ (setq modeline-process '(": %s")) ; For XEmacs.
+ (setq mode-line-process '(": %s")))
+ (use-local-map inferior-tcl-mode-map)
+ (setq local-abbrev-table tcl-mode-abbrev-table)
+ (set-syntax-table tcl-mode-syntax-table)
+ (if tcl-using-emacs-19
+ (progn
+ (make-local-variable 'defun-prompt-regexp)
+ (setq defun-prompt-regexp tcl-omit-ws-regexp)))
+ (make-local-variable 'inferior-tcl-delete-prompt-marker)
+ (setq inferior-tcl-delete-prompt-marker (make-marker))
+ (set-process-filter (get-buffer-process (current-buffer)) 'tcl-filter)
+ (run-hooks 'inferior-tcl-mode-hook))
+
+;;;###autoload
+(defun inferior-tcl (cmd)
+ "Run inferior Tcl process.
+Prefix arg means enter program name interactively.
+See documentation for function `inferior-tcl-mode' for more information."
+ (interactive
+ (list (if current-prefix-arg
+ (read-string "Run Tcl: " tcl-application)
+ tcl-application)))
+ (if (not (comint-check-proc "*inferior-tcl*"))
+ (progn
+ (set-buffer (apply (function make-comint) "inferior-tcl" cmd nil
+ tcl-command-switches))
+ (inferior-tcl-mode)))
+ (make-local-variable 'tcl-application)
+ (setq tcl-application cmd)
+ (setq inferior-tcl-buffer "*inferior-tcl*")
+ (switch-to-buffer "*inferior-tcl*"))
+
+(and (fboundp 'defalias)
+ (defalias 'run-tcl 'inferior-tcl))
+
+\f
+
+;;
+;; Auto-fill support.
+;;
+
+(defun tcl-real-command-p ()
+ "Return nil if point is not at the beginning of a command.
+A command is the first word on an otherwise empty line, or the
+first word following a semicolon, opening brace, or opening bracket."
+ (save-excursion
+ (skip-chars-backward " \t")
+ (cond
+ ((bobp) t)
+ ((bolp)
+ (backward-char)
+ ;; Note -- continued comments are not supported here. I
+ ;; consider those to be a wart on the language.
+ (not (eq ?\\ (preceding-char))))
+ (t
+ (memq (preceding-char) '(?\; ?{ ?\[))))))
+
+;; FIXME doesn't actually return t. See last case.
+(defun tcl-real-comment-p ()
+ "Return t if point is just after the `#' beginning a real comment.
+Does not check to see if previous char is actually `#'.
+A real comment is either at the beginning of the buffer,
+preceeded only by whitespace on the line, or has a preceeding
+semicolon, opening brace, or opening bracket on the same line."
+ (save-excursion
+ (backward-char)
+ (tcl-real-command-p)))
+
+(defun tcl-hairy-scan-for-comment (state end always-stop)
+ "Determine if point is in a comment.
+Returns a list of the form `(FLAG . STATE)'. STATE can be used
+as input to future invocations. FLAG is nil if not in comment,
+t otherwise. If in comment, leaves point at beginning of comment.
+Only works in Emacs 19. See also `tcl-simple-scan-for-comment', a
+simpler version that is often right, and works in Emacs 18."
+ (let ((bol (save-excursion
+ (goto-char end)
+ (beginning-of-line)
+ (point)))
+ real-comment
+ last-cstart)
+ (while (and (not last-cstart) (< (point) end))
+ (setq real-comment nil) ;In case we've looped around and it is
+ ;set.
+ (setq state (parse-partial-sexp (point) end nil nil state t))
+ (if (nth 4 state)
+ (progn
+ ;; If ALWAYS-STOP is set, stop even if we don't have a
+ ;; real comment, or if the comment isn't on the same line
+ ;; as the end.
+ (if always-stop (setq last-cstart (point)))
+ ;; If we have a real comment, then set the comment
+ ;; starting point if we are on the same line as the ending
+ ;; location.
+ (setq real-comment (tcl-real-comment-p))
+ (if real-comment
+ (progn
+ (and (> (point) bol) (setq last-cstart (point)))
+ ;; NOTE Emacs 19 has a misfeature whereby calling
+ ;; parse-partial-sexp with COMMENTSTOP set and with
+ ;; an initial list that says point is in a comment
+ ;; will cause an immediate return. So we must skip
+ ;; over the comment ourselves.
+ (beginning-of-line 2)))
+ ;; Frob the state to make it look like we aren't in a
+ ;; comment.
+ (setcar (nthcdr 4 state) nil))))
+ (and last-cstart
+ (goto-char last-cstart))
+ (cons real-comment state)))
+
+(defun tcl-hairy-in-comment ()
+ "Return t if point is in a comment, and leave point at beginning
+of comment."
+ (let ((save (point)))
+ (tcl-beginning-of-defun)
+ (car (tcl-hairy-scan-for-comment nil save nil))))
+
+(defun tcl-simple-in-comment ()
+ "Return t if point is in comment, and leave point at beginning
+of comment. This is faster that `tcl-hairy-in-comment', but is
+correct less often."
+ (let ((save (point))
+ comment)
+ (beginning-of-line)
+ (while (and (< (point) save) (not comment))
+ (search-forward "#" save 'move)
+ (setq comment (tcl-real-comment-p)))
+ comment))
+
+(defun tcl-in-comment ()
+ "Return t if point is in comment, and leave point at beginning
+of comment."
+ (if (and tcl-pps-has-arg-6
+ tcl-use-hairy-comment-detector)
+ (tcl-hairy-in-comment)
+ (tcl-simple-in-comment)))
+
+(defun tcl-do-fill-paragraph (ignore)
+ "fill-paragraph function for Tcl mode. Only fills in a comment."
+ (let (in-comment col where)
+ (save-excursion
+ (end-of-line)
+ (setq in-comment (tcl-in-comment))
+ (if in-comment
+ (progn
+ (setq where (1+ (point)))
+ (setq col (1- (current-column))))))
+ (and in-comment
+ (save-excursion
+ (back-to-indentation)
+ (= col (current-column)))
+ ;; In a comment. Set the fill prefix, and find the paragraph
+ ;; boundaries by searching for lines that look like
+ ;; comment-only lines.
+ (let ((fill-prefix (buffer-substring (progn
+ (beginning-of-line)
+ (point))
+ where))
+ p-start p-end)
+ ;; Search backwards.
+ (save-excursion
+ (while (looking-at "^[ \t]*#")
+ (forward-line -1))
+ (forward-line)
+ (setq p-start (point)))
+
+ ;; Search forwards.
+ (save-excursion
+ (while (looking-at "^[ \t]*#")
+ (forward-line))
+ (setq p-end (point)))
+
+ ;; Narrow and do the fill.
+ (save-restriction
+ (narrow-to-region p-start p-end)
+ (fill-paragraph ignore)))))
+ t)
+
+(defun tcl-do-auto-fill ()
+ "Auto-fill function for Tcl mode. Only auto-fills in a comment."
+ (if (> (current-column) fill-column)
+ (let ((fill-prefix "# ")
+ in-comment col)
+ (save-excursion
+ (setq in-comment (tcl-in-comment))
+ (if in-comment
+ (setq col (1- (current-column)))))
+ (if in-comment
+ (progn
+ (do-auto-fill)
+ (save-excursion
+ (back-to-indentation)
+ (delete-region (point) (save-excursion
+ (beginning-of-line)
+ (point)))
+ (indent-to-column col)))))))
+
+\f
+
+;;
+;; Help-related code.
+;;
+
+(defvar tcl-help-saved-dirs nil
+ "Saved help directories.
+If `tcl-help-directory-list' changes, this allows `tcl-help-on-word'
+to update the alist.")
+
+(defvar tcl-help-alist nil
+ "Alist with command names as keys and filenames as values.")
+
+(defun tcl-help-snarf-commands (dirlist)
+ "Build alist of commands and filenames."
+ (while dirlist
+ (let ((files (directory-files (car dirlist) t)))
+ (while files
+ (if (and (file-directory-p (car files))
+ (not
+ (let ((fpart (file-name-nondirectory (car files))))
+ (or (equal fpart ".")
+ (equal fpart "..")))))
+ (let ((matches (directory-files (car files) t)))
+ (while matches
+ (or (file-directory-p (car matches))
+ (setq tcl-help-alist
+ (cons
+ (cons (file-name-nondirectory (car matches))
+ (car matches))
+ tcl-help-alist)))
+ (setq matches (cdr matches)))))
+ (setq files (cdr files))))
+ (setq dirlist (cdr dirlist))))
+
+(defun tcl-reread-help-files ()
+ "Set up to re-read files, and then do it."
+ (interactive)
+ (message "Building Tcl help file index...")
+ (setq tcl-help-saved-dirs tcl-help-directory-list)
+ (setq tcl-help-alist nil)
+ (tcl-help-snarf-commands tcl-help-directory-list)
+ (message "Building Tcl help file index...done"))
+
+(defun tcl-word-no-props ()
+ "Like current-word, but strips properties."
+ (let ((word (current-word)))
+ (and (fboundp 'set-text-properties)
+ (set-text-properties 0 (length word) nil word))
+ word))
+
+(defun tcl-current-word (flag)
+ "Return current command word, or nil.
+If FLAG is nil, just uses `current-word'.
+Otherwise scans backward for most likely Tcl command word."
+ (if (and flag
+ (memq major-mode '(tcl-mode inferior-tcl-mode)))
+ (condition-case nil
+ (save-excursion
+ ;; Look backward for first word actually in alist.
+ (if (bobp)
+ ()
+ (while (and (not (bobp))
+ (not (tcl-real-command-p)))
+ (backward-sexp)))
+ (if (assoc (tcl-word-no-props) tcl-help-alist)
+ (tcl-word-no-props)))
+ (error nil))
+ (tcl-word-no-props)))
+
+;;;###autoload
+(defun tcl-help-on-word (command &optional arg)
+ "Get help on Tcl command. Default is word at point.
+Prefix argument means invert sense of `tcl-use-smart-word-finder'."
+ (interactive
+ (list
+ (progn
+ (if (not (equal tcl-help-directory-list tcl-help-saved-dirs))
+ (tcl-reread-help-files))
+ (let ((word (tcl-current-word
+ (if current-prefix-arg
+ (not tcl-use-smart-word-finder)
+ tcl-use-smart-word-finder))))
+ (completing-read
+ (if (or (null word) (string= word ""))
+ "Help on Tcl command: "
+ (format "Help on Tcl command (default %s): " word))
+ tcl-help-alist nil t)))
+ current-prefix-arg))
+ (if (not (equal tcl-help-directory-list tcl-help-saved-dirs))
+ (tcl-reread-help-files))
+ (if (string= command "")
+ (setq command (tcl-current-word
+ (if arg
+ (not tcl-use-smart-word-finder)
+ tcl-use-smart-word-finder))))
+ (let* ((help (get-buffer-create "*Tcl help*"))
+ (cell (assoc command tcl-help-alist))
+ (file (and cell (cdr cell))))
+ (set-buffer help)
+ (delete-region (point-min) (point-max))
+ (if file
+ (progn
+ (insert "*** " command "\n\n")
+ (insert-file-contents file))
+ (if (string= command "")
+ (insert "Magical Pig!")
+ (insert "Tcl command " command " not in help\n")))
+ (set-buffer-modified-p nil)
+ (goto-char (point-min))
+ (display-buffer help)))
+
+\f
+
+;;
+;; Other interactive stuff.
+;;
+
+(defvar tcl-previous-dir/file nil
+ "Record last directory and file used in loading.
+This holds a cons cell of the form `(DIRECTORY . FILE)'
+describing the last `tcl-load-file' command.")
+
+(defun tcl-load-file (file &optional and-go)
+ "Load a Tcl file into the inferior Tcl process.
+Prefix argument means switch to the Tcl buffer afterwards."
+ (interactive
+ (list
+ ;; car because comint-get-source returns a list holding the
+ ;; filename.
+ (car (comint-get-source "Load Tcl file: "
+ (or (and
+ (eq major-mode 'tcl-mode)
+ (buffer-file-name))
+ tcl-previous-dir/file)
+ '(tcl-mode) t))
+ current-prefix-arg))
+ (comint-check-source file)
+ (setq tcl-previous-dir/file (cons (file-name-directory file)
+ (file-name-nondirectory file)))
+ (tcl-send-string (inferior-tcl-proc)
+ (format inferior-tcl-source-command (tcl-quote file)))
+ (if and-go (switch-to-tcl t)))
+
+(defun tcl-restart-with-file (file &optional and-go)
+ "Restart inferior Tcl with file.
+If an inferior Tcl process exists, it is killed first.
+Prefix argument means switch to the Tcl buffer afterwards."
+ (interactive
+ (list
+ (car (comint-get-source "Restart with Tcl file: "
+ (or (and
+ (eq major-mode 'tcl-mode)
+ (buffer-file-name))
+ tcl-previous-dir/file)
+ '(tcl-mode) t))
+ current-prefix-arg))
+ (let* ((buf (if (eq major-mode 'inferior-tcl-mode)
+ (current-buffer)
+ inferior-tcl-buffer))
+ (proc (and buf (get-process buf))))
+ (cond
+ ((not (and buf (get-buffer buf)))
+ ;; I think this will be ok.
+ (inferior-tcl tcl-application)
+ (tcl-load-file file and-go))
+ ((or
+ (not (comint-check-proc buf))
+ (yes-or-no-p
+ "A Tcl process is running, are you sure you want to reset it? "))
+ (save-excursion
+ (comint-check-source file)
+ (setq tcl-previous-dir/file (cons (file-name-directory file)
+ (file-name-nondirectory file)))
+ (comint-exec (get-buffer-create buf)
+ (if proc
+ (process-name proc)
+ "inferior-tcl")
+ tcl-application file tcl-command-switches)
+ (if and-go (switch-to-tcl t)))))))
+
+;; FIXME I imagine you can do this under Emacs 18. I just don't know
+;; how.
+(defun tcl-auto-fill-mode (&optional arg)
+ "Like `auto-fill-mode', but controls filling of Tcl comments."
+ (interactive "P")
+ (and (not tcl-using-emacs-19)
+ (error "You must use Emacs 19 to get this feature."))
+ ;; Following code taken from "auto-fill-mode" (simple.el).
+ (prog1
+ (setq auto-fill-function
+ (if (if (null arg)
+ (not auto-fill-function)
+ (> (prefix-numeric-value arg) 0))
+ 'tcl-do-auto-fill
+ nil))
+ (force-mode-line-update)))
+
+;; hilit19 support from "Chris Alfeld" <calfeld@math.utah.edu>
+(defun tcl-hilit ()
+ (hilit-set-mode-patterns
+ '(tcl-mode)
+ '(
+ ("\\(^ *\\|\; *\\)#.*$" nil comment)
+ ("[^\\]\\(\\$[A-Za-z0-9\\-\\_./\\(\\)]+\\)" 1 label)
+ ("[^_]\\<\\(append\\|array\\|auto_execok\\|auto_load\\|auto_mkindex\\|auto_reset\\|break\\|case\\|catch\\|cd\\|close\\|concat\\|continue\\|eof\\|error\\|eval\\|exec\\|exit\\|expr\\|file\\|flush\\|for\\|foreach\\|format\\|gets\\|glob\\|global\\|history\\|if\\|incr\\|info\\|join\\|lappend\\|lindex\\|linsert\\|list\\|llength\\|lrange\\|lreplace\\|lsearch\\|lsort\\|open\\|pid\\|proc\\|puts\\|pwd\\|read\\|regexp\\|regsub\\|rename\\|return\\|scan\\|seek\\|set\\|source\\|split\\|string\\|switch\\|tell\\|time\\|trace\\|unknown\\|unset\\|uplevel\\|upvar\\|while\\)\\>[^_]" 1 keyword) ; tcl keywords
+ ("[^_]\\<\\(after\\|bell\\|bind\\|bindtags\\|clipboard\\|destroy\\|fileevent\\|focus\\|grab\\|image\\|lower\\|option\\|pack\\|place\\|raise\\|scale\\|selection\\|send\\|subst\\|tk\\|tk_popup\\|tkwait\\|update\\|winfo\\|wm\\)\\>[^_]" 1 define) ; tk keywords
+ ("[^_]\\<\\(button\\|canvas\\|checkbutton\\|entry\\|frame\\|label\\|listbox\\|menu\\|menubutton\\|message\\|radiobutton\\|scrollbar\\|text\\|toplevel\\)\\>[^_]" 1 decl) ; tk widgets
+ ("[^_]\\<\\(tix\\((ButtonBox\\|Baloon\\|Control\\|DirList\\|ExFileSelectBox\\|ExFileSelectDialog\\|FileEntry\\|HList\\|LabelEntry\\|LabelFrame\\|NoteBook\\|OptionMenu\\|PanedWindow\\|PopupMenu\\|ScrolledHList\\|ScrolledText\\|ScrolledWindow\\|Select\\|StdButtonBox\\)\\)\\>[^_]" 1 defun) ; tix widgets
+ ("[{}\\\"\\(\\)]" nil include) ; misc punctuation
+ )))
+
+(defun tcl-electric-hash (&optional count)
+ "Insert a `#' and quote if it does not start a real comment.
+Prefix arg is number of `#'s to insert.
+See variable `tcl-electric-hash-style' for description of quoting
+styles."
+ (interactive "p")
+ (or count (setq count 1))
+ (if (> count 0)
+ (let ((type
+ (if (eq tcl-electric-hash-style 'smart)
+ (if (> count 3) ; FIXME what is "smart"?
+ 'quote
+ 'backslash)
+ tcl-electric-hash-style))
+ comment)
+ (if type
+ (progn
+ (save-excursion
+ (insert "#")
+ (setq comment (tcl-in-comment)))
+ (delete-char 1)
+ (and tcl-explain-indentation (message "comment: %s" comment))
+ (cond
+ ((eq type 'quote)
+ (if (not comment)
+ (insert "\"")))
+ ((eq type 'backslash)
+ ;; The following will set count to 0, so the
+ ;; insert-char can still be run.
+ (if (not comment)
+ (while (> count 0)
+ (insert "\\#")
+ (setq count (1- count)))))
+ (t nil))))
+ (insert-char ?# count))))
+
+(defun tcl-hashify-buffer ()
+ "Quote all `#'s in current buffer that aren't Tcl comments."
+ (interactive)
+ (save-excursion
+ (goto-char (point-min))
+ (if (and tcl-pps-has-arg-6 tcl-use-hairy-comment-detector)
+ (let (state
+ result)
+ (while (< (point) (point-max))
+ (setq result (tcl-hairy-scan-for-comment state (point-max) t))
+ (if (car result)
+ (beginning-of-line 2)
+ (backward-char)
+ (if (eq ?# (following-char))
+ (insert "\\"))
+ (forward-char))
+ (setq state (cdr result))))
+ (while (and (< (point) (point-max))
+ (search-forward "#" nil 'move))
+ (if (tcl-real-comment-p)
+ (beginning-of-line 2)
+ ;; There's really no good way for the simple converter to
+ ;; work. So we just quote # if it isn't already quoted.
+ ;; Bogus, but it works.
+ (backward-char)
+ (if (not (eq ?\\ (preceding-char)))
+ (insert "\\"))
+ (forward-char))))))
+
+(defun tcl-indent-for-comment ()
+ "Indent this line's comment to comment column, or insert an empty comment.
+Is smart about syntax of Tcl comments.
+Parts of this were taken from indent-for-comment (simple.el)."
+ (interactive "*")
+ (end-of-line)
+ (or (tcl-in-comment)
+ (progn
+ ;; Not in a comment, so we have to insert one. Create an
+ ;; empty comment (since there isn't one on this line). If
+ ;; line is not blank, make sure we insert a ";" first.
+ (skip-chars-backward " \t")
+ (let ((eolpoint (point)))
+ (beginning-of-line)
+ (if (/= (point) eolpoint)
+ (progn
+ (goto-char eolpoint)
+ (insert
+ (if (tcl-real-command-p) "" ";")
+ "# ")
+ (backward-char))))))
+ ;; Point is just after the "#" starting a comment. Move it as
+ ;; appropriate.
+ (let* ((indent (if comment-indent-hook
+ (funcall comment-indent-hook)
+ (funcall comment-indent-function)))
+ (begpos (progn
+ (backward-char)
+ (point))))
+ (if (/= begpos indent)
+ (progn
+ (skip-chars-backward " \t" (save-excursion
+ (beginning-of-line)
+ (point)))
+ (delete-region (point) begpos)
+ (indent-to indent)))
+ (looking-at comment-start-skip) ; Always true.
+ (goto-char (match-end 0))
+ ;; I don't like the effect of the next two.
+ ;;(skip-chars-backward " \t" (match-beginning 0))
+ ;;(skip-chars-backward "^ \t" (match-beginning 0))
+ ))
+
+;; The following was inspired by the Tcl editing mode written by
+;; Gregor Schmid <schmid@fb3-s7.math.TU-Berlin.DE>. His version also
+;; attempts to snarf the command line options from the command line,
+;; but I didn't think that would really be that helpful (doesn't seem
+;; like it owould be right enough. His version also looks for the
+;; "#!/bin/csh ... exec" hack, but that seemed even less useful.
+;; FIXME should make sure that the application mentioned actually
+;; exists.
+(defun tcl-guess-application ()
+ "Attempt to guess Tcl application by looking at first line.
+The first line is assumed to look like \"#!.../program ...\"."
+ (save-excursion
+ (goto-char (point-min))
+ (if (looking-at "#![^ \t]*/\\([^ \t\n/]+\\)\\([ \t]\\|$\\)")
+ (progn
+ (make-local-variable 'tcl-application)
+ (setq tcl-application (buffer-substring (match-beginning 1)
+ (match-end 1)))))))
+
+;; This only exists to put on the menubar. I couldn't figure out any
+;; other way to do it. FIXME should take "number of #-marks"
+;; argument.
+(defun tcl-uncomment-region (beg end)
+ "Uncomment region."
+ (interactive "r")
+ (comment-region beg end -1))
+
+\f
+
+;;
+;; XEmacs menu support.
+;; Taken from schmid@fb3-s7.math.TU-Berlin.DE (Gregor Schmid),
+;; who wrote a different Tcl mode.
+;; We also have support for menus in FSF. We do this by
+;; loading the XEmacs menu emulation code.
+;;
+
+(defun tcl-popup-menu (e)
+ (interactive "@e")
+ (and tcl-using-emacs-19
+ (not tcl-using-xemacs-19)
+ (if tcl-using-emacs-19-23
+ (require 'lmenu)
+ ;; CAVEATS:
+ ;; * lmenu.el provides 'menubar, which is bogus.
+ ;; * lmenu.el causes menubars to be turned on everywhere.
+ ;; Doubly bogus!
+ ;; Both of these problems are fixed in Emacs 19.23. People
+ ;; using an Emacs before that just suffer.
+ (require 'menubar "lmenu"))) ;; This is annoying
+ ;; IMHO popup-menu should be autoloaded in FSF Emacs. Oh well.
+ (popup-menu tcl-xemacs-menu))
+
+\f
+
+;;
+;; Quoting and unquoting functions.
+;;
+
+;; This quoting is sufficient to protect eg a filename from any sort
+;; of expansion or splitting. Tcl quoting sure sucks.
+(defun tcl-quote (string)
+ "Quote STRING according to Tcl rules."
+ (mapconcat (function (lambda (char)
+ (if (memq char '(?[ ?] ?{ ?} ?\\ ?\" ?$ ? ?\;))
+ (concat "\\" (char-to-string char))
+ (char-to-string char))))
+ string ""))
+
+\f
+
+;;
+;; Bug reporting.
+;;
+
+(and (fboundp 'eval-when-compile)
+ (eval-when-compile
+ (require 'reporter)))
+
+(defun tcl-submit-bug-report ()
+ "Submit via mail a bug report on Tcl mode."
+ (interactive)
+ (require 'reporter)
+ (and
+ (y-or-n-p "Do you really want to submit a bug report on Tcl mode? ")
+ (reporter-submit-bug-report
+ tcl-maintainer
+ (concat "Tcl mode " tcl-version)
+ '(tcl-indent-level
+ tcl-continued-indent-level
+ tcl-auto-newline
+ tcl-tab-always-indent
+ tcl-use-hairy-comment-detector
+ tcl-electric-hash-style
+ tcl-help-directory-list
+ tcl-use-smart-word-finder
+ tcl-application
+ tcl-command-switches
+ tcl-prompt-regexp
+ inferior-tcl-source-command
+ tcl-using-emacs-19
+ tcl-using-emacs-19-23
+ tcl-using-xemacs-19
+ tcl-proc-list
+ tcl-proc-regexp
+ tcl-typeword-list
+ tcl-keyword-list
+ tcl-font-lock-keywords
+ tcl-pps-has-arg-6))))
+
+\f
+
+(provide 'tcl)
+
+;;; tcl.el ends here
--- /dev/null
+#!/bin/sh
+
+# Default DEVOSRCDIR
+if [ "$DEVOSRCDIR" = "" ]; then
+ DEVOSRCDIR=$HOME/devo ; export DEVOSRCDIR
+fi
+
+# Check DEVOSRCDIR
+if [ ! -d "$DEVOSRCDIR" ]; then
+ echo "$0: no directory $DEVOSRCDIR" >&2
+ exit 2
+fi
+
+# Default DEVOBINDIR
+if [ "$DEVOBINDIR" = "" ]; then
+ CPU=`$DEVOSRCDIR/config.guess`
+ if [ $? != 0 ]; then
+ echo "$0: cannot run config.guess" >&2
+ exit 2
+ fi
+ DEVOBINDIR=$HOME/$CPU ; export DEVOBINDIR
+fi
+
+# Check DEVOBINDIR
+if [ ! -d "$DEVOBINDIR" ]; then
+ echo "$0: no directory $DEVOBINDIR" >&2
+ exit 2
+fi
+
+# Default LOGDIR
+if [ "$LOGDIR" = "" ]; then
+ LOGDIR=$HOME/logs ; export LOGDIR
+fi
+
+# Check LOGDIR
+if [ ! -d "$LOGDIR" ]; then
+ echo "$0: no directory $LOGDIR" >&2
+ exit 2
+fi
+
+cd $LOGDIR || exit 2
+
+sum=g++-`date '+%y%m%d'`
+
+$DEVOSRCDIR/dejagnu/contrib/test-tool g++ > $sum 2>&1
+status=$?
+
+if [ -d $DEVOBINDIR/libg++ ]; then
+
+cd $DEVOBINDIR/libg++
+make check >/tmp/clgpp$$ 2>&1
+if [ $? != 0 ]; then
+ cd $LOGDIR
+ echo "" >> $sum
+ echo "libg++ fails to make check:" >> $sum
+ tail -20 /tmp/clgpp$$ >> $sum
+ if [ $status = 0 ]; then
+ status=1
+ fi
+fi
+
+# libg++?
+fi
+
+cd $DEVOBINDIR/libio
+make check >/tmp/clgpp$$ 2>&1
+if [ $? != 0 ]; then
+ cd $LOGDIR
+ echo "" >> $sum
+ echo "libio fails to make check:" >> $sum
+ tail -20 /tmp/clgpp$$ >> $sum
+ if [ $status = 0 ]; then
+ status=1
+ fi
+fi
+
+cd $DEVOBINDIR/libstdc++
+make check >/tmp/clgpp$$ 2>&1
+if [ $? != 0 ]; then
+ cd $LOGDIR
+ echo "" >> $sum
+ echo "libstdc++ fails to make check:" >> $sum
+ tail -20 /tmp/clgpp$$ >> $sum
+ if [ $status = 0 ]; then
+ status=1
+ fi
+fi
+
+exit $status
--- /dev/null
+#!/bin/sh
+# This script automatically test the given tool with the tool's test cases,
+# reporting anything of interest.
+
+# exits with 1 if there is nothing of interest
+# exits with 0 if there is something interesting
+# exits with 2 if an error occurred
+
+# Syntax: test-tool [-expectedpass] [-keepoutput] [-noupdate] g++|gcc|gdb|...
+#
+# -expectedpass: Turn XFAIL into "pass", XPASS into "fail".
+# The default is XFAIL->fail, XPASS->pass.
+# -keepoutput: Save "make check" output in test-$tool.log.
+# -noupdate: Don't update log files.
+
+# Limitations, don't run this multiple times in one day, unless the -noupdate
+# flag is given.
+
+# Written by Mike Stump <mrs@cygnus.com>
+
+expectedpass=no
+keepoutput=no
+update=yes
+tool=""
+
+# See if cp -p works.
+pwd=`pwd`
+cd /tmp
+rm -f test-tool-$$-1 test-tool-$$-2
+touch test-tool-$$-1
+cp -p test-tool-$$-1 test-tool-$$-2 2>/dev/null
+if [ $? = 0 -a -f test-tool-$$-2 ] ; then
+ CP="cp -p"
+else
+ CP=cp
+fi
+rm -f test-tool-$$-1 test-tool-$$-2
+cd $pwd
+
+for arg in $*
+do
+ case $arg in
+ -expectedpass) expectedpass=yes ;;
+ -keepoutput) keepoutput=yes ;;
+ -noupdate) update=no ;;
+ -*)
+ echo "Usage: [-expectedpass] [-keepoutput] [-noupdate] tool_name" >&2
+ exit 2
+ ;;
+ *)
+ if [ "$tool" != "" ]; then
+ echo "Usage: [-expectedpass] [-keepoutput] [-noupdate] tool_name" >&2
+ exit 2
+ fi
+ tool=$arg
+ ;;
+ esac
+done
+
+# FIXME: It sure would be nice if `testdir' wasn't necessary. :-(
+
+case $tool in
+ g++)
+ devoname=gcc
+ checktarget=check-g++
+ testdir=testsuite
+ ;;
+ gcc)
+ devoname=gcc
+ checktarget=check-gcc
+ testdir=testsuite
+ ;;
+ ld|gld)
+ devoname=ld
+ checktarget=check
+ testdir=.
+ ;;
+ binutils)
+ devoname=binutils
+ checktarget=check
+ testdir=.
+ ;;
+ *)
+ devoname=$tool
+ checktarget=check
+ testdir=testsuite
+ ;;
+esac
+
+# Default DEVOSRCDIR
+if [ "$DEVOSRCDIR" = "" ]; then
+ DEVOSRCDIR=$HOME/devo ; export DEVOSRCDIR
+fi
+
+# Check DEVOSRCDIR
+if [ ! -d "$DEVOSRCDIR" ]; then
+ echo "$0: no directory $DEVOSRCDIR" >&2
+ exit 2
+fi
+
+# Default DEVOBINDIR
+if [ "$DEVOBINDIR" = "" ]; then
+ CPU=`$DEVOSRCDIR/config.guess`
+ if [ $? != 0 ]; then
+ echo "$0: cannot run config.guess" >&2
+ exit 2
+ fi
+ DEVOBINDIR=$HOME/$CPU ; export DEVOBINDIR
+fi
+
+# Check DEVOBINDIR
+if [ ! -d "$DEVOBINDIR" ]; then
+ echo "$0: no directory $DEVOBINDIR" >&2
+ exit 2
+fi
+
+# Specialize DEVOSRCDIR
+if [ -d "$DEVOSRCDIR/$devoname" ]; then
+ DEVOSRCDIR=$DEVOSRCDIR/$devoname
+else
+ echo "$0: Cannot find source directory." >&2
+ exit 2
+fi
+
+# Default LOGDIR
+if [ "$LOGDIR" = "" ]; then
+ LOGDIR=$HOME/logs ; export LOGDIR
+fi
+
+# Check LOGDIR
+if [ ! -d "$LOGDIR" ]; then
+ echo "$0: no directory $LOGDIR" >&2
+ exit 2
+fi
+
+# Specialize DEVOBINDIR
+if [ -d "$DEVOBINDIR/$devoname" ]; then
+ DEVOBINDIR=$DEVOBINDIR/$devoname
+else
+ echo "$0: Cannot find binary directory." >&2
+ exit 2
+fi
+
+# Binary directory
+cd $DEVOBINDIR || exit 2
+
+TMPDIR=${TMPDIR-/tmp}
+
+tmp=$TMPDIR/$tool-testing.$$a
+tmp1=$TMPDIR/$tool-testing.$$b
+tmp2=$TMPDIR/$tool-testing.$$c
+now_s=$TMPDIR/$tool-testing.$$d
+before_s=$TMPDIR/$tool-testing.$$e
+
+if [ "$keepoutput" = yes ]; then
+ rm -f test-$tool.log
+ make RUNTESTFLAGS="-v -v" $checktarget >test-$tool.log 2>&1
+else
+ make RUNTESTFLAGS="-v -v" $checktarget >/dev/null 2>&1
+fi
+
+# Check for DEJAGNU errors that prevented any output at all.
+if [ ! -f $testdir/$tool.sum ]; then
+ echo "Tests didn't run, probably because of a framework error."
+ if [ "$keepoutput" = yes ]; then
+ echo
+ tail -20 test-$tool.log
+ else
+ echo "Unable to determine why. Rerun with -keepoutput."
+ fi
+ exit 2
+fi
+
+# Canonicalize XFAIL and XPASS so the rest of the script can ignore them.
+if [ "$expectedpass" = yes ]; then
+ sed 's/^XFAIL/PASS(XFAIL)/; s/^XPASS/FAIL(XPASS)/' <$testdir/$tool.sum >$testdir/$tool.1.sum || exit 2
+else
+ sed 's/^XFAIL/FAIL(XFAIL)/; s/^XPASS/PASS(XPASS)/' <$testdir/$tool.sum >$testdir/$tool.1.sum || exit 2
+fi
+mv $testdir/$tool.1.sum $testdir/$tool.sum
+
+patterns="$LOGDIR/$tool-??????.sum $LOGDIR/$tool-??????.sum.gz $LOGDIR/$tool-??????????.sum $LOGDIR/$tool-??????????.sum.gz"
+before=`ls -1t $patterns 2>/dev/null | sed 1q`
+
+todayname=`date '+%y%m%d'`
+if [ "$update" = no ]; then
+ now=$testdir/$tool.sum
+else
+ mv -f $testdir/$tool.sum $LOGDIR/$tool-$todayname.sum || exit 2
+ mv -f $testdir/$tool.log $LOGDIR/$tool-$todayname.log || exit 2
+
+ # Say where the logs are stored so they appear in email messages.
+ echo
+ echo "Log files: $LOGDIR/$tool-$todayname.*"
+ echo
+
+ now="$LOGDIR/$tool-$todayname.sum";
+fi
+
+trap "rm -f $tmp $tmp1 $tmp2 $now_s $before_s" 0 1 2 3 5 9 13 15
+
+case $before in
+ "") before="cat /dev/null" ;;
+ *.gz) before="gunzip -c $before" ;;
+ *) before="cat $before" ;;
+esac
+
+# First, the test summary.
+egrep '^# of |===.*Summary.*===' "$now" || echo "(No test summary?)"
+echo
+
+# Pick out the PASS/FAIL/Ufoo messages.
+# We grep for them again later but that's for robustness' sake.
+grep '^[PFU][A-Z()]*:' "$now" | sort -t ':' +1 > "$now_s"
+$before | grep '^[PFU][A-Z()]*:' | sort -t ':' +1 > "$before_s"
+
+grep '^FAIL:' "$now_s" | sed 's/^[^:]*:[ ]*//' >$tmp1
+grep '^PASS' "$before_s" | sed 's/^[^:]*:[ ]*//' | comm -12 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "Tests that now unexpectedly fail, but worked before:"
+ echo
+ cat $tmp2
+ showchangelog=1
+ echo
+fi
+
+grep '^FAIL:' "$now_s" | sed 's/^[^:]*:[ ]*//' >$tmp1
+grep '^[PFU][A-Z()]*:' "$before_s" | sed 's/^[^:]*:[ ]*//' | comm -23 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "New tests that unexpectedly FAIL:"
+ echo
+ cat $tmp2
+ echo
+fi
+
+grep '^FAIL:' "$now_s" | sed 's/^[^:]*:[ ]*//' >$tmp1
+grep '^FAIL' "$before_s" | sed 's/^[^:]*:[ ]*//' | comm -12 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "Tests that still don't work:"
+ echo
+ cat $tmp2
+ echo
+fi
+
+grep '^PASS' "$now_s" | sed 's/^[^:]*:[ ]*//' >$tmp1
+grep '^FAIL' "$before_s" | sed 's/^[^:]*:[ ]*//' | comm -12 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "Tests that now work, but didn't before:"
+ echo
+ cat $tmp2
+ echo
+fi
+
+grep '^PASS' "$now_s" | sed 's/^[^:]*:[ ]*//' >$tmp1
+grep '^[PFU][A-Z()]*:' "$before_s" | sed 's/^[^:]*:[ ]*//' | comm -23 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "New tests that PASS:"
+ echo
+ cat $tmp2
+ echo
+fi
+
+grep '^[PFU][A-Z()]*:' "$now_s" | sed 's/^[^:]*:[ ]*//' >$tmp1
+grep '^PASS' "$before_s" | sed 's/^[^:]*:[ ]*//' | comm -13 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "Old tests that passed, that have disappeared: (Eeek!)"
+ echo
+ cat $tmp2
+ echo
+fi
+
+grep '^[PFU][A-Z()]*:' "$now_s" | sed 's/^[^:]*:[ ]*//' >$tmp1
+grep '^FAIL' "$before_s" | sed 's/^[^:]*:[ ]*//' | comm -13 $tmp1 - >$tmp2
+
+grep -s . $tmp2 >/dev/null
+if [ $? = 0 ]; then
+ echo "Old tests that failed, that have disappeared: (Eeek!)"
+ echo
+ cat $tmp2
+ echo
+fi
+
+egrep '^(ERROR|WARNING):' "$now" >$tmp1
+
+if grep -s . $tmp1 > /dev/null; then
+ echo "Errors and warnings:"
+ echo
+ cat $tmp1
+ echo
+fi
+
+if [ "$tool" = g++ ]; then
+ if [ -f $DEVOBINDIR/libio/run-make-check ]; then
+ cd $DEVOBINDIR/libio
+ make check >$TMPDIR/clgpp$$ 2>&1
+ if [ $? != 0 ]; then
+ echo
+ echo "libio fails to make check:"
+ tail -20 $TMPDIR/clgpp$$
+ fi
+ fi
+ if [ -f $DEVOBINDIR/libstdc++/run-make-check ]; then
+ cd $DEVOBINDIR/libstdc++
+ make check >$TMPDIR/clgpp$$ 2>&1
+ if [ $? != 0 ]; then
+ echo
+ echo "libstdc++ fails to make check:"
+ tail -20 $TMPDIR/clgpp$$
+ fi
+ fi
+ if [ -f $DEVOBINDIR/libg++/run-make-check ]; then
+ cd $DEVOBINDIR/libg++
+ make check >$TMPDIR/clgpp$$ 2>&1
+ if [ $? != 0 ]; then
+ echo
+ echo "libg++ fails to make check:"
+ tail -20 $TMPDIR/clgpp$$
+ fi
+ fi
+ rm -f $TMPDIR/clgpp$$
+ cd $DEVOBINDIR
+fi
+
+if [ "$devoname" != "" ]; then
+ if [ "$showchangelog" = 1 ]; then
+ echo "Here is what's new in the ChangeLog:"
+ echo
+ diff -c $LOGDIR/$devoname.ChangeLog $DEVOSRCDIR/ChangeLog
+ echo
+ if [ "$tool" = g++ ]; then
+ echo
+ echo "Here is what's new in the ChangeLog.egcs:"
+ echo
+ diff -c $LOGDIR/gcc.ChangeLog.egcs $DEVOSRCDIR/ChangeLog.egcs
+
+ echo
+ echo "Here is what's new in the cp/ChangeLog:"
+ echo
+ diff -c $LOGDIR/g++.ChangeLog $DEVOSRCDIR/cp/ChangeLog
+ fi
+ echo
+ fi
+ if [ "$update" != no ]; then
+ # save the old ChangeLog as a reference for next time
+ rm -f $LOGDIR/$devoname.ChangeLog.BAK
+ mv $LOGDIR/$devoname.ChangeLog $LOGDIR/$devoname.ChangeLog.BAK 2>/dev/null
+ $CP $DEVOSRCDIR/ChangeLog $LOGDIR/$devoname.ChangeLog
+ if [ "$tool" = g++ ]; then
+ rm -f $LOGDIR/gcc.ChangeLog.egcs.BAK
+ mv $LOGDIR/gcc.ChangeLog.egcs $LOGDIR/gcc.ChangeLog.egcs.BAK 2>/dev/null
+ $CP $DEVOSRCDIR/ChangeLog.egcs $LOGDIR/gcc.ChangeLog.egcs
+
+ rm -f $LOGDIR/g++.ChangeLog.BAK
+ mv $LOGDIR/g++.ChangeLog $LOGDIR/g++.ChangeLog.BAK 2>/dev/null
+ $CP $DEVOSRCDIR/cp/ChangeLog $LOGDIR/g++.ChangeLog
+ fi
+ fi
+fi
+
+$before | diff - $now | grep -s . >/dev/null
+if [ $? = 0 ]; then
+ echo "Details:"
+ echo
+ $before | diff - $now
+ echo
+fi
--- /dev/null
+#!/usr/latest/bin/wish -f
+# Program: testit
+# Tcl version: 7.2 (Tcl/Tk/XF)
+# Tk version: 3.5
+# XF version: 2.2
+#
+
+
+# procedure to show window .
+proc ShowWindow. {args} {# xf ignore me 7
+
+ # Window manager configurations
+ global tkVersion
+ wm positionfrom . user
+ wm sizefrom . ""
+ wm maxsize . 1152 900
+ wm title . {xf}
+
+ # bindings
+ bind . <Button-3> {MenuPopupPost .frame0.menubutton3.m.menu4 %X %Y}
+ bind . <ButtonRelease-3> {MenuPopupRelease .frame0.menubutton3.m.menu4 %W}
+
+ # build widget .frame0
+ frame .frame0 \
+ -background {white} \
+ -borderwidth {2} \
+ -relief {raised}
+
+ # build widget .frame0.menubutton0
+ menubutton .frame0.menubutton0 \
+ -background {white} \
+ -foreground {black} \
+ -menu {.frame0.menubutton0.m} \
+ -text {Summaries}
+
+ # build widget .frame0.menubutton0.m
+ menu .frame0.menubutton0.m \
+ -background {white} \
+ -foreground {black}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/gcc.sum
+
+} \
+ -label {Gcc}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/g++.sum
+
+} \
+ -label {G++}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/gdb.sum
+
+} \
+ -label {Gdb}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/gas.sum
+
+} \
+ -label {Gas}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/binutils.sum
+
+} \
+ -label {Binutils}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/runtest.sum
+
+} \
+ -label {Runtest}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/tcl.sum
+
+} \
+ -label {Tcl}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/expect.sum
+
+} \
+ -label {Expect}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/libg++.sum
+
+} \
+ -label {Libg++}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/libio.sum
+
+} \
+ -label {Libio}
+ .frame0.menubutton0.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/libm.sum
+
+} \
+ -label {Libm}
+
+ # build widget .frame0.menubutton1
+ menubutton .frame0.menubutton1 \
+ -background {white} \
+ -foreground {black} \
+ -menu {.frame0.menubutton1.m} \
+ -text {Misc}
+
+ # build widget .frame0.menubutton1.m
+ menu .frame0.menubutton1.m \
+ -background {white} \
+ -foreground {black}
+ .frame0.menubutton1.m add command \
+ -command {EndSrc
+destroy .} \
+ -label {Exit}
+ .frame0.menubutton1.m add command \
+ -command {.frame6.frame.text2 delete 0.0 end} \
+ -label {Clear window}
+ .frame0.menubutton1.m add command \
+ -command {dialogbox} \
+ -label {Editor}
+ .frame0.menubutton1.m add command \
+ -command {.frame6.frame.text2 insert 0.0 "Top of tree is $testbase\n"} \
+ -label {Show filename}
+
+ # build widget .frame0.menubutton3
+ menubutton .frame0.menubutton3 \
+ -background {white} \
+ -foreground {black} \
+ -menu {.frame0.menubutton3.m} \
+ -text {Host}
+
+ # build widget .frame0.menubutton3.m
+ menu .frame0.menubutton3.m \
+ -background {white} \
+ -foreground {black}
+ .frame0.menubutton3.m add command \
+ -command {set host "alpha-dec-osf1.3"} \
+ -label {alpha-dec-osf1.3}
+ .frame0.menubutton3.m add command \
+ -command {set host "hppa1.1-hp-hpux"} \
+ -label {hppa1.1-hp-hpux}
+ .frame0.menubutton3.m add command \
+ -command {set host "i386-unknown-sysv4.2"} \
+ -label {i386-unknown-sysv4.2}
+ .frame0.menubutton3.m add command \
+ -command {set host "m68k-hp-hpux"} \
+ -label {m68k-hp-hpux}
+ .frame0.menubutton3.m add command \
+ -command {set host "m68k-sun-sunos4.1.1"} \
+ -label {m68k-sun-sunos4.1.1}
+ .frame0.menubutton3.m add command \
+ -command {set host "mips-dec-ultrix4.2"} \
+ -label {mips-dec-ultrix4.2}
+ .frame0.menubutton3.m add command \
+ -command {set host "mips-sgi-irix4.0.5H"} \
+ -label {mips-sgi-irix4.0.5H}
+ .frame0.menubutton3.m add command \
+ -command {set host "rs6000-ibm-aix3.2"} \
+ -label {rs6000-ibm-aix3.2}
+ .frame0.menubutton3.m add command \
+ -command {set host "sparc-sun-solaris2.3"} \
+ -label {sparc-sun-solaris2.3}
+ .frame0.menubutton3.m add command \
+ -command {set host "sparc-sun-sunos4.1.3"} \
+ -label {sparc-sun-sunos4.1.3}
+
+ # build widget .frame0.menubutton2
+ menubutton .frame0.menubutton2 \
+ -background {white} \
+ -foreground {black} \
+ -menu {.frame0.menubutton2.m} \
+ -text {Target}
+
+ # build widget .frame0.menubutton2.m
+ menu .frame0.menubutton2.m \
+ -background {white} \
+ -foreground {black}
+ .frame0.menubutton2.m add command \
+ -command {set target "a29k-amd-udi"} \
+ -label {a29k-amd-udi}
+ .frame0.menubutton2.m add command \
+ -command {set target "h8300-hms"} \
+ -label {h8300-hms}
+ .frame0.menubutton2.m add command \
+ -command {set target "i386-aout"} \
+ -label {i386-aout}
+ .frame0.menubutton2.m add command \
+ -command {set target "i386-lynx"} \
+ -label {i386-lynx}
+ .frame0.menubutton2.m add command \
+ -command {set target "i960-intel-nindy"} \
+ -label {i960-intel-nindy}
+ .frame0.menubutton2.m add command \
+ -command {set target "i960-vxwork"} \
+ -label {i960-vxworks}
+ .frame0.menubutton2.m add command \
+ -command {set target "m68k-aout"} \
+ -label {m68k-aout}
+ .frame0.menubutton2.m add command \
+ -command {set target "m68k-coff"} \
+ -label {m68k-coff}
+ .frame0.menubutton2.m add command \
+ -command {set target "m68k-lynx"} \
+ -label {m68k-lynx}
+ .frame0.menubutton2.m add command \
+ -command {set target "m68k-vxworks"} \
+ -label {m68k-vxworks}
+ .frame0.menubutton2.m add command \
+ -command {set target "mips-idt-ecoff"} \
+ -label {mips-idt-ecoff}
+ .frame0.menubutton2.m add command \
+ -command {set target "sh-hms"} \
+ -label {sh-hms}
+ .frame0.menubutton2.m add command \
+ -command {set target "sparc-aout"} \
+ -label {sparc-aout}
+ .frame0.menubutton2.m add command \
+ -command {set target "sparc-sun-sunos4.1.3"} \
+ -label {sparc-sun-sunos4.1.3}
+ .frame0.menubutton2.m add command \
+ -command {set target "sparc-vxworks"} \
+ -label {sparc-vxworks}
+ .frame0.menubutton2.m add command \
+ -command {set target "sparclite-aout"} \
+ -label {sparclite-aout}
+ .frame0.menubutton2.m add command \
+ -command {set target "sparclite-coff"} \
+ -label {sparclite-coff}
+ .frame0.menubutton2.m add command \
+ -command {set target "hppa1.1-hp-hpux"} \
+ -label {hppa1.1-hp-hpux}
+ .frame0.menubutton2.m add command \
+ -command {set target "i386-unknown-sysv4.2"} \
+ -label {i386-unknown-sysv4.2}
+ .frame0.menubutton2.m add command \
+ -command {set target "m68k-hp-hpux"} \
+ -label {m68k-hp-hpux}
+ .frame0.menubutton2.m add command \
+ -command {set target "m68k-sun-sunos4.1.1"} \
+ -label {m68k-sun-sunos4.1.1}
+ .frame0.menubutton2.m add command \
+ -command {set target "mips-dec-ultrix4.2"} \
+ -label {mips-dec-ultrix4.2}
+ .frame0.menubutton2.m add command \
+ -command {set target "mips-sgi-irix4.0.5H"} \
+ -label {mips-sgi-irix4.0.5H}
+ .frame0.menubutton2.m add command \
+ -command {set target "rs6000-ibm-aix3.2"} \
+ -label {rs6000-ibm-aix3.2}
+ .frame0.menubutton2.m add command \
+ -command {set target "sparc-sun-solaris2.3"} \
+ -label {sparc-sun-solaris2.3}
+
+ # build widget .frame0.menubutton9
+ menubutton .frame0.menubutton9 \
+ -background {white} \
+ -foreground {black} \
+ -menu {.frame0.menubutton9.m} \
+ -text {Results}
+
+ # build widget .frame0.menubutton9.m
+ menu .frame0.menubutton9.m \
+ -background {white} \
+ -foreground {black}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/gcc
+
+} \
+ -label {Gcc}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/g++
+
+} \
+ -label {G++}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/gdb
+
+} \
+ -label {Gdb}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/gas
+
+} \
+ -label {Gas}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/binutils
+
+} \
+ -label {Binutils}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/runtest
+} \
+ -label {Runtest}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/tcl
+
+} \
+ -label {Tcl}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/expect
+
+} \
+ -label {Expect}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/libg++
+
+} \
+ -label {Libg++}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/libio
+} \
+ -label {Libio}
+ .frame0.menubutton9.m add command \
+ -command {getresult $testbase/objdir/$host/$target/logs/libm
+
+} \
+ -label {Libm}
+
+ # build widget .frame0.menubutton10
+ menubutton .frame0.menubutton10 \
+ -background {white} \
+ -foreground {black} \
+ -menu {.frame0.menubutton10.m} \
+ -text {Logs}
+
+ # build widget .frame0.menubutton10.m
+ menu .frame0.menubutton10.m \
+ -background {white} \
+ -foreground {black}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/gcc.log
+
+} \
+ -label {Gcc}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/g++.log
+
+} \
+ -label {G++}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/gdb.log
+
+} \
+ -label {Gdb}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/gas.log
+
+} \
+ -label {Gas}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/binutils.log
+
+} \
+ -label {Binutils}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/runtest.log
+
+} \
+ -label {Runtest}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/tcl.log
+
+} \
+ -label {Tcl}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/expect.log
+
+} \
+ -label {Expect}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/libg++.log
+
+} \
+ -label {Libg++}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/libio.log
+
+} \
+ -label {Libio}
+ .frame0.menubutton10.m add command \
+ -command {loadfile $testbase/objdir/$host/$target/logs/libm.log
+
+} \
+ -label {Libm}
+
+ # pack widget .frame0
+ pack append .frame0 \
+ .frame0.menubutton0 {left frame center} \
+ .frame0.menubutton1 {right frame center} \
+ .frame0.menubutton3 {left frame center} \
+ .frame0.menubutton2 {left frame center} \
+ .frame0.menubutton9 {left frame center} \
+ .frame0.menubutton10 {left frame center}
+
+ # build widget .frame1
+ frame .frame1 \
+ -background {white} \
+ -borderwidth {2} \
+ -relief {raised}
+
+ # build widget .frame1.message3
+ message .frame1.message3 \
+ -aspect {1500} \
+ -background {white} \
+ -borderwidth {0} \
+ -foreground {black} \
+ -padx {5} \
+ -pady {2} \
+ -relief {raised} \
+ -text {sparc-sun-sunos4.1.3} \
+ -textvariable {host}
+
+ # build widget .frame1.message4
+ message .frame1.message4 \
+ -aspect {1500} \
+ -background {white} \
+ -borderwidth {0} \
+ -foreground {black} \
+ -padx {5} \
+ -pady {2} \
+ -relief {raised} \
+ -text {sparc-sun-sunos4.1.3} \
+ -textvariable {target}
+
+ # pack widget .frame1
+ pack append .frame1 \
+ .frame1.message3 {left frame center} \
+ .frame1.message4 {right frame center}
+
+ # build widget .frame6
+ frame .frame6 \
+ -background {white} \
+ -borderwidth {2} \
+ -relief {raised}
+
+ # build widget .frame6.frame
+ frame .frame6.frame \
+ -background {white} \
+ -relief {raised}
+
+ # build widget .frame6.frame.scrollbar1
+ scrollbar .frame6.frame.scrollbar1 \
+ -background {white} \
+ -command {.frame6.frame.text2 yview} \
+ -foreground {black} \
+ -relief {raised}
+
+ # build widget .frame6.frame.text2
+ text .frame6.frame.text2 \
+ -background {white} \
+ -borderwidth {2} \
+ -foreground {black} \
+ -relief {raised} \
+ -wrap {word} \
+ -yscrollcommand {.frame6.frame.scrollbar1 set}
+
+ # pack widget .frame6.frame
+ pack append .frame6.frame \
+ .frame6.frame.scrollbar1 {left frame center filly} \
+ .frame6.frame.text2 {top frame center expand fill}
+
+ # pack widget .frame6
+ pack append .frame6 \
+ .frame6.frame {top frame center fill}
+
+ # pack widget .
+ pack append . \
+ .frame0 {top frame center fillx} \
+ .frame1 {bottom frame center fillx} \
+ .frame6 {top frame center expand fill}
+
+ .frame6.frame.text2 insert end {}
+
+
+
+ if {"[info procs XFEdit]" != ""} {
+ catch "XFMiscBindWidgetTree ."
+ after 2 "catch {XFEditSetShowWindows}"
+ }
+}
+
+
+# Procedure: Alias
+if {"[info procs Alias]" == ""} {
+proc Alias { args} {
+# xf ignore me 7
+##########
+# Procedure: Alias
+# Description: establish an alias for a procedure
+# Arguments: args - no argument means that a list of all aliases
+# is returned. Otherwise the first parameter is
+# the alias name, and the second parameter is
+# the procedure that is aliased.
+# Returns: nothing, the command that is bound to the alias or a
+# list of all aliases - command pairs.
+# Sideeffects: internalAliasList is updated, and the alias
+# proc is inserted
+##########
+ global internalAliasList
+
+ if {[llength $args] == 0} {
+ return $internalAliasList
+ } {
+ if {[llength $args] == 1} {
+ set xfTmpIndex [lsearch $internalAliasList "[lindex $args 0] *"]
+ if {$xfTmpIndex != -1} {
+ return [lindex [lindex $internalAliasList $xfTmpIndex] 1]
+ }
+ } {
+ if {[llength $args] == 2} {
+ eval "proc [lindex $args 0] {args} {#xf ignore me 4
+return \[eval \"[lindex $args 1] \$args\"\]}"
+ set xfTmpIndex [lsearch $internalAliasList "[lindex $args 0] *"]
+ if {$xfTmpIndex != -1} {
+ set internalAliasList [lreplace $internalAliasList $xfTmpIndex $xfTmpIndex "[lindex $args 0] [lindex $args 1]"]
+ } {
+ lappend internalAliasList "[lindex $args 0] [lindex $args 1]"
+ }
+ } {
+ error "Alias: wrong number or args: $args"
+ }
+ }
+ }
+}
+}
+
+
+# Procedure: GetSelection
+if {"[info procs GetSelection]" == ""} {
+proc GetSelection {} {
+# xf ignore me 7
+##########
+# Procedure: GetSelection
+# Description: get current selection
+# Arguments: none
+# Returns: none
+# Sideeffects: none
+##########
+
+ # the save way
+ set xfSelection ""
+ catch "selection get" xfSelection
+ if {"$xfSelection" == "selection doesn't exist or form \"STRING\" not defined"} {
+ return ""
+ } {
+ return $xfSelection
+ }
+}
+}
+
+
+# Procedure: MenuPopupAdd
+if {"[info procs MenuPopupAdd]" == ""} {
+proc MenuPopupAdd { xfW xfButton xfMenu {xfModifier ""} {xfCanvasTag ""}} {
+# xf ignore me 7
+# the popup menu handling is from (I already gave up with popup handling :-):
+#
+# Copyright 1991,1992 by James Noble.
+# Everyone is granted permission to copy, modify and redistribute.
+# This notice must be preserved on all copies or derivates.
+#
+##########
+# Procedure: MenuPopupAdd
+# Description: attach a popup menu to widget
+# Arguments: xfW - the widget
+# xfButton - the button we use
+# xfMenu - the menu to attach
+# {xfModifier} - a optional modifier
+# {xfCanvasTag} - a canvas tagOrId
+# Returns: none
+# Sideeffects: none
+##########
+ global tk_popupPriv
+
+ set tk_popupPriv($xfMenu,focus) ""
+ set tk_popupPriv($xfMenu,grab) ""
+ if {"$xfModifier" != ""} {
+ set press "$xfModifier-"
+ set motion "$xfModifier-"
+ set release "Any-"
+ } {
+ set press ""
+ set motion ""
+ set release ""
+ }
+
+ bind $xfMenu "<${motion}B${xfButton}-Motion>" "MenuPopupMotion $xfMenu %W %X %Y"
+ bind $xfMenu "<${release}ButtonRelease-${xfButton}>" "MenuPopupRelease $xfMenu %W"
+ if {"$xfCanvasTag" == ""} {
+ bind $xfW "<${press}ButtonPress-${xfButton}>" "MenuPopupPost $xfMenu %X %Y"
+ bind $xfW "<${release}ButtonRelease-${xfButton}>" "MenuPopupRelease $xfMenu %W"
+ } {
+ $xfW bind $xfCanvasTag "<${press}ButtonPress-${xfButton}>" "MenuPopupPost $xfMenu %X %Y"
+ $xfW bind $xfCanvasTag "<${release}ButtonRelease-${xfButton}>" "MenuPopupRelease $xfMenu %W"
+ }
+}
+}
+
+
+# Procedure: MenuPopupMotion
+if {"[info procs MenuPopupMotion]" == ""} {
+proc MenuPopupMotion { xfMenu xfW xfX xfY} {
+# xf ignore me 7
+##########
+# Procedure: MenuPopupMotion
+# Description: handle the popup menu motion
+# Arguments: xfMenu - the topmost menu
+# xfW - the menu
+# xfX - the root x coordinate
+# xfY - the root x coordinate
+# Returns: none
+# Sideeffects: none
+##########
+ global tk_popupPriv
+
+ if {"[info commands $xfW]" != "" && [winfo ismapped $xfW] &&
+ "[winfo class $xfW]" == "Menu" &&
+ [info exists tk_popupPriv($xfMenu,focus)] &&
+ "$tk_popupPriv($xfMenu,focus)" != "" &&
+ [info exists tk_popupPriv($xfMenu,grab)] &&
+ "$tk_popupPriv($xfMenu,grab)" != ""} {
+ set xfPopMinX [winfo rootx $xfW]
+ set xfPopMaxX [expr $xfPopMinX+[winfo width $xfW]]
+ if {$xfX >= $xfPopMinX && $xfX <= $xfPopMaxX} {
+ $xfW activate @[expr $xfY-[winfo rooty $xfW]]
+ if {![catch "$xfW entryconfig @[expr $xfY-[winfo rooty $xfW]] -menu" result]} {
+ if {"[lindex $result 4]" != ""} {
+ foreach binding [bind $xfMenu] {
+ bind [lindex $result 4] $binding [bind $xfMenu $binding]
+ }
+ }
+ }
+ } {
+ $xfW activate none
+ }
+ }
+}
+}
+
+
+# Procedure: MenuPopupPost
+if {"[info procs MenuPopupPost]" == ""} {
+proc MenuPopupPost { xfMenu xfX xfY} {
+# xf ignore me 7
+##########
+# Procedure: MenuPopupPost
+# Description: post the popup menu
+# Arguments: xfMenu - the menu
+# xfX - the root x coordinate
+# xfY - the root x coordinate
+# Returns: none
+# Sideeffects: none
+##########
+ global tk_popupPriv
+
+ if {"[info commands $xfMenu]" != ""} {
+ if {![info exists tk_popupPriv($xfMenu,focus)]} {
+ set tk_popupPriv($xfMenu,focus) [focus]
+ } {
+ if {"$tk_popupPriv($xfMenu,focus)" == ""} {
+ set tk_popupPriv($xfMenu,focus) [focus]
+ }
+ }
+ set tk_popupPriv($xfMenu,grab) $xfMenu
+
+ catch "$xfMenu activate none"
+ catch "$xfMenu post $xfX $xfY"
+ catch "focus $xfMenu"
+ catch "grab -global $xfMenu"
+ }
+}
+}
+
+
+# Procedure: MenuPopupRelease
+if {"[info procs MenuPopupRelease]" == ""} {
+proc MenuPopupRelease { xfMenu xfW} {
+# xf ignore me 7
+##########
+# Procedure: MenuPopupRelease
+# Description: remove the popup menu
+# Arguments: xfMenu - the topmost menu widget
+# xfW - the menu widget
+# Returns: none
+# Sideeffects: none
+##########
+ global tk_popupPriv
+ global tkVersion
+
+ if {"[info commands $xfW]" != "" && [winfo ismapped $xfW] &&
+ "[winfo class $xfW]" == "Menu" &&
+ [info exists tk_popupPriv($xfMenu,focus)] &&
+ "$tk_popupPriv($xfMenu,focus)" != "" &&
+ [info exists tk_popupPriv($xfMenu,grab)] &&
+ "$tk_popupPriv($xfMenu,grab)" != ""} {
+ if {$tkVersion >= 3.0} {
+ catch "grab release $tk_popupPriv($xfMenu,grab)"
+ } {
+ catch "grab none"
+ }
+ catch "focus $tk_popupPriv($xfMenu,focus)"
+ set tk_popupPriv($xfMenu,focus) ""
+ set tk_popupPriv($xfMenu,grab) ""
+ if {"[$xfW index active]" != "none"} {
+ $xfW invoke active; catch "$xfMenu unpost"
+ }
+ }
+ catch "$xfMenu unpost"
+}
+}
+
+
+# Procedure: NoFunction
+if {"[info procs NoFunction]" == ""} {
+proc NoFunction { args} {
+# xf ignore me 7
+##########
+# Procedure: NoFunction
+# Description: do nothing (especially with scales and scrollbars)
+# Arguments: args - a number of ignored parameters
+# Returns: none
+# Sideeffects: none
+##########
+}
+}
+
+
+# Procedure: SN
+if {"[info procs SN]" == ""} {
+proc SN { {xfName ""}} {
+# xf ignore me 7
+##########
+# Procedure: SN
+# Description: map a symbolic name to the widget path
+# Arguments: xfName
+# Returns: the symbolic name
+# Sideeffects: none
+##########
+
+ SymbolicName $xfName
+}
+}
+
+
+# Procedure: SymbolicName
+if {"[info procs SymbolicName]" == ""} {
+proc SymbolicName { {xfName ""}} {
+# xf ignore me 7
+##########
+# Procedure: SymbolicName
+# Description: map a symbolic name to the widget path
+# Arguments: xfName
+# Returns: the symbolic name
+# Sideeffects: none
+##########
+
+ global symbolicName
+
+ if {"$xfName" != ""} {
+ set xfArrayName ""
+ append xfArrayName symbolicName ( $xfName )
+ if {![catch "set \"$xfArrayName\"" xfValue]} {
+ return $xfValue
+ } {
+ if {"[info commands XFProcError]" != ""} {
+ XFProcError "Unknown symbolic name:\n$xfName"
+ } {
+ puts stderr "XF error: unknown symbolic name:\n$xfName"
+ }
+ }
+ }
+ return ""
+}
+}
+
+
+# Procedure: Unalias
+if {"[info procs Unalias]" == ""} {
+proc Unalias { aliasName} {
+# xf ignore me 7
+##########
+# Procedure: Unalias
+# Description: remove an alias for a procedure
+# Arguments: aliasName - the alias name to remove
+# Returns: none
+# Sideeffects: internalAliasList is updated, and the alias
+# proc is removed
+##########
+ global internalAliasList
+
+ set xfIndex [lsearch $internalAliasList "$aliasName *"]
+ if {$xfIndex != -1} {
+ rename $aliasName ""
+ set internalAliasList [lreplace $internalAliasList $xfIndex $xfIndex]
+ }
+}
+}
+
+
+# Procedure: getbase
+proc getbase {} {
+ global env
+ global testbase
+ if [info exists env(TESTBASE)] then {
+ set testbase $env(TESTBASE)
+ } else {
+ set testbase /lisa/test/rob
+ }
+ return $testbase
+}
+
+
+# Procedure: getresult
+proc getresult { name} {
+set tmp "[lsort [glob -nocomplain $name-results-??????-????]]"
+set tmp [lindex $tmp [expr [llength $tmp] - 1]]
+if [string match "" $tmp] then {
+ .frame6.frame.text2 delete 0.0 end
+ .frame6.frame.text2 insert 0.0 "Couldn't find results for: $name\n"
+ return
+} else {
+ return [loadfile $tmp]
+}
+}
+
+# Procedure: dialogbox
+proc dialogbox {} {
+ set w .frame6.top2
+ catch {destroy $w}
+ catch {destroy $w.e1}
+ toplevel $w
+# dpos $w
+ wm title $w "Change Editor"
+ wm iconname $w "Entries"
+ message $w.msg -font -Adobe-times-medium-r-normal--*-180* -aspect 200 \
+ -text "Hey Now. Click the \"OK\" button when you've seen enough."
+ frame $w.frame -borderwidth 10
+ button $w.ok -text OK -command "destroy $w"
+ pack $w.msg $w.frame $w.ok -side top -fill both
+
+ entry $w.frame.e1 -relief sunken -textvariable editor
+ pack $w.frame.e1 -side top -pady 5 -fill x
+ bind $w.frame.e1 <Return> "destroy $w"
+}
+
+# Procedure: loadfile
+proc loadfile { name} {
+if ![file exists $name] then {
+ .frame6.frame.text2 delete 0.0 end
+ .frame6.frame.text2 insert 0.0 "Couldn't find:\t$name\n"
+ return
+}
+
+global editor
+if [info exists editor] then {
+ if ![string match "" $editor] then {
+ catch "exec $editor $name&" tmp
+ if [info exists tmp] then {
+ .frame6.frame.text2 delete 0.0 end
+ .frame6.frame.text2 insert 0.0 "Editor returned $tmp\n"
+ }
+ }
+}
+.frame6.frame.text2 delete 0.0 end
+set fd [open $name r]
+while { [gets $fd line]>=0 } {
+.frame6.frame.text2 insert end "$line\n"
+.frame6.frame.text2 mark set insert 0.0
+}
+close $fd
+unset fd
+}
+
+
+
+# application parsing procedure
+proc XFLocalParseAppDefs {xfAppDefFile} {
+ global xfAppDefaults
+
+ # basically from: Michael Moore
+ if {[file exists $xfAppDefFile] &&
+ [file readable $xfAppDefFile] &&
+ "[file type $xfAppDefFile]" == "link"} {
+ catch "file type $xfAppDefFile" xfType
+ while {"$xfType" == "link"} {
+ if {[catch "file readlink $xfAppDefFile" xfAppDefFile]} {
+ return
+ }
+ catch "file type $xfAppDefFile" xfType
+ }
+ }
+ if {!("$xfAppDefFile" != "" &&
+ [file exists $xfAppDefFile] &&
+ [file readable $xfAppDefFile] &&
+ "[file type $xfAppDefFile]" == "file")} {
+ return
+ }
+ if {![catch "open $xfAppDefFile r" xfResult]} {
+ set xfAppFileContents [read $xfResult]
+ close $xfResult
+ foreach line [split $xfAppFileContents "\n"] {
+ # backup indicates how far to backup. It applies to the
+ # situation where a resource name ends in . and when it
+ # ends in *. In the second case you want to keep the *
+ # in the widget name for pattern matching, but you want
+ # to get rid of the . if it is the end of the name.
+ set backup -2
+ set line [string trim $line]
+ if {[string index $line 0] == "#" || "$line" == ""} {
+ # skip comments and empty lines
+ continue
+ }
+ set list [split $line ":"]
+ set resource [string trim [lindex $list 0]]
+ set i [string last "." $resource]
+ set j [string last "*" $resource]
+ if {$j > $i} {
+ set i $j
+ set backup -1
+ }
+ incr i
+ set name [string range $resource $i end]
+ incr i $backup
+ set widname [string range $resource 0 $i]
+ set value [string trim [lindex $list 1]]
+ if {"$widname" != "" && "$widname" != "*"} {
+ # insert the widget and resourcename to the application
+ # defaults list.
+ if {![info exists xfAppDefaults]} {
+ set xfAppDefaults ""
+ }
+ lappend xfAppDefaults [list $widname [string tolower $name] $value]
+ }
+ }
+ }
+}
+
+# application loading procedure
+proc XFLocalLoadAppDefs {{xfClasses ""} {xfPriority "startupFile"} {xfAppDefFile ""}} {
+ global env
+
+ if {"$xfAppDefFile" == ""} {
+ set xfFileList ""
+ if {[info exists env(XUSERFILESEARCHPATH)]} {
+ append xfFileList [split $env(XUSERFILESEARCHPATH) :]
+ }
+ if {[info exists env(XAPPLRESDIR)]} {
+ append xfFileList [split $env(XAPPLRESDIR) :]
+ }
+ if {[info exists env(XFILESEARCHPATH)]} {
+ append xfFileList [split $env(XFILESEARCHPATH) :]
+ }
+ append xfFileList " /usr/lib/X11/app-defaults"
+ append xfFileList " /usr/X11/lib/X11/app-defaults"
+
+ foreach xfCounter1 $xfClasses {
+ foreach xfCounter2 $xfFileList {
+ set xfPathName $xfCounter2
+ if {[regsub -all "%N" "$xfPathName" "$xfCounter1" xfResult]} {
+ set xfPathName $xfResult
+ }
+ if {[regsub -all "%T" "$xfPathName" "app-defaults" xfResult]} {
+ set xfPathName $xfResult
+ }
+ if {[regsub -all "%S" "$xfPathName" "" xfResult]} {
+ set xfPathName $xfResult
+ }
+ if {[regsub -all "%C" "$xfPathName" "" xfResult]} {
+ set xfPathName $xfResult
+ }
+ if {[file exists $xfPathName] &&
+ [file readable $xfPathName] &&
+ ("[file type $xfPathName]" == "file" ||
+ "[file type $xfPathName]" == "link")} {
+ catch "option readfile $xfPathName $xfPriority"
+ if {"[info commands XFParseAppDefs]" != ""} {
+ XFParseAppDefs $xfPathName
+ } {
+ if {"[info commands XFLocalParseAppDefs]" != ""} {
+ XFLocalParseAppDefs $xfPathName
+ }
+ }
+ } {
+ if {[file exists $xfCounter2/$xfCounter1] &&
+ [file readable $xfCounter2/$xfCounter1] &&
+ ("[file type $xfCounter2/$xfCounter1]" == "file" ||
+ "[file type $xfCounter2/$xfCounter1]" == "link")} {
+ catch "option readfile $xfCounter2/$xfCounter1 $xfPriority"
+ if {"[info commands XFParseAppDefs]" != ""} {
+ XFParseAppDefs $xfCounter2/$xfCounter1
+ } {
+ if {"[info commands XFLocalParseAppDefs]" != ""} {
+ XFLocalParseAppDefs $xfCounter2/$xfCounter1
+ }
+ }
+ }
+ }
+ }
+ }
+ } {
+ # load a specific application defaults file
+ if {[file exists $xfAppDefFile] &&
+ [file readable $xfAppDefFile] &&
+ ("[file type $xfAppDefFile]" == "file" ||
+ "[file type $xfAppDefFile]" == "link")} {
+ catch "option readfile $xfAppDefFile $xfPriority"
+ if {"[info commands XFParseAppDefs]" != ""} {
+ XFParseAppDefs $xfAppDefFile
+ } {
+ if {"[info commands XFLocalParseAppDefs]" != ""} {
+ XFLocalParseAppDefs $xfAppDefFile
+ }
+ }
+ }
+ }
+}
+
+# application setting procedure
+proc XFLocalSetAppDefs {{xfWidgetPath "."}} {
+ global xfAppDefaults
+
+ if {![info exists xfAppDefaults]} {
+ return
+ }
+ foreach xfCounter $xfAppDefaults {
+ if {"$xfCounter" == ""} {
+ break
+ }
+ set widname [lindex $xfCounter 0]
+ if {[string match $widname ${xfWidgetPath}] ||
+ [string match "${xfWidgetPath}*" $widname]} {
+ set name [string tolower [lindex $xfCounter 1]]
+ set value [lindex $xfCounter 2]
+ # Now lets see how many tcl commands match the name
+ # pattern specified.
+ set widlist [info command $widname]
+ if {"$widlist" != ""} {
+ foreach widget $widlist {
+ # make sure this command is a widget.
+ if {![catch "winfo id $widget"] &&
+ [string match "${xfWidgetPath}*" $widget]} {
+ catch "$widget configure -$name $value"
+ }
+ }
+ }
+ }
+ }
+}
+
+
+
+# startup source
+proc StartupSrc {args} {
+global testbase
+global hostlist
+global targlist
+global host
+
+set host [exec config.guess]
+set target $host
+}
+
+
+# end source
+proc EndSrc {} {
+.frame6.frame.text2 delete 0.0 end
+}
+
+# startup source
+StartupSrc
+
+# initialize global variables
+global {editor}
+set {editor} {}
+global {fsBox}
+set {fsBox(activeBackground)} {}
+set {fsBox(activeForeground)} {}
+set {fsBox(all)} {0}
+set {fsBox(background)} {}
+set {fsBox(button)} {0}
+set {fsBox(extensions)} {0}
+set {fsBox(font)} {}
+set {fsBox(foreground)} {}
+set {fsBox(internalPath)} {/offsite/rob/DejaGnu/devo/dejagnu}
+set {fsBox(name)} {}
+set {fsBox(path)} {/offsite/rob/DejaGnu/devo/dejagnu}
+set {fsBox(pattern)} {*}
+set {fsBox(scrollActiveForeground)} {}
+set {fsBox(scrollBackground)} {}
+set {fsBox(scrollForeground)} {}
+set {fsBox(scrollSide)} {left}
+set {fsBox(showPixmap)} {0}
+global {host}
+set {host} {sparc-sun-sunos4.1.3}
+global {result}
+set {result} {can't read "editor": no such variable}
+global {target}
+set {target} {sparc-sun-sunos4.1.3}
+global {testbase}
+set {testbase} {/lisa/test/rob}
+
+# please don't modify the following
+# variables. They are needed by xf.
+global {autoLoadList}
+set {autoLoadList(testit)} {0}
+global {internalAliasList}
+set {internalAliasList} {}
+global {moduleList}
+set {moduleList(testit)} {}
+global {preloadList}
+set {preloadList(xfInternal)} {}
+global {symbolicName}
+set {symbolicName(binutils)} {.frame0.menubutton7}
+set {symbolicName(dialogbox)} {.top2}
+set {symbolicName(editor)} {.top2.entry4}
+set {symbolicName(g++)} {.frame0.menubutton4}
+set {symbolicName(gas)} {.frame0.menubutton6}
+set {symbolicName(gdb)} {.frame0.menubutton5}
+set {symbolicName(host)} {.frame0.menubutton3.m}
+set {symbolicName(hostlist)} {.frame0.menubutton3}
+set {symbolicName(logs)} {.frame0.menubutton10}
+set {symbolicName(misc)} {.frame0.menubutton1}
+set {symbolicName(ok)} {.top2.button7}
+set {symbolicName(results)} {.frame0.menubutton9}
+set {symbolicName(root)} {.}
+set {symbolicName(sum)} {.frame0.menubutton0}
+set {symbolicName(targlist)} {.frame0.menubutton2}
+global {xfWmSetPosition}
+set {xfWmSetPosition} {}
+global {xfWmSetSize}
+set {xfWmSetSize} {}
+global {xfAppDefToplevels}
+set {xfAppDefToplevels} {}
+
+# display/remove toplevel windows.
+ShowWindow.
+
+# load default bindings.
+if {[info exists env(XF_BIND_FILE)] &&
+ "[info procs XFShowHelp]" == ""} {
+ source $env(XF_BIND_FILE)
+}
+
+# parse and apply application defaults.
+XFLocalLoadAppDefs Testit
+XFLocalSetAppDefs
+
+# end source
+EndSrc
+
+# eof
+#
+
--- /dev/null
+#include "../newlib/libc/ctype/ctype_.c"
+#include "../newlib/libc/stdlib/strtol.c"
+#include "../newlib/libc/stdlib/atoi.c"
+#include "../newlib/libc/reent/impure.c"
+
+
+/* these are for ld -r -wrap */
+
+void
+__real_exit (int code)
+{
+ exit (code);
+}
+
+void
+__real_abort (void)
+{
+ abort ();
+}
--- /dev/null
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission. M.I.T. makes no representations about the
+# suitability of this software for any purpose. It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+#
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+ case $1 in
+ -c) instcmd="$cpprog"
+ shift
+ continue;;
+
+ -d) dir_arg=true
+ shift
+ continue;;
+
+ -m) chmodcmd="$chmodprog $2"
+ shift
+ shift
+ continue;;
+
+ -o) chowncmd="$chownprog $2"
+ shift
+ shift
+ continue;;
+
+ -g) chgrpcmd="$chgrpprog $2"
+ shift
+ shift
+ continue;;
+
+ -s) stripcmd="$stripprog"
+ shift
+ continue;;
+
+ -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+ shift
+ continue;;
+
+ -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+ shift
+ continue;;
+
+ *) if [ x"$src" = x ]
+ then
+ src=$1
+ else
+ # this colon is to work around a 386BSD /bin/sh bug
+ :
+ dst=$1
+ fi
+ shift
+ continue;;
+ esac
+done
+
+if [ x"$src" = x ]
+then
+ echo "install: no input file specified"
+ exit 1
+else
+ true
+fi
+
+if [ x"$dir_arg" != x ]; then
+ dst=$src
+ src=""
+
+ if [ -d $dst ]; then
+ instcmd=:
+ else
+ instcmd=mkdir
+ fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+ if [ -f $src -o -d $src ]
+ then
+ true
+ else
+ echo "install: $src does not exist"
+ exit 1
+ fi
+
+ if [ x"$dst" = x ]
+ then
+ echo "install: no destination specified"
+ exit 1
+ else
+ true
+ fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+ if [ -d $dst ]
+ then
+ dst="$dst"/`basename $src`
+ else
+ true
+ fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+# this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+ pathcomp="${pathcomp}${1}"
+ shift
+
+ if [ ! -d "${pathcomp}" ] ;
+ then
+ $mkdirprog "${pathcomp}"
+ else
+ true
+ fi
+
+ pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+ $doit $instcmd $dst &&
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+ if [ x"$transformarg" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ dstfile=`basename $dst $transformbasename |
+ sed $transformarg`$transformbasename
+ fi
+
+# don't allow the sed command to completely eliminate the filename
+
+ if [ x"$dstfile" = x ]
+ then
+ dstfile=`basename $dst`
+ else
+ true
+ fi
+
+# Make a temp file name in the proper directory.
+
+ dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+ $doit $instcmd $src $dsttmp &&
+
+ trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing. If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+ if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+ if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+ if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+ if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+ $doit $rmcmd -f $dstdir/$dstfile &&
+ $doit $mvcmd $dsttmp $dstdir/$dstfile
+
+fi &&
+
+
+exit 0
--- /dev/null
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Last modified: 1994-03-25
+# Public domain
+
+errstatus=0
+
+for file in ${1+"$@"} ; do
+ set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+ shift
+
+ pathcomp=
+ for d in ${1+"$@"} ; do
+ pathcomp="$pathcomp$d"
+ case "$pathcomp" in
+ -* ) pathcomp=./$pathcomp ;;
+ esac
+
+ if test ! -d "$pathcomp"; then
+ echo "mkdir $pathcomp" 1>&2
+ mkdir "$pathcomp" || errstatus=$?
+ fi
+
+ pathcomp="$pathcomp/"
+ done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
--- /dev/null
+#!/bin/sh
+#
+# runtest -- basically all this script does is find the proper expect
+# shell and then run DejaGnu.
+#
+# Written by Rob Savoye <rob@cygnus.com>
+#
+
+#
+# Get the execution path to this script and the current directory.
+#
+mypath=${0-.}
+if expr ${mypath} : '.*/.*' > /dev/null
+then
+ :
+else
+ IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}:"
+ for dir in $PATH
+ do
+ test -z "$dir" && dir=.
+ if test -x $dir/$mypath
+ then
+ mypath=$dir/$mypath
+ break
+ fi
+ done
+ IFS="$save_ifs"
+fi
+execpath=`echo ${mypath} | sed -e 's@/[^/]*$@@'`
+# rootme=`pwd`
+
+#
+# get the name by which runtest was invoked and extract the config triplet
+#
+runtest=`echo ${mypath} | sed -e 's@^.*/@@'`
+target=`echo $runtest | sed -e 's/-runtest$//'`
+if [ "$target" != runtest ] ; then
+ target="--target ${target}"
+else
+ target=""
+fi
+
+#
+# Find the right expect binary to use. If a variable EXPECT exists,
+# it takes precedence over all other tests. Otherwise look for a freshly
+# built one, and then use one in the path.
+#
+if [ x"$EXPECT" != x ] ; then
+ expectbin=$EXPECT
+else
+ if [ -x "$execpath/expect" ] ; then
+ expectbin=$execpath/expect
+ else
+ expectbin=expect
+ fi
+fi
+
+# just to be safe...
+if [ -z "$expectbin" ]; then
+ echo "ERROR: No expect shell found"
+ exit 1
+fi
+
+# This wrapper script will set up run-time library search PATHs
+if [ -x "$expectbin-bld.sh" ]; then
+ expectbin="${CONFIG_SHELL-/bin/sh} $expectbin-bld.sh"
+fi
+
+#
+# Extract a few options from the option list.
+#
+verbose=0
+debug=""
+for a in "$@" ; do
+ case $a in
+ -v|--v|-verb*|--verb*) verbose=`expr $verbose + 1`;;
+ -D0|--D0) debug="-D 0" ;;
+ -D1|--D1) debug="-D 1" ;;
+ esac
+done
+
+if expr $verbose \> 0 > /dev/null ; then
+ echo Expect binary is $expectbin
+fi
+
+#
+# find runtest.exp. First we look in it's installed location, otherwise
+# start if from the source tree.
+#
+# runtest.exp is found in (autoconf-configure-set) @datadir@, but
+# $execpath is @bindir@. We're assuming that
+#
+# @datadir@ == @bindir@/../share
+# or
+# @datadir@ == @bindir@/../../share
+#
+# which is a very weak assumption
+#
+for i in `echo ${execpath} | sed -e 's@/[^/]*$@/share/dejagnu@'` `echo ${execpath} | sed -e 's@/[^/]*/[^/]*$@/share/dejagnu@'` $execpath ; do
+ if expr $verbose \> 1 > /dev/null ; then
+ echo Looking for $i/runtest.exp.
+ fi
+ if [ -f $i/runtest.exp ] ; then
+ runpath=$i
+ if expr $verbose \> 0 > /dev/null ; then
+ echo Using $i/runtest.exp as main test driver
+ fi
+ fi
+done
+# check for an environment variable
+if [ x"$DEJAGNULIBS" != x ] ; then
+ runpath=$DEJAGNULIBS
+ if expr $verbose \> 0 > /dev/null ; then
+ echo Using $DEJAGNULIBS/runtest.exp as main test driver
+ fi
+fi
+if [ x"$runpath" = x ] ; then
+ echo "ERROR: runtest.exp does not exist."
+ exit 1
+fi
+
+exec $expectbin $debug -- $runpath/runtest.exp $target ${1+"$@"}
--- /dev/null
+# Test Framework Driver
+# Copyright (C) 92, 93, 94, 95, 96, 97, 98, 1999 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-dejagnu@prep.ai.mit.edu
+
+# This file was written by Rob Savoye. (rob@cygnus.com)
+
+set frame_version 1.3.1
+if ![info exists argv0] {
+ send_error "Must use a version of Expect greater than 5.0\n"
+ exit 1
+}
+
+#
+# trap some signals so we know whats happening. These definitions are only
+# temporary until we read in the library stuff
+#
+trap { send_user "\nterminated\n"; exit 1 } SIGTERM
+trap { send_user "\ninterrupted by user\n"; exit 1 } SIGINT
+trap { send_user "\nsigquit\n"; exit 1 } SIGQUIT
+
+#
+# Initialize a few global variables used by all tests.
+# `reset_vars' resets several of these, we define them here to document their
+# existence. In fact, it would be nice if all globals used by some interface
+# of dejagnu proper were documented here.
+#
+# Keep these all lowercase. Interface variables used by the various
+# testsuites (eg: the gcc testsuite) should be in all capitals
+# (eg: TORTURE_OPTIONS).
+#
+set mail_logs 0 ;# flag for mailing of summary and diff logs
+set psum_file "latest" ;# file name of previous summary to diff against
+
+set exit_status 0 ;# exit code returned by this program
+
+set xfail_flag 0
+set xfail_prms 0
+set sum_file "" ;# name of the file that contains the summary log
+set base_dir "" ;# the current working directory
+set logname "" ;# the users login name
+set prms_id 0 ;# GNATS prms id number
+set bug_id 0 ;# optional bug id number
+set dir "" ;# temp variable for directory names
+set srcdir "." ;# source directory containing the test suite
+set ignoretests "" ;# list of tests to not execute
+set objdir "." ;# directory where test case binaries live
+set reboot 0
+set configfile site.exp ;# (local to this file)
+set multipass "" ;# list of passes and var settings
+set errno ""; ;#
+#
+# These describe the host and target environments.
+#
+set build_triplet "" ;# type of architecture to run tests on
+set build_os "" ;# type of os the tests are running on
+set build_vendor "" ;# vendor name of the OS or workstation the test are running on
+set build_cpu "" ;# type of the cpu tests are running on
+set host_triplet "" ;# type of architecture to run tests on, sometimes remotely
+set host_os "" ;# type of os the tests are running on
+set host_vendor "" ;# vendor name of the OS or workstation the test are running on
+set host_cpu "" ;# type of the cpu tests are running on
+set target_triplet "" ;# type of architecture to run tests on, final remote
+set target_os "" ;# type of os the tests are running on
+set target_vendor "" ;# vendor name of the OS or workstation the test are running on
+set target_cpu "" ;# type of the cpu tests are running on
+set target_alias "" ;# standard abbreviation of target
+set compiler_flags "" ;# the flags used by the compiler
+
+#
+# some convenience abbreviations
+#
+if ![info exists hex] {
+ set hex "0x\[0-9A-Fa-f\]+"
+}
+if ![info exists decimal] {
+ set decimal "\[0-9\]+"
+}
+
+#
+# set the base dir (current working directory)
+#
+set base_dir [pwd]
+
+#
+# These are tested in case they are not initialized in $configfile. They are
+# tested here instead of the init module so they can be overridden by command
+# line options.
+#
+if ![info exists all_flag] {
+ set all_flag 0
+}
+if ![info exists binpath] {
+ set binpath ""
+}
+if ![info exists debug] {
+ set debug 0
+}
+if ![info exists options] {
+ set options ""
+}
+if ![info exists outdir] {
+ set outdir "."
+}
+if ![info exists reboot] {
+ set reboot 1
+}
+if ![info exists tracelevel] {
+ set tracelevel 0
+}
+if ![info exists verbose] {
+ set verbose 0
+}
+
+#
+# verbose [-n] [-log] [--] message [level]
+#
+# Print MESSAGE if the verbose level is >= LEVEL.
+# The default value of LEVEL is 1.
+# "-n" says to not print a trailing newline.
+# "-log" says to add the text to the log file even if it won't be printed.
+# Note that the apparent behaviour of `send_user' dictates that if the message
+# is printed it is also added to the log file.
+# Use "--" if MESSAGE begins with "-".
+#
+# This is defined here rather than in framework.exp so we can use it
+# while still loading in the support files.
+#
+proc verbose { args } {
+ global verbose
+ set newline 1
+ set logfile 0
+
+ set i 0
+ if { [string index [lindex $args 0] 0] == "-" } {
+ for { set i 0 } { $i < [llength $args] } { incr i } {
+ if { [lindex $args $i] == "--" } {
+ incr i
+ break
+ } elseif { [lindex $args $i] == "-n" } {
+ set newline 0
+ } elseif { [lindex $args $i] == "-log" } {
+ set logfile 1
+ } elseif { [string index [lindex $args $i] 0] == "-" } {
+ clone_output "ERROR: verbose: illegal argument: [lindex $args $i]"
+ return
+ } else {
+ break
+ }
+ }
+ if { [llength $args] == $i } {
+ clone_output "ERROR: verbose: nothing to print"
+ return
+ }
+ }
+
+ set level 1
+ if { [llength $args] > $i + 1 } {
+ set level [lindex $args [expr $i+1]]
+ }
+ set message [lindex $args $i]
+
+ if { $verbose >= $level } {
+ # There is no need for the "--" argument here, but play it safe.
+ # We assume send_user also sends the text to the log file (which
+ # appears to be the case though the docs aren't clear on this).
+ if { $newline } {
+ send_user -- "$message\n"
+ } else {
+ send_user -- "$message"
+ }
+ } elseif { $logfile } {
+ if { $newline } {
+ send_log "$message\n"
+ } else {
+ send_log "$message"
+ }
+ }
+}
+
+#
+# Transform a tool name to get the installed name.
+# target_triplet is the canonical target name. target_alias is the
+# target name used when configure was run.
+#
+proc transform { name } {
+ global target_triplet
+ global target_alias
+ global host_triplet
+ global board;
+
+ if [string match $target_triplet $host_triplet] {
+ return $name
+ }
+ if [string match "native" $target_triplet] {
+ return $name
+ }
+ if [board_info host exists no_transform_name] {
+ return $name
+ }
+ if [string match "" $target_triplet] {
+ return $name
+ } else {
+ if [info exists board] {
+ if [board_info $board exists target_install] {
+ set target_install [board_info $board target_install];
+ }
+ }
+ if [target_info exists target_install] {
+ set target_install [target_info target_install];
+ }
+ if [info exists target_alias] {
+ set tmp ${target_alias}-${name};
+ } elseif [info exists target_install] {
+ if { [lsearch -exact $target_install $target_alias] >= 0 } {
+ set tmp ${target_alias}-${name};
+ } else {
+ set tmp "[lindex $target_install 0]-${name}";
+ }
+ }
+ verbose "Transforming $name to $tmp";
+ return $tmp;
+ }
+}
+
+#
+# findfile arg0 [arg1] [arg2]
+#
+# Find a file and see if it exists. If you only care about the false
+# condition, then you'll need to pass a null "" for arg1.
+# arg0 is the filename to look for. If the only arg,
+# then that's what gets returned. If this is the
+# only arg, then if it exists, arg0 gets returned.
+# if it doesn't exist, return only the prog name.
+# arg1 is optional, and it's what gets returned if
+# the file exists.
+# arg2 is optional, and it's what gets returned if
+# the file doesn't exist.
+#
+proc findfile { args } {
+ # look for the file
+ verbose "Seeing if [lindex $args 0] exists." 2
+ if [file exists [lindex $args 0]] {
+ if { [llength $args] > 1 } {
+ verbose "Found file, returning [lindex $args 1]"
+ return [lindex $args 1]
+ } else {
+ verbose "Found file, returning [lindex $args 0]"
+ return [lindex $args 0]
+ }
+ } else {
+ if { [llength $args] > 2 } {
+ verbose "Didn't find file [lindex $args 0], returning [lindex $args 2]"
+ return [lindex $args 2]
+ } else {
+ verbose "Didn't find file, returning [file tail [lindex $args 0]]"
+ return [transform [file tail [lindex $args 0]]]
+ }
+ }
+}
+
+#
+# load_file [-1] [--] file1 [ file2 ... ]
+#
+# Utility to source a file. All are sourced in order unless the flag "-1"
+# is given in which case we stop after finding the first one.
+# The result is 1 if a file was found, 0 if not.
+# If a tcl error occurs while sourcing a file, we print an error message
+# and exit.
+#
+# ??? Perhaps add an optional argument of some descriptive text to add to
+# verbose and error messages (eg: -t "library file" ?).
+#
+proc load_file { args } {
+ set i 0
+ set only_one 0
+ if { [lindex $args $i] == "-1" } {
+ set only_one 1
+ incr i
+ }
+ if { [lindex $args $i] == "--" } {
+ incr i
+ }
+
+ set found 0
+ foreach file [lrange $args $i end] {
+ verbose "Looking for $file" 2
+ # In Tcl7.5a2, "file exists" can fail if the filename looks
+ # like ~/FILE and the environment variable HOME does not
+ # exist.
+ if {! [catch {file exists $file} result] && $result} {
+ set found 1
+ verbose "Found $file"
+ if { [catch "uplevel #0 source $file"] == 1 } {
+ send_error "ERROR: tcl error sourcing $file.\n"
+ global errorInfo
+ if [info exists errorInfo] {
+ send_error "$errorInfo\n"
+ }
+ exit 1
+ }
+ if $only_one {
+ break
+ }
+ }
+ }
+ return $found
+}
+
+#
+# search_and_load_file -- search DIRLIST looking for FILELIST.
+# TYPE is used when displaying error and progress messages.
+#
+proc search_and_load_file { type filelist dirlist } {
+ set found 0;
+
+ foreach dir $dirlist {
+ foreach initfile $filelist {
+ verbose "Looking for $type ${dir}/${initfile}" 1
+ if [file exists ${dir}/${initfile}] {
+ set found 1
+ set error ""
+ if { ${type} != "library file" } {
+ send_user "Using ${dir}/${initfile} as ${type}.\n"
+ } else {
+ verbose "Loading ${dir}/${initfile}"
+ }
+ if [catch "uplevel #0 source ${dir}/${initfile}" error]==1 {
+ global errorInfo
+ send_error "ERROR: tcl error sourcing ${type} ${dir}/${initfile}.\n${error}\n"
+ if [info exists errorInfo] {
+ send_error "$errorInfo\n"
+ }
+ exit 1
+ }
+ break
+ }
+ }
+ if $found {
+ break
+ }
+ }
+ return $found;
+}
+
+#
+# Give a usage statement.
+#
+proc usage { } {
+ global tool;
+
+ send_user "USAGE: runtest \[options...\]\n"
+ send_user "\t--all (-a)\t\tPrint all test output to screen\n"
+ send_user "\t--build \[string\]\tThe canonical config name of the build machine\n"
+ send_user "\t--host \[string\]\t\tThe canonical config name of the host machine\n"
+ send_user "\t--host_board \[name\]\tThe host board to use\n"
+ send_user "\t--target \[string\]\tThe canonical config name of the target board\n"
+ send_user "\t--debug (-de)\t\tSet expect debugging ON\n"
+ send_user "\t--help (-he)\t\tPrint help text\n"
+ send_user "\t--mail \[name(s)\]\tWhom to mail the results to\n"
+ send_user "\t--ignore \[name(s)\]\tThe names of specific tests to ignore\n"
+ send_user "\t--objdir \[name\]\t\tThe test suite binary directory\n"
+ send_user "\t--outdir \[name\]\t\tThe directory to put logs in\n"
+ send_user "\t--reboot \[name\]\t\tReboot the target (if supported)\n"
+ send_user "\t--srcdir \[name\]\t\tThe test suite source code directory\n"
+ send_user "\t--strace \[number\]\tSet expect tracing ON\n"
+ send_user "\t--target_board \[name(s)\] The list of target boards to run tests on\n"
+ send_user "\t--tool\[name(s)\]\t\tRun tests on these tools\n"
+ send_user "\t--tool_exec \[name\]\tThe path to the tool executable to test\n"
+ send_user "\t--tool_opts \[options\]\tA list of additional options to pass to the tool\n"
+ send_user "\t--directory (-di) name\tRun only the tests in directory 'name'\n"
+ send_user "\t--verbose (-v)\t\tEmit verbose output\n"
+ send_user "\t--version (-V)\t\tEmit all version numbers\n"
+ send_user "\t--D\[0-1\]\t\tTcl debugger\n"
+ send_user "\tscript.exp\[=arg(s)\]\tRun these tests only\n"
+ if { [info exists tool] } {
+ if { [info proc ${tool}_option_help] != "" } {
+ ${tool}_option_help;
+ }
+ }
+}
+
+#
+# Parse the arguments the first time looking for these. We will ultimately
+# parse them twice. Things are complicated because:
+# - we want to parse --verbose early on
+# - we don't want config files to override command line arguments
+# (eg: $base_dir/$configfile vs --host/--target)
+# - we need some command line arguments before we can process some config files
+# (eg: --objdir before $objdir/$configfile, --host/--target before $DEJAGNU)
+# The use of `arg_host_triplet' and `arg_target_triplet' lets us avoid parsing
+# the arguments three times.
+#
+
+set arg_host_triplet ""
+set arg_target_triplet ""
+set arg_build_triplet ""
+set argc [ llength $argv ]
+for { set i 0 } { $i < $argc } { incr i } {
+ set option [lindex $argv $i]
+
+ # make all options have two hyphens
+ switch -glob -- $option {
+ "--*" {
+ }
+ "-*" {
+ set option "-$option"
+ }
+ }
+
+ # split out the argument for options that take them
+ switch -glob -- $option {
+ "--*=*" {
+ regexp {^[^=]*=(.*)$} $option nil optarg
+ }
+ "--bu*" -
+ "--ho*" -
+ "--ig*" -
+ "--m*" -
+ "--n*" -
+ "--ob*" -
+ "--ou*" -
+ "--sr*" -
+ "--st*" -
+ "--ta*" -
+ "--di*" -
+ "--to*" {
+ incr i
+ set optarg [lindex $argv $i]
+ }
+ }
+
+ switch -glob -- $option {
+ "--bu*" { # (--build) the build host configuration
+ set arg_build_triplet $optarg
+ continue
+ }
+
+ "--host_bo*" {
+ set host_board $optarg
+ continue
+ }
+
+ "--ho*" { # (--host) the host configuration
+ set arg_host_triplet $optarg
+ continue
+ }
+
+ "--ob*" { # (--objdir) where the test case object code lives
+ set objdir $optarg
+ continue
+ }
+
+ "--sr*" { # (--srcdir) where the testsuite source code lives
+ set srcdir $optarg
+ continue
+ }
+
+ "--target_bo*" {
+ set target_list $optarg;
+ continue;
+ }
+
+ "--ta*" { # (--target) the target configuration
+ set arg_target_triplet $optarg
+ continue
+ }
+
+ "--tool_opt*" {
+ set TOOL_OPTIONS $optarg
+ continue
+ }
+
+ "--tool_exec*" {
+ set TOOL_EXECUTABLE $optarg
+ continue
+ }
+
+ "--tool_ro*" {
+ set tool_root_dir $optarg
+ continue;
+ }
+
+ "--to*" { # (--tool) specify tool name
+ set tool $optarg
+ set comm_line_tool $optarg;
+ continue
+ }
+
+ "--di*" {
+ set cmdline_dir_to_run $optarg
+ puts "cmdline_dir_to_run = $cmdline_dir_to_run"
+ continue
+ }
+
+ "--v" -
+ "--verb*" { # (--verbose) verbose output
+ incr verbose
+ continue
+ }
+ }
+}
+verbose "Verbose level is $verbose"
+
+#
+# get the users login name
+#
+if [string match "" $logname] {
+ if [info exists env(USER)] {
+ set logname $env(USER)
+ } else {
+ if [info exists env(LOGNAME)] {
+ set logname $env(LOGNAME)
+ } else {
+ # try getting it with whoami
+ catch "set logname [exec whoami]" tmp
+ if [string match "*couldn't find*to execute*" $tmp] {
+ # try getting it with who am i
+ unset tmp
+ catch "set logname [exec who am i]" tmp
+ if [string match "*Command not found*" $tmp] {
+ send_user "ERROR: couldn't get the users login name\n"
+ set logname "Unknown"
+ } else {
+ set logname [lindex [split $logname " !"] 1]
+ }
+ }
+ }
+ }
+}
+
+#
+# lookfor_file -- try to find a file by searching up multiple directory levels
+#
+proc lookfor_file { dir name } {
+ foreach x ".. ../.. ../../.. ../../../.." {
+ verbose "$dir/$name"
+ if [file exists $dir/$name] {
+ return $dir/$name;
+ }
+ set dir [remote_file build dirname $dir];
+ }
+ return ""
+}
+
+#
+# load_lib -- load a library by sourcing it
+#
+# If there a multiple files with the same name, stop after the first one found.
+# The order is first look in the install dir, then in a parallel dir in the
+# source tree, (up one or two levels), then in the current dir.
+#
+proc load_lib { file } {
+ global verbose libdir srcdir base_dir execpath tool
+ global loaded_libs
+
+ if [info exists loaded_libs($file)] {
+ return;
+ }
+
+ set loaded_libs($file) "";
+
+ if { [search_and_load_file "library file" $file [list $libdir $libdir/lib [file dirname [file dirname $srcdir]]/dejagnu/lib $srcdir/lib . [file dirname [file dirname [file dirname $srcdir]]]/dejagnu/lib]] == 0 } {
+ send_error "ERROR: Couldn't find library file $file.\n"
+ exit 1
+ }
+}
+
+verbose "Login name is $logname"
+
+#
+# Begin sourcing the config files.
+# All are sourced in order.
+#
+# Search order:
+# $HOME/.dejagnurc -> $base_dir/$configfile -> $objdir/$configfile
+# -> installed -> $DEJAGNU
+#
+# ??? It might be nice to do $HOME last as it would allow it to be the
+# ultimate override. Though at present there is still $DEJAGNU.
+#
+# For the normal case, we rely on $base_dir/$configfile to set
+# host_triplet and target_triplet.
+#
+
+load_file ~/.dejagnurc $base_dir/$configfile
+
+#
+# If objdir didn't get set in $base_dir/$configfile, set it to $base_dir.
+# Make sure we source $objdir/$configfile in case $base_dir/$configfile doesn't
+# exist and objdir was given on the command line.
+#
+
+if [expr [string match "." $objdir] || [string match $srcdir $objdir]] {
+ set objdir $base_dir
+} else {
+ load_file $objdir/$configfile
+}
+
+# Well, this just demonstrates the real problem...
+if ![info exists tool_root_dir] {
+ set tool_root_dir [file dirname $objdir];
+ if [file exists "$tool_root_dir/testsuite"] {
+ set tool_root_dir [file dirname $tool_root_dir];
+ }
+}
+
+verbose "Using test sources in $srcdir"
+verbose "Using test binaries in $objdir"
+verbose "Tool root directory is $tool_root_dir"
+
+set execpath [file dirname $argv0]
+set libdir [file dirname $execpath]/dejagnu
+if [info exists env(DEJAGNULIBS)] {
+ set libdir $env(DEJAGNULIBS)
+}
+
+verbose "Using $libdir to find libraries"
+
+#
+# If the host or target was given on the command line, override the above
+# config files. We allow $DEJAGNU to massage them though in case it would
+# ever want to do such a thing.
+#
+if { $arg_host_triplet != "" } {
+ set host_triplet $arg_host_triplet
+}
+if { $arg_build_triplet != "" } {
+ set build_triplet $arg_build_triplet
+}
+
+# if we only specify --host, then that must be the build machne too, and we're
+# stuck using the old functionality of a simple cross test
+if [expr { $build_triplet == "" && $host_triplet != "" } ] {
+ set build_triplet $host_triplet
+}
+# if we only specify --build, then we'll use that as the host too
+if [expr { $build_triplet != "" && $host_triplet == "" } ] {
+ set host_triplet $build_triplet
+}
+unset arg_host_triplet arg_build_triplet
+
+#
+# If the build machine type hasn't been specified by now, use config.guess.
+#
+
+if [expr { $build_triplet == "" && $host_triplet == ""} ] {
+ # find config.guess
+ foreach dir "$libdir $libdir/.. $srcdir/.. $srcdir/../.." {
+ verbose "Looking for ${dir}/config.guess" 2
+ if [file exists ${dir}/config.guess] {
+ set config_guess ${dir}/config.guess
+ verbose "Found ${dir}/config.guess"
+ break
+ }
+ }
+
+ # get the canonical config name
+ if ![info exists config_guess] {
+ send_error "ERROR: Couldn't find config.guess program.\n"
+ exit 1
+ }
+ catch "exec $config_guess" build_triplet
+ case $build_triplet in {
+ { "No uname command or uname output not recognized" "Unable to guess system type" } {
+ verbose "WARNING: Uname output not recognized"
+ set build_triplet unknown
+ }
+ }
+ verbose "Assuming build host is $build_triplet"
+ if { $host_triplet == "" } {
+ set host_triplet $build_triplet
+ }
+
+}
+
+#
+# Figure out the target. If the target hasn't been specified, then we have to
+# assume we are native.
+#
+if { $arg_target_triplet != "" } {
+ set target_triplet $arg_target_triplet
+} elseif { $target_triplet == "" } {
+ set target_triplet $build_triplet
+ verbose "Assuming native target is $target_triplet" 2
+}
+unset arg_target_triplet
+#
+# Default target_alias to target_triplet.
+#
+if ![info exists target_alias] {
+ set target_alias $target_triplet
+}
+
+proc get_local_hostname { } {
+ if [catch "info hostname" hb] {
+ set hb ""
+ } else {
+ regsub "\\..*$" $hb "" hb;
+ }
+ verbose "hostname=$hb" 3;
+ return $hb;
+}
+
+#
+# We put these here so that they can be overridden later by site.exp or
+# friends.
+#
+# Set up the target as machine NAME. We also load base-config.exp as a
+# default configuration. The config files are sourced with the global
+# variable $board set to the name of the current target being defined.
+#
+proc setup_target_hook { whole_name name } {
+ global board;
+ global host_board;
+
+ if [info exists host_board] {
+ set hb $host_board;
+ } else {
+ set hb [get_local_hostname];
+ }
+
+ set board $whole_name;
+
+ global board_type;
+ set board_type "target";
+
+ load_config base-config.exp;
+ if ![load_board_description ${name} ${whole_name} ${hb}] {
+ if { $name != "unix" } {
+ perror "couldn't load description file for ${name}";
+ exit 1;
+ } else {
+ load_generic_config "unix"
+ }
+ }
+
+ if [board_info $board exists generic_name] {
+ load_tool_target_config [board_info $board generic_name];
+ }
+
+ unset board;
+ unset board_type;
+
+ push_target $whole_name;
+
+ if { [info procs ${whole_name}_init] != "" } {
+ ${whole_name}_init $whole_name;
+ }
+
+ if { ![isnative] && ![is_remote target] } {
+ global env build_triplet target_triplet
+ if { (![info exists env(DEJAGNU)]) && ($build_triplet != $target_triplet) } {
+ warning "Assuming target board is the local machine (which is probably wrong).\nYou may need to set your DEJAGNU environment variable."
+ }
+ }
+}
+
+#
+# Clean things up afterwards.
+#
+proc cleanup_target_hook { name } {
+ global tool;
+ # Clean up the target board.
+ if { [info procs "${name}_exit"] != "" } {
+ ${name}_exit;
+ }
+ # We also call the tool exit routine here.
+ if [info exists tool] {
+ if { [info procs "${tool}_exit"] != "" } {
+ ${tool}_exit;
+ }
+ }
+ remote_close target;
+ pop_target;
+}
+
+proc setup_host_hook { name } {
+ global board;
+ global board_info;
+ global board_type;
+
+ set board $name;
+ set board_type "host";
+
+ load_board_description $name;
+ unset board;
+ unset board_type;
+ push_host $name;
+ if { [info proc ${name}_init] != "" } {
+ ${name}_init $name;
+ }
+}
+
+proc setup_build_hook { name } {
+ global board;
+ global board_info;
+ global board_type;
+
+ set board $name;
+ set board_type "build";
+
+ load_board_description $name;
+ unset board;
+ unset board_type;
+ push_build $name;
+ if { [info proc ${name}_init] != "" } {
+ ${name}_init $name;
+ }
+}
+
+#
+# Find and load the global config file if it exists.
+# The global config file is used to set the connect mode and other
+# parameters specific to each particular target.
+# These files assume the host and target have been set.
+#
+
+if { [load_file -- $libdir/$configfile] == 0 } {
+ # If $DEJAGNU isn't set either then there isn't any global config file.
+ # Warn the user as there really should be one.
+ if { ! [info exists env(DEJAGNU)] } {
+ send_error "WARNING: Couldn't find the global config file.\n"
+ }
+}
+
+if [info exists env(DEJAGNU)] {
+ if { [load_file -- $env(DEJAGNU)] == 0 } {
+ # It may seem odd to only issue a warning if there isn't a global
+ # config file, but issue an error if $DEJAGNU is erroneously defined.
+ # Since $DEJAGNU is set there is *supposed* to be a global config file,
+ # so the current behaviour seems reasonable.
+ send_error "WARNING: global config file $env(DEJAGNU) not found.\n"
+ }
+ if ![info exists boards_dir] {
+ set boards_dir "[file dirname $env(DEJAGNU)]/boards";
+ }
+}
+
+if ![info exists boards_dir] {
+ set boards_dir ""
+}
+
+#
+# parse out the config parts of the triplet name
+#
+
+# build values
+if { $build_cpu == "" } {
+ regsub -- "-.*-.*" ${build_triplet} "" build_cpu
+}
+if { $build_vendor == "" } {
+ regsub -- "^\[a-z0-9\]*-" ${build_triplet} "" build_vendor
+ regsub -- "-.*" ${build_vendor} "" build_vendor
+}
+if { $build_os == "" } {
+ regsub -- ".*-.*-" ${build_triplet} "" build_os
+}
+
+# host values
+if { $host_cpu == "" } {
+ regsub -- "-.*-.*" ${host_triplet} "" host_cpu
+}
+if { $host_vendor == "" } {
+ regsub -- "^\[a-z0-9\]*-" ${host_triplet} "" host_vendor
+ regsub -- "-.*" ${host_vendor} "" host_vendor
+}
+if { $host_os == "" } {
+ regsub -- ".*-.*-" ${host_triplet} "" host_os
+}
+
+# target values
+if { $target_cpu == "" } {
+ regsub -- "-.*-.*" ${target_triplet} "" target_cpu
+}
+if { $target_vendor == "" } {
+ regsub -- "^\[a-z0-9\]*-" ${target_triplet} "" target_vendor
+ regsub -- "-.*" ${target_vendor} "" target_vendor
+}
+if { $target_os == "" } {
+ regsub -- ".*-.*-" ${target_triplet} "" target_os
+}
+
+#
+# Load the primary tool initialization file.
+#
+
+proc load_tool_init { file } {
+ global srcdir
+ global loaded_libs
+
+ if [info exists loaded_libs($file)] {
+ return;
+ }
+
+ set loaded_libs($file) "";
+
+ if [file exists ${srcdir}/lib/$file] {
+ verbose "Loading library file ${srcdir}/lib/$file"
+ if { [catch "uplevel #0 source ${srcdir}/lib/$file"] == 1 } {
+ send_error "ERROR: tcl error sourcing library file ${srcdir}/lib/$file.\n"
+ global errorInfo
+ if [info exists errorInfo] {
+ send_error "$errorInfo\n"
+ }
+ exit 1
+ }
+ } else {
+ warning "Couldn't find tool init file"
+ }
+}
+
+#
+# load the testing framework libraries
+#
+load_lib utils.exp
+load_lib framework.exp
+load_lib debugger.exp
+load_lib remote.exp
+load_lib target.exp
+load_lib targetdb.exp
+load_lib libgloss.exp
+
+# Initialize the test counters and reset them to 0.
+init_testcounts;
+reset_vars;
+
+#
+# Parse the command line arguments.
+#
+
+# Load the tool initialization file. Allow the --tool option to override
+# what's set in the site.exp file.
+if [info exists comm_line_tool] {
+ set tool $comm_line_tool;
+}
+
+if [info exists tool] {
+ load_tool_init ${tool}.exp;
+}
+
+set argc [ llength $argv ]
+for { set i 0 } { $i < $argc } { incr i } {
+ set option [ lindex $argv $i ]
+
+ # make all options have two hyphens
+ switch -glob -- $option {
+ "--*" {
+ }
+ "-*" {
+ set option "-$option"
+ }
+ }
+
+ # split out the argument for options that take them
+ switch -glob -- $option {
+ "--*=*" {
+ regexp {^[^=]*=(.*)$} $option nil optarg
+ }
+ "--bu*" -
+ "--ho*" -
+ "--ig*" -
+ "--m*" -
+ "--n*" -
+ "--ob*" -
+ "--ou*" -
+ "--sr*" -
+ "--st*" -
+ "--ta*" -
+ "--di*" -
+ "--to*" {
+ incr i
+ set optarg [lindex $argv $i]
+ }
+ }
+
+ switch -glob -- $option {
+ "--V*" -
+ "--vers*" { # (--version) version numbers
+ send_user "Expect version is\t[exp_version]\n"
+ send_user "Tcl version is\t\t[ info tclversion ]\n"
+ send_user "Framework version is\t$frame_version\n"
+ exit
+ }
+
+ "--v*" { # (--verbose) verbose output
+ # Already parsed.
+ continue
+ }
+
+ "--bu*" { # (--build) the build host configuration
+ # Already parsed (and don't set again). Let $DEJAGNU rename it.
+ continue
+ }
+
+ "--ho*" { # (--host) the host configuration
+ # Already parsed (and don't set again). Let $DEJAGNU rename it.
+ continue
+ }
+
+ "--target_bo*" {
+ # Set it again, father knows best.
+ set target_list $optarg;
+ continue;
+ }
+
+ "--ta*" { # (--target) the target configuration
+ # Already parsed (and don't set again). Let $DEJAGNU rename it.
+ continue
+ }
+
+ "--a*" { # (--all) print all test output to screen
+ set all_flag 1
+ verbose "Print all test output to screen"
+ continue
+ }
+
+ "--di*" {
+ # Already parsed (and don't set again). Let $DEJAGNU rename it.
+ # set cmdline_dir_to_run $optarg
+ continue
+ }
+
+
+ "--de*" { # (--debug) expect internal debugging
+ if [file exists ./dbg.log] {
+ catch "exec rm -f ./dbg.log"
+ }
+ if { $verbose > 2 } {
+ exp_internal -f dbg.log 1
+ } else {
+ exp_internal -f dbg.log 0
+ }
+ verbose "Expect Debugging is ON"
+ continue
+ }
+
+ "--D[01]" { # (-Debug) turn on Tcl debugger
+ verbose "Tcl debugger is ON"
+ continue
+ }
+
+ "--m*" { # (--mail) mail the output
+ set mailing_list $optarg
+ set mail_logs 1
+ verbose "Mail results to $mailing_list"
+ continue
+ }
+
+ "--r*" { # (--reboot) reboot the target
+ set reboot 1
+ verbose "Will reboot the target (if supported)"
+ continue
+ }
+
+ "--ob*" { # (--objdir) where the test case object code lives
+ # Already parsed, but parse again to make sure command line
+ # options override any config file.
+ set objdir $optarg
+ verbose "Using test binaries in $objdir"
+ continue
+ }
+
+ "--ou*" { # (--outdir) where to put the output files
+ set outdir $optarg
+ verbose "Test output put in $outdir"
+ continue
+ }
+
+ "*.exp" { # specify test names to run
+ set all_runtests($option) ""
+ verbose "Running only tests $option"
+ continue
+ }
+
+ "*.exp=*" { # specify test names to run
+ set tmp [split $option "="]
+ set all_runtests([lindex $tmp 0]) [lindex $tmp 1]
+ verbose "Running only tests $option"
+ unset tmp
+ continue
+ }
+
+ "--ig*" { # (--ignore) specify test names to exclude
+ set ignoretests $optarg
+ verbose "Ignoring test $ignoretests"
+ continue
+ }
+
+ "--sr*" { # (--srcdir) where the testsuite source code lives
+ # Already parsed, but parse again to make sure command line
+ # options override any config file.
+
+ set srcdir $optarg
+ continue
+ }
+
+ "--st*" { # (--strace) expect trace level
+ set tracelevel $optarg
+ strace $tracelevel
+ verbose "Source Trace level is now $tracelevel"
+ continue
+ }
+
+ "--tool_opt*" {
+ continue
+ }
+
+ "--tool_exec*" {
+ set TOOL_EXECUTABLE $optarg
+ continue
+ }
+
+ "--tool_ro*" {
+ set tool_root_dir $optarg
+ continue;
+ }
+
+ "--to*" { # (--tool) specify tool name
+ set tool $optarg
+ verbose "Testing $tool"
+ continue
+ }
+
+ "[A-Z0-9_-.]*=*" { # process makefile style args like CC=gcc, etc...
+ if [regexp "^(\[A-Z0-9_-\]+)=(.*)$" $option junk var val] {
+ set $var $val
+ verbose "$var is now $val"
+ append makevars "set $var $val;" ;# FIXME: Used anywhere?
+ unset junk var val
+ } else {
+ send_error "Illegal variable specification:\n"
+ send_error "$option\n"
+ }
+ continue
+ }
+
+ "--he*" { # (--help) help text
+ usage;
+ exit 0
+ }
+
+ default {
+ if [info exists tool] {
+ if { [info proc ${tool}_option_proc] != "" } {
+ if [${tool}_option_proc $option] {
+ continue;
+ }
+ }
+ }
+ send_error "\nIllegal Argument \"$option\"\n"
+ send_error "try \"runtest --help\" for option list\n"
+ exit 1
+ }
+ }
+}
+
+#
+# check for a few crucial variables
+#
+if ![info exists tool] {
+ send_error "WARNING: No tool specified\n"
+ set tool ""
+}
+
+#
+# initialize a few Tcl variables to something other than their default
+#
+if { $verbose > 2 } {
+ log_user 1
+} else {
+ log_user 0
+}
+
+set timeout 10
+
+
+
+#
+# open log files
+#
+open_logs
+
+# print the config info
+clone_output "Test Run By $logname on [timestamp -format %c]"
+if [is3way] {
+ clone_output "Target is $target_triplet"
+ clone_output "Host is $host_triplet"
+ clone_output "Build is $build_triplet"
+} else {
+ if [isnative] {
+ clone_output "Native configuration is $target_triplet"
+ } else {
+ clone_output "Target is $target_triplet"
+ clone_output "Host is $host_triplet"
+ }
+}
+
+clone_output "\n\t\t=== $tool tests ===\n"
+
+#
+# Look for the generic board configuration file. It searches in several
+# places: ${libdir}/config, ${libdir}/../config, and $boards_dir.
+#
+
+proc load_generic_config { name } {
+ global srcdir;
+ global configfile;
+ global libdir;
+ global env;
+ global board;
+ global board_info;
+ global boards_dir;
+ global board_type;
+
+ if [info exists board] {
+ if ![info exists board_info($board,generic_name)] {
+ set board_info($board,generic_name) $name;
+ }
+ }
+
+ if [info exists board_type] {
+ set type "for $board_type";
+ } else {
+ set type ""
+ }
+
+ set dirlist [concat ${libdir}/config [file dirname $libdir]/config $boards_dir];
+ set result [search_and_load_file "generic interface file $type" ${name}.exp $dirlist];
+
+ return $result;
+}
+
+#
+# Load the tool-specific target description.
+#
+proc load_config { args } {
+ global srcdir;
+ global board_type;
+
+ set found 0;
+
+ return [search_and_load_file "tool-and-target-specific interface file" $args [list ${srcdir}/config ${srcdir}/../config ${srcdir}/../../config ${srcdir}/../../../config]];
+}
+
+#
+# Find the files that set up the configuration for the target. There
+# are assumed to be two of them; one defines a basic set of
+# functionality for the target that can be used by all tool
+# testsuites, and the other defines any necessary tool-specific
+# functionality. These files are loaded via load_config.
+#
+# These used to all be named $target_abbrev-$tool.exp, but as the
+# $tool variable goes away, it's now just $target_abbrev.exp. First
+# we look for a file named with both the abbrev and the tool names.
+# Then we look for one named with just the abbrev name. Finally, we
+# look for a file called default, which is the default actions, as
+# some tools could be purely host based. Unknown is mostly for error
+# trapping.
+#
+
+proc load_tool_target_config { name } {
+ global target_os
+
+ set found [load_config "${name}.exp" "${target_os}.exp" "default.exp" "unknown.exp"];
+
+ if { $found == 0 } {
+ send_error "ERROR: Couldn't find tool config file for $name.\n"
+ }
+}
+
+
+#
+# Find the file that describes the machine specified by board_name.
+#
+
+proc load_board_description { board_name args } {
+ global srcdir;
+ global configfile;
+ global libdir;
+ global env;
+ global board;
+ global board_info
+ global boards_dir;
+ global board_type;
+
+ set dejagnu ""
+
+ if { [llength $args] > 0 } {
+ set whole_name [lindex $args 0];
+ } else {
+ set whole_name $board_name;
+ }
+
+ set board_info($whole_name,name) $whole_name;
+ if ![info exists board] {
+ set board $whole_name;
+ set board_set 1;
+ } else {
+ set board_set 0;
+ }
+
+ set dirlist {};
+ if { [llength $args] > 1 } {
+ set suffix [lindex $args 1];
+ if { ${suffix} != "" } {
+ foreach x ${boards_dir} {
+ lappend dirlist ${x}/${suffix}
+ }
+ lappend dirlist ${libdir}/baseboards/${suffix};
+ }
+ }
+ set dirlist [concat $dirlist $boards_dir];
+ lappend dirlist ${libdir}/baseboards;
+ verbose "dirlist is $dirlist"
+ if [info exists board_type] {
+ set type "for $board_type";
+ } else {
+ set type "";
+ }
+ if ![info exists board_info($whole_name,isremote)] {
+ set board_info($whole_name,isremote) 1;
+ if [info exists board_type] {
+ if { $board_type == "build" } {
+ set board_info($whole_name,isremote) 0;
+ }
+ }
+ if { ${board_name} == [get_local_hostname] } {
+ set board_info($whole_name,isremote) 0;
+ }
+ }
+ search_and_load_file "standard board description file $type" standard.exp $dirlist;
+ set found [search_and_load_file "board description file $type" ${board_name}.exp $dirlist];
+ if { $board_set != 0 } {
+ unset board;
+ }
+
+ return $found;
+}
+
+#
+# Find the base-level file that describes the machine specified by args. We
+# only look in one directory, ${libdir}/baseboards.
+#
+
+proc load_base_board_description { board_name } {
+ global srcdir;
+ global configfile;
+ global libdir;
+ global env;
+ global board;
+ global board_info
+ global board_type;
+
+ set board_set 0;
+ set board_info($board_name,name) $board_name;
+ if ![info exists board] {
+ set board $board_name;
+ set board_set 1;
+ }
+ if [info exists board_type] {
+ set type "for $board_type";
+ } else {
+ set type ""
+ };
+ if ![info exists board_info($board_name,isremote)] {
+ set board_info($board_name,isremote) 1;
+ if [info exists board_type] {
+ if { $board_type == "build" } {
+ set board_info($board_name,isremote) 0;
+ }
+ }
+ }
+
+ if { ${board_name} == [get_local_hostname] } {
+ set board_info($board_name,isremote) 0;
+ }
+ set found [search_and_load_file "board description file $type" ${board_name}.exp ${libdir}/baseboards];
+ if { $board_set != 0 } {
+ unset board;
+ }
+
+ return $found;
+}
+
+#
+# Source the testcase in TEST_FILE_NAME.
+#
+
+proc runtest { test_file_name } {
+ global prms_id
+ global bug_id
+ global test_result
+ global errcnt
+ global errorInfo
+ global tool
+
+ clone_output "Running $test_file_name ..."
+ set prms_id 0
+ set bug_id 0
+ set test_result ""
+
+ if [file exists $test_file_name] {
+ set timestart [timestamp];
+
+ if [info exists tool] {
+ if { [info procs "${tool}_init"] != "" } {
+ ${tool}_init $test_file_name;
+ }
+ }
+
+ if { [catch "uplevel #0 source $test_file_name"] == 1 } {
+ # We can't call `perror' here, it resets `errorInfo'
+ # before we want to look at it. Also remember that perror
+ # increments `errcnt'. If we do call perror we'd have to
+ # reset errcnt afterwards.
+ clone_output "ERROR: tcl error sourcing $test_file_name."
+ if [info exists errorInfo] {
+ clone_output "ERROR: $errorInfo"
+ unset errorInfo
+ }
+ }
+
+ if [info exists tool] {
+ if { [info procs "${tool}_finish"] != "" } {
+ ${tool}_finish;
+ }
+ }
+ set timeend [timestamp];
+ set timediff [expr $timeend - $timestart];
+ verbose -log "testcase $test_file_name completed in $timediff seconds" 4
+ } else {
+ # This should never happen, but maybe if the file got removed
+ # between the `find' above and here.
+ perror "$test_file_name does not exist."
+ # ??? This is a hack. We want to send a message to stderr and
+ # to the summary file (just like perror does), but we don't
+ # want the next testcase to get a spurious "unresolved" because
+ # errcnt != 0. Calling `clone_output' is also supposed to be a
+ # no-no (see the comments for clone_output).
+ set errcnt 0
+ }
+}
+
+#
+# Trap some signals so we know what's happening. These replace the previous
+# ones because we've now loaded the library stuff.
+#
+if ![exp_debug] {
+ foreach sig "{SIGTERM {terminated}} \
+ {SIGINT {interrupted by user}} \
+ {SIGQUIT {interrupted by user}} \
+ {SIGSEGV {segmentation violation}}" {
+ set signal [lindex $sig 0];
+ set str [lindex $sig 1];
+ trap "send_error \"got a \[trap -name\] signal, $str \\n\"; log_and_exit;" $signal;
+ verbose "setting trap for $signal to $str" 1
+ }
+ unset signal str sig;
+}
+
+#
+# Given a list of targets, process any iterative lists.
+#
+proc process_target_variants { target_list } {
+ set result {};
+ foreach x $target_list {
+ if [regexp "\\(" $x] {
+ regsub "^.*\\((\[^()\]*)\\)$" "$x" "\\1" variant_list;
+ regsub "\\(\[^(\]*$" "$x" "" x;
+ set list [process_target_variants $x];
+ set result {}
+ foreach x $list {
+ set result [concat $result [iterate_target_variants $x [split $variant_list ","]]];
+ }
+ } elseif [regexp "\{" $x] {
+ regsub "^.*\{(\[^\{\}\]*)\}$" "$x" "\\1" variant_list;
+ regsub "\{\[^\{\]*$" "$x" "" x;
+ set list [process_target_variants $x];
+ foreach x $list {
+ foreach i [split $variant_list ","] {
+ set name $x;
+ if { $i != "" } {
+ append name "/" $i;
+ }
+ lappend result $name;
+ }
+ }
+ } else {
+ lappend result "$x";
+ }
+ }
+ return $result;
+}
+
+proc iterate_target_variants { target variants } {
+ return [iterate_target_variants_two $target $target $variants];
+}
+
+#
+# Given a list of variants, produce the list of all possible combinations.
+#
+proc iterate_target_variants_two { orig_target target variants } {
+
+ if { [llength $variants] == 0 } {
+ return [list $target];
+ } else {
+ if { [llength $variants] > 1 } {
+ set result [iterate_target_variants_two $orig_target $target [lrange $variants 1 end]];
+ } else {
+ if { $target != $orig_target } {
+ set result [list $target];
+ } else {
+ set result {};
+ }
+ }
+ if { [lindex $variants 0] != "" } {
+ append target "/" [lindex $variants 0];
+ return [concat $result [iterate_target_variants_two $orig_target $target [lrange $variants 1 end]]];
+ } else {
+ return [concat $result $target];
+ }
+ }
+}
+
+setup_build_hook [get_local_hostname];
+
+if [info exists host_board] {
+ setup_host_hook $host_board;
+} else {
+ set hb [get_local_hostname];
+ if { $hb != "" } {
+ setup_host_hook $hb;
+ }
+}
+
+#
+# main test execution loop
+#
+
+if [info exists errorInfo] {
+ unset errorInfo
+}
+# make sure we have only single path delimiters
+regsub -all "\(\[^/\]\)//*" $srcdir "\\1/" srcdir
+
+if ![info exists target_list] {
+# Make sure there is at least one target machine. It's probably a Unix box,
+# but that's just a guess.
+ set target_list { "unix" }
+} else {
+ verbose "target list is $target_list"
+}
+
+#
+# Iterate through the list of targets.
+#
+global current_target;
+
+set target_list [process_target_variants $target_list];
+
+set target_count [llength $target_list]
+
+clone_output "Schedule of variations:"
+foreach current_target $target_list {
+ clone_output " $current_target"
+}
+clone_output ""
+
+
+foreach current_target $target_list {
+ verbose "target is $current_target";
+ set current_target_name $current_target;
+ set tlist [split $current_target /];
+ set current_target [lindex $tlist 0];
+ set board_variant_list [lrange $tlist 1 end];
+
+ # Set the counts for this target to 0.
+ reset_vars;
+ clone_output "Running target $current_target_name"
+
+ setup_target_hook $current_target_name $current_target;
+
+# If multiple passes requested, set them up. Otherwise prepare just one.
+# The format of `MULTIPASS' is a list of elements containing
+# "{ name var1=value1 ... }" where `name' is a generic name for the pass and
+# currently has no other meaning.
+
+ global env
+
+ if { [info exists MULTIPASS] } {
+ set multipass $MULTIPASS
+ }
+ if { $multipass == "" } {
+ set multipass { "" }
+ }
+
+# If PASS is specified, we want to run only the tests specified.
+# Its value should be a number or a list of numbers that specify
+# the passes that we want to run.
+ if [info exists PASS] {
+ set pass $PASS
+ } else {
+ set pass ""
+ }
+
+ if {$pass != ""} {
+ set passes [list]
+ foreach p $pass {
+ foreach multipass_elem $multipass {
+ set multipass_name [lindex $multipass_elem 0]
+ if {$p == $multipass_name} {
+ lappend passes $multipass_elem
+ break;
+ }
+ }
+ }
+ set multipass $passes
+ }
+
+ foreach pass $multipass {
+
+ # multipass_name is set for `record_test' to use (see framework.exp).
+ if { [lindex $pass 0] != "" } {
+ set multipass_name [lindex $pass 0]
+ clone_output "Running pass `$multipass_name' ..."
+ } else {
+ set multipass_name ""
+ }
+ set restore ""
+ foreach varval [lrange $pass 1 end] {
+ set tmp [string first "=" $varval]
+ set var [string range $varval 0 [expr $tmp - 1]]
+ # Save previous value.
+ if [info exists $var] {
+ lappend restore "$var [list [eval concat \$$var]]"
+ } else {
+ lappend restore "$var"
+ }
+ # Handle "CFLAGS=$CFLAGS foo".
+ # FIXME: Do we need to `catch' this?
+ eval set $var \[string range \"$varval\" [expr $tmp + 1] end\]
+ verbose "$var is now [eval concat \$$var]"
+ unset tmp var
+ }
+
+ # look for the top level testsuites. if $tool doesn't
+ # exist and there are no subdirectories in $srcdir, then
+ # we default to srcdir.
+ set test_top_dirs [lsort [getdirs -all ${srcdir} "${tool}*"]]
+ if { ${test_top_dirs} == "" } {
+ set test_top_dirs ${srcdir}
+ } else {
+ # JYG:
+ # DejaGNU's notion of test tree and test files is very
+ # general:
+ # given ${srcdir} and ${tool}, any subdirectory (at any
+ # level deep) with the "${tool}" prefix starts a test tree;
+ # given a test tree, any *.exp file underneath (at any
+ # level deep) is a test file.
+ #
+ # For test tree layouts with ${tool} prefix on
+ # both a parent and a child directory, we need to eliminate
+ # the child directory entry from test_top_dirs list.
+ # e.g. gdb.hp/gdb.base-hp/ would result in two entries
+ # in the list: gdb.hp, gdb.hp/gdb.base-hp.
+ # If the latter not eliminated, test files under
+ # gdb.hp/gdb.base-hp would be run twice (since test files
+ # are gathered from all sub-directories underneath a
+ # directory).
+ #
+ # Since ${tool} may be g++, etc. which could confuse
+ # regexp, we cannot do the simpler test:
+ # ...
+ # if [regexp "${srcdir}/.*${tool}.*/.*${tool}.*" ${dir}]
+ # ...
+ # instead, we rely on the fact that test_top_dirs is
+ # a sorted list of entries, and any entry that contains
+ # the previous valid test top dir entry in its own pathname
+ # must be excluded.
+
+ set temp_top_dirs ""
+ set prev_dir ""
+ foreach dir "${test_top_dirs}" {
+ if { [string length ${prev_dir}] == 0 ||
+ [string first "${prev_dir}/" ${dir}] == -1} {
+ # the first top dir entry, or an entry that
+ # does not share the previous entry's entire
+ # pathname, record it as a valid top dir entry.
+ #
+ lappend temp_top_dirs ${dir}
+ set prev_dir ${dir}
+ }
+ }
+ set test_top_dirs ${temp_top_dirs}
+ }
+ verbose "Top level testsuite dirs are ${test_top_dirs}" 2
+ set testlist "";
+ if [info exists all_runtests] {
+ foreach x [array names all_runtests] {
+ verbose "trying to glob ${srcdir}/${x}" 2
+ set s [glob -nocomplain ${srcdir}/$x];
+ if { $s != "" } {
+ set testlist [concat $testlist $s];
+ }
+ }
+ }
+ #
+ # If we have a list of tests, run all of them.
+ #
+ if { $testlist != "" } {
+ foreach test_name $testlist {
+ if { ${ignoretests} != "" } {
+ if { 0 <= [lsearch ${ignoretests} [file tail ${test_name}]]} {
+ continue
+ }
+ }
+
+ # set subdir to the tail of the dirname after $srcdir,
+ # for the driver files that want it. XXX this is silly.
+ # drivers should get a single var, not "$srcdir/$subdir"
+ set subdir [file dirname $test_name]
+ set p [expr [string length $srcdir]-1]
+ while {0 < $p && [string index $srcdir $p] == "/"} {
+ incr p -1
+ }
+ if {[string range $subdir 0 $p] == $srcdir} {
+ set subdir [string range $subdir [expr $p+1] end];
+ regsub "^/" $subdir "" subdir
+ }
+
+ # XXX not the right thing to do.
+ set runtests [list [file tail $test_name] ""]
+
+ runtest $test_name;
+ }
+ } else {
+ #
+ # Go digging for tests.
+ #
+ foreach dir "${test_top_dirs}" {
+ if { ${dir} != ${srcdir} } {
+ # Ignore this directory if is a directory to be
+ # ignored.
+ if {[info exists ignoredirs] && $ignoredirs != ""} {
+ set found 0
+ foreach directory $ignoredirs {
+ if [string match "*${directory}*" $dir] {
+ set found 1
+ break
+ }
+ }
+ if {$found} {
+ continue
+ }
+ }
+
+ # Run the test if dir_to_run was specified as a
+ # value (for example in MULTIPASS) and the test
+ # directory matches that directory.
+ if {[info exists dir_to_run] && $dir_to_run != ""} {
+ # JYG: dir_to_run might be a space delimited list
+ # of directories. Look for match on each item.
+ set found 0
+ foreach directory $dir_to_run {
+ if [string match "*${directory}*" $dir] {
+ set found 1
+ break
+ }
+ }
+ if {!$found} {
+ continue
+ }
+ }
+
+ # Run the test if cmdline_dir_to_run was specified
+ # by the user using --directory and the test
+ # directory matches that directory
+ if {[info exists cmdline_dir_to_run] \
+ && $cmdline_dir_to_run != ""} {
+ # JYG: cmdline_dir_to_run might be a space delimited
+ # list of directories. Look for match on each item.
+ set found 0
+ foreach directory $cmdline_dir_to_run {
+ if [string match "*${directory}*" $dir] {
+ set found 1
+ break
+ }
+ }
+ if {!$found} {
+ continue
+ }
+ }
+
+ foreach test_name [lsort [find ${dir} *.exp]] {
+ if { ${test_name} == "" } {
+ continue
+ }
+ # Ignore this one if asked to.
+ if { ${ignoretests} != "" } {
+ if { 0 <= [lsearch ${ignoretests} [file tail ${test_name}]]} {
+ continue
+ }
+ }
+
+ # Get the path after the $srcdir so we know
+ # the subdir we're in.
+ set subdir [file dirname $test_name]
+ # We used to do
+ # regsub $srcdir [file dirname $test_name] "" subdir
+ # but what if [file dirname $test_name] contains regexp
+ # characters? We lose. Instead...
+ set first [string first $srcdir $subdir]
+ if { $first >= 0 } {
+ set first [expr $first + [string length $srcdir]];
+ set subdir [string range $subdir $first end];
+ regsub "^/" "$subdir" "" subdir;
+ }
+ if { "$srcdir" == "$subdir" || "$srcdir" == "$subdir/" } {
+ set subdir ""
+ }
+ # Check to see if the range of tests is limited,
+ # set `runtests' to a list of two elements: the script name
+ # and any arguments ("" if none).
+ if [info exists all_runtests] {
+ verbose "searching for $test_name in [array names all_runtests]"
+ if { 0 > [lsearch [array names all_runtests] [file tail $test_name]]} {
+ if { 0 > [lsearch [array names all_runtests] $test_name] } {
+ continue
+ }
+ }
+ set runtests [list [file tail $test_name] $all_runtests([file tail $test_name])]
+ } else {
+ set runtests [list [file tail $test_name] ""]
+ }
+ runtest $test_name;
+ }
+ }
+ }
+ # Restore the variables set by this pass.
+ foreach varval $restore {
+ if { [llength $varval] > 1 } {
+ verbose "Restoring [lindex $varval 0] to [lindex $varval 1]" 4;
+ set [lindex $varval 0] [lindex $varval 1];
+ } else {
+ verbose "Restoring [lindex $varval 0] to `unset'" 4;
+ unset [lindex $varval 0];
+ }
+ }
+ }
+ }
+ cleanup_target_hook $current_target;
+ if { $target_count > 1 } {
+ log_summary;
+ }
+}
+
+log_and_exit;
--- /dev/null
+#
+# site.tmpl -- Sample template for a global config file.
+# NOTE: This file contains mostly site specific
+# configuration data that is custom to Cygnus
+# Support. You'll have to change most of the
+# values to work at your site.
+# Written by manson@cygnus.com
+#
+
+#
+# transform -- transform a tool name to get the installed name. We only define
+# this if there wasn't one. This was the global config file can
+# override how the tool names are calculated.
+#
+
+#
+# uncomment this if you wish to redefine the transform procedure
+#
+
+#if ![string match "transform" [info procs transform]] then {
+# proc transform { name } {
+# global target_triplet
+#
+# if [string match "" $target_triplet] then {
+# return $name
+# } else {
+# return ${target_triplet}-$name
+# }
+# }
+#}
+
+#
+# Set a default target list for various target triplets.
+#
+case "$target_triplet" in {
+ { "hppa*-*-proelf*" } {
+ set target_list { winbond }
+ }
+ { "i386-*-aout" } {
+ set target_list { i386-aout }
+ }
+ { "m68k-mvme135-*" } { # Motorola MVME135 board running Bug monitor
+ set target_list { "mvme135-bug" }
+ }
+ { "m68k-idp-*" "m68k-rom68k-*" } { # Motorola IDP board running rom68k monitor
+ set target_list "bozo"
+ }
+}
--- /dev/null
+/* Bleah!! */
+int remote_debug = 0;
+
+main() {
+ set_debug_traps();
+ breakpoint();
+}
--- /dev/null
+;; tcl.el --- Tcl code editing commands for Emacs
+
+;; Copyright (C) 1994 Free Software Foundation, Inc.
+
+;; Maintainer: Tom Tromey <tromey@busco.lanl.gov>
+;; Author: Tom Tromey <tromey@busco.lanl.gov>
+;; Chris Lindblad <cjl@lcs.mit.edu>
+;; Keywords: languages tcl modes
+;; Version: 1.49
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs 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 1, or (at your option)
+;; any later version.
+
+;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+;; HOW TO INSTALL:
+;; Put the following forms in your .emacs to enable autoloading of Tcl
+;; mode, and auto-recognition of ".tcl" files.
+;;
+;; (autoload 'tcl-mode "tcl" "Tcl mode." t)
+;; (autoload 'inferior-tcl "tcl" "Run inferior Tcl process." t)
+;; (setq auto-mode-alist (append '(("\\.tcl$" . tcl-mode)) auto-mode-alist))
+;;
+;; If you plan to use the interface to the TclX help files, you must
+;; set the variable tcl-help-directory-list to point to the topmost
+;; directories containing the TclX help files. Eg:
+;;
+;; (setq tcl-help-directory-list '("/usr/local/lib/tclx/help"))
+;;
+;; Also you will want to add the following to your .emacs:
+;;
+;; (autoload 'tcl-help-on-word "tcl" "Help on Tcl commands" t)
+;;
+;; FYI a *very* useful thing to do is nroff all the Tk man pages and
+;; put them in a subdir of the help system.
+;;
+
+;;; Commentary:
+
+;; LCD Archive Entry:
+;; tcl|Tom Tromey|tromey@busco.lanl.gov|
+;; Major mode for editing Tcl|
+;; 1995/12/07 18:27:47|1.49|~/modes/tcl.el.Z|
+
+;; CUSTOMIZATION NOTES:
+;; * tcl-proc-list can be used to customize a list of things that
+;; "define" other things. Eg in my project I put "defvar" in this
+;; list.
+;; * tcl-typeword-list is similar, but uses font-lock-type-face.
+;; * tcl-keyword-list is a list of keywords. I've generally used this
+;; for flow-control words. Eg I add "unwind_protect" to this list.
+;; * tcl-type-alist can be used to minimally customize indentation
+;; according to context.
+
+;; Change log:
+;; tcl.el,v
+;; Revision 1.49 1995/12/07 18:27:47 tromey
+;; (add-log-tcl-defun): Don't use tcl-beginning-of-defun; just go to end
+;; of line before searching.
+;;
+;; Revision 1.48 1995/12/07 18:18:21 tromey
+;; (add-log-tcl-defun): Now uses tcl-beginning-of-defun.
+;;
+;; Revision 1.47 1995/08/22 17:49:45 tromey
+;; (tcl-hilit): New function from "Chris Alfeld" <calfeld@math.utah.edu>
+;; (tcl-mode): Call it
+;;
+;; Revision 1.46 1995/08/07 16:02:01 tromey
+;; (tcl-do-auto-fill): Only fill past fill-column; for 19.29.
+;; (tcl-auto-fill-mode): Use force-mode-line-update.
+;;
+;; Revision 1.45 1995/07/23 23:51:25 tromey
+;; (tcl-word-no-props): New function.
+;; (tcl-figure-type): Use it.
+;; (tcl-current-word): Ditto.
+;;
+;; Revision 1.44 1995/07/23 20:26:47 tromey
+;; Doc fixes.
+;;
+;; Revision 1.43 1995/07/17 19:59:49 tromey
+;; (inferior-tcl-mode): Use modeline-process if it exists.
+;;
+;; Revision 1.42 1995/07/17 19:55:25 tromey
+;; XEmacs currently must use tcl-internal-end-of-defun
+;;
+;; Revision 1.41 1995/07/14 21:54:56 tromey
+;; Changes to make menus work in XEmacs.
+;; From Mike Scheidler <c23mts@kocrsv01.delcoelect.com>
+;;
+;; Revision 1.40 1995/07/11 03:13:15 tromey
+;; (tcl-mode): Customize for new dabbrev.
+;;
+;; Revision 1.39 1995/07/09 21:58:03 tromey
+;; (tcl-do-fill-paragraph): New function.
+;; (tcl-mode): Set up for paragraph filling.
+;;
+;; Revision 1.38 1995/07/09 21:30:32 tromey
+;; (tcl-mode): Fixes to 19.29 paragraph variables.
+;;
+;; Revision 1.37 1995/07/09 18:52:16 tromey
+;; (tcl-do-auto-fill): Set fill-prefix.
+;;
+;; Revision 1.36 1995/07/09 01:07:57 tromey
+;; (tcl-imenu-create-index-function): Work with imenu from Emacs 19.29
+;;
+;; Revision 1.35 1995/06/27 20:12:00 tromey
+;; (tcl-type-alist): More itcl changes.
+;;
+;; Revision 1.34 1995/06/27 20:06:05 tromey
+;; More changes for itcl.
+;; Bug fixes for Emacs 19.29.
+;;
+;; Revision 1.33 1995/06/27 20:01:29 tromey
+;; (tcl-set-proc-regexp): Allow leading spaces.
+;; (tcl-proc-list): Changes for itcl.
+;; (tcl-typeword-list): Ditto.
+;; (tcl-keyword-list): Ditto.
+;;
+;; Revision 1.32 1995/05/11 22:12:49 tromey
+;; (tcl-type-alist): Include entry for "proc".
+;;
+;; Revision 1.31 1995/05/10 23:38:12 tromey
+;; (tcl-add-fsf-menu): Use make-lucid-menu-keymap, not
+;; "make-xemacs-menu-keymap".
+;;
+;; Revision 1.30 1995/05/10 18:22:21 tromey
+;; Bug fix in menu code for XEmacs.
+;;
+;; Revision 1.29 1995/05/09 21:36:53 tromey
+;; Changed "Lucid Emacs" to "XEmacs".
+;; Tcl's popup menu now added to existing one, courtesy
+;; dfarmer@evolving.com (Doug Farmer)
+;;
+;; Revision 1.28 1995/04/08 19:52:50 tromey
+;; (tcl-outline-level): New function
+;; (tcl-mode): Added outline-handling stuff.
+;; From Jesper Pedersen <blackie@imada.ou.dk>
+;;
+;; Revision 1.27 1994/10/11 02:01:27 tromey
+;; (tcl-mode): imenu-create-index-function made buffer local.
+;;
+;; Revision 1.26 1994/09/01 18:06:24 tromey
+;; Added filename completion in inferior tcl mode
+;;
+;; Revision 1.25 1994/08/22 15:56:24 tromey
+;; tcl-load-file default to current buffer.
+;;
+;; Revision 1.24 1994/08/21 20:33:05 tromey
+;; Fixed bug in tcl-guess-application.
+;;
+;; Revision 1.23 1994/08/21 03:54:45 tromey
+;; Keybindings don't overshadown comint bindings.
+;;
+;; Revision 1.22 1994/07/26 00:46:07 tromey
+;; Emacs 18 changes from Carl Witty.
+;;
+;; Revision 1.21 1994/07/14 22:49:21 tromey
+;; Added ";;;###autoload" comments where appropriate.
+;;
+; Revision 1.20 1994/06/05 16:57:22 tromey
+; tcl-current-word does the right thing in inferior-tcl-mode.
+;
+; Revision 1.19 1994/06/03 21:09:19 tromey
+; Another menu fix.
+;
+; Revision 1.18 1994/06/03 20:39:14 tromey
+; Fixed menu bug.
+;
+; Revision 1.17 1994/06/03 00:47:15 tromey
+; Fixed bug in bug-reporting code.
+;
+; Revision 1.16 1994/05/26 05:06:14 tromey
+; Menu items now sensitive as appropriate.
+;
+; Revision 1.15 1994/05/22 20:38:11 tromey
+; Added bug-report keybindings and menu entries.
+;
+; Revision 1.14 1994/05/22 20:18:28 tromey
+; Even more compile stuff.
+;
+; Revision 1.13 1994/05/22 20:17:15 tromey
+; Moved emacs version checking code to very beginning.
+;
+; Revision 1.12 1994/05/22 20:14:59 tromey
+; Compile fixes.
+;
+; Revision 1.11 1994/05/22 20:12:44 tromey
+; Fixed mark-defun for 19.23.
+; More menu fixes.
+;
+; Revision 1.10 1994/05/22 20:02:03 tromey
+; Fixed bug with M-;.
+; Wrote bug-reporting code.
+;
+; Revision 1.9 1994/05/22 05:26:51 tromey
+; Fixes for imenu.
+;
+; Revision 1.8 1994/05/22 03:38:07 tromey
+; Fixed menu support.
+;
+; Revision 1.7 1994/05/03 01:23:42 tromey
+; *** empty log message ***
+;
+; Revision 1.6 1994/04/23 16:23:36 tromey
+; Wrote tcl-indent-for-comment
+;
+;;
+;; 18-Mar-1994 Tom Tromey Fourth beta release.
+;; Added {un,}comment-region to menu. Idea from
+;; Mike Scheidler <c23mts@kocrsv01.delcoelect.com>
+;; 17-Mar-1994 Tom Tromey
+;; Fixed tcl-restart-with-file. Bug fix attempt in
+;; tcl-internal-end-of-defun.
+;; 16-Mar-1994 Tom Tromey Third beta release
+;; Added support code for menu (from Tcl mode written by
+;; schmid@fb3-s7.math.TU-Berlin.DE (Gregor Schmid)).
+;; 12-Mar-1994 Tom Tromey
+;; Better documentation for inferior-tcl-buffer. Wrote
+;; tcl-restart-with-file. Wrote Lucid Emacs menu (but no
+;; code to install it).
+;; 12-Mar-1994 Tom Tromey
+;; Wrote tcl-guess-application. Another stab at making
+;; tcl-omit-ws-regexp work.
+;; 10-Mar-1994 Tom Tromey Second beta release
+;; Last Modified: Thu Mar 10 01:24:25 1994 (Tom Tromey)
+;; Wrote perl-mode style line indentation command.
+;; Wrote more documentation. Added tcl-continued-indent-level.
+;; Integrated help code.
+;; 8-Mar-1994 Tom Tromey
+;; Last Modified: Tue Mar 8 11:58:44 1994 (Tom Tromey)
+;; Bug fixes.
+;; 6-Mar-1994 Tom Tromey
+;; Last Modified: Sun Mar 6 18:55:41 1994 (Tom Tromey)
+;; Updated auto-newline support.
+;; 6-Mar-1994 Tom Tromey Beta release
+;; Last Modified: Sat Mar 5 17:24:32 1994 (Tom Tromey)
+;; Wrote tcl-hashify-buffer. Other minor bug fixes.
+;; 5-Mar-1994 Tom Tromey
+;; Last Modified: Sat Mar 5 16:11:20 1994 (Tom Tromey)
+;; Wrote electric-hash code.
+;; 3-Mar-1994 Tom Tromey
+;; Last Modified: Thu Mar 3 02:53:40 1994 (Tom Tromey)
+;; Added code to handle auto-fill in comments.
+;; Added imenu support code.
+;; Cleaned up code.
+;; Better font-lock support.
+;; 28-Feb-1994 Tom Tromey
+;; Last Modified: Mon Feb 28 14:08:05 1994 (Tom Tromey)
+;; Made tcl-figure-type more easily configurable.
+;; 28-Feb-1994 Tom Tromey
+;; Last Modified: Mon Feb 28 01:02:58 1994 (Tom Tromey)
+;; Wrote inferior-tcl mode.
+;; 16-Feb-1994 Tom Tromey
+;; Last Modified: Wed Feb 16 17:05:19 1994 (Tom Tromey)
+;; Added support for font-lock-mode.
+;; 29-Oct-1993 Tom Tromey
+;; Last Modified: Sun Oct 24 17:39:14 1993 (Tom Tromey)
+;; Patches from Guido Bosch to make things work with Lucid Emacs.
+;; 22-Oct-1993 Tom Tromey
+;; Last Modified: Fri Oct 22 15:26:46 1993 (Tom Tromey)
+;; Made many characters have "_" syntax class; suggested by Guido
+;; Bosch <Guido.Bosch@loria.fr>. Note that this includes the "$"
+;; character, which might be a change you'd notice.
+;; 21-Oct-1993 Tom Tromey
+;; Last Modified: Thu Oct 21 20:28:40 1993 (Tom Tromey)
+;; More fixes for tcl-omit-ws-regexp.
+;; 20-Oct-1993 Tom Tromey
+;; Started keeping history. Fixed tcl-{beginning,end}-of-defun.
+;; Added some code to make things work with Emacs 18.
+
+;; THANKS TO:
+;; Guido Bosch <Guido.Bosch@loria.fr>
+;; pgs1002@esc.cam.ac.uk (Dr P.G. Sjoerdsma)
+;; Mike Scheidler <c23mts@kocrsv01.delcoelect.com>
+;; Matt Newman <men@charney.colorado.edu>
+;; rwhitby@research.canon.oz.au (Rod Whitby)
+;; h9118101@hkuxa.hku.hk (Yip Chi Lap [Beta])
+;; Pertti Tapio Kasanen <ptk@delta.hut.fi>
+;; schmid@fb3-s7.math.TU-Berlin.DE (Gregor Schmid)
+;; warsaw@nlm.nih.gov (Barry A. Warsaw)
+;; Carl Witty <cwitty@ai.mit.edu>
+;; T. V. Raman <raman@crl.dec.com>
+;; Jesper Pedersen <blackie@imada.ou.dk>
+;; dfarmer@evolving.com (Doug Farmer)
+;; "Chris Alfeld" <calfeld@math.utah.edu>
+
+;; KNOWN BUGS:
+;; * indent-region should skip blank lines. (It does in v19, so I'm
+;; not motivated to fix it here).
+;; * In Tcl "#" is not always a comment character. This can confuse
+;; tcl.el in certain circumstances. For now the only workaround is
+;; to enclose offending hash characters in quotes or precede it with
+;; a backslash. Note that using braces won't work -- quotes change
+;; the syntax class of characters between them, while braces do not.
+;; The electric-# mode helps alleviate this problem somewhat.
+;; * indent-tcl-exp is untested.
+;; * Doesn't work under Emacs 18 yet.
+;; * There's been a report that font-lock does strange things under
+;; Lucid Emacs 19.6. For instance in "proc foobar", the space
+;; before "foobar" is highlighted.
+
+;; TODO:
+;; * make add-log-tcl-defun smarter. should notice if we are in the
+;; middle of a defun, or between defuns. should notice if point is
+;; on first line of defun (or maybe even in comments before defun).
+;; * Allow continuation lines to be indented under the first argument
+;; of the preceeding line, like this:
+;; [list something \
+;; something-else]
+;; * There is a request that indentation work like this:
+;; button .fred -label Fred \
+;; -command {puts fred}
+;; * Should have tcl-complete-symbol that queries the inferior process.
+;; * Should have describe-symbol that works by sending the magic
+;; command to a tclX process.
+;; * Need C-x C-e binding (tcl-eval-last-exp).
+;; * Write indent-region function that is faster than indenting each
+;; line individually.
+;; * tcl-figure-type should stop at "beginning of line" (only ws
+;; before point, and no "\" on previous line). (see tcl-real-command-p).
+;; * overrides some comint keybindings; fix.
+;; * Trailing \ will eat blank lines. Should deal with this.
+;; (this would help catch some potential bugs).
+;; * Inferior should display in half the screen, not the whole screen.
+;; * Indentation should deal with "switch".
+;; * Consider writing code to find help files automatically (for
+;; common cases).
+;; * `#' shouldn't insert `\#' when point is in string.
+
+\f
+
+;;; Code:
+
+;; I sure wish Emacs had a package that made it easy to extract this
+;; sort of information.
+(defconst tcl-using-emacs-19 (string-match "19\\." emacs-version)
+ "Nil unless using Emacs 19 (XEmacs or FSF).")
+
+;; FIXME this will break on Emacs 19.100.
+(defconst tcl-using-emacs-19-23
+ (string-match "19\\.\\(2[3-9]\\|[3-9][0-9]\\)" emacs-version)
+ "Nil unless using Emacs 19-23 or later.")
+
+(defconst tcl-using-xemacs-19 (string-match "XEmacs" emacs-version)
+ "Nil unless using XEmacs).")
+
+(require 'comint)
+
+;; When compiling under GNU Emacs, load imenu during compilation. If
+;; you have 19.22 or earlier, comment this out, or get imenu.
+(and (fboundp 'eval-when-compile)
+ (eval-when-compile
+ (if (and (string-match "19\\." emacs-version)
+ (not (string-match "XEmacs" emacs-version)))
+ (require 'imenu))
+ ()))
+
+(defconst tcl-version "1.49")
+(defconst tcl-maintainer "Tom Tromey <tromey@drip.colorado.edu>")
+
+;;
+;; User variables.
+;;
+
+(defvar tcl-indent-level 4
+ "*Indentation of Tcl statements with respect to containing block.")
+
+(defvar tcl-continued-indent-level 4
+ "*Indentation of continuation line relative to first line of command.")
+
+(defvar tcl-auto-newline nil
+ "*Non-nil means automatically newline before and after braces
+inserted in Tcl code.")
+
+(defvar tcl-tab-always-indent t
+ "*Control effect of TAB key.
+If t (the default), always indent current line.
+If nil and point is not in the indentation area at the beginning of
+the line, a TAB is inserted.
+Other values cause the first possible action from the following list
+to take place:
+
+ 1. Move from beginning of line to correct indentation.
+ 2. Delete an empty comment.
+ 3. Move forward to start of comment, indenting if necessary.
+ 4. Move forward to end of line, indenting if necessary.
+ 5. Create an empty comment.
+ 6. Move backward to start of comment, indenting if necessary.")
+
+(defvar tcl-use-hairy-comment-detector t
+ "*If not `nil', the the more complicated, but slower, comment
+detecting function is used. This variable is only used in GNU Emacs
+19 (the fast function is always used elsewhere).")
+
+(defvar tcl-electric-hash-style 'smart
+ "*Style of electric hash insertion to use.
+Possible values are 'backslash, meaning that `\\' quoting should be
+done; 'quote, meaning that `\"' quoting should be done; 'smart,
+meaning that the choice between 'backslash and 'quote should be
+made depending on the number of hashes inserted; or nil, meaning that
+no quoting should be done. Any other value for this variable is
+taken to mean 'smart. The default is 'smart.")
+
+(defvar tcl-help-directory-list nil
+ "*List of topmost directories containing TclX help files")
+
+(defvar tcl-use-smart-word-finder t
+ "*If not nil, use a better way of finding the current word when
+looking up help on a Tcl command.")
+
+(defvar tcl-application "wish"
+ "*Name of Tcl application to run in inferior Tcl mode.")
+
+(defvar tcl-command-switches nil
+ "*Switches to supply to `tcl-application'.")
+
+(defvar tcl-prompt-regexp "^\\(% \\|\\)"
+ "*If not nil, a regexp that will match the prompt in the inferior process.
+If nil, the prompt is the name of the application with \">\" appended.
+
+The default is \"^\\(% \\|\\)\", which will match the default primary
+and secondary prompts for tclsh and wish.")
+
+(defvar inferior-tcl-source-command "source %s\n"
+ "*Format-string for building a Tcl command to load a file.
+This format string should use `%s' to substitute a file name
+and should result in a Tcl expression that will command the
+inferior Tcl to load that file. The filename will be appropriately
+quoted for Tcl.")
+
+;;
+;; Keymaps, abbrevs, syntax tables.
+;;
+
+(defvar tcl-mode-abbrev-table nil
+ "Abbrev table in use in Tcl-mode buffers.")
+(if tcl-mode-abbrev-table
+ ()
+ (define-abbrev-table 'tcl-mode-abbrev-table ()))
+
+(defvar tcl-mode-map ()
+ "Keymap used in Tcl mode.")
+
+(defvar tcl-mode-syntax-table nil
+ "Syntax table in use in Tcl-mode buffers.")
+(if tcl-mode-syntax-table
+ ()
+ (setq tcl-mode-syntax-table (make-syntax-table))
+ (modify-syntax-entry ?% "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?@ "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?& "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?* "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?+ "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?- "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?. "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?: "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?! "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?$ "_" tcl-mode-syntax-table) ; FIXME use "'"?
+ (modify-syntax-entry ?/ "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?~ "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?< "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?= "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?> "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?| "_" tcl-mode-syntax-table)
+ (modify-syntax-entry ?\( "()" tcl-mode-syntax-table)
+ (modify-syntax-entry ?\) ")(" tcl-mode-syntax-table)
+ (modify-syntax-entry ?\; "." tcl-mode-syntax-table)
+ (modify-syntax-entry ?\n "> " tcl-mode-syntax-table)
+ (modify-syntax-entry ?\f "> " tcl-mode-syntax-table)
+ (modify-syntax-entry ?# "< " tcl-mode-syntax-table))
+
+(defvar inferior-tcl-mode-map nil
+ "Keymap used in Inferior Tcl mode.")
+
+;; XEmacs menu.
+(defvar tcl-xemacs-menu
+ '(["Beginning of function" tcl-beginning-of-defun t]
+ ["End of function" tcl-end-of-defun t]
+ ["Mark function" tcl-mark-defun t]
+ ["Indent region" indent-region (tcl-mark)]
+ ["Comment region" comment-region (tcl-mark)]
+ ["Uncomment region" tcl-uncomment-region (tcl-mark)]
+ "----"
+ ["Show Tcl process buffer" inferior-tcl t]
+ ["Send function to Tcl process" tcl-eval-defun
+ (and inferior-tcl-buffer (get-buffer inferior-tcl-buffer))]
+ ["Send region to Tcl process" tcl-eval-region
+ (and inferior-tcl-buffer (get-buffer inferior-tcl-buffer))]
+ ["Send file to Tcl process" tcl-load-file
+ (and inferior-tcl-buffer (get-buffer inferior-tcl-buffer))]
+ ["Restart Tcl process with file" tcl-restart-with-file t]
+ "----"
+ ["Tcl help" tcl-help-on-word tcl-help-directory-list]
+ ["Send bug report" tcl-submit-bug-report t])
+ "XEmacs menu for Tcl mode.")
+
+;; GNU Emacs does menus via keymaps. Do it in a function in case we
+;; later decide to add it to inferior Tcl mode as well.
+(defun tcl-add-fsf-menu (map)
+ (define-key map [menu-bar] (make-sparse-keymap))
+ ;; This fails in Emacs 19.22 and earlier.
+ (require 'lmenu)
+ (let ((menu (make-lucid-menu-keymap "Tcl" tcl-xemacs-menu)))
+ (define-key map [menu-bar tcl] (cons "Tcl" menu))
+ ;; The following is intended to compute the key sequence
+ ;; information for the menu. It doesn't work.
+ (x-popup-menu nil menu)))
+
+(defun tcl-fill-mode-map ()
+ (define-key tcl-mode-map "{" 'tcl-electric-char)
+ (define-key tcl-mode-map "}" 'tcl-electric-brace)
+ (define-key tcl-mode-map "[" 'tcl-electric-char)
+ (define-key tcl-mode-map "]" 'tcl-electric-char)
+ (define-key tcl-mode-map ";" 'tcl-electric-char)
+ (define-key tcl-mode-map "#" 'tcl-electric-hash)
+ ;; FIXME.
+ (define-key tcl-mode-map "\e\C-a" 'tcl-beginning-of-defun)
+ ;; FIXME.
+ (define-key tcl-mode-map "\e\C-e" 'tcl-end-of-defun)
+ ;; FIXME.
+ (define-key tcl-mode-map "\e\C-h" 'tcl-mark-defun)
+ (define-key tcl-mode-map "\e\C-q" 'indent-tcl-exp)
+ (define-key tcl-mode-map "\177" 'backward-delete-char-untabify)
+ (define-key tcl-mode-map "\t" 'tcl-indent-command)
+ (define-key tcl-mode-map "\M-;" 'tcl-indent-for-comment)
+ (define-key tcl-mode-map "\M-\C-x" 'tcl-eval-defun)
+ (define-key tcl-mode-map "\C-c\C-b" 'tcl-submit-bug-report)
+ (and (fboundp 'comment-region)
+ (define-key tcl-mode-map "\C-c\C-c" 'comment-region))
+ (define-key tcl-mode-map "\C-c\C-i" 'tcl-help-on-word)
+ (define-key tcl-mode-map "\C-c\C-v" 'tcl-eval-defun)
+ (define-key tcl-mode-map "\C-c\C-f" 'tcl-load-file)
+ (define-key tcl-mode-map "\C-c\C-t" 'inferior-tcl)
+ (define-key tcl-mode-map "\C-c\C-x" 'tcl-eval-region)
+ (define-key tcl-mode-map "\C-c\C-s" 'switch-to-tcl)
+
+ ;; Make menus.
+ (if (and tcl-using-emacs-19 (not tcl-using-xemacs-19))
+ (progn
+ (tcl-add-fsf-menu tcl-mode-map))))
+
+(defun tcl-fill-inferior-map ()
+ (define-key inferior-tcl-mode-map "\t" 'comint-dynamic-complete)
+ (define-key inferior-tcl-mode-map "\M-?"
+ 'comint-dynamic-list-filename-completions)
+ (define-key inferior-tcl-mode-map "\e\C-a" 'tcl-beginning-of-defun)
+ (define-key inferior-tcl-mode-map "\e\C-e" 'tcl-end-of-defun)
+ (define-key inferior-tcl-mode-map "\177" 'backward-delete-char-untabify)
+ (define-key inferior-tcl-mode-map "\M-\C-x" 'tcl-eval-defun)
+ (define-key inferior-tcl-mode-map "\C-c\C-b" 'tcl-submit-bug-report)
+ (define-key inferior-tcl-mode-map "\C-c\C-i" 'tcl-help-on-word)
+ (define-key inferior-tcl-mode-map "\C-c\C-v" 'tcl-eval-defun)
+ (define-key inferior-tcl-mode-map "\C-c\C-f" 'tcl-load-file)
+ (define-key inferior-tcl-mode-map "\C-c\C-t" 'inferior-tcl)
+ (define-key inferior-tcl-mode-map "\C-c\C-x" 'tcl-eval-region)
+ (define-key inferior-tcl-mode-map "\C-c\C-s" 'switch-to-tcl))
+
+(if tcl-mode-map
+ ()
+ (setq tcl-mode-map (make-sparse-keymap))
+ (tcl-fill-mode-map))
+
+(if inferior-tcl-mode-map
+ ()
+ ;; FIXME Use keymap inheritance here? FIXME we override comint
+ ;; keybindings here. Maybe someone has a better set?
+ (setq inferior-tcl-mode-map (copy-keymap comint-mode-map))
+ (tcl-fill-inferior-map))
+
+
+(defvar inferior-tcl-buffer nil
+ "*The current inferior-tcl process buffer.
+
+MULTIPLE PROCESS SUPPORT
+===========================================================================
+To run multiple Tcl processes, you start the first up with
+\\[inferior-tcl]. It will be in a buffer named `*inferior-tcl*'.
+Rename this buffer with \\[rename-buffer]. You may now start up a new
+process with another \\[inferior-tcl]. It will be in a new buffer,
+named `*inferior-tcl*'. You can switch between the different process
+buffers with \\[switch-to-buffer].
+
+Commands that send text from source buffers to Tcl processes -- like
+`tcl-eval-defun' or `tcl-load-file' -- have to choose a process to
+send to, when you have more than one Tcl process around. This is
+determined by the global variable `inferior-tcl-buffer'. Suppose you
+have three inferior Lisps running:
+ Buffer Process
+ foo inferior-tcl
+ bar inferior-tcl<2>
+ *inferior-tcl* inferior-tcl<3>
+If you do a \\[tcl-eval-defun] command on some Lisp source code, what
+process do you send it to?
+
+- If you're in a process buffer (foo, bar, or *inferior-tcl*),
+ you send it to that process.
+- If you're in some other buffer (e.g., a source file), you
+ send it to the process attached to buffer `inferior-tcl-buffer'.
+This process selection is performed by function `inferior-tcl-proc'.
+
+Whenever \\[inferior-tcl] fires up a new process, it resets
+`inferior-tcl-buffer' to be the new process's buffer. If you only run
+one process, this does the right thing. If you run multiple
+processes, you can change `inferior-tcl-buffer' to another process
+buffer with \\[set-variable].")
+
+;;
+;; Hooks and other customization.
+;;
+
+(defvar tcl-mode-hook nil
+ "Hook run on entry to Tcl mode.
+
+Several functions exist which are useful to run from your
+`tcl-mode-hook' (see each function's documentation for more
+information):
+
+ tcl-guess-application
+ Guesses a default setting for `tcl-application' based on any
+ \"#!\" line at the top of the file.
+ tcl-hashify-buffer
+ Quotes all \"#\" characters that don't correspond to actual
+ Tcl comments. (Useful when editing code not originally created
+ with this mode).
+ tcl-auto-fill-mode
+ Auto-filling of Tcl comments.
+
+Emacs 19 users can add functions to the hook with `add-hook':
+
+ (add-hook 'tcl-mode-hook 'tcl-guess-application)
+
+Emacs 18 users must use `setq':
+
+ (setq tcl-mode-hook (cons 'tcl-guess-application tcl-mode-hook))")
+
+
+(defvar inferior-tcl-mode-hook nil
+ "Hook for customizing Inferior Tcl mode.")
+
+(defvar tcl-proc-list
+ '("proc" "method" "itcl_class")
+ "List of commands whose first argument defines something.
+This exists because some people (eg, me) use \"defvar\" et al.
+Call `tcl-set-proc-regexp' and `tcl-set-font-lock-keywords'
+after changing this list.")
+
+(defvar tcl-proc-regexp nil
+ "Regexp to use when matching proc headers.")
+
+(defvar tcl-typeword-list
+ '("global" "upvar" "inherit" "public" "protected" "common")
+ "List of Tcl keywords denoting \"type\". Used only for highlighting.
+Call `tcl-set-font-lock-keywords' after changing this list.")
+
+;; Generally I've picked control operators to be keywords.
+(defvar tcl-keyword-list
+ '("if" "then" "else" "elseif" "for" "foreach" "break" "continue" "while"
+ "eval" "case" "in" "switch" "default" "exit" "error" "proc" "return"
+ "uplevel" "constructor" "destructor" "itcl_class" "loop" "for_array_keys"
+ "for_recursive_glob" "for_file")
+ "List of Tcl keywords. Used only for highlighting.
+Default list includes some TclX keywords.
+Call `tcl-set-font-lock-keywords' after changing this list.")
+
+(defvar tcl-font-lock-keywords nil
+ "Keywords to highlight for Tcl. See variable `font-lock-keywords'.
+This variable is generally set from `tcl-proc-regexp',
+`tcl-typeword-list', and `tcl-keyword-list' by the function
+`tcl-set-font-lock-keywords'.")
+
+;; FIXME need some way to recognize variables because array refs look
+;; like 2 sexps.
+(defvar tcl-type-alist
+ '(
+ ("proc" nil tcl-expr tcl-commands)
+ ("method" nil tcl-expr tcl-commands)
+ ("destructor" tcl-commands)
+ ("constructor" tcl-commands)
+ ("expr" tcl-expr)
+ ("catch" tcl-commands)
+ ("if" tcl-expr "then" tcl-commands)
+ ("elseif" tcl-expr "then" tcl-commands)
+ ("elseif" tcl-expr tcl-commands)
+ ("if" tcl-expr tcl-commands)
+ ("while" tcl-expr tcl-commands)
+ ("for" tcl-commands tcl-expr tcl-commands tcl-commands)
+ ("foreach" nil nil tcl-commands)
+ ("for_file" nil nil tcl-commands)
+ ("for_array_keys" nil nil tcl-commands)
+ ("for_recursive_glob" nil nil nil tcl-commands)
+ ;; Loop handling is not perfect, because the third argument can be
+ ;; either a command or an expr, and there is no real way to look
+ ;; forward.
+ ("loop" nil tcl-expr tcl-expr tcl-commands)
+ ("loop" nil tcl-expr tcl-commands)
+ )
+ "Alist that controls indentation.
+\(Actually, this really only controls what happens on continuation lines).
+Each entry looks like `(KEYWORD TYPE ...)'.
+Each type entry describes a sexp after the keyword, and can be one of:
+* nil, meaning that this sexp has no particular type.
+* tcl-expr, meaning that this sexp is an arithmetic expression.
+* tcl-commands, meaning that this sexp holds Tcl commands.
+* a string, which must exactly match the string at the corresponding
+ position for a match to be made.
+
+For example, the entry for the \"loop\" command is:
+
+ (\"loop\" nil tcl-expr tcl-commands)
+
+This means that the \"loop\" command has three arguments. The first
+argument is ignored (for indentation purposes). The second argument
+is a Tcl expression, and the last argument is Tcl commands.")
+
+(defvar tcl-explain-indentation nil
+ "If not `nil', debugging message will be printed during indentation.")
+
+\f
+
+;;
+;; Work around differences between various versions of Emacs.
+;;
+
+;; We use this because Lemacs 19.9 has what we need.
+(defconst tcl-pps-has-arg-6
+ (or tcl-using-emacs-19
+ (and tcl-using-xemacs-19
+ (condition-case nil
+ (progn
+ (parse-partial-sexp (point) (point) nil nil nil t)
+ t)
+ (error nil))))
+ "t if using an emacs which supports sixth (\"commentstop\") argument
+to parse-partial-sexp.")
+
+;; Its pretty bogus to have to do this, but there is no easier way to
+;; say "match not syntax-1 and not syntax-2". Too bad you can't put
+;; \s in [...]. This sickness is used in Emacs 19 to match a defun
+;; starter. (It is used for this in v18 as well).
+;;(defconst tcl-omit-ws-regexp
+;; (concat "^\\(\\s"
+;; (mapconcat 'char-to-string "w_.()\"\\$'/" "\\|\\s")
+;; "\\)\\S(*")
+;; "Regular expression that matches everything except space, comment
+;;starter, and comment ender syntax codes.")
+
+;; FIXME? Instead of using the hairy regexp above, we just use a
+;; simple one.
+;;(defconst tcl-omit-ws-regexp "^[^] \t\n#}]\\S(*"
+;; "Regular expression used in locating function definitions.")
+
+;; Here's another stab. I think this one actually works. Now the
+;; problem seems to be that there is a bug in Emacs 19.22 where
+;; end-of-defun doesn't really use the brace matching the one that
+;; trails defun-prompt-regexp.
+(defconst tcl-omit-ws-regexp "^[^ \t\n#}][^\n}]+}*[ \t]+")
+
+(defun tcl-internal-beginning-of-defun (&optional arg)
+ "Move backward to next beginning-of-defun.
+With argument, do this that many times.
+Returns t unless search stops due to end of buffer."
+ (interactive "p")
+ (if (or (null arg) (= arg 0))
+ (setq arg 1))
+ (let (success)
+ (while (progn
+ (setq arg (1- arg))
+ (and (>= arg 0)
+ (setq success
+ (re-search-backward tcl-omit-ws-regexp nil 'move 1))))
+ (while (and (looking-at "[]#}]")
+ (setq success
+ (re-search-backward tcl-omit-ws-regexp nil 'move 1)))))
+ (beginning-of-line)
+ (not (null success))))
+
+(defun tcl-internal-end-of-defun (&optional arg)
+ "Move forward to next end of defun.
+An end of a defun is found by moving forward from the beginning of one."
+ (interactive "p")
+ (if (or (null arg) (= arg 0)) (setq arg 1))
+ (let ((start (point)))
+ ;; Was forward-char. I think this works a little better.
+ (forward-line)
+ (tcl-beginning-of-defun)
+ (while (> arg 0)
+ (while (and (re-search-forward tcl-omit-ws-regexp nil 'move 1)
+ (progn (beginning-of-line) t)
+ (looking-at "[]#}]")
+ (progn (forward-line) t)))
+ (let ((next-line (save-excursion
+ (forward-line)
+ (point))))
+ (while (< (point) next-line)
+ (forward-sexp)))
+ (forward-line)
+ (if (> (point) start) (setq arg (1- arg))))))
+
+;; In Emacs 19, we can use begining-of-defun as long as we set up a
+;; certain regexp. In Emacs 18, we need our own function.
+(fset 'tcl-beginning-of-defun
+ (if tcl-using-emacs-19
+ 'beginning-of-defun
+ 'tcl-internal-beginning-of-defun))
+
+;; Ditto end-of-defun.
+(fset 'tcl-end-of-defun
+ (if (and tcl-using-emacs-19 (not tcl-using-xemacs-19))
+ 'end-of-defun
+ 'tcl-internal-end-of-defun))
+
+;; Internal mark-defun that is used for losing Emacsen.
+(defun tcl-internal-mark-defun ()
+ "Put mark at end of Tcl function, point at beginning."
+ (interactive)
+ (push-mark (point))
+ (tcl-end-of-defun)
+ (if tcl-using-emacs-19
+ (push-mark (point) nil t)
+ (push-mark (point)))
+ (tcl-beginning-of-defun)
+ (backward-paragraph))
+
+;; In GNU Emacs 19-23 and later, mark-defun works as advertised. I
+;; don't know about XEmacs, so for now it and Emacs 18 just lose.
+(fset 'tcl-mark-defun
+ (if tcl-using-emacs-19-23
+ 'mark-defun
+ 'tcl-internal-mark-defun))
+
+;; In GNU Emacs 19, mark takes an additional "force" argument. I
+;; don't know about XEmacs, so I'm just assuming it is the same.
+;; Emacs 18 doesn't have this argument.
+(defun tcl-mark ()
+ "Return mark, or nil if none."
+ (if tcl-using-emacs-19
+ (mark t)
+ (mark)))
+
+\f
+
+;;
+;; Some helper functions.
+;;
+
+(defun tcl-set-proc-regexp ()
+ "Set `tcl-proc-regexp' from variable `tcl-proc-list'."
+ (setq tcl-proc-regexp (concat "^\\s-*\\("
+ (mapconcat 'identity tcl-proc-list "\\|")
+ "\\)[ \t]+")))
+
+(defun tcl-set-font-lock-keywords ()
+ "Set `tcl-font-lock-keywords'.
+Uses variables `tcl-proc-regexp' and `tcl-keyword-list'."
+ (setq tcl-font-lock-keywords
+ (list
+ ;; Names of functions (and other "defining things").
+ (list (concat tcl-proc-regexp "\\([^ \t\n]+\\)")
+ 2 'font-lock-function-name-face)
+
+ ;; Names of type-defining things.
+ (list (concat "\\(\\s-\\|^\\)\\("
+ ;; FIXME Use 'regexp-quote?
+ (mapconcat 'identity tcl-typeword-list "\\|")
+ "\\)\\(\\s-\\|$\\)")
+ 2 'font-lock-type-face)
+
+ ;; Keywords. Only recognized if surrounded by whitespace.
+ ;; FIXME consider using "not word or symbol", not
+ ;; "whitespace".
+ (cons (concat "\\(\\s-\\|^\\)\\("
+ ;; FIXME Use regexp-quote?
+ (mapconcat 'identity tcl-keyword-list "\\|")
+ "\\)\\(\\s-\\|$\\)")
+ 2)
+ )))
+
+(if tcl-proc-regexp
+ ()
+ (tcl-set-proc-regexp))
+
+(if tcl-font-lock-keywords
+ ()
+ (tcl-set-font-lock-keywords))
+
+\f
+
+;;
+;; The mode itself.
+;;
+
+;;;###autoload
+(defun tcl-mode ()
+ "Major mode for editing Tcl code.
+Expression and list commands understand all Tcl brackets.
+Tab indents for Tcl code.
+Paragraphs are separated by blank lines only.
+Delete converts tabs to spaces as it moves back.
+
+Variables controlling indentation style:
+ tcl-indent-level
+ Indentation of Tcl statements within surrounding block.
+ tcl-continued-indent-level
+ Indentation of continuation line relative to first line of command.
+
+Variables controlling user interaction with mode (see variable
+documentation for details):
+ tcl-tab-always-indent
+ Controls action of TAB key.
+ tcl-auto-newline
+ Non-nil means automatically newline before and after braces, brackets,
+ and semicolons inserted in Tcl code.
+ tcl-electric-hash-style
+ Controls action of `#' key.
+ tcl-use-hairy-comment-detector
+ If t, use more complicated, but slower, comment detector.
+ This variable is only used in GNU Emacs 19.
+ tcl-use-smart-word-finder
+ If not nil, use a smarter, Tcl-specific way to find the current
+ word when looking up help on a Tcl command.
+
+Turning on Tcl mode calls the value of the variable `tcl-mode-hook'
+with no args, if that value is non-nil. Read the documentation for
+`tcl-mode-hook' to see what kinds of interesting hook functions
+already exist.
+
+Commands:
+\\{tcl-mode-map}"
+ (interactive)
+ (kill-all-local-variables)
+ (use-local-map tcl-mode-map)
+ (setq major-mode 'tcl-mode)
+ (setq mode-name "Tcl")
+ (setq local-abbrev-table tcl-mode-abbrev-table)
+ (set-syntax-table tcl-mode-syntax-table)
+
+ (make-local-variable 'paragraph-start)
+ (make-local-variable 'paragraph-separate)
+ (if (and tcl-using-emacs-19-23
+ (>= emacs-minor-version 29))
+ (progn
+ ;; In Emacs 19.29, you aren't supposed to start these with a
+ ;; ^.
+ (setq paragraph-start "$\\|\f")
+ (setq paragraph-separate paragraph-start))
+ (setq paragraph-start (concat "^$\\|" page-delimiter))
+ (setq paragraph-separate paragraph-start))
+ (make-local-variable 'paragraph-ignore-fill-prefix)
+ (setq paragraph-ignore-fill-prefix t)
+ (make-local-variable 'fill-paragraph-function)
+ (setq fill-paragraph-function 'tcl-do-fill-paragraph)
+
+ (make-local-variable 'indent-line-function)
+ (setq indent-line-function 'tcl-indent-line)
+ ;; Tcl doesn't require a final newline.
+ ;; (make-local-variable 'require-final-newline)
+ ;; (setq require-final-newline t)
+
+ (make-local-variable 'comment-start)
+ (setq comment-start "# ")
+ (make-local-variable 'comment-start-skip)
+ (setq comment-start-skip "#+ *")
+ (make-local-variable 'comment-column)
+ (setq comment-column 40)
+ (make-local-variable 'comment-end)
+ (setq comment-end "")
+
+ (make-local-variable 'outline-regexp)
+ (setq outline-regexp "[^\n\^M]")
+ (make-local-variable 'outline-level)
+ (setq outline-level 'tcl-outline-level)
+
+ (make-local-variable 'font-lock-keywords)
+ (setq font-lock-keywords tcl-font-lock-keywords)
+
+ ;; The following only really makes sense under GNU Emacs 19.
+ (make-local-variable 'imenu-create-index-function)
+ (setq imenu-create-index-function 'tcl-imenu-create-index-function)
+ (make-local-variable 'parse-sexp-ignore-comments)
+
+ ;; Settings for new dabbrev code.
+ (make-local-variable 'dabbrev-case-fold-search)
+ (setq dabbrev-case-fold-search nil)
+ (make-local-variable 'dabbrev-case-replace)
+ (setq dabbrev-case-replace nil)
+ (make-local-variable 'dabbrev-abbrev-skip-leading-regexp)
+ (setq dabbrev-abbrev-skip-leading-regexp "[$!]")
+ (make-local-variable 'dabbrev-abbrev-char-regexp)
+ (setq dabbrev-abbrev-char-regexp "\\sw\\|\\s_")
+
+ (if tcl-using-emacs-19
+ (progn
+ ;; This can only be set to t in Emacs 19 and XEmacs.
+ ;; Emacs 18 and Epoch lose.
+ (setq parse-sexp-ignore-comments t)
+ ;; XEmacs has defun-prompt-regexp, but I don't believe
+ ;; that it works for end-of-defun -- only for
+ ;; beginning-of-defun.
+ (make-local-variable 'defun-prompt-regexp)
+ (setq defun-prompt-regexp tcl-omit-ws-regexp)
+ ;; The following doesn't work in Lucid Emacs 19.6, but maybe
+ ;; it will appear in later versions.
+ (make-local-variable 'add-log-current-defun-function)
+ (setq add-log-current-defun-function 'add-log-tcl-defun))
+ (setq parse-sexp-ignore-comments nil))
+
+ ;; Put Tcl menu into menubar for XEmacs. This happens
+ ;; automatically for GNU Emacs.
+ (if (and tcl-using-xemacs-19
+ current-menubar
+ (not (assoc "Tcl" current-menubar)))
+ (progn
+ (set-buffer-menubar (copy-sequence current-menubar))
+ (add-menu nil "Tcl" tcl-xemacs-menu)))
+ ;; Append Tcl menu to popup menu for XEmacs.
+ (if (and tcl-using-xemacs-19 (boundp 'mode-popup-menu))
+ (setq mode-popup-menu
+ (cons (concat mode-name " Mode Commands") tcl-xemacs-menu)))
+
+ ;; If hilit19 is loaded, add our stuff.
+ (if (featurep 'hilit19)
+ (tcl-hilit))
+
+ (run-hooks 'tcl-mode-hook))
+
+\f
+
+;; This is used for braces, brackets, and semi (except for closing
+;; braces, which are handled specially).
+(defun tcl-electric-char (arg)
+ "Insert character and correct line's indentation."
+ (interactive "p")
+ ;; Indent line first; this looks better if parens blink.
+ (tcl-indent-line)
+ (self-insert-command arg)
+ (if (and tcl-auto-newline (= last-command-char ?\;))
+ (progn
+ (newline)
+ (tcl-indent-line))))
+
+;; This is used for closing braces. If tcl-auto-newline is set, can
+;; insert a newline both before and after the brace, depending on
+;; context. FIXME should this be configurable? Does anyone use this?
+(defun tcl-electric-brace (arg)
+ "Insert character and correct line's indentation."
+ (interactive "p")
+ ;; If auto-newlining and there is stuff on the same line, insert a
+ ;; newline first.
+ (if tcl-auto-newline
+ (progn
+ (if (save-excursion
+ (skip-chars-backward " \t")
+ (bolp))
+ ()
+ (tcl-indent-line)
+ (newline))
+ ;; In auto-newline case, must insert a newline after each
+ ;; brace. So an explicit loop is needed.
+ (while (> arg 0)
+ (insert last-command-char)
+ (tcl-indent-line)
+ (newline)
+ (setq arg (1- arg))))
+ (self-insert-command arg))
+ (tcl-indent-line))
+
+\f
+
+(defun tcl-indent-command (&optional arg)
+ "Indent current line as Tcl code, or in some cases insert a tab character.
+If tcl-tab-always-indent is t (the default), always indent current line.
+If tcl-tab-always-indent is nil and point is not in the indentation
+area at the beginning of the line, a TAB is inserted.
+Other values of tcl-tab-always-indent cause the first possible action
+from the following list to take place:
+
+ 1. Move from beginning of line to correct indentation.
+ 2. Delete an empty comment.
+ 3. Move forward to start of comment, indenting if necessary.
+ 4. Move forward to end of line, indenting if necessary.
+ 5. Create an empty comment.
+ 6. Move backward to start of comment, indenting if necessary."
+ (interactive "p")
+ (cond
+ ((not tcl-tab-always-indent)
+ ;; Indent if in indentation area, otherwise insert TAB.
+ (if (<= (current-column) (current-indentation))
+ (tcl-indent-line)
+ (self-insert-command arg)))
+ ((eq tcl-tab-always-indent t)
+ ;; Always indent.
+ (tcl-indent-line))
+ (t
+ ;; "Perl-mode" style TAB command.
+ (let* ((ipoint (point))
+ (eolpoint (progn
+ (end-of-line)
+ (point)))
+ (comment-p (tcl-in-comment)))
+ (cond
+ ((= ipoint (save-excursion
+ (beginning-of-line)
+ (point)))
+ (beginning-of-line)
+ (tcl-indent-line)
+ ;; If indenting didn't leave us in column 0, go to the
+ ;; indentation. Otherwise leave point at end of line. This
+ ;; is a hack.
+ (if (= (point) (save-excursion
+ (beginning-of-line)
+ (point)))
+ (end-of-line)
+ (back-to-indentation)))
+ ((and comment-p (looking-at "[ \t]*$"))
+ ;; Empty comment, so delete it. We also delete any ";"
+ ;; characters at the end of the line. I think this is
+ ;; friendlier, but I don't know how other people will feel.
+ (backward-char)
+ (skip-chars-backward " \t;")
+ (delete-region (point) eolpoint))
+ ((and comment-p (< ipoint (point)))
+ ;; Before comment, so skip to it.
+ (tcl-indent-line)
+ (indent-for-comment))
+ ((/= ipoint eolpoint)
+ ;; Go to end of line (since we're not there yet).
+ (goto-char eolpoint)
+ (tcl-indent-line))
+ ((not comment-p)
+ (tcl-indent-line)
+ (tcl-indent-for-comment))
+ (t
+ ;; Go to start of comment. We don't leave point where it is
+ ;; because we want to skip comment-start-skip.
+ (tcl-indent-line)
+ (indent-for-comment)))))))
+
+(defun tcl-indent-line ()
+ "Indent current line as Tcl code.
+Return the amount the indentation changed by."
+ (let ((indent (calculate-tcl-indent nil))
+ beg shift-amt
+ (case-fold-search nil)
+ (pos (- (point-max) (point))))
+ (beginning-of-line)
+ (setq beg (point))
+ (cond ((eq indent nil)
+ (setq indent (current-indentation)))
+ (t
+ (skip-chars-forward " \t")
+ (if (listp indent) (setq indent (car indent)))
+ (cond ((= (following-char) ?})
+ (setq indent (- indent tcl-indent-level)))
+ ((= (following-char) ?\])
+ (setq indent (- indent 1))))))
+ (skip-chars-forward " \t")
+ (setq shift-amt (- indent (current-column)))
+ (if (zerop shift-amt)
+ (if (> (- (point-max) pos) (point))
+ (goto-char (- (point-max) pos)))
+ (delete-region beg (point))
+ (indent-to indent)
+ ;; If initial point was within line's indentation,
+ ;; position after the indentation. Else stay at same point in text.
+ (if (> (- (point-max) pos) (point))
+ (goto-char (- (point-max) pos))))
+ shift-amt))
+
+(defun tcl-figure-type ()
+ "Determine type of sexp at point.
+This is either 'tcl-expr, 'tcl-commands, or nil. Puts point at start
+of sexp that indicates types.
+
+See documentation for variable `tcl-type-alist' for more information."
+ (let ((count 0)
+ result
+ word-stack)
+ (while (and (< count 5)
+ (not result))
+ (condition-case nil
+ (progn
+ ;; FIXME should use "tcl-backward-sexp", which would skip
+ ;; over entire variables, etc.
+ (backward-sexp)
+ (if (looking-at "[a-zA-Z_]+")
+ (let ((list tcl-type-alist)
+ entry)
+ (setq word-stack (cons (tcl-word-no-props) word-stack))
+ (while (and list (not result))
+ (setq entry (car list))
+ (setq list (cdr list))
+ (let ((index 0))
+ (while (and entry (<= index count))
+ ;; Abort loop if string does not match word on
+ ;; stack.
+ (and (stringp (car entry))
+ (not (string= (car entry)
+ (nth index word-stack)))
+ (setq entry nil))
+ (setq entry (cdr entry))
+ (setq index (1+ index)))
+ (and (> index count)
+ (not (stringp (car entry)))
+ (setq result (car entry)))
+ )))
+ (setq word-stack (cons nil word-stack))))
+ (error nil))
+ (setq count (1+ count)))
+ (and tcl-explain-indentation
+ (message "Indentation type %s" result))
+ result))
+
+(defun calculate-tcl-indent (&optional parse-start)
+ "Return appropriate indentation for current line as Tcl code.
+In usual case returns an integer: the column to indent to.
+Returns nil if line starts inside a string, t if in a comment."
+ (save-excursion
+ (beginning-of-line)
+ (let* ((indent-point (point))
+ (case-fold-search nil)
+ (continued-line
+ (save-excursion
+ (if (bobp)
+ nil
+ (backward-char)
+ (= ?\\ (preceding-char)))))
+ (continued-indent-value (if continued-line
+ tcl-continued-indent-level
+ 0))
+ state
+ containing-sexp
+ found-next-line)
+ (if parse-start
+ (goto-char parse-start)
+ (tcl-beginning-of-defun))
+ (while (< (point) indent-point)
+ (setq parse-start (point))
+ (setq state (parse-partial-sexp (point) indent-point 0))
+ (setq containing-sexp (car (cdr state))))
+ (cond ((or (nth 3 state) (nth 4 state))
+ ;; Inside comment or string. Return nil or t if should
+ ;; not change this line
+ (nth 4 state))
+ ((null containing-sexp)
+ ;; Line is at top level.
+ continued-indent-value)
+ (t
+ ;; Set expr-p if we are looking at the expression part of
+ ;; an "if", "expr", etc statement. Set commands-p if we
+ ;; are looking at the body part of an if, while, etc
+ ;; statement. FIXME Should check for "for" loops here.
+ (goto-char containing-sexp)
+ (let* ((sexpr-type (tcl-figure-type))
+ (expr-p (eq sexpr-type 'tcl-expr))
+ (commands-p (eq sexpr-type 'tcl-commands))
+ (expr-start (point)))
+ ;; Find the first statement in the block and indent
+ ;; like it. The first statement in the block might be
+ ;; on the same line, so what we do is skip all
+ ;; "virtually blank" lines, looking for a non-blank
+ ;; one. A line is virtually blank if it only contains
+ ;; a comment and whitespace. FIXME continued comments
+ ;; aren't supported. They are a wart on Tcl anyway.
+ ;; We do it this funky way because we want to know if
+ ;; we've found a statement on some line _after_ the
+ ;; line holding the sexp opener.
+ (goto-char containing-sexp)
+ (forward-char)
+ (if (and (< (point) indent-point)
+ (looking-at "[ \t]*\\(#.*\\)?$"))
+ (progn
+ (forward-line)
+ (while (and (< (point) indent-point)
+ (looking-at "[ \t]*\\(#.*\\)?$"))
+ (setq found-next-line t)
+ (forward-line))))
+ (if (or continued-line
+ (/= (char-after containing-sexp) ?{)
+ expr-p)
+ (progn
+ ;; Line is continuation line, or the sexp opener
+ ;; is not a curly brace, or we are are looking at
+ ;; an `expr' expression (which must be split
+ ;; specially). So indentation is column of first
+ ;; good spot after sexp opener (with some added
+ ;; in the continued-line case). If there is no
+ ;; nonempty line before the indentation point, we
+ ;; use the column of the character after the sexp
+ ;; opener.
+ (if (>= (point) indent-point)
+ (progn
+ (goto-char containing-sexp)
+ (forward-char))
+ (skip-chars-forward " \t"))
+ (+ (current-column) continued-indent-value))
+ ;; After a curly brace, and not a continuation line.
+ ;; So take indentation from first good line after
+ ;; start of block, unless that line is on the same
+ ;; line as the opening brace. In this case use the
+ ;; indentation of the opening brace's line, plus
+ ;; another indent step. If we are in the body part
+ ;; of an "if" or "while" then the indentation is
+ ;; taken from the line holding the start of the
+ ;; statement.
+ (if (and (< (point) indent-point)
+ found-next-line)
+ (current-indentation)
+ (if commands-p
+ (goto-char expr-start)
+ (goto-char containing-sexp))
+ (+ (current-indentation) tcl-indent-level)))))))))
+
+\f
+
+(defun indent-tcl-exp ()
+ "Indent each line of the Tcl grouping following point."
+ (interactive)
+ (let ((indent-stack (list nil))
+ (contain-stack (list (point)))
+ (case-fold-search nil)
+ outer-loop-done inner-loop-done state ostate
+ this-indent last-sexp continued-line
+ (next-depth 0)
+ last-depth)
+ (save-excursion
+ (forward-sexp 1))
+ (save-excursion
+ (setq outer-loop-done nil)
+ (while (and (not (eobp)) (not outer-loop-done))
+ (setq last-depth next-depth)
+ ;; Compute how depth changes over this line
+ ;; plus enough other lines to get to one that
+ ;; does not end inside a comment or string.
+ ;; Meanwhile, do appropriate indentation on comment lines.
+ (setq inner-loop-done nil)
+ (while (and (not inner-loop-done)
+ (not (and (eobp) (setq outer-loop-done t))))
+ (setq ostate state)
+ (setq state (parse-partial-sexp (point) (progn (end-of-line) (point))
+ nil nil state))
+ (setq next-depth (car state))
+ (if (and (car (cdr (cdr state)))
+ (>= (car (cdr (cdr state))) 0))
+ (setq last-sexp (car (cdr (cdr state)))))
+ (if (or (nth 4 ostate))
+ (tcl-indent-line))
+ (if (or (nth 3 state))
+ (forward-line 1)
+ (setq inner-loop-done t)))
+ (if (<= next-depth 0)
+ (setq outer-loop-done t))
+ (if outer-loop-done
+ nil
+ ;; If this line had ..))) (((.. in it, pop out of the levels
+ ;; that ended anywhere in this line, even if the final depth
+ ;; doesn't indicate that they ended.
+ (while (> last-depth (nth 6 state))
+ (setq indent-stack (cdr indent-stack)
+ contain-stack (cdr contain-stack)
+ last-depth (1- last-depth)))
+ (if (/= last-depth next-depth)
+ (setq last-sexp nil))
+ ;; Add levels for any parens that were started in this line.
+ (while (< last-depth next-depth)
+ (setq indent-stack (cons nil indent-stack)
+ contain-stack (cons nil contain-stack)
+ last-depth (1+ last-depth)))
+ (if (null (car contain-stack))
+ (setcar contain-stack
+ (or (car (cdr state))
+ (save-excursion
+ (forward-sexp -1)
+ (point)))))
+ (forward-line 1)
+ (setq continued-line
+ (save-excursion
+ (backward-char)
+ (= (preceding-char) ?\\)))
+ (skip-chars-forward " \t")
+ (if (eolp)
+ nil
+ (if (and (car indent-stack)
+ (>= (car indent-stack) 0))
+ ;; Line is on an existing nesting level.
+ (setq this-indent (car indent-stack))
+ ;; Just started a new nesting level.
+ ;; Compute the standard indent for this level.
+ (let ((val (calculate-tcl-indent
+ (if (car indent-stack)
+ (- (car indent-stack))))))
+ (setcar indent-stack
+ (setq this-indent val))
+ (setq continued-line nil)))
+ (cond ((not (numberp this-indent)))
+ ((= (following-char) ?})
+ (setq this-indent (- this-indent tcl-indent-level)))
+ ((= (following-char) ?\])
+ (setq this-indent (- this-indent 1))))
+ ;; Put chosen indentation into effect.
+ (or (null this-indent)
+ (= (current-column)
+ (if continued-line
+ (+ this-indent tcl-indent-level)
+ this-indent))
+ (progn
+ (delete-region (point) (progn (beginning-of-line) (point)))
+ (indent-to
+ (if continued-line
+ (+ this-indent tcl-indent-level)
+ this-indent)))))))))
+ )
+
+\f
+
+;;
+;; Interfaces to other packages.
+;;
+
+(defun tcl-imenu-create-index-function ()
+ "Generate alist of indices for imenu."
+ (let ((re (concat tcl-proc-regexp "\\([^ \t\n{]+\\)"))
+ alist prev-pos)
+ (goto-char (point-min))
+ (imenu-progress-message prev-pos 0)
+ (save-match-data
+ (while (re-search-forward re nil t)
+ (imenu-progress-message prev-pos)
+ ;; Position on start of proc name, not beginning of line.
+ (setq alist (cons
+ (cons (buffer-substring (match-beginning 2) (match-end 2))
+ (match-beginning 2))
+ alist))))
+ (imenu-progress-message prev-pos 100)
+ (nreverse alist)))
+
+;; FIXME Definition of function is very ad-hoc. Should use
+;; tcl-beginning-of-defun. Also has incestuous knowledge about the
+;; format of tcl-proc-regexp.
+(defun add-log-tcl-defun ()
+ "Return name of Tcl function point is in, or nil."
+ (save-excursion
+ (end-of-line)
+ (if (re-search-backward (concat tcl-proc-regexp "\\([^ \t\n{]+\\)") nil t)
+ (buffer-substring (match-beginning 2)
+ (match-end 2)))))
+
+(defun tcl-outline-level ()
+ (save-excursion
+ (skip-chars-forward " \t")
+ (current-column)))
+
+\f
+
+;;
+;; Helper functions for inferior Tcl mode.
+;;
+
+;; This exists to let us delete the prompt when commands are sent
+;; directly to the inferior Tcl. See gud.el for an explanation of how
+;; it all works (I took it from there). This stuff doesn't really
+;; work as well as I'd like it to. But I don't believe there is
+;; anything useful that can be done.
+(defvar inferior-tcl-delete-prompt-marker nil)
+
+(defun tcl-filter (proc string)
+ (let ((inhibit-quit t))
+ (save-excursion
+ (set-buffer (process-buffer proc))
+ (goto-char (process-mark proc))
+ ;; Delete prompt if requested.
+ (if (marker-buffer inferior-tcl-delete-prompt-marker)
+ (progn
+ (delete-region (point) inferior-tcl-delete-prompt-marker)
+ (set-marker inferior-tcl-delete-prompt-marker nil)))))
+ (if tcl-using-emacs-19
+ (comint-output-filter proc string)
+ (funcall comint-output-filter string)))
+
+(defun tcl-send-string (proc string)
+ (save-excursion
+ (set-buffer (process-buffer proc))
+ (goto-char (process-mark proc))
+ (beginning-of-line)
+ (if (looking-at comint-prompt-regexp)
+ (set-marker inferior-tcl-delete-prompt-marker (point))))
+ (comint-send-string proc string))
+
+(defun tcl-send-region (proc start end)
+ (save-excursion
+ (set-buffer (process-buffer proc))
+ (goto-char (process-mark proc))
+ (beginning-of-line)
+ (if (looking-at comint-prompt-regexp)
+ (set-marker inferior-tcl-delete-prompt-marker (point))))
+ (comint-send-region proc start end))
+
+(defun switch-to-tcl (eob-p)
+ "Switch to inferior Tcl process buffer.
+With argument, positions cursor at end of buffer."
+ (interactive "P")
+ (if (get-buffer inferior-tcl-buffer)
+ (pop-to-buffer inferior-tcl-buffer)
+ (error "No current inferior Tcl buffer"))
+ (cond (eob-p
+ (push-mark)
+ (goto-char (point-max)))))
+
+(defun inferior-tcl-proc ()
+ "Return current inferior Tcl process.
+See variable `inferior-tcl-buffer'."
+ (let ((proc (get-buffer-process (if (eq major-mode 'inferior-tcl-mode)
+ (current-buffer)
+ inferior-tcl-buffer))))
+ (or proc
+ (error "No Tcl process; see variable `inferior-tcl-buffer'"))))
+
+(defun tcl-eval-region (start end &optional and-go)
+ "Send the current region to the inferior Tcl process.
+Prefix argument means switch to the Tcl buffer afterwards."
+ (interactive "r\nP")
+ (let ((proc (inferior-tcl-proc)))
+ (tcl-send-region proc start end)
+ (tcl-send-string proc "\n")
+ (if and-go (switch-to-tcl t))))
+
+(defun tcl-eval-defun (&optional and-go)
+ "Send the current defun to the inferior Tcl process.
+Prefix argument means switch to the Tcl buffer afterwards."
+ (interactive "P")
+ (save-excursion
+ (tcl-end-of-defun)
+ (let ((end (point)))
+ (tcl-beginning-of-defun)
+ (tcl-eval-region (point) end)))
+ (if and-go (switch-to-tcl t)))
+
+\f
+
+;;
+;; Inferior Tcl mode itself.
+;;
+
+(defun inferior-tcl-mode ()
+ "Major mode for interacting with Tcl interpreter.
+
+A Tcl process can be started with M-x inferior-tcl.
+
+Entry to this mode runs the hooks comint-mode-hook and
+inferior-tcl-mode-hook, in that order.
+
+You can send text to the inferior Tcl process from other buffers
+containing Tcl source.
+
+Variables controlling Inferior Tcl mode:
+ tcl-application
+ Name of program to run.
+ tcl-command-switches
+ Command line arguments to `tcl-application'.
+ tcl-prompt-regexp
+ Matches prompt.
+ inferior-tcl-source-command
+ Command to use to read Tcl file in running application.
+ inferior-tcl-buffer
+ The current inferior Tcl process buffer. See variable
+ documentation for details on multiple-process support.
+
+The following commands are available:
+\\{inferior-tcl-mode-map}"
+ (interactive)
+ (comint-mode)
+ (setq comint-prompt-regexp (or tcl-prompt-regexp
+ (concat "^"
+ (regexp-quote tcl-application)
+ ">")))
+ (setq major-mode 'inferior-tcl-mode)
+ (setq mode-name "Inferior Tcl")
+ (if (boundp 'modeline-process)
+ (setq modeline-process '(": %s")) ; For XEmacs.
+ (setq mode-line-process '(": %s")))
+ (use-local-map inferior-tcl-mode-map)
+ (setq local-abbrev-table tcl-mode-abbrev-table)
+ (set-syntax-table tcl-mode-syntax-table)
+ (if tcl-using-emacs-19
+ (progn
+ (make-local-variable 'defun-prompt-regexp)
+ (setq defun-prompt-regexp tcl-omit-ws-regexp)))
+ (make-local-variable 'inferior-tcl-delete-prompt-marker)
+ (setq inferior-tcl-delete-prompt-marker (make-marker))
+ (set-process-filter (get-buffer-process (current-buffer)) 'tcl-filter)
+ (run-hooks 'inferior-tcl-mode-hook))
+
+;;;###autoload
+(defun inferior-tcl (cmd)
+ "Run inferior Tcl process.
+Prefix arg means enter program name interactively.
+See documentation for function `inferior-tcl-mode' for more information."
+ (interactive
+ (list (if current-prefix-arg
+ (read-string "Run Tcl: " tcl-application)
+ tcl-application)))
+ (if (not (comint-check-proc "*inferior-tcl*"))
+ (progn
+ (set-buffer (apply (function make-comint) "inferior-tcl" cmd nil
+ tcl-command-switches))
+ (inferior-tcl-mode)))
+ (make-local-variable 'tcl-application)
+ (setq tcl-application cmd)
+ (setq inferior-tcl-buffer "*inferior-tcl*")
+ (switch-to-buffer "*inferior-tcl*"))
+
+(and (fboundp 'defalias)
+ (defalias 'run-tcl 'inferior-tcl))
+
+\f
+
+;;
+;; Auto-fill support.
+;;
+
+(defun tcl-real-command-p ()
+ "Return nil if point is not at the beginning of a command.
+A command is the first word on an otherwise empty line, or the
+first word following a semicolon, opening brace, or opening bracket."
+ (save-excursion
+ (skip-chars-backward " \t")
+ (cond
+ ((bobp) t)
+ ((bolp)
+ (backward-char)
+ ;; Note -- continued comments are not supported here. I
+ ;; consider those to be a wart on the language.
+ (not (eq ?\\ (preceding-char))))
+ (t
+ (memq (preceding-char) '(?\; ?{ ?\[))))))
+
+;; FIXME doesn't actually return t. See last case.
+(defun tcl-real-comment-p ()
+ "Return t if point is just after the `#' beginning a real comment.
+Does not check to see if previous char is actually `#'.
+A real comment is either at the beginning of the buffer,
+preceeded only by whitespace on the line, or has a preceeding
+semicolon, opening brace, or opening bracket on the same line."
+ (save-excursion
+ (backward-char)
+ (tcl-real-command-p)))
+
+(defun tcl-hairy-scan-for-comment (state end always-stop)
+ "Determine if point is in a comment.
+Returns a list of the form `(FLAG . STATE)'. STATE can be used
+as input to future invocations. FLAG is nil if not in comment,
+t otherwise. If in comment, leaves point at beginning of comment.
+Only works in Emacs 19. See also `tcl-simple-scan-for-comment', a
+simpler version that is often right, and works in Emacs 18."
+ (let ((bol (save-excursion
+ (goto-char end)
+ (beginning-of-line)
+ (point)))
+ real-comment
+ last-cstart)
+ (while (and (not last-cstart) (< (point) end))
+ (setq real-comment nil) ;In case we've looped around and it is
+ ;set.
+ (setq state (parse-partial-sexp (point) end nil nil state t))
+ (if (nth 4 state)
+ (progn
+ ;; If ALWAYS-STOP is set, stop even if we don't have a
+ ;; real comment, or if the comment isn't on the same line
+ ;; as the end.
+ (if always-stop (setq last-cstart (point)))
+ ;; If we have a real comment, then set the comment
+ ;; starting point if we are on the same line as the ending
+ ;; location.
+ (setq real-comment (tcl-real-comment-p))
+ (if real-comment
+ (progn
+ (and (> (point) bol) (setq last-cstart (point)))
+ ;; NOTE Emacs 19 has a misfeature whereby calling
+ ;; parse-partial-sexp with COMMENTSTOP set and with
+ ;; an initial list that says point is in a comment
+ ;; will cause an immediate return. So we must skip
+ ;; over the comment ourselves.
+ (beginning-of-line 2)))
+ ;; Frob the state to make it look like we aren't in a
+ ;; comment.
+ (setcar (nthcdr 4 state) nil))))
+ (and last-cstart
+ (goto-char last-cstart))
+ (cons real-comment state)))
+
+(defun tcl-hairy-in-comment ()
+ "Return t if point is in a comment, and leave point at beginning
+of comment."
+ (let ((save (point)))
+ (tcl-beginning-of-defun)
+ (car (tcl-hairy-scan-for-comment nil save nil))))
+
+(defun tcl-simple-in-comment ()
+ "Return t if point is in comment, and leave point at beginning
+of comment. This is faster that `tcl-hairy-in-comment', but is
+correct less often."
+ (let ((save (point))
+ comment)
+ (beginning-of-line)
+ (while (and (< (point) save) (not comment))
+ (search-forward "#" save 'move)
+ (setq comment (tcl-real-comment-p)))
+ comment))
+
+(defun tcl-in-comment ()
+ "Return t if point is in comment, and leave point at beginning
+of comment."
+ (if (and tcl-pps-has-arg-6
+ tcl-use-hairy-comment-detector)
+ (tcl-hairy-in-comment)
+ (tcl-simple-in-comment)))
+
+(defun tcl-do-fill-paragraph (ignore)
+ "fill-paragraph function for Tcl mode. Only fills in a comment."
+ (let (in-comment col where)
+ (save-excursion
+ (end-of-line)
+ (setq in-comment (tcl-in-comment))
+ (if in-comment
+ (progn
+ (setq where (1+ (point)))
+ (setq col (1- (current-column))))))
+ (and in-comment
+ (save-excursion
+ (back-to-indentation)
+ (= col (current-column)))
+ ;; In a comment. Set the fill prefix, and find the paragraph
+ ;; boundaries by searching for lines that look like
+ ;; comment-only lines.
+ (let ((fill-prefix (buffer-substring (progn
+ (beginning-of-line)
+ (point))
+ where))
+ p-start p-end)
+ ;; Search backwards.
+ (save-excursion
+ (while (looking-at "^[ \t]*#")
+ (forward-line -1))
+ (forward-line)
+ (setq p-start (point)))
+
+ ;; Search forwards.
+ (save-excursion
+ (while (looking-at "^[ \t]*#")
+ (forward-line))
+ (setq p-end (point)))
+
+ ;; Narrow and do the fill.
+ (save-restriction
+ (narrow-to-region p-start p-end)
+ (fill-paragraph ignore)))))
+ t)
+
+(defun tcl-do-auto-fill ()
+ "Auto-fill function for Tcl mode. Only auto-fills in a comment."
+ (if (> (current-column) fill-column)
+ (let ((fill-prefix "# ")
+ in-comment col)
+ (save-excursion
+ (setq in-comment (tcl-in-comment))
+ (if in-comment
+ (setq col (1- (current-column)))))
+ (if in-comment
+ (progn
+ (do-auto-fill)
+ (save-excursion
+ (back-to-indentation)
+ (delete-region (point) (save-excursion
+ (beginning-of-line)
+ (point)))
+ (indent-to-column col)))))))
+
+\f
+
+;;
+;; Help-related code.
+;;
+
+(defvar tcl-help-saved-dirs nil
+ "Saved help directories.
+If `tcl-help-directory-list' changes, this allows `tcl-help-on-word'
+to update the alist.")
+
+(defvar tcl-help-alist nil
+ "Alist with command names as keys and filenames as values.")
+
+(defun tcl-help-snarf-commands (dirlist)
+ "Build alist of commands and filenames."
+ (while dirlist
+ (let ((files (directory-files (car dirlist) t)))
+ (while files
+ (if (and (file-directory-p (car files))
+ (not
+ (let ((fpart (file-name-nondirectory (car files))))
+ (or (equal fpart ".")
+ (equal fpart "..")))))
+ (let ((matches (directory-files (car files) t)))
+ (while matches
+ (or (file-directory-p (car matches))
+ (setq tcl-help-alist
+ (cons
+ (cons (file-name-nondirectory (car matches))
+ (car matches))
+ tcl-help-alist)))
+ (setq matches (cdr matches)))))
+ (setq files (cdr files))))
+ (setq dirlist (cdr dirlist))))
+
+(defun tcl-reread-help-files ()
+ "Set up to re-read files, and then do it."
+ (interactive)
+ (message "Building Tcl help file index...")
+ (setq tcl-help-saved-dirs tcl-help-directory-list)
+ (setq tcl-help-alist nil)
+ (tcl-help-snarf-commands tcl-help-directory-list)
+ (message "Building Tcl help file index...done"))
+
+(defun tcl-word-no-props ()
+ "Like current-word, but strips properties."
+ (let ((word (current-word)))
+ (and (fboundp 'set-text-properties)
+ (set-text-properties 0 (length word) nil word))
+ word))
+
+(defun tcl-current-word (flag)
+ "Return current command word, or nil.
+If FLAG is nil, just uses `current-word'.
+Otherwise scans backward for most likely Tcl command word."
+ (if (and flag
+ (memq major-mode '(tcl-mode inferior-tcl-mode)))
+ (condition-case nil
+ (save-excursion
+ ;; Look backward for first word actually in alist.
+ (if (bobp)
+ ()
+ (while (and (not (bobp))
+ (not (tcl-real-command-p)))
+ (backward-sexp)))
+ (if (assoc (tcl-word-no-props) tcl-help-alist)
+ (tcl-word-no-props)))
+ (error nil))
+ (tcl-word-no-props)))
+
+;;;###autoload
+(defun tcl-help-on-word (command &optional arg)
+ "Get help on Tcl command. Default is word at point.
+Prefix argument means invert sense of `tcl-use-smart-word-finder'."
+ (interactive
+ (list
+ (progn
+ (if (not (equal tcl-help-directory-list tcl-help-saved-dirs))
+ (tcl-reread-help-files))
+ (let ((word (tcl-current-word
+ (if current-prefix-arg
+ (not tcl-use-smart-word-finder)
+ tcl-use-smart-word-finder))))
+ (completing-read
+ (if (or (null word) (string= word ""))
+ "Help on Tcl command: "
+ (format "Help on Tcl command (default %s): " word))
+ tcl-help-alist nil t)))
+ current-prefix-arg))
+ (if (not (equal tcl-help-directory-list tcl-help-saved-dirs))
+ (tcl-reread-help-files))
+ (if (string= command "")
+ (setq command (tcl-current-word
+ (if arg
+ (not tcl-use-smart-word-finder)
+ tcl-use-smart-word-finder))))
+ (let* ((help (get-buffer-create "*Tcl help*"))
+ (cell (assoc command tcl-help-alist))
+ (file (and cell (cdr cell))))
+ (set-buffer help)
+ (delete-region (point-min) (point-max))
+ (if file
+ (progn
+ (insert "*** " command "\n\n")
+ (insert-file-contents file))
+ (if (string= command "")
+ (insert "Magical Pig!")
+ (insert "Tcl command " command " not in help\n")))
+ (set-buffer-modified-p nil)
+ (goto-char (point-min))
+ (display-buffer help)))
+
+\f
+
+;;
+;; Other interactive stuff.
+;;
+
+(defvar tcl-previous-dir/file nil
+ "Record last directory and file used in loading.
+This holds a cons cell of the form `(DIRECTORY . FILE)'
+describing the last `tcl-load-file' command.")
+
+(defun tcl-load-file (file &optional and-go)
+ "Load a Tcl file into the inferior Tcl process.
+Prefix argument means switch to the Tcl buffer afterwards."
+ (interactive
+ (list
+ ;; car because comint-get-source returns a list holding the
+ ;; filename.
+ (car (comint-get-source "Load Tcl file: "
+ (or (and
+ (eq major-mode 'tcl-mode)
+ (buffer-file-name))
+ tcl-previous-dir/file)
+ '(tcl-mode) t))
+ current-prefix-arg))
+ (comint-check-source file)
+ (setq tcl-previous-dir/file (cons (file-name-directory file)
+ (file-name-nondirectory file)))
+ (tcl-send-string (inferior-tcl-proc)
+ (format inferior-tcl-source-command (tcl-quote file)))
+ (if and-go (switch-to-tcl t)))
+
+(defun tcl-restart-with-file (file &optional and-go)
+ "Restart inferior Tcl with file.
+If an inferior Tcl process exists, it is killed first.
+Prefix argument means switch to the Tcl buffer afterwards."
+ (interactive
+ (list
+ (car (comint-get-source "Restart with Tcl file: "
+ (or (and
+ (eq major-mode 'tcl-mode)
+ (buffer-file-name))
+ tcl-previous-dir/file)
+ '(tcl-mode) t))
+ current-prefix-arg))
+ (let* ((buf (if (eq major-mode 'inferior-tcl-mode)
+ (current-buffer)
+ inferior-tcl-buffer))
+ (proc (and buf (get-process buf))))
+ (cond
+ ((not (and buf (get-buffer buf)))
+ ;; I think this will be ok.
+ (inferior-tcl tcl-application)
+ (tcl-load-file file and-go))
+ ((or
+ (not (comint-check-proc buf))
+ (yes-or-no-p
+ "A Tcl process is running, are you sure you want to reset it? "))
+ (save-excursion
+ (comint-check-source file)
+ (setq tcl-previous-dir/file (cons (file-name-directory file)
+ (file-name-nondirectory file)))
+ (comint-exec (get-buffer-create buf)
+ (if proc
+ (process-name proc)
+ "inferior-tcl")
+ tcl-application file tcl-command-switches)
+ (if and-go (switch-to-tcl t)))))))
+
+;; FIXME I imagine you can do this under Emacs 18. I just don't know
+;; how.
+(defun tcl-auto-fill-mode (&optional arg)
+ "Like `auto-fill-mode', but controls filling of Tcl comments."
+ (interactive "P")
+ (and (not tcl-using-emacs-19)
+ (error "You must use Emacs 19 to get this feature."))
+ ;; Following code taken from "auto-fill-mode" (simple.el).
+ (prog1
+ (setq auto-fill-function
+ (if (if (null arg)
+ (not auto-fill-function)
+ (> (prefix-numeric-value arg) 0))
+ 'tcl-do-auto-fill
+ nil))
+ (force-mode-line-update)))
+
+;; hilit19 support from "Chris Alfeld" <calfeld@math.utah.edu>
+(defun tcl-hilit ()
+ (hilit-set-mode-patterns
+ '(tcl-mode)
+ '(
+ ("\\(^ *\\|\; *\\)#.*$" nil comment)
+ ("[^\\]\\(\\$[A-Za-z0-9\\-\\_./\\(\\)]+\\)" 1 label)
+ ("[^_]\\<\\(append\\|array\\|auto_execok\\|auto_load\\|auto_mkindex\\|auto_reset\\|break\\|case\\|catch\\|cd\\|close\\|concat\\|continue\\|eof\\|error\\|eval\\|exec\\|exit\\|expr\\|file\\|flush\\|for\\|foreach\\|format\\|gets\\|glob\\|global\\|history\\|if\\|incr\\|info\\|join\\|lappend\\|lindex\\|linsert\\|list\\|llength\\|lrange\\|lreplace\\|lsearch\\|lsort\\|open\\|pid\\|proc\\|puts\\|pwd\\|read\\|regexp\\|regsub\\|rename\\|return\\|scan\\|seek\\|set\\|source\\|split\\|string\\|switch\\|tell\\|time\\|trace\\|unknown\\|unset\\|uplevel\\|upvar\\|while\\)\\>[^_]" 1 keyword) ; tcl keywords
+ ("[^_]\\<\\(after\\|bell\\|bind\\|bindtags\\|clipboard\\|destroy\\|fileevent\\|focus\\|grab\\|image\\|lower\\|option\\|pack\\|place\\|raise\\|scale\\|selection\\|send\\|subst\\|tk\\|tk_popup\\|tkwait\\|update\\|winfo\\|wm\\)\\>[^_]" 1 define) ; tk keywords
+ ("[^_]\\<\\(button\\|canvas\\|checkbutton\\|entry\\|frame\\|label\\|listbox\\|menu\\|menubutton\\|message\\|radiobutton\\|scrollbar\\|text\\|toplevel\\)\\>[^_]" 1 decl) ; tk widgets
+ ("[^_]\\<\\(tix\\((ButtonBox\\|Baloon\\|Control\\|DirList\\|ExFileSelectBox\\|ExFileSelectDialog\\|FileEntry\\|HList\\|LabelEntry\\|LabelFrame\\|NoteBook\\|OptionMenu\\|PanedWindow\\|PopupMenu\\|ScrolledHList\\|ScrolledText\\|ScrolledWindow\\|Select\\|StdButtonBox\\)\\)\\>[^_]" 1 defun) ; tix widgets
+ ("[{}\\\"\\(\\)]" nil include) ; misc punctuation
+ )))
+
+(defun tcl-electric-hash (&optional count)
+ "Insert a `#' and quote if it does not start a real comment.
+Prefix arg is number of `#'s to insert.
+See variable `tcl-electric-hash-style' for description of quoting
+styles."
+ (interactive "p")
+ (or count (setq count 1))
+ (if (> count 0)
+ (let ((type
+ (if (eq tcl-electric-hash-style 'smart)
+ (if (> count 3) ; FIXME what is "smart"?
+ 'quote
+ 'backslash)
+ tcl-electric-hash-style))
+ comment)
+ (if type
+ (progn
+ (save-excursion
+ (insert "#")
+ (setq comment (tcl-in-comment)))
+ (delete-char 1)
+ (and tcl-explain-indentation (message "comment: %s" comment))
+ (cond
+ ((eq type 'quote)
+ (if (not comment)
+ (insert "\"")))
+ ((eq type 'backslash)
+ ;; The following will set count to 0, so the
+ ;; insert-char can still be run.
+ (if (not comment)
+ (while (> count 0)
+ (insert "\\#")
+ (setq count (1- count)))))
+ (t nil))))
+ (insert-char ?# count))))
+
+(defun tcl-hashify-buffer ()
+ "Quote all `#'s in current buffer that aren't Tcl comments."
+ (interactive)
+ (save-excursion
+ (goto-char (point-min))
+ (if (and tcl-pps-has-arg-6 tcl-use-hairy-comment-detector)
+ (let (state
+ result)
+ (while (< (point) (point-max))
+ (setq result (tcl-hairy-scan-for-comment state (point-max) t))
+ (if (car result)
+ (beginning-of-line 2)
+ (backward-char)
+ (if (eq ?# (following-char))
+ (insert "\\"))
+ (forward-char))
+ (setq state (cdr result))))
+ (while (and (< (point) (point-max))
+ (search-forward "#" nil 'move))
+ (if (tcl-real-comment-p)
+ (beginning-of-line 2)
+ ;; There's really no good way for the simple converter to
+ ;; work. So we just quote # if it isn't already quoted.
+ ;; Bogus, but it works.
+ (backward-char)
+ (if (not (eq ?\\ (preceding-char)))
+ (insert "\\"))
+ (forward-char))))))
+
+(defun tcl-indent-for-comment ()
+ "Indent this line's comment to comment column, or insert an empty comment.
+Is smart about syntax of Tcl comments.
+Parts of this were taken from indent-for-comment (simple.el)."
+ (interactive "*")
+ (end-of-line)
+ (or (tcl-in-comment)
+ (progn
+ ;; Not in a comment, so we have to insert one. Create an
+ ;; empty comment (since there isn't one on this line). If
+ ;; line is not blank, make sure we insert a ";" first.
+ (skip-chars-backward " \t")
+ (let ((eolpoint (point)))
+ (beginning-of-line)
+ (if (/= (point) eolpoint)
+ (progn
+ (goto-char eolpoint)
+ (insert
+ (if (tcl-real-command-p) "" ";")
+ "# ")
+ (backward-char))))))
+ ;; Point is just after the "#" starting a comment. Move it as
+ ;; appropriate.
+ (let* ((indent (if comment-indent-hook
+ (funcall comment-indent-hook)
+ (funcall comment-indent-function)))
+ (begpos (progn
+ (backward-char)
+ (point))))
+ (if (/= begpos indent)
+ (progn
+ (skip-chars-backward " \t" (save-excursion
+ (beginning-of-line)
+ (point)))
+ (delete-region (point) begpos)
+ (indent-to indent)))
+ (looking-at comment-start-skip) ; Always true.
+ (goto-char (match-end 0))
+ ;; I don't like the effect of the next two.
+ ;;(skip-chars-backward " \t" (match-beginning 0))
+ ;;(skip-chars-backward "^ \t" (match-beginning 0))
+ ))
+
+;; The following was inspired by the Tcl editing mode written by
+;; Gregor Schmid <schmid@fb3-s7.math.TU-Berlin.DE>. His version also
+;; attempts to snarf the command line options from the command line,
+;; but I didn't think that would really be that helpful (doesn't seem
+;; like it owould be right enough. His version also looks for the
+;; "#!/bin/csh ... exec" hack, but that seemed even less useful.
+;; FIXME should make sure that the application mentioned actually
+;; exists.
+(defun tcl-guess-application ()
+ "Attempt to guess Tcl application by looking at first line.
+The first line is assumed to look like \"#!.../program ...\"."
+ (save-excursion
+ (goto-char (point-min))
+ (if (looking-at "#![^ \t]*/\\([^ \t\n/]+\\)\\([ \t]\\|$\\)")
+ (progn
+ (make-local-variable 'tcl-application)
+ (setq tcl-application (buffer-substring (match-beginning 1)
+ (match-end 1)))))))
+
+;; This only exists to put on the menubar. I couldn't figure out any
+;; other way to do it. FIXME should take "number of #-marks"
+;; argument.
+(defun tcl-uncomment-region (beg end)
+ "Uncomment region."
+ (interactive "r")
+ (comment-region beg end -1))
+
+\f
+
+;;
+;; XEmacs menu support.
+;; Taken from schmid@fb3-s7.math.TU-Berlin.DE (Gregor Schmid),
+;; who wrote a different Tcl mode.
+;; We also have support for menus in FSF. We do this by
+;; loading the XEmacs menu emulation code.
+;;
+
+(defun tcl-popup-menu (e)
+ (interactive "@e")
+ (and tcl-using-emacs-19
+ (not tcl-using-xemacs-19)
+ (if tcl-using-emacs-19-23
+ (require 'lmenu)
+ ;; CAVEATS:
+ ;; * lmenu.el provides 'menubar, which is bogus.
+ ;; * lmenu.el causes menubars to be turned on everywhere.
+ ;; Doubly bogus!
+ ;; Both of these problems are fixed in Emacs 19.23. People
+ ;; using an Emacs before that just suffer.
+ (require 'menubar "lmenu"))) ;; This is annoying
+ ;; IMHO popup-menu should be autoloaded in FSF Emacs. Oh well.
+ (popup-menu tcl-xemacs-menu))
+
+\f
+
+;;
+;; Quoting and unquoting functions.
+;;
+
+;; This quoting is sufficient to protect eg a filename from any sort
+;; of expansion or splitting. Tcl quoting sure sucks.
+(defun tcl-quote (string)
+ "Quote STRING according to Tcl rules."
+ (mapconcat (function (lambda (char)
+ (if (memq char '(?[ ?] ?{ ?} ?\\ ?\" ?$ ? ?\;))
+ (concat "\\" (char-to-string char))
+ (char-to-string char))))
+ string ""))
+
+\f
+
+;;
+;; Bug reporting.
+;;
+
+(and (fboundp 'eval-when-compile)
+ (eval-when-compile
+ (require 'reporter)))
+
+(defun tcl-submit-bug-report ()
+ "Submit via mail a bug report on Tcl mode."
+ (interactive)
+ (require 'reporter)
+ (and
+ (y-or-n-p "Do you really want to submit a bug report on Tcl mode? ")
+ (reporter-submit-bug-report
+ tcl-maintainer
+ (concat "Tcl mode " tcl-version)
+ '(tcl-indent-level
+ tcl-continued-indent-level
+ tcl-auto-newline
+ tcl-tab-always-indent
+ tcl-use-hairy-comment-detector
+ tcl-electric-hash-style
+ tcl-help-directory-list
+ tcl-use-smart-word-finder
+ tcl-application
+ tcl-command-switches
+ tcl-prompt-regexp
+ inferior-tcl-source-command
+ tcl-using-emacs-19
+ tcl-using-emacs-19-23
+ tcl-using-xemacs-19
+ tcl-proc-list
+ tcl-proc-regexp
+ tcl-typeword-list
+ tcl-keyword-list
+ tcl-font-lock-keywords
+ tcl-pps-has-arg-6))))
+
+\f
+
+(provide 'tcl)
+
+;;; tcl.el ends here
--- /dev/null
+#include <stdio.h>
+#include <string.h>
+#ifndef NO_UNISTD_H
+#include <sys/unistd.h>
+#endif
+
+/* A simple glue file for embedded targets so we can get the real exit
+ status from the program. This assumes we're using GNU ld and can use
+ the -wrap option, and that write(1, ...) does something useful. */
+
+/* There is a bunch of weird cruft with #ifdef UNDERSCORES. This is needed
+ because currently GNU ld doesn't deal well with a.out targets and
+ the -wrap option. When GNU ld is fixed, this should definitely be
+ removed. Note that we actually wrap __exit, not _exit on a target
+ that has UNDERSCORES defined. */
+
+#ifdef WRAP_M68K_AOUT
+#define REAL_EXIT(code) asm ( "trap %0" : : "i" (0) );
+#define REAL_ABORT() REAL_EXIT(6)
+#define ORIG_EXIT _exit
+#define ORIG_ABORT abort
+#else
+#ifdef UNDERSCORES
+#define REAL_EXIT _real___exit
+#define REAL_MAIN _real__main
+#define REAL_ABORT _real__abort
+#define ORIG_EXIT _wrap___exit
+#define ORIG_ABORT _wrap__abort
+#define ORIG_MAIN _wrap__main
+#else
+#define REAL_EXIT __real_exit
+#define REAL_MAIN __real_main
+#define REAL_ABORT __real_abort
+#define ORIG_EXIT __wrap_exit
+#define ORIG_ABORT __wrap_abort
+#define ORIG_MAIN __wrap_main
+#endif
+#endif
+
+#ifdef REAL_MAIN
+extern void REAL_EXIT ();
+extern void REAL_ABORT ();
+extern int REAL_MAIN (int argc, char **argv, char **envp);
+#endif
+
+int ___constval = 1;
+
+#ifdef VXWORKS
+static void __runexit();
+#endif
+
+static char *
+write_int(val, ptr)
+ int val;
+ char *ptr;
+{
+ char c;
+ if (val<0) {
+ *(ptr++) = '-';
+ val = -val;
+ }
+ if (val>9) {
+ ptr = write_int (val/10, ptr);
+ }
+ c = (val%10)+'0';
+ *(ptr++) = c;
+ return ptr;
+}
+
+void
+ORIG_EXIT (code)
+ int code;
+{
+ char buf[30];
+ char *ptr;
+
+#ifdef VXWORKS
+ __runexit ();
+#endif
+ strcpy (buf, "\n*** EXIT code ");
+ ptr = write_int (code, buf + strlen(buf));
+ *(ptr++) = '\n';
+ write (1, buf, ptr-buf);
+ REAL_EXIT (code);
+ while (___constval);
+}
+
+void
+ORIG_ABORT ()
+{
+ write (1, "\n*** EXIT code 4242\n", 20);
+ REAL_ABORT ();
+ while (___constval);
+ abort ();
+}
+
+#ifdef REAL_MAIN
+int
+ORIG_MAIN (argc, argv, envp)
+ int argc;
+ char **argv;
+ char **envp;
+{
+#ifdef WRAP_FILE_ARGS
+ extern int __argc;
+ extern char *__args[];
+
+ exit (REAL_MAIN (__argc,__args,envp));
+#else
+ exit (REAL_MAIN (argc, argv, envp));
+#endif
+ while (___constval);
+}
+#endif
+
+#ifdef VXWORKS
+void
+_exit (status)
+ int status;
+{
+ REAL_EXIT (status);
+}
+
+typedef (*PFV)(void);
+
+static PFV __list[32];
+static int __listcnt = 0;
+static int __running = 0;
+
+int
+atexit (PFV func)
+{
+ __list[__listcnt++] = func;
+}
+
+static void
+__runexit ()
+{
+ int i;
+ if (__running++)
+ return;
+
+ for (i = 0; i < __listcnt; i++)
+ __list[i]();
+ __running = 0;
+}
+#endif