From 20f1185dd84bcadf4b238d1d2ca18f5ca79157d4 Mon Sep 17 00:00:00 2001 From: Rob Savoye Date: Mon, 5 Feb 2001 04:14:59 +0000 Subject: Initial revision --- AUTHORS | 4 + COPYING | 340 ++ ChangeLog | 5493 ++++++++++++++++++++++++++++++ INSTALL | 183 + Makefile.am | 50 + Makefile.in | 412 +++ NEWS | 3 + README | 283 ++ TODO | 8 + aclocal.m4 | 137 + baseboards/README | 15 + baseboards/a29k-udi.exp | 23 + baseboards/arc-sim.exp | 37 + baseboards/arm-ice.exp | 48 + baseboards/arm-sim.exp | 52 + baseboards/basic-sim.exp | 51 + baseboards/cf.exp | 73 + baseboards/cygmon.exp | 31 + baseboards/cygwin.exp | 12 + baseboards/d10v-sim.exp | 48 + baseboards/d10v.exp | 60 + baseboards/d30v-sim.exp | 33 + baseboards/danlite-elf.exp | 42 + baseboards/dos.exp | 25 + baseboards/fr30-cygmon.exp | 31 + baseboards/fr30-elf.exp | 40 + baseboards/fr30-sim.exp | 34 + baseboards/h8300-sim.exp | 44 + baseboards/h8300.exp | 68 + baseboards/i386-bozo.exp | 51 + baseboards/i960-cyclone.exp | 47 + baseboards/i960-sim.exp | 28 + baseboards/jmr3904-sim.exp | 14 + baseboards/linux-gdbserver.exp | 36 + baseboards/linux-libremote.exp | 36 + baseboards/m32r-elf.exp | 40 + baseboards/m32r-sim.exp | 34 + baseboards/m68k-emc.exp | 35 + baseboards/mcore-elf.exp | 35 + baseboards/mcore-moto-sim.exp | 125 + baseboards/mcore-pe.exp | 35 + baseboards/mcore-sim.exp | 37 + baseboards/mips-idt.exp | 31 + baseboards/mips-lnews-sim.exp | 5 + baseboards/mips-lsi-sim.exp | 8 + baseboards/mips-sim.exp | 30 + baseboards/mips64-sim.exp | 29 + baseboards/mips64vr4100-sim.exp | 33 + baseboards/mn10200-cygmon.exp | 32 + baseboards/mn10200-sim.exp | 45 + baseboards/mn10300-cygmon.exp | 32 + baseboards/mn10300-sim.exp | 41 + baseboards/msparc-cygmon.exp | 1 + baseboards/op50n.exp | 36 + baseboards/powerpc-bug.exp | 29 + baseboards/powerpc-bug1.exp | 5 + baseboards/powerpc-sim.exp | 28 + baseboards/powerpcle-sim.exp | 28 + baseboards/rom68k-idp.exp | 69 + baseboards/sh-hms-sim.exp | 48 + baseboards/sh-hms.exp | 47 + baseboards/sparc64-sim.exp | 31 + baseboards/sparclet-aout.exp | 48 + baseboards/sparclite-coff.exp | 41 + baseboards/sparclite-cygmon.exp | 6 + baseboards/sparclite-sim-le.exp | 47 + baseboards/sparclite-sim.exp | 37 + baseboards/strongarm-cygmon.exp | 41 + baseboards/tic80-sim.exp | 28 + baseboards/tx39-dve.exp | 48 + baseboards/tx39-sim.exp | 3 + baseboards/unix.exp | 8 + baseboards/usparc-cygmon.exp | 48 + baseboards/v850-sim.exp | 31 + baseboards/vr4100-ddb.exp | 33 + baseboards/vr4100-sim.exp | 12 + baseboards/vr4111-sim.exp | 12 + baseboards/vr4300-ddb.exp | 19 + baseboards/vr4300-sim.exp | 12 + baseboards/vr4300.exp | 41 + baseboards/vr5000-ddb.exp | 40 + baseboards/vx4300.exp | 25 + baseboards/vx68k.exp | 25 + baseboards/vx960.exp | 29 + baseboards/vxsparc.exp | 25 + baseboards/x86-cygmon.exp | 11 + baseboards/xscale-cygmon.exp | 37 + config.guess | 1090 ++++++ config/README | 34 + config/arc.exp | 20 + config/arm-ice.exp | 20 + config/base-config.exp | 48 + config/base68k.exp | 323 ++ config/bug.exp | 29 + config/cfdbug.exp | 31 + config/cygmon.exp | 22 + config/d10v.exp | 20 + config/ddb-ether.exp | 190 ++ config/ddb.exp | 96 + config/dos.exp | 484 +++ config/dve.exp | 22 + config/gdb-comm.exp | 566 +++ config/gdb_stub.exp | 638 ++++ config/h8300.exp | 20 + config/i386-bozo.exp | 46 + config/i960.exp | 221 ++ config/m32r-stub.exp | 20 + config/m32r.exp | 20 + config/m68k-emc.exp | 52 + config/mips-idt.exp | 24 + config/mn10200-eval.exp | 22 + config/mn10300-eval.exp | 22 + config/netware.exp | 214 ++ config/powerpc-bug.exp | 20 + config/proelf.exp | 27 + config/rom68k.exp | 32 + config/sh.exp | 20 + config/sim.exp | 124 + config/slite.exp | 20 + config/sparclet.exp | 26 + config/tic80.exp | 81 + config/udi.exp | 158 + config/unix.exp | 134 + config/vr4100.exp | 21 + config/vr4300.exp | 21 + config/vr5000.exp | 21 + config/vrtx.exp | 50 + config/vxworks.exp | 511 +++ configure | 1605 +++++++++ configure.in | 24 + contrib/README | 16 + contrib/bluegnu2.0.3/Makefile.in | 185 + contrib/bluegnu2.0.3/README.bluegnu | 325 ++ contrib/bluegnu2.0.3/README.dejagnu | 283 ++ contrib/bluegnu2.0.3/TODO.dejagnu | 7 + contrib/bluegnu2.0.3/aclocal.m4 | 605 ++++ contrib/bluegnu2.0.3/bluegnu | 136 + contrib/bluegnu2.0.3/bluegnutk | 5 + contrib/bluegnu2.0.3/bluegnutk.itcl | 216 ++ contrib/bluegnu2.0.3/bluegnutk.rc | 29 + contrib/bluegnu2.0.3/bluegnutkUtils.itcl | 436 +++ contrib/bluegnu2.0.3/config.guess | 592 ++++ contrib/bluegnu2.0.3/configure | 974 ++++++ contrib/bluegnu2.0.3/configure.in | 9 + contrib/bluegnu2.0.3/contents | 232 ++ contrib/bluegnu2.0.3/contrib/README | 16 + contrib/bluegnu2.0.3/contrib/test-g++ | 84 + contrib/bluegnu2.0.3/contrib/test-tool | 346 ++ contrib/bluegnu2.0.3/contrib/testit | 1149 +++++++ contrib/bluegnu2.0.3/dejagnu | 93 + contrib/bluegnu2.0.3/doc/Makefile.in | 170 + contrib/bluegnu2.0.3/doc/README.tex | 253 ++ contrib/bluegnu2.0.3/doc/READMEdvi.dvi | Bin 0 -> 10840 bytes contrib/bluegnu2.0.3/doc/READMEdvi.tex | 5 + contrib/bluegnu2.0.3/doc/READMEdvi.title | 1 + contrib/bluegnu2.0.3/doc/READMEtxt.dvi | Bin 0 -> 9344 bytes contrib/bluegnu2.0.3/doc/READMEtxt.tex | 6 + contrib/bluegnu2.0.3/doc/configure | 657 ++++ contrib/bluegnu2.0.3/doc/configure.in | 4 + contrib/bluegnu2.0.3/doc/dejagnu.1 | 120 + contrib/bluegnu2.0.3/doc/dejagnu.dvi | Bin 0 -> 263684 bytes contrib/bluegnu2.0.3/doc/dejagnu.info | 77 + contrib/bluegnu2.0.3/doc/dejagnu.info-1 | 1163 +++++++ contrib/bluegnu2.0.3/doc/dejagnu.info-2 | 1137 +++++++ contrib/bluegnu2.0.3/doc/dejagnu.info-3 | 1016 ++++++ contrib/bluegnu2.0.3/install-sh | 238 ++ contrib/bluegnu2.0.3/mkinstalldirs | 32 + contrib/bluegnu2.0.3/runtest | 90 + contrib/bluegnu2.0.3/runtest.exp | 1146 +++++++ contrib/bluegnu2.0.3/site.tmpl | 307 ++ contrib/bluegnu2.0.3/tcl-mode.el | 2223 ++++++++++++ contrib/test-g++ | 89 + contrib/test-tool | 378 ++ contrib/testit | 1149 +++++++ i960glue.c | 19 + install-sh | 250 ++ mkinstalldirs | 32 + runtest | 122 + runtest.exp | 1873 ++++++++++ site.tmpl | 48 + stub-loader.c | 7 + tcl-mode.el | 2223 ++++++++++++ testglue.c | 147 + 183 files changed, 37457 insertions(+) create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 NEWS create mode 100644 README create mode 100644 TODO create mode 100644 aclocal.m4 create mode 100644 baseboards/README create mode 100644 baseboards/a29k-udi.exp create mode 100644 baseboards/arc-sim.exp create mode 100644 baseboards/arm-ice.exp create mode 100644 baseboards/arm-sim.exp create mode 100644 baseboards/basic-sim.exp create mode 100644 baseboards/cf.exp create mode 100644 baseboards/cygmon.exp create mode 100644 baseboards/cygwin.exp create mode 100644 baseboards/d10v-sim.exp create mode 100644 baseboards/d10v.exp create mode 100644 baseboards/d30v-sim.exp create mode 100644 baseboards/danlite-elf.exp create mode 100644 baseboards/dos.exp create mode 100644 baseboards/fr30-cygmon.exp create mode 100644 baseboards/fr30-elf.exp create mode 100644 baseboards/fr30-sim.exp create mode 100644 baseboards/h8300-sim.exp create mode 100644 baseboards/h8300.exp create mode 100644 baseboards/i386-bozo.exp create mode 100644 baseboards/i960-cyclone.exp create mode 100644 baseboards/i960-sim.exp create mode 100644 baseboards/jmr3904-sim.exp create mode 100644 baseboards/linux-gdbserver.exp create mode 100644 baseboards/linux-libremote.exp create mode 100644 baseboards/m32r-elf.exp create mode 100644 baseboards/m32r-sim.exp create mode 100644 baseboards/m68k-emc.exp create mode 100644 baseboards/mcore-elf.exp create mode 100644 baseboards/mcore-moto-sim.exp create mode 100644 baseboards/mcore-pe.exp create mode 100644 baseboards/mcore-sim.exp create mode 100644 baseboards/mips-idt.exp create mode 100644 baseboards/mips-lnews-sim.exp create mode 100644 baseboards/mips-lsi-sim.exp create mode 100644 baseboards/mips-sim.exp create mode 100644 baseboards/mips64-sim.exp create mode 100644 baseboards/mips64vr4100-sim.exp create mode 100644 baseboards/mn10200-cygmon.exp create mode 100644 baseboards/mn10200-sim.exp create mode 100644 baseboards/mn10300-cygmon.exp create mode 100644 baseboards/mn10300-sim.exp create mode 100644 baseboards/msparc-cygmon.exp create mode 100644 baseboards/op50n.exp create mode 100644 baseboards/powerpc-bug.exp create mode 100644 baseboards/powerpc-bug1.exp create mode 100644 baseboards/powerpc-sim.exp create mode 100644 baseboards/powerpcle-sim.exp create mode 100644 baseboards/rom68k-idp.exp create mode 100644 baseboards/sh-hms-sim.exp create mode 100644 baseboards/sh-hms.exp create mode 100644 baseboards/sparc64-sim.exp create mode 100644 baseboards/sparclet-aout.exp create mode 100644 baseboards/sparclite-coff.exp create mode 100644 baseboards/sparclite-cygmon.exp create mode 100644 baseboards/sparclite-sim-le.exp create mode 100644 baseboards/sparclite-sim.exp create mode 100644 baseboards/strongarm-cygmon.exp create mode 100644 baseboards/tic80-sim.exp create mode 100644 baseboards/tx39-dve.exp create mode 100644 baseboards/tx39-sim.exp create mode 100644 baseboards/unix.exp create mode 100644 baseboards/usparc-cygmon.exp create mode 100644 baseboards/v850-sim.exp create mode 100644 baseboards/vr4100-ddb.exp create mode 100644 baseboards/vr4100-sim.exp create mode 100644 baseboards/vr4111-sim.exp create mode 100644 baseboards/vr4300-ddb.exp create mode 100644 baseboards/vr4300-sim.exp create mode 100644 baseboards/vr4300.exp create mode 100644 baseboards/vr5000-ddb.exp create mode 100644 baseboards/vx4300.exp create mode 100644 baseboards/vx68k.exp create mode 100644 baseboards/vx960.exp create mode 100644 baseboards/vxsparc.exp create mode 100644 baseboards/x86-cygmon.exp create mode 100644 baseboards/xscale-cygmon.exp create mode 100755 config.guess create mode 100644 config/README create mode 100644 config/arc.exp create mode 100644 config/arm-ice.exp create mode 100644 config/base-config.exp create mode 100644 config/base68k.exp create mode 100644 config/bug.exp create mode 100644 config/cfdbug.exp create mode 100644 config/cygmon.exp create mode 100644 config/d10v.exp create mode 100644 config/ddb-ether.exp create mode 100644 config/ddb.exp create mode 100644 config/dos.exp create mode 100644 config/dve.exp create mode 100644 config/gdb-comm.exp create mode 100644 config/gdb_stub.exp create mode 100644 config/h8300.exp create mode 100644 config/i386-bozo.exp create mode 100644 config/i960.exp create mode 100644 config/m32r-stub.exp create mode 100644 config/m32r.exp create mode 100644 config/m68k-emc.exp create mode 100644 config/mips-idt.exp create mode 100644 config/mn10200-eval.exp create mode 100644 config/mn10300-eval.exp create mode 100644 config/netware.exp create mode 100644 config/powerpc-bug.exp create mode 100644 config/proelf.exp create mode 100644 config/rom68k.exp create mode 100644 config/sh.exp create mode 100644 config/sim.exp create mode 100644 config/slite.exp create mode 100644 config/sparclet.exp create mode 100644 config/tic80.exp create mode 100644 config/udi.exp create mode 100644 config/unix.exp create mode 100644 config/vr4100.exp create mode 100644 config/vr4300.exp create mode 100644 config/vr5000.exp create mode 100644 config/vrtx.exp create mode 100644 config/vxworks.exp create mode 100755 configure create mode 100644 configure.in create mode 100644 contrib/README create mode 100644 contrib/bluegnu2.0.3/Makefile.in create mode 100644 contrib/bluegnu2.0.3/README.bluegnu create mode 100644 contrib/bluegnu2.0.3/README.dejagnu create mode 100644 contrib/bluegnu2.0.3/TODO.dejagnu create mode 100644 contrib/bluegnu2.0.3/aclocal.m4 create mode 100755 contrib/bluegnu2.0.3/bluegnu create mode 100755 contrib/bluegnu2.0.3/bluegnutk create mode 100644 contrib/bluegnu2.0.3/bluegnutk.itcl create mode 100644 contrib/bluegnu2.0.3/bluegnutk.rc create mode 100644 contrib/bluegnu2.0.3/bluegnutkUtils.itcl create mode 100755 contrib/bluegnu2.0.3/config.guess create mode 100755 contrib/bluegnu2.0.3/configure create mode 100644 contrib/bluegnu2.0.3/configure.in create mode 100644 contrib/bluegnu2.0.3/contents create mode 100644 contrib/bluegnu2.0.3/contrib/README create mode 100755 contrib/bluegnu2.0.3/contrib/test-g++ create mode 100755 contrib/bluegnu2.0.3/contrib/test-tool create mode 100755 contrib/bluegnu2.0.3/contrib/testit create mode 100755 contrib/bluegnu2.0.3/dejagnu create mode 100644 contrib/bluegnu2.0.3/doc/Makefile.in create mode 100644 contrib/bluegnu2.0.3/doc/README.tex create mode 100644 contrib/bluegnu2.0.3/doc/READMEdvi.dvi create mode 100644 contrib/bluegnu2.0.3/doc/READMEdvi.tex create mode 100644 contrib/bluegnu2.0.3/doc/READMEdvi.title create mode 100644 contrib/bluegnu2.0.3/doc/READMEtxt.dvi create mode 100644 contrib/bluegnu2.0.3/doc/READMEtxt.tex create mode 100755 contrib/bluegnu2.0.3/doc/configure create mode 100644 contrib/bluegnu2.0.3/doc/configure.in create mode 100644 contrib/bluegnu2.0.3/doc/dejagnu.1 create mode 100644 contrib/bluegnu2.0.3/doc/dejagnu.dvi create mode 100644 contrib/bluegnu2.0.3/doc/dejagnu.info create mode 100644 contrib/bluegnu2.0.3/doc/dejagnu.info-1 create mode 100644 contrib/bluegnu2.0.3/doc/dejagnu.info-2 create mode 100644 contrib/bluegnu2.0.3/doc/dejagnu.info-3 create mode 100755 contrib/bluegnu2.0.3/install-sh create mode 100755 contrib/bluegnu2.0.3/mkinstalldirs create mode 100755 contrib/bluegnu2.0.3/runtest create mode 100755 contrib/bluegnu2.0.3/runtest.exp create mode 100644 contrib/bluegnu2.0.3/site.tmpl create mode 100644 contrib/bluegnu2.0.3/tcl-mode.el create mode 100755 contrib/test-g++ create mode 100755 contrib/test-tool create mode 100755 contrib/testit create mode 100644 i960glue.c create mode 100755 install-sh create mode 100755 mkinstalldirs create mode 100755 runtest create mode 100755 runtest.exp create mode 100644 site.tmpl create mode 100644 stub-loader.c create mode 100644 tcl-mode.el create mode 100644 testglue.c diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..3d634ad --- /dev/null +++ b/AUTHORS @@ -0,0 +1,4 @@ +The primary maintainer and creator of DejaGnu is Rob Savoye. + rob@welcomehome.org + www.welcomehome.org/rob.html + diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..eeb586b --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + 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. + + 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.) + +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. + + 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. + + 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 + + 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. + + + Copyright (C) 19yy + + 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. + + , 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. diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..bcd99ce --- /dev/null +++ b/ChangeLog @@ -0,0 +1,5493 @@ +2001-01-24 Fernando Nasser + + From Gabriel Dos Reis + * 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 + + * 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 + + * lib/target.exp (prune_warnings): Avoid ``.*'' in NetBSD warnings + pattern. + +2001-01-15 Ben Elliston + + * lib/framework.exp (record_test): Invoke a user-defined procedure + if one is named in local_record_procs($type). + +2001-01-12 Richard Earnshaw + + * target.exp (prune_warnings): Prune warnings from NetBSD linker. + +2000-11-29 Drew Moseley + + * baseboards/xscale-cygmon.exp: New file for xscale board testing. + +2000-10-19 Michael Snyder + + * baseboards/linux-gdbserver.exp: New file. + * baseboards/linux-libremote.exp: New file. + +2000-08-14 Jimmy Guo + + * 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 + + * 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 + + Back out this change: + + * lib/utils.exp: Add support for a -maxdepth + option to limit find to 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 + + * 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 + option to limit find to 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 + + * 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 + + From 2000-04-25 Felix Lee : + * baseboards/tx39-sim.exp: Use idt, not dve linker script. Delete + misleading comments and null statements. + +2000-07-08 Angela Marie Thomas + + * 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 + + * 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 + + * lib/target.exp (reboot_target): Don't reboot target twice. + +Wed May 3 19:41:07 2000 Andrew Cagney + + From Felix Lee : + * example/calc/Makefile.in (install-info): Add target. + +Fri Apr 21 13:33:36 2000 Andrew Cagney + + * example/calc/Makefile.in: Add target info. + +Tue Apr 18 15:49:00 2000 Andrew Cagney + + * Makefile.am (SUBDIRS): Add directory example. + * Makefile.in: Re-generate. + +2000-04-10 Tom Tromey + + * 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 + + * lib/target.exp: Put the source file after options, for + compatibility with libtool. + +Fri Mar 31 00:15:54 2000 Alexandre Oliva + + * runtest (expectbin): After choosing expectbin, try + $expectbin-bld.sh and use it instead. + +Wed Mar 29 16:13:46 2000 Alexandre Oliva + + * lib/target.exp (prune_warnings): Discard not-implemented + warnings from libgloss/libnosys non-functional functions. + +Thu Feb 17 20:24:21 2000 Andrew Cagney + + * baseboards/d10v.exp (gdb_init_command): Force register DMAP2 to + 0x2000 so that the d10v VM matches the simulator. + +2000-02-15 Alexandre Oliva + + * lib/target.exp: Strip warnings about dangerous functions. + +1999-12-14 Geoff Keating + + * 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 + + * baseboards/arm-sim.exp: Underscore no longer needed for arm-pe + ports. + +Tue Oct 12 11:44:53 1999 Andrew Cagney + + * lib/libgloss.exp (process_multilib_options): Add support for + generic gdb variable option - ``gdb:VARIABLE=VALUE''. + +1999-09-28 Angela Marie Thomas + + * lib/rsh.exp (rsh_download, rsh_upload): Use rcp_prog if set. + +1999-09-15 Stan Shebs + + * baseboards/d10v.exp: Request disable of X- and Z-packets + from GDB, all D10V boards respond incorrectly to these. + +1999-08-31 Doug Evans + + * 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 + + * config/i960.exp: complain if 'sx' not found. + +1999-07-12 Drew Moseley + + * 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 + + * lib/framework.exp (record_test): Remove weird recursion and + make sure exit_status is properly set to 1. + +1999-06-08 Felix Lee + + * lib/telnet.exp (telnet_open): need to match '(Advanced or Simple)' + +1999-06-06 Felix Lee + + * lib/utils.exp (getdirs): When -all, return parents of + subdirectories too. + +1999-06-03 Fernando Nasser + + * 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 + + * 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 + + * 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 + + * 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 + + * baseboards/mcore-moto-sim.exp: New file: Support Motorola's + proprietry MCore simulator. + +1999-05-07 Stan Shebs + + 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 + + * lib/utils.exp (getdirs): Add option -all to get subdirs too. + +1999-05-05 Jason Merrill + + * baseboards/sparclite-sim.exp: Set needs_status_wrapper. + * baseboards/sparclite-sim-le.exp: Likewise. + +1999-05-05 Angela Marie Thomas + + * 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 + + 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 + + * 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 + + * 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 + + * lib/libgloss.exp (libgloss_link_flags): remove bogus -L flag. + +1999-04-23 Angela Marie Thomas + + * baseboards/cf.exp: gdb protocol is case-sensitive. + +1999-04-19 Nick Clifton + + * baseboards/Makefile.am (boards): Add mcore-sim.exp + +1999-04-13 Angela Marie Thomas + + * baseboards/sh-hms-sim.exp: Pass "-m 18" to standalone sim. + +1999-04-08 Nick Clifton + + * baseboards/mcore-sim.exp: New file: Definitions for MCore + simulator support. + +1999-04-07 Michael Meissner + + * 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 + + * lib/target.exp (prune_warnings): Ignore cc1, cc1plus warnings when + called with -g and -mabi=32. + +1999-03-28 Angela Marie Thomas + + * baseboards/x86-cygmon.exp: New file. + +1999-03-19 Gavin Romig-Koch + + * lib/libgloss.exp (get_multilibs): Handle MULTILIB_MATCHES. + +1999-03-18 James Ingham + + * baseboards/strongarm-cygmon.exp: Add a baseboard for the + strongARM boards. + +Fri Mar 12 14:01:31 1999 Jim Wilson + + * 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 + + * baseboards/arm-sim.exp: Set timeout to 800. + +1999-03-01 Jim Wilson + + * 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 + + * configure.in: AC_EXEEXT, not AM_EXEEXT. Require Autoconf 2.13. + * aclocal.m4: Regenerate. + * configure: Regenerate. + +1999-02-25 Felix Lee + + * config/dos.exp (dos_send): rewrite. add short delay. + +1999-02-18 Nick Clifton + + * baseboards/arm-sim.exp: Disable uses_underscores for COFF + targets as the linker now works correctly. + +1999-02-11 Nick Clifton + + * 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 + + * config/dos.exp: Fix typo: need_status_wrapper -> + needs_status_wrapper. + +1999-02-09 Nick Clifton + + * baseboards/arm-sim.exp: Enable uses_underscores for the COFF + based targets. + +1999-02-06 Felix Lee + + * 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 + + * lib/libgloss.exp (find_nm): new function. + +1999-01-31 Felix Lee + + * 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 + + * 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 + + * 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 + + * 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 + + * lib/libgloss.exp (get_multilibs): Multilib directories can + contain '=', too. + +Thu Jan 14 00:10:25 1999 Rainer Orth + + * 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 + + * runtest.exp (setup_target_hook): add missing globals. + +1998-12-31 Felix Lee + + * config/dos.exp (dos_spawn): ignore optional args. + + * lib/ftp.exp (ftp_upload): ftp error messages vary. + +1998-12-30 Rob Savoye + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * contrib/test-tool: spit out test summary first. + +1998-12-07 James E Wilson + + * baseboards/i960-sim.exp: New file. + +Thu Dec 3 14:03:27 1998 Dave Brolley + + * baseboards/fr30-elf.exp: New file. + * baseboards/fr30-sim.exp: New file. + +1998-11-30 Gavin Romig-Koch + + * lib/libgloss.exp (get_multilibs): Multilib options can contain '='. + +1998-11-27 Felix Lee + + * config/gdb-comm.exp (gdb_comm_reload): give up after N reboot + failures. + +Mon Nov 23 10:19:06 1998 Kaveh R. Ghazi + + * lib/target.exp (prune_warnings): Kill NFS server not responding + warnings too. + +1998-11-18 Jim Wilson + + * baseboards/tx39-dve.exp: Add cygmon support. + +1998-11-05 Jim Wilson + + * 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 + + * lib/remote.exp (remote_spawn): Properly pass trailing args + to call_remote. + +Tue Oct 13 21:04:04 1998 Felix Lee + + * 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 + + * baseboards/danlite-elf.exp: New file. + +1998-10-11 Michael Meissner + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * config/gdb-comm.exp: Catch RDI_open failure. + +Mon Sep 14 20:00:57 1998 Michael Snyder + + * baseboards/m68k-emc.exp: New file. + * config/m68k-emc.exp: New file. + +1998-09-12 Michael Meissner + + * baseboards/powerpc{,le}-sim.exp: Call process_multilib_options + so multilib tests can be run. + +Fri Sep 4 09:26:47 1998 Nick Clifton + + * lib/utils.exp (proc prune): Initialise $tmp to an empty list. + +Mon Aug 31 13:43:47 1998 Tom Tromey + + * lib/libgloss.exp (find_gcj): Renamed from find_gjavac; compiler + now named `gcj'. + +Tue Aug 25 13:31:18 1998 Anthony Green + + * lib/libgloss.exp (find_gjavac): New function. + +1998-08-25 Rob Savoye + + * 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 + + * 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 + + * 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 + + * config/gdb_stub.exp (gdb_stub_load): fix typo + +Thu Jun 4 14:16:32 1998 Felix Lee + + * 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 + + * 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 + + * runtest.exp(iterate_target_variants_two): concat multiple globs + correctly. + +Tue May 26 17:56:57 1998 Bob Manson + + * config/dos.exp(dos_send): Handle text without newlines + properly. + +Sun May 17 17:08:46 1998 Bob Manson + + * 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 + + * 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 + + * runtest.exp (main) : Add printout of schedule of variations + +Fri May 8 14:36:49 1998 Doug Evans + + * 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 + + * lib/libgloss.exp (libgloss_link_flags): Recognize sparc86x target. + +Sun Apr 19 09:29:44 1998 Mark Alexander + + * baseboards/sparclite-sim.exp: New file. + +Tue Apr 14 09:55:37 1998 Bob Manson + + * 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 + + * 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 + + * 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 + + * config/sim.exp(sim_spawn): code for remote host was wrong. + +Tue Mar 31 00:31:53 1998 Bob Manson + + * baseboards/dos.exp: Disable GDB interrupt tests if we're testing + on a DOS host. + +Mon Mar 30 23:44:19 1998 Bob Manson + + * 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 + + * 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 + + * lib/remote.exp(remote_exec): More attempts at working around + tcl/expect's inadequacies in dealing with processes. + +1998-03-25 Brendan Kehoe + + * contrib/test-g++: Only do the libg++ tests if the directory exists. + +Wed Mar 25 12:24:25 1998 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * baseboards/sparclite-cygmon.exp: New file. + +Wed Mar 4 18:05:46 1998 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * baseboards/mips64vr4100-sim.exp + Defines simulated test target for mips46vr4100-*-elf + +Wed Feb 18 15:29:12 1998 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * runtest: Handle finding runtest.exp better automounted + environments. + +Mon Jan 19 10:37:13 1998 Mark Alexander + + * 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 + + * lib/libgloss.exp: Handle setting of LD_LIBRARY_PATH/SHLIB_PATH + when testing with installed libraries. + +1998-01-12 Brendan Kehoe + + * contrib/test-tool (todayname): Refer to and use ChangeLog.egcs + instead of ChangeLog.fsf. + +Mon Jan 5 17:25:25 1998 Michael Meissner + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * baseboards/d30v-sim.exp (ldflags): Add -mextmem to allow testing + larger tests. + +Tue Dec 9 21:38:03 1997 Fred Fish + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * lib/remote.exp(remote_open): Use catch. + +Tue Dec 2 22:44:42 1997 Bob Manson + + * 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 + + * baseboards/d30v-sim.exp: Re-enable trampolines. + +Tue Nov 25 09:24:13 1997 Michael Meissner + + * baseboards/d30v-sim.exp: Re-enable using label values. + +Mon Nov 24 09:56:20 1997 Bob Manson + + * 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 + + * baseboards/d30v-sim.exp: Turn off trampolines and label values + temporarily. + +Thu Nov 13 22:51:42 1997 Michael Meissner + + * baseboards/d30v-sim.exp: New file for d30v support. + +Wed Nov 12 23:45:48 1997 Bob Manson + + * 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 + + * lib/target.exp (default_target_compile): Put math library + before linker script. + +Sun Oct 26 20:00:34 1997 Bob Manson + + * config/base68k.exp(base68k_wait): New procedure. + (base68k_load): Use remote_spawn and remote_wait. + +Sat Oct 25 21:48:36 1997 Bob Manson + + * config/base68k.exp(base68k_spawn): New procedure. + +Fri Oct 24 10:55:17 1997 Bob Manson + + * 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 + + * runtest (mypath): Scan $PATH to set mypath if $0 does not give it. + +Mon Oct 13 11:09:09 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + * baseboards/arm-sim.exp: No longer uses underscores. + * baseboards/arm-ice.exp: Ditto. + +Tue Sep 30 12:47:19 1997 Doug Evans + + * lib/remote.exp (standard_file, cmp): Ensure file exists before + computing file size. + +Sun Sep 28 14:30:52 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * contrib/test-tool: Put all of the failure stuff up above the + pass stuff. + +Tue Sep 16 22:15:20 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * config/tic80.exp: Remove bogus call to "fix" program. + Add timeout to remote_wait. + +Tue Sep 9 11:40:01 1997 Doug Evans + + * 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 + + * 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 + + * 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 + + * dg.exp (dg-test): New arg -keep-output. + +Wed Aug 27 13:16:32 1997 Bob Manson + + * config/vxworks.exp: Set the gdb_prompt target feature to be + (vxgdb). + +Fri Aug 22 13:24:58 1997 Bob Manson + + * 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 + + * baseboards/vx4300.exp: New file. + +Wed Aug 13 12:57:53 1997 Jason Merrill + + * 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 + + * 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 + + * 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 + + * config/netware.exp (${board}_init): Change ld.new to ld-new. + +Wed Aug 6 18:41:24 1997 Jason Merrill + + * lib/libgloss.exp (libio_include_flags): Look for _G_config.h, not + libio.a. + +Wed Aug 6 00:41:46 1997 Ian Lance Taylor + + * lib/libgloss.exp (find_gas): Look for as-new, not as.new. + +Sat Aug 2 20:44:55 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * lib/ftp.exp (ftp_upload): return localfilename, not + remotefilename. + +Mon Jul 28 15:28:09 1997 Felix Lee + + * config/base68k.exp (base68k_ld): need global objdir. + +Tue Jul 22 10:24:54 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * config/arm-ice.exp: New file. + * baseboards/arm-ice.exp: New file. + +Sun Jun 29 22:12:51 1997 Bob Manson + + * 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 + + * 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 + + (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 + + * 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 + + * 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 + + * 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 + + * config/ddb-ether.exp(ddb_ether_try): Fix typo. + +Tue Jun 17 16:18:00 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * baseboards/rom68k-idp-aout.exp: Status wrapper seems to be + working in devo. + +Wed May 28 12:34:28 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * baseboards/i960-cyclone.exp: Link with i960.ld linker + script. + +Tue May 20 19:03:54 1997 Bob Manson + + * config/sim.exp: Check for magic CHILDKILLED nonsense from + wait. + +Mon May 19 13:07:01 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + * Makefile.in (install): Add missing ';' to datadir for...done. + +Fri May 16 23:30:27 1997 Bob Manson + + * baseboards/powerpc-sim.exp: Can't call functions from within + GDB. + +Wed May 14 20:59:11 1997 Bob Manson + + * 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 + + * 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 + + * Makefile.in (install): Take out errant semicolon. + +Mon May 12 21:48:52 1997 Bob Manson + + * 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 + + * 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 + + * runtest.exp(lookfor_file): Use .. instead of [file dirname]. + +Mon May 5 22:06:14 1997 Bob Manson + + * 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 + + * 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 + + * baseboards/tic80-sim.exp: New file. + +Thu May 1 14:42:51 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * baseboards/h8300.exp: Add appropriate references to linker + scripts. Set noinferiorio, and noresults. + +Sun Mar 30 00:25:59 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * baseboards/m32r-sim.exp (multilib_flags): Test all code models. + +Wed Mar 26 13:55:19 1997 Bob Manson + + * baseboards/a29k-udi.exp: Don't use libio. + +Tue Mar 25 15:22:24 1997 Bob Manson + + * 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 + + * config/dos.exp: Grab the exit status from the command we + executed. + +Sat Mar 22 13:07:52 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * baseboards/h8300-sim.exp: Add noargs and nosignals. + * baseboards/h8300.exp: Ditto. + +Tue Mar 11 17:17:43 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * baseboards/vr5000-ddb.exp: Set gdb,nosignals and gdb,noargs. + +Tue Mar 4 14:43:50 1997 Bob Manson + + * baseboards/powerpc-sim.exp: Set gdb,nosignals. + +Mon Mar 3 12:38:28 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * lib/telnet.exp(telnet_binary): Wait for a prompt after sending + the telnet escape character. + +Fri Feb 21 13:46:45 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * baseboards/sh-hms-sim.exp (cflags): Add -DSTACK_SIZE=16384. + +Mon Feb 3 12:30:02 1997 Bob Manson + + * 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 + + * 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 + + * lib/target.exp: Only mention the compiler exit status if it is + non-zero. + +Sun Feb 2 00:00:39 1997 Bob Manson + + * 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 + + * 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 + + * lib/libgloss.exp (libgloss_link_flags): Add slash at the end of + the -B option. + +Fri Jan 31 11:36:12 1997 Bob Manson + + * 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 + + * 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 + + * 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 + + 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 + + * site.tmpl (powerpc*-*-eabi*): Add sample entry. + +Thu Dec 12 18:11:24 1996 Rob Savoye + + * 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 + + * 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 + + * 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 + + * 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 + + * configure: Regenerated. + * aclocal.m4 (CY_AC_PATH_TKLIB): Typo fix. + +Fri Sep 27 12:17:35 1996 Brendan Kehoe + + * contrib/test-tool (todayname): Add some echos around the "Here is" + lines. + +Thu Sep 26 17:09:00 1996 Brendan Kehoe + + * contrib/test-tool: For g++, also track ChangeLog.fsf. + +Fri Aug 30 10:35:12 1996 Doug Evans + + * 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 + + * 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 + + * 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 + + * lib/libgloss.exp (libgloss_flags): Add trailing slash to -B we + added. + (newlib_flags): Likewise. + +Mon Aug 12 16:07:21 1996 Rob Savoye + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * contrib/test-tool: Update gcc/g++ testing directory. + +Tue Jun 25 10:21:24 1996 Tom Tromey + + * 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 + + * 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 + + * install-sh: Add MIT copyright. Fix typo. + +Fri May 31 14:09:32 1996 Tom Tromey + + * QuickRef.ps: Removed. + +Tue May 28 13:03:48 1996 Tom Tromey + + * 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 + + * aclocal.m4 (CY_AC_PATH_TCLH): Guess Tcl version if cross compiling. + * testsuite/configure: Regenerated. + +Tue May 14 15:38:04 1996 Mark Alexander + + * 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 + + * testsuite/Makefile.in (configure): Removed bogus tab. + +Tue Feb 20 19:43:47 1996 Doug Evans + + * 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 + + * 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 + + * lib/dg.exp (dg-format-linenum): dg-linenum-format is global. + +Sun Jan 28 13:28:12 1996 Doug Evans + + * lib/dg.exp (dg-test): Update to handle new results from ${tool}_load. + +Sat Jan 27 13:04:58 1996 Doug Evans + + From Anthony Green . + * 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 + + * 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 + + * testsuite/Makefile.in (check): Find Tcl library directory. + +Tue Jan 16 11:11:44 1996 Rob Savoye + + * 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 + + * tcl-mode.el: Updated to version 1.49. + +Thu Jan 11 12:26:06 1996 Michael Meissner + + * runtest.exp (--help): Fix --build description. + +Thu Jan 11 10:08:14 1996 Tom Tromey + + * 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 + + * 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 + + * 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 + + * contrib/test-tool: Use TMPDIR if set. + +Fri Dec 1 20:58:03 1995 Rob Savoye + + * 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 + + * lib/utils.exp (prune_system_crud): Discard warning about g++ not + supporting -g with DWARF. + +Wed Nov 29 12:47:22 1995 Rob Savoye + + * 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 + + * 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 + + * runtest.exp: Set host_triplet to $build_triplet if it doesn't + exist. + +Thu Oct 19 21:34:55 1995 Fred Fish + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * runtest.exp (srcdir): Mark trailing '/' as deprecated, + and append it outside the main loop. + +Wed Sep 20 13:25:40 1995 Ian Lance Taylor + + * 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 + + * 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 + + * 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 + + * 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 + + * lib/vxworks.exp (vxworks_spawn): Add `global checktask'. + +Sat Sep 9 08:54:01 1995 Rob Savoye + + * 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 + + * lib/remote.exp (download): Use verbose, not puts, when saying + how many lines we downloaded. + +Thu Sep 7 10:56:41 1995 Rob Savoye + + * lib/utils.exp (find): Fix so it doesn't get duplicate + directories. + +Wed Sep 6 20:51:40 1995 Rob Savoye + + * 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 + + * 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 + + * 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 + + * runtest.exp: Don't set target_triplet if already set. + +Wed Aug 30 21:34:16 1995 Rob Savoye + + * 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 + + * 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 + + * lib/dg.exp (dg-test): Also watch for unsupported from + ${tool}-dg-prune. + +Wed Aug 2 21:36:10 1995 Doug Evans + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * lib/dg.exp: New file. + + * runtest.exp (verbose): New option -log. + +Wed Apr 26 12:40:23 1995 Doug Evans + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * contrib/test-tool: Treat expected things as "pass" only if + -expectedpass given. + +Fri Jan 6 10:57:12 1995 Doug Evans + + * 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 + + * runtest.exp: catch takes only two arguments; quote accordingly. + +Sun Dec 4 01:14:49 1994 Doug Evans + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + or , 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. diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..50dbe43 --- /dev/null +++ b/INSTALL @@ -0,0 +1,183 @@ +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. + diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..f673015 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,50 @@ +## 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 diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..8687693 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,412 @@ +# 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: diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..b3caa6c --- /dev/null +++ b/NEWS @@ -0,0 +1,3 @@ +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. diff --git a/README b/README new file mode 100644 index 0000000..0e22eab --- /dev/null +++ b/README @@ -0,0 +1,283 @@ + 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 ". Messages sent to +frost@cygnus.com go to the mailing list. \ No newline at end of file diff --git a/TODO b/TODO new file mode 100644 index 0000000..2f77cd5 --- /dev/null +++ b/TODO @@ -0,0 +1,8 @@ + 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. + diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..f5379a5 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,137 @@ +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]) + diff --git a/baseboards/README b/baseboards/README new file mode 100644 index 0000000..590bc43 --- /dev/null +++ b/baseboards/README @@ -0,0 +1,15 @@ +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. diff --git a/baseboards/a29k-udi.exp b/baseboards/a29k-udi.exp new file mode 100644 index 0000000..3b4c506 --- /dev/null +++ b/baseboards/a29k-udi.exp @@ -0,0 +1,23 @@ +# 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 diff --git a/baseboards/arc-sim.exp b/baseboards/arc-sim.exp new file mode 100644 index 0000000..4bb9d4a --- /dev/null +++ b/baseboards/arc-sim.exp @@ -0,0 +1,37 @@ +# 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 diff --git a/baseboards/arm-ice.exp b/baseboards/arm-ice.exp new file mode 100644 index 0000000..8e03737 --- /dev/null +++ b/baseboards/arm-ice.exp @@ -0,0 +1,48 @@ +# 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 diff --git a/baseboards/arm-sim.exp b/baseboards/arm-sim.exp new file mode 100644 index 0000000..9e96c1b --- /dev/null +++ b/baseboards/arm-sim.exp @@ -0,0 +1,52 @@ +# 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; diff --git a/baseboards/basic-sim.exp b/baseboards/basic-sim.exp new file mode 100644 index 0000000..3fa7c4d --- /dev/null +++ b/baseboards/basic-sim.exp @@ -0,0 +1,51 @@ +# 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; diff --git a/baseboards/cf.exp b/baseboards/cf.exp new file mode 100644 index 0000000..f4d73c3 --- /dev/null +++ b/baseboards/cf.exp @@ -0,0 +1,73 @@ +# 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; diff --git a/baseboards/cygmon.exp b/baseboards/cygmon.exp new file mode 100644 index 0000000..6ee4458 --- /dev/null +++ b/baseboards/cygmon.exp @@ -0,0 +1,31 @@ +# 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; diff --git a/baseboards/cygwin.exp b/baseboards/cygwin.exp new file mode 100644 index 0000000..80d4407 --- /dev/null +++ b/baseboards/cygwin.exp @@ -0,0 +1,12 @@ +# 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"; diff --git a/baseboards/d10v-sim.exp b/baseboards/d10v-sim.exp new file mode 100644 index 0000000..f744cdc --- /dev/null +++ b/baseboards/d10v-sim.exp @@ -0,0 +1,48 @@ +# 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 diff --git a/baseboards/d10v.exp b/baseboards/d10v.exp new file mode 100644 index 0000000..254556e --- /dev/null +++ b/baseboards/d10v.exp @@ -0,0 +1,60 @@ +# 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" diff --git a/baseboards/d30v-sim.exp b/baseboards/d30v-sim.exp new file mode 100644 index 0000000..c795165 --- /dev/null +++ b/baseboards/d30v-sim.exp @@ -0,0 +1,33 @@ +# 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 diff --git a/baseboards/danlite-elf.exp b/baseboards/danlite-elf.exp new file mode 100644 index 0000000..e22db2f --- /dev/null +++ b/baseboards/danlite-elf.exp @@ -0,0 +1,42 @@ +# 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; diff --git a/baseboards/dos.exp b/baseboards/dos.exp new file mode 100644 index 0000000..8702a03 --- /dev/null +++ b/baseboards/dos.exp @@ -0,0 +1,25 @@ +# 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 diff --git a/baseboards/fr30-cygmon.exp b/baseboards/fr30-cygmon.exp new file mode 100644 index 0000000..b18fa59 --- /dev/null +++ b/baseboards/fr30-cygmon.exp @@ -0,0 +1,31 @@ +# 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; diff --git a/baseboards/fr30-elf.exp b/baseboards/fr30-elf.exp new file mode 100644 index 0000000..3c8f514 --- /dev/null +++ b/baseboards/fr30-elf.exp @@ -0,0 +1,40 @@ +# 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 diff --git a/baseboards/fr30-sim.exp b/baseboards/fr30-sim.exp new file mode 100644 index 0000000..73fad4c --- /dev/null +++ b/baseboards/fr30-sim.exp @@ -0,0 +1,34 @@ +# 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 diff --git a/baseboards/h8300-sim.exp b/baseboards/h8300-sim.exp new file mode 100644 index 0000000..39415df --- /dev/null +++ b/baseboards/h8300-sim.exp @@ -0,0 +1,44 @@ +# 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 diff --git a/baseboards/h8300.exp b/baseboards/h8300.exp new file mode 100644 index 0000000..f42dbb0 --- /dev/null +++ b/baseboards/h8300.exp @@ -0,0 +1,68 @@ +# 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 diff --git a/baseboards/i386-bozo.exp b/baseboards/i386-bozo.exp new file mode 100644 index 0000000..1dbfae0 --- /dev/null +++ b/baseboards/i386-bozo.exp @@ -0,0 +1,51 @@ +# 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"; diff --git a/baseboards/i960-cyclone.exp b/baseboards/i960-cyclone.exp new file mode 100644 index 0000000..6ce5ce7 --- /dev/null +++ b/baseboards/i960-cyclone.exp @@ -0,0 +1,47 @@ +# 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 diff --git a/baseboards/i960-sim.exp b/baseboards/i960-sim.exp new file mode 100644 index 0000000..98ca8de --- /dev/null +++ b/baseboards/i960-sim.exp @@ -0,0 +1,28 @@ +# 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; diff --git a/baseboards/jmr3904-sim.exp b/baseboards/jmr3904-sim.exp new file mode 100644 index 0000000..244e2b5 --- /dev/null +++ b/baseboards/jmr3904-sim.exp @@ -0,0 +1,14 @@ +# 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"; diff --git a/baseboards/linux-gdbserver.exp b/baseboards/linux-gdbserver.exp new file mode 100644 index 0000000..abf06d7 --- /dev/null +++ b/baseboards/linux-gdbserver.exp @@ -0,0 +1,36 @@ +# 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; diff --git a/baseboards/linux-libremote.exp b/baseboards/linux-libremote.exp new file mode 100644 index 0000000..8310969 --- /dev/null +++ b/baseboards/linux-libremote.exp @@ -0,0 +1,36 @@ +# 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; diff --git a/baseboards/m32r-elf.exp b/baseboards/m32r-elf.exp new file mode 100644 index 0000000..ab402ae --- /dev/null +++ b/baseboards/m32r-elf.exp @@ -0,0 +1,40 @@ +# 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 diff --git a/baseboards/m32r-sim.exp b/baseboards/m32r-sim.exp new file mode 100644 index 0000000..eaa7145 --- /dev/null +++ b/baseboards/m32r-sim.exp @@ -0,0 +1,34 @@ +# 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 diff --git a/baseboards/m68k-emc.exp b/baseboards/m68k-emc.exp new file mode 100644 index 0000000..7b57649 --- /dev/null +++ b/baseboards/m68k-emc.exp @@ -0,0 +1,35 @@ +# 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 diff --git a/baseboards/mcore-elf.exp b/baseboards/mcore-elf.exp new file mode 100644 index 0000000..a50df98 --- /dev/null +++ b/baseboards/mcore-elf.exp @@ -0,0 +1,35 @@ +# 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 diff --git a/baseboards/mcore-moto-sim.exp b/baseboards/mcore-moto-sim.exp new file mode 100644 index 0000000..a362f4f --- /dev/null +++ b/baseboards/mcore-moto-sim.exp @@ -0,0 +1,125 @@ +# 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; diff --git a/baseboards/mcore-pe.exp b/baseboards/mcore-pe.exp new file mode 100644 index 0000000..526f674 --- /dev/null +++ b/baseboards/mcore-pe.exp @@ -0,0 +1,35 @@ +# 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 diff --git a/baseboards/mcore-sim.exp b/baseboards/mcore-sim.exp new file mode 100644 index 0000000..ae863ca --- /dev/null +++ b/baseboards/mcore-sim.exp @@ -0,0 +1,37 @@ +# 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 diff --git a/baseboards/mips-idt.exp b/baseboards/mips-idt.exp new file mode 100644 index 0000000..17c6ca8 --- /dev/null +++ b/baseboards/mips-idt.exp @@ -0,0 +1,31 @@ +# 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 diff --git a/baseboards/mips-lnews-sim.exp b/baseboards/mips-lnews-sim.exp new file mode 100644 index 0000000..b4685df --- /dev/null +++ b/baseboards/mips-lnews-sim.exp @@ -0,0 +1,5 @@ +# 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"; diff --git a/baseboards/mips-lsi-sim.exp b/baseboards/mips-lsi-sim.exp new file mode 100644 index 0000000..47cae89 --- /dev/null +++ b/baseboards/mips-lsi-sim.exp @@ -0,0 +1,8 @@ +# 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"; diff --git a/baseboards/mips-sim.exp b/baseboards/mips-sim.exp new file mode 100644 index 0000000..104188a --- /dev/null +++ b/baseboards/mips-sim.exp @@ -0,0 +1,30 @@ +# 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; diff --git a/baseboards/mips64-sim.exp b/baseboards/mips64-sim.exp new file mode 100644 index 0000000..3315619 --- /dev/null +++ b/baseboards/mips64-sim.exp @@ -0,0 +1,29 @@ +# 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; diff --git a/baseboards/mips64vr4100-sim.exp b/baseboards/mips64vr4100-sim.exp new file mode 100644 index 0000000..6e1d5eb --- /dev/null +++ b/baseboards/mips64vr4100-sim.exp @@ -0,0 +1,33 @@ +# 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; diff --git a/baseboards/mn10200-cygmon.exp b/baseboards/mn10200-cygmon.exp new file mode 100644 index 0000000..1d122e3 --- /dev/null +++ b/baseboards/mn10200-cygmon.exp @@ -0,0 +1,32 @@ +# 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; diff --git a/baseboards/mn10200-sim.exp b/baseboards/mn10200-sim.exp new file mode 100644 index 0000000..2356e3a --- /dev/null +++ b/baseboards/mn10200-sim.exp @@ -0,0 +1,45 @@ +# 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; diff --git a/baseboards/mn10300-cygmon.exp b/baseboards/mn10300-cygmon.exp new file mode 100644 index 0000000..86c65e1 --- /dev/null +++ b/baseboards/mn10300-cygmon.exp @@ -0,0 +1,32 @@ +# 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; diff --git a/baseboards/mn10300-sim.exp b/baseboards/mn10300-sim.exp new file mode 100644 index 0000000..eff6a62 --- /dev/null +++ b/baseboards/mn10300-sim.exp @@ -0,0 +1,41 @@ +# 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; diff --git a/baseboards/msparc-cygmon.exp b/baseboards/msparc-cygmon.exp new file mode 100644 index 0000000..55fc491 --- /dev/null +++ b/baseboards/msparc-cygmon.exp @@ -0,0 +1 @@ +load_base_board_description "cygmon"; diff --git a/baseboards/op50n.exp b/baseboards/op50n.exp new file mode 100644 index 0000000..dee8ca3 --- /dev/null +++ b/baseboards/op50n.exp @@ -0,0 +1,36 @@ +# 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; diff --git a/baseboards/powerpc-bug.exp b/baseboards/powerpc-bug.exp new file mode 100644 index 0000000..2428f72 --- /dev/null +++ b/baseboards/powerpc-bug.exp @@ -0,0 +1,29 @@ +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" diff --git a/baseboards/powerpc-bug1.exp b/baseboards/powerpc-bug1.exp new file mode 100644 index 0000000..fe25678 --- /dev/null +++ b/baseboards/powerpc-bug1.exp @@ -0,0 +1,5 @@ +# 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" diff --git a/baseboards/powerpc-sim.exp b/baseboards/powerpc-sim.exp new file mode 100644 index 0000000..db579e1 --- /dev/null +++ b/baseboards/powerpc-sim.exp @@ -0,0 +1,28 @@ +# 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 diff --git a/baseboards/powerpcle-sim.exp b/baseboards/powerpcle-sim.exp new file mode 100644 index 0000000..20754fa --- /dev/null +++ b/baseboards/powerpcle-sim.exp @@ -0,0 +1,28 @@ +# 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 diff --git a/baseboards/rom68k-idp.exp b/baseboards/rom68k-idp.exp new file mode 100644 index 0000000..4f0d1ad --- /dev/null +++ b/baseboards/rom68k-idp.exp @@ -0,0 +1,69 @@ +# 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; diff --git a/baseboards/sh-hms-sim.exp b/baseboards/sh-hms-sim.exp new file mode 100644 index 0000000..69da8d6 --- /dev/null +++ b/baseboards/sh-hms-sim.exp @@ -0,0 +1,48 @@ +# 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" diff --git a/baseboards/sh-hms.exp b/baseboards/sh-hms.exp new file mode 100644 index 0000000..4653707 --- /dev/null +++ b/baseboards/sh-hms.exp @@ -0,0 +1,47 @@ +# 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"; diff --git a/baseboards/sparc64-sim.exp b/baseboards/sparc64-sim.exp new file mode 100644 index 0000000..914a571 --- /dev/null +++ b/baseboards/sparc64-sim.exp @@ -0,0 +1,31 @@ +# 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 diff --git a/baseboards/sparclet-aout.exp b/baseboards/sparclet-aout.exp new file mode 100644 index 0000000..153549c --- /dev/null +++ b/baseboards/sparclet-aout.exp @@ -0,0 +1,48 @@ +# 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; diff --git a/baseboards/sparclite-coff.exp b/baseboards/sparclite-coff.exp new file mode 100644 index 0000000..61eafc4 --- /dev/null +++ b/baseboards/sparclite-coff.exp @@ -0,0 +1,41 @@ +# 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; diff --git a/baseboards/sparclite-cygmon.exp b/baseboards/sparclite-cygmon.exp new file mode 100644 index 0000000..956881e --- /dev/null +++ b/baseboards/sparclite-cygmon.exp @@ -0,0 +1,6 @@ +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" diff --git a/baseboards/sparclite-sim-le.exp b/baseboards/sparclite-sim-le.exp new file mode 100644 index 0000000..5daec2e --- /dev/null +++ b/baseboards/sparclite-sim-le.exp @@ -0,0 +1,47 @@ +# 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" diff --git a/baseboards/sparclite-sim.exp b/baseboards/sparclite-sim.exp new file mode 100644 index 0000000..a977ffa --- /dev/null +++ b/baseboards/sparclite-sim.exp @@ -0,0 +1,37 @@ +# 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" diff --git a/baseboards/strongarm-cygmon.exp b/baseboards/strongarm-cygmon.exp new file mode 100644 index 0000000..8e41199 --- /dev/null +++ b/baseboards/strongarm-cygmon.exp @@ -0,0 +1,41 @@ +# 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 diff --git a/baseboards/tic80-sim.exp b/baseboards/tic80-sim.exp new file mode 100644 index 0000000..dc2cecc --- /dev/null +++ b/baseboards/tic80-sim.exp @@ -0,0 +1,28 @@ +# 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 diff --git a/baseboards/tx39-dve.exp b/baseboards/tx39-dve.exp new file mode 100644 index 0000000..8973e43 --- /dev/null +++ b/baseboards/tx39-dve.exp @@ -0,0 +1,48 @@ +# 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" diff --git a/baseboards/tx39-sim.exp b/baseboards/tx39-sim.exp new file mode 100644 index 0000000..20fc722 --- /dev/null +++ b/baseboards/tx39-sim.exp @@ -0,0 +1,3 @@ +# 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"; diff --git a/baseboards/unix.exp b/baseboards/unix.exp new file mode 100644 index 0000000..98d1ec1 --- /dev/null +++ b/baseboards/unix.exp @@ -0,0 +1,8 @@ +# 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; diff --git a/baseboards/usparc-cygmon.exp b/baseboards/usparc-cygmon.exp new file mode 100644 index 0000000..f827c60 --- /dev/null +++ b/baseboards/usparc-cygmon.exp @@ -0,0 +1,48 @@ +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]; + } + } + } +} diff --git a/baseboards/v850-sim.exp b/baseboards/v850-sim.exp new file mode 100644 index 0000000..cb7a70a --- /dev/null +++ b/baseboards/v850-sim.exp @@ -0,0 +1,31 @@ +# 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 diff --git a/baseboards/vr4100-ddb.exp b/baseboards/vr4100-ddb.exp new file mode 100644 index 0000000..e959a66 --- /dev/null +++ b/baseboards/vr4100-ddb.exp @@ -0,0 +1,33 @@ +# 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 diff --git a/baseboards/vr4100-sim.exp b/baseboards/vr4100-sim.exp new file mode 100644 index 0000000..c3b278a --- /dev/null +++ b/baseboards/vr4100-sim.exp @@ -0,0 +1,12 @@ +# 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"; diff --git a/baseboards/vr4111-sim.exp b/baseboards/vr4111-sim.exp new file mode 100644 index 0000000..c3b278a --- /dev/null +++ b/baseboards/vr4111-sim.exp @@ -0,0 +1,12 @@ +# 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"; diff --git a/baseboards/vr4300-ddb.exp b/baseboards/vr4300-ddb.exp new file mode 100644 index 0000000..a25afb8 --- /dev/null +++ b/baseboards/vr4300-ddb.exp @@ -0,0 +1,19 @@ +# 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"; diff --git a/baseboards/vr4300-sim.exp b/baseboards/vr4300-sim.exp new file mode 100644 index 0000000..c3b278a --- /dev/null +++ b/baseboards/vr4300-sim.exp @@ -0,0 +1,12 @@ +# 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"; diff --git a/baseboards/vr4300.exp b/baseboards/vr4300.exp new file mode 100644 index 0000000..a89f943 --- /dev/null +++ b/baseboards/vr4300.exp @@ -0,0 +1,41 @@ +# 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" diff --git a/baseboards/vr5000-ddb.exp b/baseboards/vr5000-ddb.exp new file mode 100644 index 0000000..8cf4b0f --- /dev/null +++ b/baseboards/vr5000-ddb.exp @@ -0,0 +1,40 @@ +# 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" diff --git a/baseboards/vx4300.exp b/baseboards/vx4300.exp new file mode 100644 index 0000000..2547b1c --- /dev/null +++ b/baseboards/vx4300.exp @@ -0,0 +1,25 @@ +# 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"; diff --git a/baseboards/vx68k.exp b/baseboards/vx68k.exp new file mode 100644 index 0000000..d79f5bd --- /dev/null +++ b/baseboards/vx68k.exp @@ -0,0 +1,25 @@ +# 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"; diff --git a/baseboards/vx960.exp b/baseboards/vx960.exp new file mode 100644 index 0000000..e25c79d --- /dev/null +++ b/baseboards/vx960.exp @@ -0,0 +1,29 @@ +# 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"; diff --git a/baseboards/vxsparc.exp b/baseboards/vxsparc.exp new file mode 100644 index 0000000..c943e70 --- /dev/null +++ b/baseboards/vxsparc.exp @@ -0,0 +1,25 @@ +# 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"; diff --git a/baseboards/x86-cygmon.exp b/baseboards/x86-cygmon.exp new file mode 100644 index 0000000..45f2422 --- /dev/null +++ b/baseboards/x86-cygmon.exp @@ -0,0 +1,11 @@ +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" +} + diff --git a/baseboards/xscale-cygmon.exp b/baseboards/xscale-cygmon.exp new file mode 100644 index 0000000..b7c28de --- /dev/null +++ b/baseboards/xscale-cygmon.exp @@ -0,0 +1,37 @@ +# 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 diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..0012219 --- /dev/null +++ b/config.guess @@ -0,0 +1,1090 @@ +#! /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 . +# The master version of this file is at the FSF in /home/gd/gnu/lib. +# Please send patches to the Autoconf mailing list . +# +# 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 <$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 + + 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 + #include + + 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 + 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 < +#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/^ //' <$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 </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 < +#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' /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 + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # 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 < +# include +#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 + 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 diff --git a/config/README b/config/README new file mode 100644 index 0000000..caedebd --- /dev/null +++ b/config/README @@ -0,0 +1,34 @@ +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. diff --git a/config/arc.exp b/config/arc.exp new file mode 100644 index 0000000..3fffb06 --- /dev/null +++ b/config/arc.exp @@ -0,0 +1,20 @@ +# 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"; diff --git a/config/arm-ice.exp b/config/arm-ice.exp new file mode 100644 index 0000000..3fffb06 --- /dev/null +++ b/config/arm-ice.exp @@ -0,0 +1,20 @@ +# 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"; diff --git a/config/base-config.exp b/config/base-config.exp new file mode 100644 index 0000000..2cd9581 --- /dev/null +++ b/config/base-config.exp @@ -0,0 +1,48 @@ +# 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]; +} diff --git a/config/base68k.exp b/config/base68k.exp new file mode 100644 index 0000000..d105ce8 --- /dev/null +++ b/config/base68k.exp @@ -0,0 +1,323 @@ +# 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 diff --git a/config/bug.exp b/config/bug.exp new file mode 100644 index 0000000..881eccc --- /dev/null +++ b/config/bug.exp @@ -0,0 +1,29 @@ +# 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" diff --git a/config/cfdbug.exp b/config/cfdbug.exp new file mode 100644 index 0000000..2db0ac7 --- /dev/null +++ b/config/cfdbug.exp @@ -0,0 +1,31 @@ +# 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 diff --git a/config/cygmon.exp b/config/cygmon.exp new file mode 100644 index 0000000..2378a12 --- /dev/null +++ b/config/cygmon.exp @@ -0,0 +1,22 @@ +# 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; diff --git a/config/d10v.exp b/config/d10v.exp new file mode 100644 index 0000000..3fffb06 --- /dev/null +++ b/config/d10v.exp @@ -0,0 +1,20 @@ +# 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"; diff --git a/config/ddb-ether.exp b/config/ddb-ether.exp new file mode 100644 index 0000000..140c0d2 --- /dev/null +++ b/config/ddb-ether.exp @@ -0,0 +1,190 @@ +# 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> " diff --git a/config/ddb.exp b/config/ddb.exp new file mode 100644 index 0000000..13a18e0 --- /dev/null +++ b/config/ddb.exp @@ -0,0 +1,96 @@ +# 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 +} diff --git a/config/dos.exp b/config/dos.exp new file mode 100644 index 0000000..d1b440d --- /dev/null +++ b/config/dos.exp @@ -0,0 +1,484 @@ +# 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"; + 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 diff --git a/config/dve.exp b/config/dve.exp new file mode 100644 index 0000000..3582b5b --- /dev/null +++ b/config/dve.exp @@ -0,0 +1,22 @@ +# 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"; diff --git a/config/gdb-comm.exp b/config/gdb-comm.exp new file mode 100644 index 0000000..3f4fffc --- /dev/null +++ b/config/gdb-comm.exp @@ -0,0 +1,566 @@ +# 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"; diff --git a/config/gdb_stub.exp b/config/gdb_stub.exp new file mode 100644 index 0000000..127c6eb --- /dev/null +++ b/config/gdb_stub.exp @@ -0,0 +1,638 @@ +# 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 . + +# +# 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 ""; + sleep 2; + remote_send host ""; + 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 "" + sleep 1; + remote_send host "" + 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" diff --git a/config/h8300.exp b/config/h8300.exp new file mode 100644 index 0000000..3fffb06 --- /dev/null +++ b/config/h8300.exp @@ -0,0 +1,20 @@ +# 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"; diff --git a/config/i386-bozo.exp b/config/i386-bozo.exp new file mode 100644 index 0000000..563da32 --- /dev/null +++ b/config/i386-bozo.exp @@ -0,0 +1,46 @@ +# 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; +} diff --git a/config/i960.exp b/config/i960.exp new file mode 100644 index 0000000..dcca835 --- /dev/null +++ b/config/i960.exp @@ -0,0 +1,221 @@ +# 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; diff --git a/config/m32r-stub.exp b/config/m32r-stub.exp new file mode 100644 index 0000000..7cdfd23 --- /dev/null +++ b/config/m32r-stub.exp @@ -0,0 +1,20 @@ +# 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"; diff --git a/config/m32r.exp b/config/m32r.exp new file mode 100644 index 0000000..3fffb06 --- /dev/null +++ b/config/m32r.exp @@ -0,0 +1,20 @@ +# 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"; diff --git a/config/m68k-emc.exp b/config/m68k-emc.exp new file mode 100644 index 0000000..852453c --- /dev/null +++ b/config/m68k-emc.exp @@ -0,0 +1,52 @@ +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 { } + } +} diff --git a/config/mips-idt.exp b/config/mips-idt.exp new file mode 100644 index 0000000..eacdb4d --- /dev/null +++ b/config/mips-idt.exp @@ -0,0 +1,24 @@ +# 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"; diff --git a/config/mn10200-eval.exp b/config/mn10200-eval.exp new file mode 100644 index 0000000..9af6ae5 --- /dev/null +++ b/config/mn10200-eval.exp @@ -0,0 +1,22 @@ +# 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"; diff --git a/config/mn10300-eval.exp b/config/mn10300-eval.exp new file mode 100644 index 0000000..1070b42 --- /dev/null +++ b/config/mn10300-eval.exp @@ -0,0 +1,22 @@ +# 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"; diff --git a/config/netware.exp b/config/netware.exp new file mode 100644 index 0000000..75d8149 --- /dev/null +++ b/config/netware.exp @@ -0,0 +1,214 @@ +# 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; +} diff --git a/config/powerpc-bug.exp b/config/powerpc-bug.exp new file mode 100644 index 0000000..3fffb06 --- /dev/null +++ b/config/powerpc-bug.exp @@ -0,0 +1,20 @@ +# 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"; diff --git a/config/proelf.exp b/config/proelf.exp new file mode 100644 index 0000000..310af21 --- /dev/null +++ b/config/proelf.exp @@ -0,0 +1,27 @@ +# 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\]+.*$" diff --git a/config/rom68k.exp b/config/rom68k.exp new file mode 100644 index 0000000..63721f8 --- /dev/null +++ b/config/rom68k.exp @@ -0,0 +1,32 @@ +# 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).*$" diff --git a/config/sh.exp b/config/sh.exp new file mode 100644 index 0000000..3fffb06 --- /dev/null +++ b/config/sh.exp @@ -0,0 +1,20 @@ +# 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"; diff --git a/config/sim.exp b/config/sim.exp new file mode 100644 index 0000000..74edc6f --- /dev/null +++ b/config/sim.exp @@ -0,0 +1,124 @@ +# 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 diff --git a/config/slite.exp b/config/slite.exp new file mode 100644 index 0000000..19bf612 --- /dev/null +++ b/config/slite.exp @@ -0,0 +1,20 @@ +# 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"; diff --git a/config/sparclet.exp b/config/sparclet.exp new file mode 100644 index 0000000..3f86098 --- /dev/null +++ b/config/sparclet.exp @@ -0,0 +1,26 @@ +# 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 . + +load_generic_config "gdb_stub"; + +# This is the old GDB prompt for the toolchain. +# Uncomment for old tests +#set_board_info gdb_prompt "\\(gdbslet\\)"; diff --git a/config/tic80.exp b/config/tic80.exp new file mode 100644 index 0000000..ef12778 --- /dev/null +++ b/config/tic80.exp @@ -0,0 +1,81 @@ +# +# 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 diff --git a/config/udi.exp b/config/udi.exp new file mode 100644 index 0000000..4e10c4f --- /dev/null +++ b/config/udi.exp @@ -0,0 +1,158 @@ +# 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>"; diff --git a/config/unix.exp b/config/unix.exp new file mode 100644 index 0000000..d3e7fab --- /dev/null +++ b/config/unix.exp @@ -0,0 +1,134 @@ +# 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"; diff --git a/config/vr4100.exp b/config/vr4100.exp new file mode 100644 index 0000000..16d20b8 --- /dev/null +++ b/config/vr4100.exp @@ -0,0 +1,21 @@ +# 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"; diff --git a/config/vr4300.exp b/config/vr4300.exp new file mode 100644 index 0000000..16d20b8 --- /dev/null +++ b/config/vr4300.exp @@ -0,0 +1,21 @@ +# 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"; diff --git a/config/vr5000.exp b/config/vr5000.exp new file mode 100644 index 0000000..01945cf --- /dev/null +++ b/config/vr5000.exp @@ -0,0 +1,21 @@ +# 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"; diff --git a/config/vrtx.exp b/config/vrtx.exp new file mode 100644 index 0000000..cff962c --- /dev/null +++ b/config/vrtx.exp @@ -0,0 +1,50 @@ +# 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" diff --git a/config/vxworks.exp b/config/vxworks.exp new file mode 100644 index 0000000..3ab4a71 --- /dev/null +++ b/config/vxworks.exp @@ -0,0 +1,511 @@ +# 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; diff --git a/configure b/configure new file mode 100755 index 0000000..3fc078c --- /dev/null +++ b/configure @@ -0,0 +1,1605 @@ +#! /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 <> confdefs.h <&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 <&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 <&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 <&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 </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 < 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 <> $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 <> $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 + + diff --git a/configure.in b/configure.in new file mode 100644 index 0000000..263f043 --- /dev/null +++ b/configure.in @@ -0,0 +1,24 @@ +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) + diff --git a/contrib/README b/contrib/README new file mode 100644 index 0000000..d776f6e --- /dev/null +++ b/contrib/README @@ -0,0 +1,16 @@ +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 - + diff --git a/contrib/bluegnu2.0.3/Makefile.in b/contrib/bluegnu2.0.3/Makefile.in new file mode 100644 index 0000000..430648e --- /dev/null +++ b/contrib/bluegnu2.0.3/Makefile.in @@ -0,0 +1,185 @@ +## @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 diff --git a/contrib/bluegnu2.0.3/README.bluegnu b/contrib/bluegnu2.0.3/README.bluegnu new file mode 100644 index 0000000..2c1e4d8 --- /dev/null +++ b/contrib/bluegnu2.0.3/README.bluegnu @@ -0,0 +1,325 @@ + + + + + + + + + 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 + + + + + + 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 + + + + + +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 + + + + + +% 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 + + + + + +% 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 + + + + + +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 '_start', '_load', '_exit', + and '_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 + \ No newline at end of file diff --git a/contrib/bluegnu2.0.3/README.dejagnu b/contrib/bluegnu2.0.3/README.dejagnu new file mode 100644 index 0000000..0e22eab --- /dev/null +++ b/contrib/bluegnu2.0.3/README.dejagnu @@ -0,0 +1,283 @@ + 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 ". Messages sent to +frost@cygnus.com go to the mailing list. \ No newline at end of file diff --git a/contrib/bluegnu2.0.3/TODO.dejagnu b/contrib/bluegnu2.0.3/TODO.dejagnu new file mode 100644 index 0000000..b22cecc --- /dev/null +++ b/contrib/bluegnu2.0.3/TODO.dejagnu @@ -0,0 +1,7 @@ + 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. diff --git a/contrib/bluegnu2.0.3/aclocal.m4 b/contrib/bluegnu2.0.3/aclocal.m4 new file mode 100644 index 0000000..3483fe5 --- /dev/null +++ b/contrib/bluegnu2.0.3/aclocal.m4 @@ -0,0 +1,605 @@ +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 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 +#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 +#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 +]) diff --git a/contrib/bluegnu2.0.3/bluegnu b/contrib/bluegnu2.0.3/bluegnu new file mode 100755 index 0000000..cbb43ea --- /dev/null +++ b/contrib/bluegnu2.0.3/bluegnu @@ -0,0 +1,136 @@ +#! /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+"$@"} diff --git a/contrib/bluegnu2.0.3/bluegnutk b/contrib/bluegnu2.0.3/bluegnutk new file mode 100755 index 0000000..e637870 --- /dev/null +++ b/contrib/bluegnu2.0.3/bluegnutk @@ -0,0 +1,5 @@ +#! /bin/ksh +# + + +exec itkwish2.2 $0.itcl $* diff --git a/contrib/bluegnu2.0.3/bluegnutk.itcl b/contrib/bluegnu2.0.3/bluegnutk.itcl new file mode 100644 index 0000000..92c1c87 --- /dev/null +++ b/contrib/bluegnu2.0.3/bluegnutk.itcl @@ -0,0 +1,216 @@ +# +# +# + +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 run +bind .options.cmd 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 [list listTransferSelected %W $wLL] +bind $wLL [list listTransferData %W] +bind $wLL [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 + diff --git a/contrib/bluegnu2.0.3/bluegnutk.rc b/contrib/bluegnu2.0.3/bluegnutk.rc new file mode 100644 index 0000000..225ac94 --- /dev/null +++ b/contrib/bluegnu2.0.3/bluegnutk.rc @@ -0,0 +1,29 @@ +! +! 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 diff --git a/contrib/bluegnu2.0.3/bluegnutkUtils.itcl b/contrib/bluegnu2.0.3/bluegnutkUtils.itcl new file mode 100644 index 0000000..0ed485e --- /dev/null +++ b/contrib/bluegnu2.0.3/bluegnutkUtils.itcl @@ -0,0 +1,436 @@ +# +# +# + +# 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" + } + } + } + } +} diff --git a/contrib/bluegnu2.0.3/config.guess b/contrib/bluegnu2.0.3/config.guess new file mode 100755 index 0000000..afd200a --- /dev/null +++ b/contrib/bluegnu2.0.3/config.guess @@ -0,0 +1,592 @@ +#! /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 . +# 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 + + 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 + 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 </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' /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 < +# include +#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 + 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 diff --git a/contrib/bluegnu2.0.3/configure b/contrib/bluegnu2.0.3/configure new file mode 100755 index 0000000..5296de2 --- /dev/null +++ b/contrib/bluegnu2.0.3/configure @@ -0,0 +1,974 @@ +#! /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 <&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 </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 < 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 <> $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 + diff --git a/contrib/bluegnu2.0.3/configure.in b/contrib/bluegnu2.0.3/configure.in new file mode 100644 index 0000000..0ebdb7b --- /dev/null +++ b/contrib/bluegnu2.0.3/configure.in @@ -0,0 +1,9 @@ +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) diff --git a/contrib/bluegnu2.0.3/contents b/contrib/bluegnu2.0.3/contents new file mode 100644 index 0000000..8adfee3 --- /dev/null +++ b/contrib/bluegnu2.0.3/contents @@ -0,0 +1,232 @@ +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 diff --git a/contrib/bluegnu2.0.3/contrib/README b/contrib/bluegnu2.0.3/contrib/README new file mode 100644 index 0000000..d776f6e --- /dev/null +++ b/contrib/bluegnu2.0.3/contrib/README @@ -0,0 +1,16 @@ +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 - + diff --git a/contrib/bluegnu2.0.3/contrib/test-g++ b/contrib/bluegnu2.0.3/contrib/test-g++ new file mode 100755 index 0000000..3b90e6a --- /dev/null +++ b/contrib/bluegnu2.0.3/contrib/test-g++ @@ -0,0 +1,84 @@ +#!/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 diff --git a/contrib/bluegnu2.0.3/contrib/test-tool b/contrib/bluegnu2.0.3/contrib/test-tool new file mode 100755 index 0000000..6b79352 --- /dev/null +++ b/contrib/bluegnu2.0.3/contrib/test-tool @@ -0,0 +1,346 @@ +#!/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 + +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 diff --git a/contrib/bluegnu2.0.3/contrib/testit b/contrib/bluegnu2.0.3/contrib/testit new file mode 100755 index 0000000..e866aa6 --- /dev/null +++ b/contrib/bluegnu2.0.3/contrib/testit @@ -0,0 +1,1149 @@ +#!/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 . {MenuPopupPost .frame0.menubutton3.m.menu4 %X %Y} + bind . {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 "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 +# + diff --git a/contrib/bluegnu2.0.3/dejagnu b/contrib/bluegnu2.0.3/dejagnu new file mode 100755 index 0000000..db944c2 --- /dev/null +++ b/contrib/bluegnu2.0.3/dejagnu @@ -0,0 +1,93 @@ +#! /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+"$@"} diff --git a/contrib/bluegnu2.0.3/doc/Makefile.in b/contrib/bluegnu2.0.3/doc/Makefile.in new file mode 100644 index 0000000..67d5f40 --- /dev/null +++ b/contrib/bluegnu2.0.3/doc/Makefile.in @@ -0,0 +1,170 @@ +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 diff --git a/contrib/bluegnu2.0.3/doc/README.tex b/contrib/bluegnu2.0.3/doc/README.tex new file mode 100644 index 0000000..30e974a --- /dev/null +++ b/contrib/bluegnu2.0.3/doc/README.tex @@ -0,0 +1,253 @@ +%% +%% + +\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 diff --git a/contrib/bluegnu2.0.3/doc/READMEdvi.dvi b/contrib/bluegnu2.0.3/doc/READMEdvi.dvi new file mode 100644 index 0000000..b324ab8 Binary files /dev/null and b/contrib/bluegnu2.0.3/doc/READMEdvi.dvi differ diff --git a/contrib/bluegnu2.0.3/doc/READMEdvi.tex b/contrib/bluegnu2.0.3/doc/READMEdvi.tex new file mode 100644 index 0000000..ee2e991 --- /dev/null +++ b/contrib/bluegnu2.0.3/doc/READMEdvi.tex @@ -0,0 +1,5 @@ +%% +%% + +\documentclass[12pt]{article} +\input{README} diff --git a/contrib/bluegnu2.0.3/doc/READMEdvi.title b/contrib/bluegnu2.0.3/doc/READMEdvi.title new file mode 100644 index 0000000..9f7f47d --- /dev/null +++ b/contrib/bluegnu2.0.3/doc/READMEdvi.title @@ -0,0 +1 @@ +BlueGnu Release Notice diff --git a/contrib/bluegnu2.0.3/doc/READMEtxt.dvi b/contrib/bluegnu2.0.3/doc/READMEtxt.dvi new file mode 100644 index 0000000..182a260 Binary files /dev/null and b/contrib/bluegnu2.0.3/doc/READMEtxt.dvi differ diff --git a/contrib/bluegnu2.0.3/doc/READMEtxt.tex b/contrib/bluegnu2.0.3/doc/READMEtxt.tex new file mode 100644 index 0000000..0c9afdb --- /dev/null +++ b/contrib/bluegnu2.0.3/doc/READMEtxt.tex @@ -0,0 +1,6 @@ +%% +%% + +\documentclass[10pt]{dvidoc} +\input{README} + diff --git a/contrib/bluegnu2.0.3/doc/configure b/contrib/bluegnu2.0.3/doc/configure new file mode 100755 index 0000000..7248143 --- /dev/null +++ b/contrib/bluegnu2.0.3/doc/configure @@ -0,0 +1,657 @@ +#! /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 </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 <> $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 + diff --git a/contrib/bluegnu2.0.3/doc/configure.in b/contrib/bluegnu2.0.3/doc/configure.in new file mode 100644 index 0000000..9ff15e8 --- /dev/null +++ b/contrib/bluegnu2.0.3/doc/configure.in @@ -0,0 +1,4 @@ +dnl Process this file with autoconf to produce a configure script. +AC_INIT(dejagnu.texi) +AC_PROG_INSTALL +AC_OUTPUT(Makefile) diff --git a/contrib/bluegnu2.0.3/doc/dejagnu.1 b/contrib/bluegnu2.0.3/doc/dejagnu.1 new file mode 100644 index 0000000..c6e29c5 --- /dev/null +++ b/contrib/bluegnu2.0.3/doc/dejagnu.1 @@ -0,0 +1,120 @@ +.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) diff --git a/contrib/bluegnu2.0.3/doc/dejagnu.dvi b/contrib/bluegnu2.0.3/doc/dejagnu.dvi new file mode 100644 index 0000000..f8e50e5 Binary files /dev/null and b/contrib/bluegnu2.0.3/doc/dejagnu.dvi differ diff --git a/contrib/bluegnu2.0.3/doc/dejagnu.info b/contrib/bluegnu2.0.3/doc/dejagnu.info new file mode 100644 index 0000000..c890e65 --- /dev/null +++ b/contrib/bluegnu2.0.3/doc/dejagnu.info @@ -0,0 +1,77 @@ +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. + + +Indirect: +dejagnu.info-1: 845 +dejagnu.info-2: 49656 +dejagnu.info-3: 98864 + +Tag Table: +(Indirect) +Node: Top845 +Node: Overview1569 +Node: What is New3526 +Node: Running Tests4893 +Node: Sample Test8001 +Node: Design Goals9824 +Node: Posix11617 +Node: Future Directions17145 +Node: Tcl and Expect17988 +Node: Invoking runtest18731 +Node: Customizing31866 +Node: Config Values34287 +Node: Master Config File40542 +Node: Local Config File44541 +Node: Personal Config File46789 +Node: Internals47575 +Node: Names49656 +Node: Init Module51171 +Node: DejaGnu Builtins55274 +Node: framework.exp56083 +Node: remote.exp65293 +Node: utils.exp69799 +Node: target.exp73522 +Node: debugger.exp76091 +Node: Target Dependent77622 +Node: Cross Targets80980 +Node: Input Files86280 +Node: Output Files87772 +Node: Summary88390 +Node: Detail90141 +Node: Debug91993 +Node: Tests95959 +Node: Writing96405 +Node: Debugging98864 +Node: Adding101241 +Node: Hints103253 +Node: Variables106051 +Node: Extending107396 +Node: Adding Tools107928 +Node: Adding Targets116563 +Node: Porting118758 +Node: Installation119227 +Node: Configuring DejaGnu119607 +Node: Installing DejaGnu121510 +Node: Index122634 + +End Tag Table diff --git a/contrib/bluegnu2.0.3/doc/dejagnu.info-1 b/contrib/bluegnu2.0.3/doc/dejagnu.info-1 new file mode 100644 index 0000000..c11c3b4 --- /dev/null +++ b/contrib/bluegnu2.0.3/doc/dejagnu.info-1 @@ -0,0 +1,1163 @@ +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. + + +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 + + +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 + + +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. + + + +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. + + +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!" ' + + +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... + + +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. + + +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. + + +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. + + +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 ). + + ---------- Footnotes ---------- + + (1) Configuration triples have the form `CPU-VENDOR-OS'. + + (2) Distributed in PostScript form with `expect' as the file +`expect/tcl-debug.ps'. + + +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. + + +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. + + +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 + } + } + + +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. + + +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. + + +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 + diff --git a/contrib/bluegnu2.0.3/doc/dejagnu.info-2 b/contrib/bluegnu2.0.3/doc/dejagnu.info-2 new file mode 100644 index 0000000..9339d94 --- /dev/null +++ b/contrib/bluegnu2.0.3/doc/dejagnu.info-2 @@ -0,0 +1,1137 @@ +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. + + +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. + + +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. + + +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. + + +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 "-". + + +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.) + + +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. + + +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. + + +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. + + +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. + + +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. + + +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. + + +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 + + +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 + + +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 + + +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 {}? 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 `{}' is a particularly interesting fail-safe + to notice; it checks for an unexpected 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. + + +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 + + +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. + diff --git a/contrib/bluegnu2.0.3/doc/dejagnu.info-3 b/contrib/bluegnu2.0.3/doc/dejagnu.info-3 new file mode 100644 index 0000000..3e91476 --- /dev/null +++ b/contrib/bluegnu2.0.3/doc/dejagnu.info-3 @@ -0,0 +1,1016 @@ +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. + + +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'. + + +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. + + +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'. + + +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. + + +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 + + +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. + + +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. + + +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. + + +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:: + + +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. + + +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'. + + +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. + + diff --git a/contrib/bluegnu2.0.3/install-sh b/contrib/bluegnu2.0.3/install-sh new file mode 100755 index 0000000..89fc9b0 --- /dev/null +++ b/contrib/bluegnu2.0.3/install-sh @@ -0,0 +1,238 @@ +#! /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 diff --git a/contrib/bluegnu2.0.3/mkinstalldirs b/contrib/bluegnu2.0.3/mkinstalldirs new file mode 100755 index 0000000..0801ec2 --- /dev/null +++ b/contrib/bluegnu2.0.3/mkinstalldirs @@ -0,0 +1,32 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# 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 diff --git a/contrib/bluegnu2.0.3/runtest b/contrib/bluegnu2.0.3/runtest new file mode 100755 index 0000000..a80d1ea --- /dev/null +++ b/contrib/bluegnu2.0.3/runtest @@ -0,0 +1,90 @@ +#!/bin/sh +# +# runtest -- basically all this script does is find the proper expect shell +# and then +# run BlueGnu. +# + +# +# 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+"$@"} diff --git a/contrib/bluegnu2.0.3/runtest.exp b/contrib/bluegnu2.0.3/runtest.exp new file mode 100755 index 0000000..b436e2d --- /dev/null +++ b/contrib/bluegnu2.0.3/runtest.exp @@ -0,0 +1,1146 @@ +# 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 diff --git a/contrib/bluegnu2.0.3/site.tmpl b/contrib/bluegnu2.0.3/site.tmpl new file mode 100644 index 0000000..9508c35 --- /dev/null +++ b/contrib/bluegnu2.0.3/site.tmpl @@ -0,0 +1,307 @@ +# +# 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 "" + } + } +} diff --git a/contrib/bluegnu2.0.3/tcl-mode.el b/contrib/bluegnu2.0.3/tcl-mode.el new file mode 100644 index 0000000..90b3503 --- /dev/null +++ b/contrib/bluegnu2.0.3/tcl-mode.el @@ -0,0 +1,2223 @@ +;; tcl.el --- Tcl code editing commands for Emacs + +;; Copyright (C) 1994 Free Software Foundation, Inc. + +;; Maintainer: Tom Tromey +;; Author: Tom Tromey +;; Chris Lindblad +;; 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" +;; (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 +;; +;; 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 +;; +;; 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 +;; 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 . 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 +;; pgs1002@esc.cam.ac.uk (Dr P.G. Sjoerdsma) +;; Mike Scheidler +;; Matt Newman +;; rwhitby@research.canon.oz.au (Rod Whitby) +;; h9118101@hkuxa.hku.hk (Yip Chi Lap [Beta]) +;; Pertti Tapio Kasanen +;; schmid@fb3-s7.math.TU-Berlin.DE (Gregor Schmid) +;; warsaw@nlm.nih.gov (Barry A. Warsaw) +;; Carl Witty +;; T. V. Raman +;; Jesper Pedersen +;; dfarmer@evolving.com (Doug Farmer) +;; "Chris Alfeld" + +;; 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. + + + +;;; 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 ") + +;; +;; 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.") + + + +;; +;; 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))) + + + +;; +;; 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)) + + + +;; +;; 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 "$\\| ") + (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)) + + + +;; 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)) + + + +(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))))))))) + + + +(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))))))))) + ) + + + +;; +;; 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))) + + + +;; +;; 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))) + + + +;; +;; 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)) + + + +;; +;; 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))))))) + + + +;; +;; 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))) + + + +;; +;; 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" +(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 . 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)) + + + +;; +;; 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)) + + + +;; +;; 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 "")) + + + +;; +;; 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)))) + + + +(provide 'tcl) + +;;; tcl.el ends here diff --git a/contrib/test-g++ b/contrib/test-g++ new file mode 100755 index 0000000..91f14c1 --- /dev/null +++ b/contrib/test-g++ @@ -0,0 +1,89 @@ +#!/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 diff --git a/contrib/test-tool b/contrib/test-tool new file mode 100755 index 0000000..32ab887 --- /dev/null +++ b/contrib/test-tool @@ -0,0 +1,378 @@ +#!/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 + +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 diff --git a/contrib/testit b/contrib/testit new file mode 100755 index 0000000..e866aa6 --- /dev/null +++ b/contrib/testit @@ -0,0 +1,1149 @@ +#!/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 . {MenuPopupPost .frame0.menubutton3.m.menu4 %X %Y} + bind . {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 "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 +# + diff --git a/i960glue.c b/i960glue.c new file mode 100644 index 0000000..0dc569d --- /dev/null +++ b/i960glue.c @@ -0,0 +1,19 @@ +#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 (); +} diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..e0421dd --- /dev/null +++ b/install-sh @@ -0,0 +1,250 @@ +#!/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 diff --git a/mkinstalldirs b/mkinstalldirs new file mode 100755 index 0000000..0801ec2 --- /dev/null +++ b/mkinstalldirs @@ -0,0 +1,32 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# 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 diff --git a/runtest b/runtest new file mode 100755 index 0000000..7c4fe7d --- /dev/null +++ b/runtest @@ -0,0 +1,122 @@ +#!/bin/sh +# +# runtest -- basically all this script does is find the proper expect +# shell and then run DejaGnu. +# +# Written by Rob Savoye +# + +# +# 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+"$@"} diff --git a/runtest.exp b/runtest.exp new file mode 100755 index 0000000..cfc2ea8 --- /dev/null +++ b/runtest.exp @@ -0,0 +1,1873 @@ +# 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; diff --git a/site.tmpl b/site.tmpl new file mode 100644 index 0000000..ab8c3b0 --- /dev/null +++ b/site.tmpl @@ -0,0 +1,48 @@ +# +# 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" + } +} diff --git a/stub-loader.c b/stub-loader.c new file mode 100644 index 0000000..d84d41b --- /dev/null +++ b/stub-loader.c @@ -0,0 +1,7 @@ +/* Bleah!! */ +int remote_debug = 0; + +main() { + set_debug_traps(); + breakpoint(); +} diff --git a/tcl-mode.el b/tcl-mode.el new file mode 100644 index 0000000..90b3503 --- /dev/null +++ b/tcl-mode.el @@ -0,0 +1,2223 @@ +;; tcl.el --- Tcl code editing commands for Emacs + +;; Copyright (C) 1994 Free Software Foundation, Inc. + +;; Maintainer: Tom Tromey +;; Author: Tom Tromey +;; Chris Lindblad +;; 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" +;; (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 +;; +;; 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 +;; +;; 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 +;; 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 . 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 +;; pgs1002@esc.cam.ac.uk (Dr P.G. Sjoerdsma) +;; Mike Scheidler +;; Matt Newman +;; rwhitby@research.canon.oz.au (Rod Whitby) +;; h9118101@hkuxa.hku.hk (Yip Chi Lap [Beta]) +;; Pertti Tapio Kasanen +;; schmid@fb3-s7.math.TU-Berlin.DE (Gregor Schmid) +;; warsaw@nlm.nih.gov (Barry A. Warsaw) +;; Carl Witty +;; T. V. Raman +;; Jesper Pedersen +;; dfarmer@evolving.com (Doug Farmer) +;; "Chris Alfeld" + +;; 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. + + + +;;; 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 ") + +;; +;; 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.") + + + +;; +;; 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))) + + + +;; +;; 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)) + + + +;; +;; 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 "$\\| ") + (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)) + + + +;; 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)) + + + +(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))))))))) + + + +(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))))))))) + ) + + + +;; +;; 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))) + + + +;; +;; 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))) + + + +;; +;; 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)) + + + +;; +;; 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))))))) + + + +;; +;; 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))) + + + +;; +;; 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" +(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 . 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)) + + + +;; +;; 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)) + + + +;; +;; 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 "")) + + + +;; +;; 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)))) + + + +(provide 'tcl) + +;;; tcl.el ends here diff --git a/testglue.c b/testglue.c new file mode 100644 index 0000000..3d2b272 --- /dev/null +++ b/testglue.c @@ -0,0 +1,147 @@ +#include +#include +#ifndef NO_UNISTD_H +#include +#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 -- cgit v1.2.3