dejagnu-1.5.3/0000775000175000017500000000000012506237416010146 500000000000000dejagnu-1.5.3/missing0000755000175000017500000001533012344212703011455 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2013 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # 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, 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, see . # 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. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: dejagnu-1.5.3/texinfo.tex0000644000175000017500000112345012320744410012257 00000000000000% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2011-02-24.09} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. % % This texinfo.tex 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 3 of the % License, or (at your option) any later version. % % This texinfo.tex file 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, see . % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. (This has been our intent since Texinfo was invented.) % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://www.gnu.org/software/texinfo/ (the Texinfo home page), or % ftp://tug.org/tex/texinfo.tex % (and all CTAN mirrors, see http://www.ctan.org). % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Since the category of space is not known, we have to be careful. \chardef\spacecat = 10 \def\spaceisspace{\catcode`\ =\spacecat} % sometimes characters are active, so we need control sequences. \chardef\ampChar = `\& \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\hashChar = `\# \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \chardef\slashChar = `\/ \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. The solution is % described on page 260 of The TeXbook. It involves outputting two % marks for the sectioning macros, one before the section break, and % one after. I won't pretend I can describe this better than DEK... \def\domark{% \toks0=\expandafter{\lastchapterdefs}% \toks2=\expandafter{\lastsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\lastcolordefs}% \mark{% \the\toks0 \the\toks2 \noexpand\or \the\toks4 \the\toks6 \noexpand\else \the\toks8 }% } % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\topmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\topmark\fi} % Avoid "undefined control sequence" errors. \def\lastchapterdefs{} \def\lastsectiondefs{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\lastcolordefs{} % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. % We don't want .vr (or whatever) entries like this: % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; % it needs to be % {\code {{\tt \backslashcurfont }acronym} \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurrence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in % Old definition--didn't work. %\parseargdef\need{\par % %% This method tries to make TeX break the page naturally %% if the depth of the box does not fit. %{\baselineskip=0pt% %\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak %\prevdepth=-1000pt %}} \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. Not documented, written for gawk manual. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). This command % is not documented, not supported, and doesn't work. % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\next\centerH \else \let\next\centerV \fi \next{\hfil \ignorespaces#1\unskip \hfil}% } \def\centerH#1{% {% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }% } \def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} % @sp n outputs n lines of vertical space \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% \restorefirstparagraphindent \indent }% \gdef\noindent{% \restorefirstparagraphindent \noindent }% \global\everypar = {% \kern -\parindent \restorefirstparagraphindent }% } \gdef\restorefirstparagraphindent{% \global \let \indent = \ptexindent \global \let \noindent = \ptexnoindent \global \everypar = {}% } % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as being undefined. \ifx\pdfoutput\thisisundefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html % (and related messages, the final outcome is that it is up to the TeX % user to double the backslashes and otherwise make the string valid, so % that's what we do). % double active backslashes. % {\catcode`\@=0 \catcode`\\=\active @gdef@activebackslashdouble{% @catcode`@\=@active @let\=@doublebackslash} } % To handle parens, we must adopt a different approach, since parens are % not active characters. hyperref.dtx (which has the same problem as % us) handles it with this amazing macro to replace tokens, with minor % changes for Texinfo. It is included here under the GPL by permission % from the author, Heiko Oberdiek. % % #1 is the tokens to replace. % #2 is the replacement. % #3 is the control sequence with the string. % \def\HyPsdSubst#1#2#3{% \def\HyPsdReplace##1#1##2\END{% ##1% \ifx\\##2\\% \else #2% \HyReturnAfterFi{% \HyPsdReplace##2\END }% \fi }% \xdef#3{\expandafter\HyPsdReplace#3#1\END}% } \long\def\HyReturnAfterFi#1\fi{\fi#1} % #1 is a control sequence in which to do the replacements. \def\backslashparens#1{% \xdef#1{#1}% redefine it as its expansion; the definition is simply % \lastnode when called from \setref -> \pdfmkdest. \HyPsdSubst{(}{\realbackslash(}{#1}% \HyPsdSubst{)}{\realbackslash)}{#1}% } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros based on pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % k sets the color for filling (usual text, etc.); % K sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .png, .jpg, .pdf (among % others). Let's try in that order. \let\pdfimgext=\empty \begingroup \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \imagewidth \fi \ifdim \wd2 >0pt height \imageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \turnoffactive \activebackslashdouble \makevalueexpandable \def\pdfdestname{#1}% \backslashparens\pdfdestname \safewhatsit{\pdfdest name{\pdfdestname} xyz}% }} % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use a color that is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. \def\urlcolor{\rgbDarkRed} \def\linkcolor{\rgbDarkRed} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \def\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else % Doubled backslashes in the name. {\activebackslashdouble \xdef\pdfoutlinedest{#3}% \backslashparens\pdfoutlinedest}% \fi % % Also double the backslashes in the display string. {\activebackslashdouble \xdef\pdfoutlinetext{#1}% \backslashparens\pdfoutlinetext}% % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Thanh's hack / proper braces in bookmarks \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace % % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % xx to do this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Right % now, I guess we'll just let the pdf reader have its way. \indexnofonts \setupdatafile \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \ifx\p\space\else\addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \fi \nextsp} \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Unfortunately, we have to override this for titles and the like, since % in those cases "rm" is bold. Sigh. \def\rmisbold{\rm\def\curfontstyle{bf}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Default leading. \newdimen\textleading \textleading = 13.2pt % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named #2, adding on the % specified font prefix (normally `cm'). % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (currently only OT1, OT1IT and OT1TT are allowed, pass % empty to omit). \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % emacs-page end of cmaps % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} %where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. This is the default in % Texinfo. % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acro in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acro in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\curfontsize{text}% \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\curfontsize{title}% \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{27pt}} \def\titlefont#1{{\titlefonts\rmisbold #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\curfontsize{chap}% \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\curfontsize{sec}% \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\curfontsize{ssec}% \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\curfontsize{reduced}% \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\curfontsize{small}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\curfontsize{smaller}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi \message{markup,} % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style and the set of \ifmarkupSTYLE switches for all styles % currently in effect. \newif\ifmarkupvar \newif\ifmarkupsamp \newif\ifmarkupkey %\newif\ifmarkupfile % @file == @samp. %\newif\ifmarkupoption % @option == @samp. \newif\ifmarkupcode \newif\ifmarkupkbd %\newif\ifmarkupenv % @env == @code. %\newif\ifmarkupcommand % @command == @code. \newif\ifmarkuptex % @tex (and part of @math, for now). \newif\ifmarkupexample \newif\ifmarkupverb \newif\ifmarkupverbatim \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \csname markup#1true\endcsname \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} \gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright % \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright % \let\markupsetuplqsamp \markupsetcodequoteleft \let\markupsetuprqsamp \markupsetcodequoteright % \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright % \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright \let\markupsetuplqkbd \markupsetnoligaturesquoteleft % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead the undirected quote from cmtt (char 0x0d). % The undirected quote is ugly, so don't make it the default, but it % works for pasting with more pdf viewers (at least evince), the % lilypond developers report. xpdf does work with the regular 0x27. % \def\codequoteright{% \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ptexslash \fi\fi\fi} % like \smartslanted except unconditionally uses \ttsl, and no ic. % @var is set to this for defun arguments. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \let\i=\smartitalic \let\slanted=\smartslanted \def\var#1{\smartslanted{#1}} \let\dfn=\smartslanted \let\emph=\smartitalic % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @t, explicit typewriter. \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. If the current font is already % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % \def\key#1{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} % ctrl is no longer a Texinfo command. \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @file, @option are the same as @samp. \let\file=\samp \let\option=\samp % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \plainfrenchspacing #1% }% \null } % We *must* turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\realdash \let_\realunder \fi \codex } } \def\codex #1{\tclose{#1}\endgroup} \def\realdash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is undesirable in % some manuals, especially if they don't have long identifiers in % general. @allowcodebreaks provides a way to control this. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% \fi\fi } % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. % (This \urefnobreak definition isn't used now, leaving it for a while % for comparison.) \def\urefnobreak#1{\dourefnobreak #1,,,\finish} \def\dourefnobreak#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % This \urefbreak definition is the active one. \def\urefbreak{\begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode\ampChar=\active \catcode\dotChar=\active \catcode\hashChar=\active \catcode\questChar=\active \catcode\slashChar=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setupmarkupstyle{code}% \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } % we put a little stretch before and after the breakable chars, to help % line breaking of long url's. The unequal skips make look better in % cmtt at least, especially for dots. \def\urefprestretch{\urefprebreak \hskip0pt plus.13em } \def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } % \def\urefcodeamp{\urefprestretch \&\urefpoststretch} \def\urefcodedot{\urefprestretch .\urefpoststretch} \def\urefcodehash{\urefprestretch \#\urefpoststretch} \def\urefcodequest{\urefprestretch ?\urefpoststretch} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprestretch \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpoststretch \fi } } % One more complication: by default we'll break after the special % characters, but some people like to break before the special chars, so % allow that. Also allow no breaking at all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}} % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct \def\xkey{\key} \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi} % For @indicateurl, @env, @command quotes seem unnecessary, so use \code. \let\indicateurl=\code \let\env=\code \let\command=\code % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } \message{glyphs,} % and logos. % @@ prints an @. \def\@{\char64 } % Used to generate quoted braces. Unless we're in typewriter, use % \ecfont because the CM text fonts do not have braces, and we don't % want to switch into math. \def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} \def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} \let\{=\mylbrace \let\}=\myrbrace \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux/toc files. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{% \ifx\textnominalsize\xwordpt % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \selectfonts\lllsize A% \fi }% \vss }}% \kern-.15em \TeX } % Some math mode symbols. \def\bullet{$\ptexbullet$} \def\geq{\ifmmode \ge\else $\ge$\fi} \def\leq{\ifmmode \le\else $\le$\fi} \def\minus{\ifmmode -\else $-$\fi} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the ec* fonts (cm-super in outline format) for non-CM glyphs. \def\ecfont{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{% \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } %%% Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \leftline{\titlefonts\rmisbold #1} % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rmisbold \leftline{#1}}% \fi } %%% Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\thisisundefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil\relax \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group % of an alignment entry. \everycr resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we again encounter the problem the 1sp was intended to solve. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi %% Test to see if parskip is larger than space between lines of %% table. If not, do nothing. %% If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\- = \active \catcode`\_ = \active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\realdash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get special treatment of `@end ifset,' call \makeond and the redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \relax % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % % Need these unexpandable (because we define \tt as a dummy) % definitions when @{ or @} appear in index entry text. Also, more % complicated, when \tex is in effect and \{ is a \delimiter again. % We can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. Perhaps we % should define @lbrace and @rbrace commands a la @comma. \def\{{{\tt\char123}}% \def\}{{\tt\char125}}% % % I don't entirely understand this, but when an index entry is % generated from a macro call, the \endinput which \scanmacro inserts % causes processing to be prematurely terminated. This is, % apparently, because \indexsorttmp is fully expanded, and \endinput % is an expandable command. The redefinition below makes \endinput % disappear altogether for that purpose -- although logging shows that % processing continues to some further point. On the other hand, it % seems \endinput does not hurt in the printed index arg, since that % is still getting written without apparent harm. % % Sample source (mac-idx3.tex, reported by Graham Percival to % help-texinfo, 22may06): % @macro funindex {WORD} % @findex xyz % @end macro % ... % @funindex commtest % % The above is not enough to reproduce the bug, but it gives the flavor. % % Sample whatsit resulting: % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} % % So: \let\endinput = \empty % % Do the redefinitions. \commondummies } % For the aux and toc files, @ is the escape character. So we want to % redefine everything using @ as the escape character (instead of % \realbackslash, still used for index files). When everything uses @, % this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % Do the redefinitions. \commondummies \otherbackslash } % Called from \indexdummies and \atdummies. % \def\commondummies{% % % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword ##1{\def##1{\string##1\space}}% \def\definedummyletter##1{\def##1{\string##1}}% \let\definedummyaccent\definedummyletter % \commondummiesnofonts % \definedummyletter\_% \definedummyletter\-% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\arrow \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\leq \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\result \definedummyword\textdegree % % We want to disable all macros so that they are not expanded by \write. \macrolist % \normalturnoffactive % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % \def\commondummiesnofonts{% % Control letters and accents. \definedummyletter\!% \definedummyaccent\"% \definedummyaccent\'% \definedummyletter\*% \definedummyaccent\,% \definedummyletter\.% \definedummyletter\/% \definedummyletter\:% \definedummyaccent\=% \definedummyletter\?% \definedummyaccent\^% \definedummyaccent\`% \definedummyaccent\~% \definedummyword\u \definedummyword\v \definedummyword\H \definedummyword\dotaccent \definedummyword\ogonek \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sansserif \definedummyword\sc \definedummyword\slanted \definedummyword\t % % Commands that take arguments. \definedummyword\acronym \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\dmn \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\indicateurl \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\pxref \definedummyword\ref \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w \definedummyword\xref } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\definedummyletter##1{\let##1\empty}% % All control words become @asis by default; overrides below. \let\definedummyword\definedummyaccent % \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % % Unfortunately, texindex is not prepared to handle braces in the % content at all. So for index sorting, we map @{ and @} to strings % starting with |, since that ASCII character is between ASCII { and }. \def\{{|a}% \def\}{|b}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{ZZZ}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{zzz}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\arrow{->}% \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\geq{>=}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% \def\leq{<=}% \def\minus{-}% \def\point{.}% \def\pounds{pounds}% \def\print{-|}% \def\quotedblbase{"}% \def\quotedblleft{"}% \def\quotedblright{"}% \def\quoteleft{`}% \def\quoteright{'}% \def\quotesinglbase{,}% \def\registeredsymbol{R}% \def\result{=>}% \def\textdegree{o}% % \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax \else \indexlquoteignore \fi % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist } % Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us % ignore left quotes in the sort term. {\catcode`\`=\active \gdef\indexlquoteignore{\let`=\empty}} \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \safewhatsit\dosubindwrite }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{% \ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi } % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \nobreak \vskip 0pt plus 3\baselineskip \penalty 0 \vskip 0pt plus -3\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip }} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this freezes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \setbox\boxA = \hbox{#1}% \ifdim\wd\boxA = 0pt \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like plain.tex's \dotfill, except uses up at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \pageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \outer\parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rmisbold #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page \chapoddpage \endgroup } % \unnumberedno is an oxymoron. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unnlevel \chardef\unnlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. % \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading % NOTE on use of \vbox for chapter headings, section headings, and such: % 1) We use \vbox rather than the earlier \line to permit % overlong headings to fold. % 2) \hyphenpenalty is set to 10000 because hyphenation in a % heading is obnoxious; this forbids it. % 3) Likewise, headings look best if no \parindent is used, and % if justification is not attempted. Hence \raggedright. \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\ptexraggedright \rmisbold #1\hfill}}% \bigskip \par\penalty 200\relax \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. %%% Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} %%% Define plain chapter starts, and page on/off switching for it % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \fi } \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \domark % {% \chapfonts \rmisbold % % Have to define \lastsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\lastsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\ptexraggedright \rmisbold #1\hfill}}\bigskip \par\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \checkenv{}% should not be in an environment. % % Switch to the right set of fonts. \csname #2fonts\endcsname \rmisbold % \def\sectionlevel{#2}% \def\temptype{#3}% % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\lastsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevsectiondefs=\lastsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\lastsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \lastsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\lastsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\lastsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) \vskip-\parskip % % This is purely so the last item on the list is a known \penalty > % 10000. This is so \startdefun can avoid allowing breakpoints after % section headings. Otherwise, it would insert a valid breakpoint between: % % @section sec-whatever % @deffn def-whatever \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\partentry = \shortpartentry \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}} % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw TeX temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain @ character. \envdef\tex{% \setupmarkupstyle{tex}% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode`\`=\other \catcode`\'=\other \escapechar=`\\ % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing = t% \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of \def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#1#2{% \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \advance\rightskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setupmarkupstyle{verb}% \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion. \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. The \global is in case the verbatim line starts with an accent, % or some other command that starts with a begin-group. Otherwise, the % entire \verbbox would disappear at the corresponding end-group, before % it is typeset. Meanwhile, we can't have nested verbatim commands % (can we?), so the \global won't be overwriting itself. \newbox\verbbox \def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim % The \leavevmode here is for blank lines. Otherwise, we would % never \starttabox and the \egroup would end verbatim mode. \def\par{\leavevmode\egroup\box\verbbox\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a minor refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } %%% Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } %%% Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } %%% Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } %%% Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } %%% Type: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % How we'll format the type name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % (plain.tex says that \dimen1 should be used only as global.) \parshape 2 0in \dimen0 \defargsindent \dimen2 % % Put the type name to the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% return value type \ifx\temp\empty\else \tclose{\temp} \fi #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. Let's try @var for that. \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\thisisundefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \def\scanmacro#1{\begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % % Undo catcode changes of \startcontents and \doprintindex % When called from @insertcopying or (short)caption, we need active % backslash to get it printed correctly. Previously, we had % \catcode`\\=\other instead. We'll see whether a problem appears % with macro expansion. --kasal, 19aug04 \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ % % ... and for \example: \spaceisspace % % The \empty here causes a following catcode 5 newline to be eaten % as part of reading whitespace after a control sequence. It does % not eat a catcode 13 newline. There's no good way to handle the % two cases. See the Macro Details node in the manual for the % workaround we currently have to recommend for macros and % line-oriented commands. \scantokens{#1\empty}% \endgroup} \def\scanexp#1{% \edef\temp{\noexpand\scanmacro{#1}}% \temp } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \definedummyword\macro1\definedummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\definedummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. % \def\scanctxt{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\@=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi } \def\scanargctxt{% used for copying and captions, not macros. \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% used when scanning invocations \scanctxt \catcode`\\=0 } % why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes" % for the single characters \ { }. Thus, we end up with the "commands" % that would be written @\ @{ @} in a Texinfo document. % % We already have @{ and @}. For @\, we define it here, and only for % this purpose, to produce a typewriter backslash (so, the @\ that we % define for @math can't be used with @macro calls): % \def\\{\normalbackslash}% % % We would like to do this for \, too, since that is what makeinfo does. % But it is not possible, because Texinfo already has a command @, for a % cedilla accent. Documents must use @comma{} instead. % % \anythingelse will almost certainly be an error of some kind. % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. % {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\margbackslash#1{\char`\#1 } \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0 \else \expandafter\parsemargdef \argl;% \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\definedummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\definedummyword \noexpand#1% \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname#1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.blah for each blah % in the params list to be ##N where N is the position in that list. % That gets used by \mbodybackslash (above). % % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax \let\xeatspaces\relax \parsemargdefxxx#1,;,% } \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) % \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% % This defines the macro itself. There are six cases: recursive and % nonrecursive macros of zero, one, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. % \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \fi \fi} \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg). % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. % \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{% \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \lastsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \atdummies % preserve commands, but don't expand them \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\lastsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\fi } % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces \def\printedmanual{\ignorespaces #5}% \def\printedrefname{\ignorespaces #3}% \setbox1=\hbox{\printedmanual\unskip}% \setbox0=\hbox{\printedrefname\unskip}% \ifdim \wd0 = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Use the node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Use the actual chapter/section title appear inside % the square brackets. Use the real section title if we have it. \ifdim \wd1 > 0pt % It is in another manual, so we don't have it. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf {\indexnofonts \turnoffactive % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. \getfilename{#4}% % % See comments at \activebackslashdouble. {\activebackslashdouble \xdef\pdfxrefdest{#1}% \backslashparens\pdfxrefdest}% % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfxrefdest}% \else goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \setcolor{\linkcolor}% \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd0 = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % if the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd1 > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not % insert empty discretionaries after hyphens, which means that it will % not find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, this % is a loss. Therefore, we give the text of the node name again, so it % is as if TeX is seeing it for the first time. \ifdim \wd1 > 0pt \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% \else % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via a macro so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi \fi \endlink \endgroup} % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% {% The node name might contain 8-bit characters, which in our current % implementation are changed to commands like @'e. Don't let these % mess up the control sequence name. \indexnofonts \turnoffactive \xdef\safexrefname{#1}% }% % \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count1=128 \def\loop{% \catcode\count1=\other \advance\count1 by 1 \ifnum \count1<256 \loop \fi }% }% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut \futurelet\next\fo@t } }%end \catcode `\@=11 % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisiundefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names % If the image is by itself, center it. \ifvmode \imagevmodetrue \nobreak\medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. On the other hand, if % it's at the top level, we don't want the normal paragraph indentation. \noindent % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \medskip \fi % space after the standalone image \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \lastsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\lastsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \atdummies % % since we read the caption text in the macro world, where ^^M % is turned into a normal character, we have to scan it back, so % we don't write the literal three characters "^^M" into the aux file. \scanexp{% \xdef\noexpand\gtemp{% \ifx\thisshortcaption\empty \thiscaption \else \thisshortcaption \fi }% }% \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % % place the captured inserts % % BEWARE: when the floats start floating, we have to issue warning % whenever an insert appears inside a float which could possibly % float. --kasal, 26may04 % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \lastsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{\begingroup \let_=\normalunderscore % normal _ character for filenames \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore{#1_\finish}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX \endgroup} % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \parseargdef\documentencoding{% % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \setnonasciicharscatcode\active \utfeightchardefs % \else \message{Unknown document encoding #1, ignoring.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii } % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdef^^a0{~} \gdef^^a1{\exclamdown} \gdef^^a2{\missingcharmsg{CENT SIGN}} \gdef^^a3{{\pounds}} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\missingcharmsg{YEN SIGN}} \gdef^^a6{\missingcharmsg{BROKEN BAR}} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\copyright} \gdef^^aa{\ordf} \gdef^^ab{\guillemetleft} \gdef^^ac{$\lnot$} \gdef^^ad{\-} \gdef^^ae{\registeredsymbol} \gdef^^af{\={}} % \gdef^^b0{\textdegree} \gdef^^b1{$\pm$} \gdef^^b2{$^2$} \gdef^^b3{$^3$} \gdef^^b4{\'{}} \gdef^^b5{$\mu$} \gdef^^b6{\P} % \gdef^^b7{$^.$} \gdef^^b8{\cedilla\ } \gdef^^b9{$^1$} \gdef^^ba{\ordm} % \gdef^^bb{\guillemetright} \gdef^^bc{$1\over4$} \gdef^^bd{$1\over2$} \gdef^^be{$3\over4$} \gdef^^bf{\questiondown} % \gdef^^c0{\`A} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\~A} \gdef^^c4{\"A} \gdef^^c5{\ringaccent A} \gdef^^c6{\AE} \gdef^^c7{\cedilla C} \gdef^^c8{\`E} \gdef^^c9{\'E} \gdef^^ca{\^E} \gdef^^cb{\"E} \gdef^^cc{\`I} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\"I} % \gdef^^d0{\DH} \gdef^^d1{\~N} \gdef^^d2{\`O} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\~O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\O} \gdef^^d9{\`U} \gdef^^da{\'U} \gdef^^db{\^U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\TH} \gdef^^df{\ss} % \gdef^^e0{\`a} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\~a} \gdef^^e4{\"a} \gdef^^e5{\ringaccent a} \gdef^^e6{\ae} \gdef^^e7{\cedilla c} \gdef^^e8{\`e} \gdef^^e9{\'e} \gdef^^ea{\^e} \gdef^^eb{\"e} \gdef^^ec{\`{\dotless i}} \gdef^^ed{\'{\dotless i}} \gdef^^ee{\^{\dotless i}} \gdef^^ef{\"{\dotless i}} % \gdef^^f0{\dh} \gdef^^f1{\~n} \gdef^^f2{\`o} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\~o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\o} \gdef^^f9{\`u} \gdef^^fa{\'u} \gdef^^fb{\^u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\th} \gdef^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdef^^a4{\euro} \gdef^^a6{\v S} \gdef^^a8{\v s} \gdef^^b4{\v Z} \gdef^^b8{\v z} \gdef^^bc{\OE} \gdef^^bd{\oe} \gdef^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdef^^a0{~} \gdef^^a1{\ogonek{A}} \gdef^^a2{\u{}} \gdef^^a3{\L} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\v L} \gdef^^a6{\'S} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\v S} \gdef^^aa{\cedilla S} \gdef^^ab{\v T} \gdef^^ac{\'Z} \gdef^^ad{\-} \gdef^^ae{\v Z} \gdef^^af{\dotaccent Z} % \gdef^^b0{\textdegree} \gdef^^b1{\ogonek{a}} \gdef^^b2{\ogonek{ }} \gdef^^b3{\l} \gdef^^b4{\'{}} \gdef^^b5{\v l} \gdef^^b6{\'s} \gdef^^b7{\v{}} \gdef^^b8{\cedilla\ } \gdef^^b9{\v s} \gdef^^ba{\cedilla s} \gdef^^bb{\v t} \gdef^^bc{\'z} \gdef^^bd{\H{}} \gdef^^be{\v z} \gdef^^bf{\dotaccent z} % \gdef^^c0{\'R} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\u A} \gdef^^c4{\"A} \gdef^^c5{\'L} \gdef^^c6{\'C} \gdef^^c7{\cedilla C} \gdef^^c8{\v C} \gdef^^c9{\'E} \gdef^^ca{\ogonek{E}} \gdef^^cb{\"E} \gdef^^cc{\v E} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\v D} % \gdef^^d0{\DH} \gdef^^d1{\'N} \gdef^^d2{\v N} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\H O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\v R} \gdef^^d9{\ringaccent U} \gdef^^da{\'U} \gdef^^db{\H U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\cedilla T} \gdef^^df{\ss} % \gdef^^e0{\'r} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\u a} \gdef^^e4{\"a} \gdef^^e5{\'l} \gdef^^e6{\'c} \gdef^^e7{\cedilla c} \gdef^^e8{\v c} \gdef^^e9{\'e} \gdef^^ea{\ogonek{e}} \gdef^^eb{\"e} \gdef^^ec{\v e} \gdef^^ed{\'{\dotless{i}}} \gdef^^ee{\^{\dotless{i}}} \gdef^^ef{\v d} % \gdef^^f0{\dh} \gdef^^f1{\'n} \gdef^^f2{\v n} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\H o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\v r} \gdef^^f9{\ringaccent u} \gdef^^fa{\'u} \gdef^^fb{\H u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\cedilla t} \gdef^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } \begingroup \catcode`\~13 \catcode`\"12 \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiTwoOctets\string~}} \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiThreeOctets\string~}} \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiFourOctets\string~}} \UTFviiiLoop \endgroup \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacter#1#2{% \countUTFz = "#1\relax %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% \begingroup \parseXMLCharref \def\UTFviiiTwoOctets##1##2{% \csname u8:##1\string ##2\endcsname}% \def\UTFviiiThreeOctets##1##2##3{% \csname u8:##1\string ##2\string ##3\endcsname}% \def\UTFviiiFourOctets##1##2##3##4{% \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter \gdef\UTFviiiTmp{#2}% \endgroup} \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctets.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% \fi\fi\fi } \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz \multiply\countUTFz by 64 \advance\countUTFx by -\countUTFz \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup \def\utfeightchardefs{% \DeclareUnicodeCharacter{00A0}{\tie} \DeclareUnicodeCharacter{00A1}{\exclamdown} \DeclareUnicodeCharacter{00A3}{\pounds} \DeclareUnicodeCharacter{00A8}{\"{ }} \DeclareUnicodeCharacter{00A9}{\copyright} \DeclareUnicodeCharacter{00AA}{\ordf} \DeclareUnicodeCharacter{00AB}{\guillemetleft} \DeclareUnicodeCharacter{00AD}{\-} \DeclareUnicodeCharacter{00AE}{\registeredsymbol} \DeclareUnicodeCharacter{00AF}{\={ }} \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} \DeclareUnicodeCharacter{00B4}{\'{ }} \DeclareUnicodeCharacter{00B8}{\cedilla{ }} \DeclareUnicodeCharacter{00BA}{\ordm} \DeclareUnicodeCharacter{00BB}{\guillemetright} \DeclareUnicodeCharacter{00BF}{\questiondown} \DeclareUnicodeCharacter{00C0}{\`A} \DeclareUnicodeCharacter{00C1}{\'A} \DeclareUnicodeCharacter{00C2}{\^A} \DeclareUnicodeCharacter{00C3}{\~A} \DeclareUnicodeCharacter{00C4}{\"A} \DeclareUnicodeCharacter{00C5}{\AA} \DeclareUnicodeCharacter{00C6}{\AE} \DeclareUnicodeCharacter{00C7}{\cedilla{C}} \DeclareUnicodeCharacter{00C8}{\`E} \DeclareUnicodeCharacter{00C9}{\'E} \DeclareUnicodeCharacter{00CA}{\^E} \DeclareUnicodeCharacter{00CB}{\"E} \DeclareUnicodeCharacter{00CC}{\`I} \DeclareUnicodeCharacter{00CD}{\'I} \DeclareUnicodeCharacter{00CE}{\^I} \DeclareUnicodeCharacter{00CF}{\"I} \DeclareUnicodeCharacter{00D0}{\DH} \DeclareUnicodeCharacter{00D1}{\~N} \DeclareUnicodeCharacter{00D2}{\`O} \DeclareUnicodeCharacter{00D3}{\'O} \DeclareUnicodeCharacter{00D4}{\^O} \DeclareUnicodeCharacter{00D5}{\~O} \DeclareUnicodeCharacter{00D6}{\"O} \DeclareUnicodeCharacter{00D8}{\O} \DeclareUnicodeCharacter{00D9}{\`U} \DeclareUnicodeCharacter{00DA}{\'U} \DeclareUnicodeCharacter{00DB}{\^U} \DeclareUnicodeCharacter{00DC}{\"U} \DeclareUnicodeCharacter{00DD}{\'Y} \DeclareUnicodeCharacter{00DE}{\TH} \DeclareUnicodeCharacter{00DF}{\ss} \DeclareUnicodeCharacter{00E0}{\`a} \DeclareUnicodeCharacter{00E1}{\'a} \DeclareUnicodeCharacter{00E2}{\^a} \DeclareUnicodeCharacter{00E3}{\~a} \DeclareUnicodeCharacter{00E4}{\"a} \DeclareUnicodeCharacter{00E5}{\aa} \DeclareUnicodeCharacter{00E6}{\ae} \DeclareUnicodeCharacter{00E7}{\cedilla{c}} \DeclareUnicodeCharacter{00E8}{\`e} \DeclareUnicodeCharacter{00E9}{\'e} \DeclareUnicodeCharacter{00EA}{\^e} \DeclareUnicodeCharacter{00EB}{\"e} \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} \DeclareUnicodeCharacter{00F0}{\dh} \DeclareUnicodeCharacter{00F1}{\~n} \DeclareUnicodeCharacter{00F2}{\`o} \DeclareUnicodeCharacter{00F3}{\'o} \DeclareUnicodeCharacter{00F4}{\^o} \DeclareUnicodeCharacter{00F5}{\~o} \DeclareUnicodeCharacter{00F6}{\"o} \DeclareUnicodeCharacter{00F8}{\o} \DeclareUnicodeCharacter{00F9}{\`u} \DeclareUnicodeCharacter{00FA}{\'u} \DeclareUnicodeCharacter{00FB}{\^u} \DeclareUnicodeCharacter{00FC}{\"u} \DeclareUnicodeCharacter{00FD}{\'y} \DeclareUnicodeCharacter{00FE}{\th} \DeclareUnicodeCharacter{00FF}{\"y} \DeclareUnicodeCharacter{0100}{\=A} \DeclareUnicodeCharacter{0101}{\=a} \DeclareUnicodeCharacter{0102}{\u{A}} \DeclareUnicodeCharacter{0103}{\u{a}} \DeclareUnicodeCharacter{0104}{\ogonek{A}} \DeclareUnicodeCharacter{0105}{\ogonek{a}} \DeclareUnicodeCharacter{0106}{\'C} \DeclareUnicodeCharacter{0107}{\'c} \DeclareUnicodeCharacter{0108}{\^C} \DeclareUnicodeCharacter{0109}{\^c} \DeclareUnicodeCharacter{0118}{\ogonek{E}} \DeclareUnicodeCharacter{0119}{\ogonek{e}} \DeclareUnicodeCharacter{010A}{\dotaccent{C}} \DeclareUnicodeCharacter{010B}{\dotaccent{c}} \DeclareUnicodeCharacter{010C}{\v{C}} \DeclareUnicodeCharacter{010D}{\v{c}} \DeclareUnicodeCharacter{010E}{\v{D}} \DeclareUnicodeCharacter{0112}{\=E} \DeclareUnicodeCharacter{0113}{\=e} \DeclareUnicodeCharacter{0114}{\u{E}} \DeclareUnicodeCharacter{0115}{\u{e}} \DeclareUnicodeCharacter{0116}{\dotaccent{E}} \DeclareUnicodeCharacter{0117}{\dotaccent{e}} \DeclareUnicodeCharacter{011A}{\v{E}} \DeclareUnicodeCharacter{011B}{\v{e}} \DeclareUnicodeCharacter{011C}{\^G} \DeclareUnicodeCharacter{011D}{\^g} \DeclareUnicodeCharacter{011E}{\u{G}} \DeclareUnicodeCharacter{011F}{\u{g}} \DeclareUnicodeCharacter{0120}{\dotaccent{G}} \DeclareUnicodeCharacter{0121}{\dotaccent{g}} \DeclareUnicodeCharacter{0124}{\^H} \DeclareUnicodeCharacter{0125}{\^h} \DeclareUnicodeCharacter{0128}{\~I} \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} \DeclareUnicodeCharacter{012A}{\=I} \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} \DeclareUnicodeCharacter{012C}{\u{I}} \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} \DeclareUnicodeCharacter{0130}{\dotaccent{I}} \DeclareUnicodeCharacter{0131}{\dotless{i}} \DeclareUnicodeCharacter{0132}{IJ} \DeclareUnicodeCharacter{0133}{ij} \DeclareUnicodeCharacter{0134}{\^J} \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} \DeclareUnicodeCharacter{0139}{\'L} \DeclareUnicodeCharacter{013A}{\'l} \DeclareUnicodeCharacter{0141}{\L} \DeclareUnicodeCharacter{0142}{\l} \DeclareUnicodeCharacter{0143}{\'N} \DeclareUnicodeCharacter{0144}{\'n} \DeclareUnicodeCharacter{0147}{\v{N}} \DeclareUnicodeCharacter{0148}{\v{n}} \DeclareUnicodeCharacter{014C}{\=O} \DeclareUnicodeCharacter{014D}{\=o} \DeclareUnicodeCharacter{014E}{\u{O}} \DeclareUnicodeCharacter{014F}{\u{o}} \DeclareUnicodeCharacter{0150}{\H{O}} \DeclareUnicodeCharacter{0151}{\H{o}} \DeclareUnicodeCharacter{0152}{\OE} \DeclareUnicodeCharacter{0153}{\oe} \DeclareUnicodeCharacter{0154}{\'R} \DeclareUnicodeCharacter{0155}{\'r} \DeclareUnicodeCharacter{0158}{\v{R}} \DeclareUnicodeCharacter{0159}{\v{r}} \DeclareUnicodeCharacter{015A}{\'S} \DeclareUnicodeCharacter{015B}{\'s} \DeclareUnicodeCharacter{015C}{\^S} \DeclareUnicodeCharacter{015D}{\^s} \DeclareUnicodeCharacter{015E}{\cedilla{S}} \DeclareUnicodeCharacter{015F}{\cedilla{s}} \DeclareUnicodeCharacter{0160}{\v{S}} \DeclareUnicodeCharacter{0161}{\v{s}} \DeclareUnicodeCharacter{0162}{\cedilla{t}} \DeclareUnicodeCharacter{0163}{\cedilla{T}} \DeclareUnicodeCharacter{0164}{\v{T}} \DeclareUnicodeCharacter{0168}{\~U} \DeclareUnicodeCharacter{0169}{\~u} \DeclareUnicodeCharacter{016A}{\=U} \DeclareUnicodeCharacter{016B}{\=u} \DeclareUnicodeCharacter{016C}{\u{U}} \DeclareUnicodeCharacter{016D}{\u{u}} \DeclareUnicodeCharacter{016E}{\ringaccent{U}} \DeclareUnicodeCharacter{016F}{\ringaccent{u}} \DeclareUnicodeCharacter{0170}{\H{U}} \DeclareUnicodeCharacter{0171}{\H{u}} \DeclareUnicodeCharacter{0174}{\^W} \DeclareUnicodeCharacter{0175}{\^w} \DeclareUnicodeCharacter{0176}{\^Y} \DeclareUnicodeCharacter{0177}{\^y} \DeclareUnicodeCharacter{0178}{\"Y} \DeclareUnicodeCharacter{0179}{\'Z} \DeclareUnicodeCharacter{017A}{\'z} \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} \DeclareUnicodeCharacter{017C}{\dotaccent{z}} \DeclareUnicodeCharacter{017D}{\v{Z}} \DeclareUnicodeCharacter{017E}{\v{z}} \DeclareUnicodeCharacter{01C4}{D\v{Z}} \DeclareUnicodeCharacter{01C5}{D\v{z}} \DeclareUnicodeCharacter{01C6}{d\v{z}} \DeclareUnicodeCharacter{01C7}{LJ} \DeclareUnicodeCharacter{01C8}{Lj} \DeclareUnicodeCharacter{01C9}{lj} \DeclareUnicodeCharacter{01CA}{NJ} \DeclareUnicodeCharacter{01CB}{Nj} \DeclareUnicodeCharacter{01CC}{nj} \DeclareUnicodeCharacter{01CD}{\v{A}} \DeclareUnicodeCharacter{01CE}{\v{a}} \DeclareUnicodeCharacter{01CF}{\v{I}} \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} \DeclareUnicodeCharacter{01D1}{\v{O}} \DeclareUnicodeCharacter{01D2}{\v{o}} \DeclareUnicodeCharacter{01D3}{\v{U}} \DeclareUnicodeCharacter{01D4}{\v{u}} \DeclareUnicodeCharacter{01E2}{\={\AE}} \DeclareUnicodeCharacter{01E3}{\={\ae}} \DeclareUnicodeCharacter{01E6}{\v{G}} \DeclareUnicodeCharacter{01E7}{\v{g}} \DeclareUnicodeCharacter{01E8}{\v{K}} \DeclareUnicodeCharacter{01E9}{\v{k}} \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} \DeclareUnicodeCharacter{01F1}{DZ} \DeclareUnicodeCharacter{01F2}{Dz} \DeclareUnicodeCharacter{01F3}{dz} \DeclareUnicodeCharacter{01F4}{\'G} \DeclareUnicodeCharacter{01F5}{\'g} \DeclareUnicodeCharacter{01F8}{\`N} \DeclareUnicodeCharacter{01F9}{\`n} \DeclareUnicodeCharacter{01FC}{\'{\AE}} \DeclareUnicodeCharacter{01FD}{\'{\ae}} \DeclareUnicodeCharacter{01FE}{\'{\O}} \DeclareUnicodeCharacter{01FF}{\'{\o}} \DeclareUnicodeCharacter{021E}{\v{H}} \DeclareUnicodeCharacter{021F}{\v{h}} \DeclareUnicodeCharacter{0226}{\dotaccent{A}} \DeclareUnicodeCharacter{0227}{\dotaccent{a}} \DeclareUnicodeCharacter{0228}{\cedilla{E}} \DeclareUnicodeCharacter{0229}{\cedilla{e}} \DeclareUnicodeCharacter{022E}{\dotaccent{O}} \DeclareUnicodeCharacter{022F}{\dotaccent{o}} \DeclareUnicodeCharacter{0232}{\=Y} \DeclareUnicodeCharacter{0233}{\=y} \DeclareUnicodeCharacter{0237}{\dotless{j}} \DeclareUnicodeCharacter{02DB}{\ogonek{ }} \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} \DeclareUnicodeCharacter{1E20}{\=G} \DeclareUnicodeCharacter{1E21}{\=g} \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} \DeclareUnicodeCharacter{1E26}{\"H} \DeclareUnicodeCharacter{1E27}{\"h} \DeclareUnicodeCharacter{1E30}{\'K} \DeclareUnicodeCharacter{1E31}{\'k} \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} \DeclareUnicodeCharacter{1E3E}{\'M} \DeclareUnicodeCharacter{1E3F}{\'m} \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} \DeclareUnicodeCharacter{1E54}{\'P} \DeclareUnicodeCharacter{1E55}{\'p} \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} \DeclareUnicodeCharacter{1E7C}{\~V} \DeclareUnicodeCharacter{1E7D}{\~v} \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} \DeclareUnicodeCharacter{1E80}{\`W} \DeclareUnicodeCharacter{1E81}{\`w} \DeclareUnicodeCharacter{1E82}{\'W} \DeclareUnicodeCharacter{1E83}{\'w} \DeclareUnicodeCharacter{1E84}{\"W} \DeclareUnicodeCharacter{1E85}{\"w} \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} \DeclareUnicodeCharacter{1E8C}{\"X} \DeclareUnicodeCharacter{1E8D}{\"x} \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} \DeclareUnicodeCharacter{1E90}{\^Z} \DeclareUnicodeCharacter{1E91}{\^z} \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} \DeclareUnicodeCharacter{1E97}{\"t} \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} \DeclareUnicodeCharacter{1EBC}{\~E} \DeclareUnicodeCharacter{1EBD}{\~e} \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} \DeclareUnicodeCharacter{1EF2}{\`Y} \DeclareUnicodeCharacter{1EF3}{\`y} \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} \DeclareUnicodeCharacter{1EF8}{\~Y} \DeclareUnicodeCharacter{1EF9}{\~y} \DeclareUnicodeCharacter{2013}{--} \DeclareUnicodeCharacter{2014}{---} \DeclareUnicodeCharacter{2018}{\quoteleft} \DeclareUnicodeCharacter{2019}{\quoteright} \DeclareUnicodeCharacter{201A}{\quotesinglbase} \DeclareUnicodeCharacter{201C}{\quotedblleft} \DeclareUnicodeCharacter{201D}{\quotedblright} \DeclareUnicodeCharacter{201E}{\quotedblbase} \DeclareUnicodeCharacter{2022}{\bullet} \DeclareUnicodeCharacter{2026}{\dots} \DeclareUnicodeCharacter{2039}{\guilsinglleft} \DeclareUnicodeCharacter{203A}{\guilsinglright} \DeclareUnicodeCharacter{20AC}{\euro} \DeclareUnicodeCharacter{2192}{\expansion} \DeclareUnicodeCharacter{21D2}{\result} \DeclareUnicodeCharacter{2212}{\minus} \DeclareUnicodeCharacter{2217}{\point} \DeclareUnicodeCharacter{2261}{\equiv} }% end of \utfeightchardefs % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Make non-ASCII characters printable again for compatibility with % existing Texinfo documents that may use them, even without declaring a % document encoding. % \setnonasciicharscatcode \other \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \let\realunder=_ % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % In texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active @def@normalbackslash{{@tt@backslashcurfont}} % On startup, @fixbackslash assigns: % @let \ = @normalbackslash % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. % @def@normalturnoffactive{% @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let\=@normalbackslash @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\' in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore dejagnu-1.5.3/aclocal.m40000664000175000017500000012510012506237376011732 00000000000000# generated automatically by aclocal 1.14.1 -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # This file 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. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2013 Free Software Foundation, Inc. # # This file 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. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.14' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.14.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.14.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file 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. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file 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. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file 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. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file 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. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file 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 macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file 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. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2013 Free Software Foundation, Inc. # # This file 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. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file 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. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file 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. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file 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. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file 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. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file 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. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file 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. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file 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. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # 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 ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $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 if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2013 Free Software Foundation, Inc. # # This file 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. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file 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. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2013 Free Software Foundation, Inc. # # This file 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. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2013 Free Software Foundation, Inc. # # This file 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. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR dejagnu-1.5.3/doc/0000775000175000017500000000000012506237416010713 500000000000000dejagnu-1.5.3/doc/user.xml0000644000175000017500000035443612417172022012340 00000000000000 Getting &dj; up and running This chapter was originally written by Niklaus Giger (ngiger@mus.ch) because he lost a week to figure out how &dj; works and how to write a first test. Follow these instructions as closely a possible in order get a good insight into how &dj; works, else you might run into a lot of subtle problems. You have been warned. It should be no big problems installing &dj; using your package manager or from the source code. On the Debian GNU/Linux system just run (as root): apt-get install dejagnu These examples were run on a primary machine with a AMD K6 and a Mac PowerBook G3 serving as a remote target. The tests for Windows were run under Windows using the actual Cygwin version (1.3.x as of October 2001). Its target system was a PPC embedded system running vxWorks. Test your installation Create a new user called "dgt" (&dj;Test), which uses bash as it login shell. PS1 must be set to '\u:\w\$ ' in its ~/.bashrc. Login as this user, create an empty directory and change the working directory to it. e.g dgt:~$ mkdir ~/dejagnu.test dgt:~$ cd ~/dejagnu.test Now you are ready to test &dj;'s main program called runtest. The expected output is shown Runtest output in a empty directory dgt:~/dejagnu.test$ runtest WARNING: Couldn't find the global config file. WARNING: No tool specified Test Run By dgt on Sun Nov 25 17:07:03 2001 Native configuration is i586-pc-linux-gnu === tests === Schedule of variations: unix Running target unix Using /usr/share/dejagnu/baseboards/unix.exp as board description file for target. Using /usr/share/dejagnu/config/unix.exp as generic interface file for target. ERROR: Couldn't find tool config file for unix. === Summary === We will show you later how to get rid of all the WARNING- and ERROR-messages. The files testrun.sum and testrun.log have been created, which do not interest us at this point. Let's remove them. :~/dejagnu.test$ rm testrun.sum testrun.log Windows On Windows systems &dj; is part of a port of a lot of Unix tools to the Windows OS, called Cygwin. Cygwin may be downloaded and installed from a mirror of http://www.cygwin.com/. All examples were also run on Windows. If nothing is said, you can assume that you should get the same output as on a Unix system. You will need a telnet daemon if you want to use a Windows box as a remote target. There seems to be a freeware telnet daemon at http://www.fictional.net/. Getting the source code for the calc example If you are running a Debian distribution you can find the examples under /usr/share/doc/dejagnu/examples. These examples seem to be missing in Red Hat's RPM. In this case download the sources of &dj; and adjust the paths to the &dj; examples accordingly. Create a minimal project, e.g. calc In this section you will to start a small project, using the sample application calc, which is part of your &dj; distribution A simple project without the GNU autotools The runtest program can be run stand-alone. All the autoconf/automake support is just cause those programs are commonly used for other GNU applications. The key to running runtest stand-alone is having the local site.exp file setup correctly, which automake does. The generated site.exp should like like: set tool calc set srcdir . set objdir /home/dgt/dejagnu.test Using autoconf/autoheader/automake We have to prepare some input file in order to run autoconf and automake. There is book "GNU autoconf, automake and libtool" by Garry V. Vaughan, et al. NewRider, ISBN 1-57870-190-2 which describes this process thoroughly. From the calc example distributed with the &dj; documentation you should copy the program file itself (calc.c) and some additional files, which you might examine a little bit close to derive their meanings. dgt:~/dejagnu.test$ cp -r /usr/share/doc/dejagnu/examples/calc/\ {configure.in,Makefile.am,calc.c,testsuite} . In Makefile.am note the presence of the AUTOMAKE_OPTIONS = dejagnu. This option is needed. Run aclocal to generate aclocal.m4, which is a collection of macros needed by configure.in dgt:~/dejagnu.test$ aclocal autoconf is another part of the auto-tools. Run it to generate configure based on information contained in configure.in. dgt:~/dejagnu.test$ autoconf autoheader is another part of the auto-tools. Run it to generate calc.h.in. dgt:~/dejagnu.test$ autoheader The Makefile.am of this example was developed as port of the &dj; distribution. Adapt Makefile.am for this test. Replace the line "#noinst_PROGRAMS = calc" to "bin_PROGRAMS = calc". Change the RUNTESTDEFAULTFLAGS from "$$srcdir/testsuite" to "./testsuite". Running automake at this point contains a series of warning in its output as shown in the following example: Sample output of automake with missing files dgt:~/dejagnu.test$ automake --add-missing automake: configure.in: installing `./install-sh' automake: configure.in: installing `./mkinstalldirs' automake: configure.in: installing `./missing' automake: Makefile.am: installing `./INSTALL' automake: Makefile.am: required file `./NEWS' not found automake: Makefile.am: required file `./README' not found automake: Makefile.am: installing `./COPYING' automake: Makefile.am: required file `./AUTHORS' not found automake: Makefile.am: required file `./ChangeLog' not found configure.in: 4: required file `./calc.h.in' not found Makefile.am:6: required directory ./doc does not exist Create a empty directory doc and empty files INSTALL, NEWS, README, AUTHORS, ChangeLog and COPYING. The default COPYING will point to the GNU Public License (GPL). In a real project it would be time to add some meaningful text in each file. Adapt calc to your environment by calling configure. Sample output of configure dgt:~/dejagnu.test$ ./configure creating cache ./config.cache checking whether to enable maintainer-specific portions of Makefiles... no checking for a BSD compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking whether make sets ${MAKE}... yes checking for working aclocal... found checking for working autoconf... found checking for working automake... found checking for working autoheader... found checking for working makeinfo... found checking for gcc... gcc checking whether the C compiler (gcc ) works... yes checking whether the C compiler (gcc ) is a cross-compiler... no checking whether we are using GNU C... yes checking whether gcc accepts -g... yes checking for a BSD compatible install... /usr/bin/install -c checking how to run the C preprocessor... gcc -E checking for stdlib.h... yes checking for strcmp... yes updating cache ./config.cache creating ./config.status creating Makefile creating calc.h If you are familiar with GNU software, this output should not contain any surprise to you. Any errors should be easy to fix for such a simple program. Build the calc executable: Sample output building calc dgt:~/dejagnu.test$ make gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c calc.c gcc -g -O2 -o calc calc.o You prepared a few files and then called some commands. Respecting the right order assures a automatic and correctly compiled calc program. The following example resumes the correct order. Creating the calc program using the GNU autotools dgt:~/dejagnu.test$ aclocal dgt:~/dejagnu.test$ autoconf dgt:~/dejagnu.test$ autoheader dgt:~/dejagnu.test$ automake --add-missing dgt:~/dejagnu.test$ ./configure dgt:~/dejagnu.test$ make Play with calc and verify whether it works correctly. A sample session might look like this: dgt:~/dejagnu.test$ ./calc calc: version Version: 1.1 calc: add 3 4 7 calc: multiply 3 4 12 calc: multiply 2 4 12 calc: quit Look at the intentional bug that 2 times 4 equals 12. The tests run by &dj; need a file called site.exp, which is automatically generated if we call "make site.exp". This was the purpose of the "AUTOMAKE_OPTIONS = dejagnu" in Makefile.am. Sample output generating a site.exp dgt: make site.exp dgt:~/dejagnu.test$ make site.exp Making a new site.exp file... Our first automated tests Running the test for the calc example Now we are ready to call the automated tests Sample output of runtest in a configured directory dgt:~/dejagnu.test$ make check make check-DEJAGNU make[1]: Entering directory `/home/dgt/dejagnu.test' srcdir=`cd . && pwd`; export srcdir; \ EXPECT=expect; export EXPECT; \ runtest=runtest; \ if /bin/sh -c "$runtest --version" > /dev/null 2>&1; then \ $runtest --tool calc CALC=`pwd`/calc --srcdir ./testsuite ; \ else echo "WARNING: could not find \`runtest'" 1>&2; :;\ fi WARNING: Couldn't find the global config file. WARNING: Couldn't find tool init file Test Run By dgt on Sun Nov 25 21:42:21 2001 Native configuration is i586-pc-linux-gnu === calc tests === Schedule of variations: unix Running target unix Using /usr/share/dejagnu/baseboards/unix.exp as board description file for target. Using /usr/share/dejagnu/config/unix.exp as generic interface file for target. Using ./testsuite/config/unix.exp as tool-and-target-specific interface file. Running ./testsuite/calc.test/calc.exp ... FAIL: multiply2 (bad match) === calc Summary === # of expected passes 5 # of unexpected failures 1 /home/Dgt/dejagnu.test/calc version Version: 1.1 make[1]: *** [check-DEJAGNU] Fehler 1 make[1]: Leaving directory `/home/Dgt/dejagnu.test' make: *** [check-am] Fehler 2 Did you see the line "FAIL:"? The test cases for calc catch the bug in the calc.c file. Fix the error in calc.c later as the following examples assume a unchanged calc.c. Examine the output files calc.sum and calc.log. Try to understand the test cases written in ~/dejagnu.test/testsuite/calc.test/calc.exp. To understand Expect you might take a look at the book "Exploring Expect", which is an excellent resource for learning and using Expect. (Pub: O'Reilly, ISBN 1-56592-090-2) The book contains hundreds of examples and also includes a tutorial on Tcl. Exploring Expect is 602 pages long. The various config files or how to avoid warnings &dj; may be customized by each user. It first searches for a file called ~/.dejagnurc. Create the file ~/.dejagnurc and insert the following line: puts "I am ~/.dejagnurc" Rerun make check. Test whether the output contains "I am ~/.dejagnurc". Create ~/my_dejagnu.exp and insert the following line: puts "I am ~/my_dejagnu.exp" In a Bash-Shell enter dgt:~/dejagnu.test$ export DEJAGNU=~/my_dejagnu.exp Run "make check" again. The output should not contain "WARNING: Couldn't find the global config file.". Create the sub-directory lib. Create the file "calc.exp" in it and insert the following line: puts "I am lib/calc.exp" The last warning "WARNING: Couldn't find tool init file" should not be part of the output of make check. Create the directory ~/boards. Create the file ~/boards/standard.exp and insert the following line: puts "I am boards/standard.exp" If the variable DEJAGNU is still not empty then the (abbreviated) output of "make check" should look like this: Sample output of runtest with the usual configuration files dgt:~/dejagnu.test$ make check <...> fi I am ~/.dejagnurc I am ~/my_dejagnu.exp I am lib/calc.exp Test Run By dgt on Sun Nov 25 22:19:14 2001 Native configuration is i586-pc-linux-gnu === calc tests === Using /home/Dgt/boards/standard.exp as standard board description\ file for build. I am ~/boards/standard.exp Using /home/Dgt/boards/standard.exp as standard board description\ file for host. I am ~/boards/standard.exp Schedule of variations: unix Running target unix Using /home/Dgt/boards/standard.exp as standard board description\ file for target. I am ~/boards/standard.exp Using /usr/share/dejagnu/baseboards/unix.exp as board description file\ for target. <...> It is up to you to decide when and where to use any of the above mentioned config files for customizing. This chapters showed you where and in which order the different config files are run. When trouble strikes Calling runtest with the '-v'-flag shows you in even more details which files are searched in which order. Passing it several times gives more and more details. Displaying details about runtest execution runtest -v -v -v --tool calc CALC=`pwd`/calc --srcdir ./testsuite Calling runtest with the '--debug'-flag logs a lot of details to dbg.log where you can analyse it afterwards. In all test cases you can temporary adjust the verbosity of information by adding the following Tcl command to any Tcl file that gets loaded by dejagnu, for instance, ~/.dejagnurc: set verbose 9 Testing "Hello world" locally This test checks whether the shell command echo Hello world will really output "Hello world" to the console. Create the file ~/dejagnu.test/testsuite/calc.test/local_echo.exp. It should contain the following lines: A first (local) test case set test "Local Hello World" spawn echo Hello World expect { "Hello World" { pass $test } default { fail $test } } Run runtest again and verify the output "calc.log" A first remote test Testing remote targets is a lot trickier especially if you are using an embedded target which has no built in support for things like a compiler, FTP server or a Bash-shell. Before you can test calc on a remote target you have to acquire a few basics skills. Setup telnet to your own host The easiest remote host is usually the host you are working on. In this example we will use telnet to login in your own workstation. For security reasons you should never have a telnet daemon running on machine connected on the Internet, as password and user names are transmitted in clear text. We assume you know how to setup your machine for a telnet daemon. Next try whether you may login in your own host by issuing the command "telnet localhost.1". In order to be able to distinguish between a normal session and a telnet login add the following lines to /home/dgt/.bashrc. if [ "$REMOTEHOST" ] then PS1='remote:\w\$ ' fi Now on the machine a "remote" login looks like this: Sample log of a telnet login to localhost dgt:~/dejagnu.test$ telnet localhost Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. Debian GNU/Linux testing/unstable Linux K6Linux login: dgt Password: Last login: Sun Nov 25 22:46:34 2001 from localhost on pts/4 Linux K6Linux 2.4.14 #1 Fre Nov 16 19:28:25 CET 2001 i586 unknown No mail. remote:~$ exit logout Connection closed by foreign host. A test case for login via telnet In order to define a correct setup we have add a line containing "set target unix" either to ~/.dejagnurc or to ~/my_dejagnu.exp. In ~/boards/standard.exp add the following four lines to define a few patterns for the &dj; telnet login procedure. Defining a remote target board set_board_info shell_prompt "remote:" set_board_info telnet_username "dgt" set_board_info telnet_password "top_secret" set_board_info hostname "localhost" As &dj; will be parsing the telnet session output for some well known pattern the output there are a lot of things that can go wrong. If you have any problems verify your setup: Is /etc/motd empty? Is /etc/issue.net empty? Exists a empty ~/.hushlogin? The LANG environment variable must be either empty or set to "C". To test the login via telnet write a sample test case. Create the file ~/dejagnu.test/testsuite/calc.test/remote_echo.exp and add the following few lines: &dj; script for logging in into a remote target puts "this is remote_echo.exp target for $target " target_info $target #set verbose 9 set shell_id [remote_open $target] set test "Remote login to $target" #set verbose 0 puts "Spawn id for remote shell is $shell_id" if { $shell_id > 0 } { pass "$test" } else { fail "Remote open to $target" } In the runtest output you should find something like: Running ./testsuite/calc.test/local_echo.exp ... Running ./testsuite/calc.test/remote_echo.exp ... this is remote_echo.exp target is unix Spawn id for remote shell is exp7 Have again a look at calc.log to get a feeling how &dj; and expect parse the input. Remote testing "Hello world" Next you will transform the above "hello world" example to its remote equivalent. This can be done by adding the following lines to our file remote_echo.exp. A first (local) remote "Hello world" test set test "Remote_send Hello World" set status [remote_send $target "echo \"Hello\" \"World\"\n" ] pass "$test" set test "Remote_expect Hello World" remote_expect $target 5 { -re "Hello World" { pass "$test" } } Call make check. The output should contain "# of expected passes 9" and "# of unexpected failures 1". Have a look at the procedures in /usr/share/dejagnu/remote.exp to have an overview of the offered procedures and their features. Now setup a real target. In the following example we assume as target a PowerBook running Debian. As above add a test user "dgt", install Telnet and FTP servers. In order to distinguish it from the host add the line PS1='test:>' to /home/dgt/.bash_profile. Also add a corresponding entry "powerbook" to /etc/hosts and verify that you are able to ping, telnet and ftp to the target "powerbook". In order to let runtest run its test on the "powerbook" target change the following lines in ~/boards/standard.exp: Board definition for a remote target set_board_info protocol "telnet" set_board_info telnet_username "dgt" set_board_info telnet_password "top_secret" set_board_info shell_prompt "test:> " set_board_info hostname "powerbook" Now call runtest again with the same arguments and verify whether all went okay by taking a close look at calc.log. Transferring files from/to the target A simple procedure like this will do the job for you: Test script to transfer a file to a remote target set test "Remote_download" puts "Running Remote_download" # set verbose 9 set remfile /home/dgt/dejagnu2 set status [remote_download $target /home/dgt/.dejagnurc $remfile] if { "$status" == "" } { fail "Remote download to $remfile on $target" } else { pass "$test" } puts "status of remote_download ist $status" # set verbose 0 After running runtest again, check whether the file dejagnu2 exists on the target. This example will only work if the rcp command works with your target. If you have a working FTP-server on the target you can use it by adding the following lines to ~/boards/standard.exp: Defining a board to use FTP as file transport set_board_info file_transfer "ftp" set_board_info ftp_username "dgt" set_board_info ftp_password "1234" Preparing for crosscompilation For crosscompiling you need working binutils, gcc and a base library like libc or glib for your target. It is beyond the scope of this document to describe how to get it working. The following examples assume a cross compiler for PowerPC which is called linux-powerpc-gcc. Add AC_CANONICAL_TARGET in dejagnu.test/configure.in at the following location. Copy config.guess from /usr/share/automake to dejagnu.test. AM_CONFIG_HEADER(calc.h) AC_CANONICAL_TARGET([]) AM_INIT_AUTOMAKE(calc, 1.1) You need to run automake 2.5 or later. Depending on your installation calling autoconf2.5 instead of autoconf is not needed. The sequence to regenerate all files is: Using autotools for cross development $ autoconf2.5 $ autoheader $ automake $ ./configure --host=powerpc-linux --target=powerpc-linux configure: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used. checking build system type... ./config.guess: ./config.guess: No such file or directory configure: error: cannot guess build type; you must specify one $ cp /usr/share/automake/config.guess . $ ./configure --host=powerpc-linux --target=powerpc-linux configure: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used. \ checking build system type... i586-pc-linux-gnu checking host system type... powerpc-unknown-linux-gnu <...> checking whether we are cross compiling... yes <...> Configuration: Source code location: . C Compiler: powerpc-linux-gcc C Compiler flags: -g -O2 Everything should be ready to recompile for the target: $ make powerpc-linux-gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c calc.c powerpc-linux-gcc -g -O2 -o calc calc.o Remote testing of calc Not yet written, as I have problem getting libc6-dev-powerpc to work. Probably I first have to build my cross compiler. Using Windows as host and vxWorks as target A more thorough walk-through will be written in a few weeks. In order to test the vxWorks as a target I changed boards/standards.exp to reflect my settings (IP, username, password). Then I reconfigured vxWorks to include a FTP and telnet server (using the same username/password combination ad in boards/standard.exp). With this setup and some minor modification (e.g. replacing echo by printf) in my test cases I could test my vxWorks system. It sure does not seem to be a correct setup by &dj; standard. For instance, it still loading /usr/share/dejagnu/baseboards/unix.exp instead of vxWorks. In any case I found that (at least under Windows) I did not find out how the command line would let me override settings in my personal config files. Running Tests There are two ways to execute a testsuite. The most common way is when there is existing support in the Makefile. This support consists of a check target. The other way is to execute the runtest program directly. To run runtest directly from the command line requires either all the correct options, or the must be setup correctly. Make check To run tests from an existing collection, first use configure as usual to set up the build directory. Then try typing: 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. The most common file the check builds is the site.exp. The site.exp file contains various variables that &dj; used to determine the configuration of the program being tested. This is mostly for supporting remote testing. The check target is supported by GNU Automake. To have &dj; support added to your generated Makefile.in, just add the keyword dejagnu to the AUTOMAKE_OPTIONS variable in your Makefile.am file. Once you have run make check to build any auxiliary files, you can invoke the test driver runtest directly to repeat the tests. You will also have to execute runtest directly for test collections with no check target in the Makefile. Runtest runtest is the executable test driver for &dj;. 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. Output States runtest flags the outcome of each test as one of these cases. 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 testsuite 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 testsuites 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. Invoking Runtest This is the full set of command line options that runtest recognizes. Arguments may be abbreviated to the shortest unique string. (-a) 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 to see output for tests with status PASS (success, as expected) XFAIL (failure, as expected), or WARNING (minor error in the test case itself). string is a full configuration ``triple'' name as used by configure. This is the type of machine &dj; 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 separate. 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 &dj; procedures that compare the host string with particular values. The procedures ishost, istarget, isnative, and setupxfail} are affected by . 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 is also specified, then refers to the machine that the tests will be run on, not the machine &dj; is run on. The host board to use. Use this option to override the default setting (running native tests). string is a full configuration ``triple'' name of the form cpu-vendor-os as used by configure. This option changes the configuration runtest uses for the default tool names, and other setup information. (-de) 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 -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 also goes into dbg.log. (-he) Prints out a short summary of the runtest options, then exits (even if you also specify other options). The names of specific tests to ignore. 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. 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 &dj; debug log dbg.log always appears (when requested) in the local directory. 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. 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 ). For instance, with gdb}, runtest uses tests in subdirectories gdb.* (with the usual shell-like filename expansion). If you do not use , runtest looks for test directories under the current working directory. 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 . Connect to a target testing environment as specified by type, if the target is not the computer running runtest. For example, use to change the program used to connect to a ``bare board'' boot monitor. The choices for type in the &dj; 1.4 distribution are rlogin, telnet, rsh, tip, kermit, and mondfe. The default for this option depends on the configuration 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. 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.) The list of target boards to run tests on. Specifies which testsuite to run, and what initialization module to use. 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 and you can override them by specifying Tcl variables on the command line. For example, including " 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. The path to the tool executable to test. A list of additional options to pass to the tool. (-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. (-V) Prints out the version numbers of &dj;, expect and Tcl, and exits without running any tests. Start the internal Tcl debugger. The Tcl debugger supports breakpoints, single stepping, and other common debugging activities. See the document "Debugger for Tcl Applications" by Don Libes. (Distributed in PostScript form with expect as the file expect/tcl-debug.ps.. If you specify -D1, the expect shell stops at a breakpoint as soon as &dj; invokes it. If you specify -D0, &dj; starts as usual, but you can enter the debugger by sending an interrupt (e.g. by typing Cc). testfile.exp[=arg(s)] 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 &dj; Makefile; their values are captured in the site.exp file. Common Options Typically, you don't need must to use any command-line options. used is only required when there are more than one testsuite in the same directory. The default options are in the local site.exp file, created by "make site.exp". For example, if the directory gdb/testsuite contains a collection of &dj; 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 to point to some other directory containing a collection of tests: eg$ runtest--srcdir /devo/gdb/testsuite 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 option. For more verbose output about processes being run, communication, and so on, use . To see even more output, use multiple options. 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 gdb, look for output files gdb.sum and gdb.log.) The files &dj; produces. &dj; 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 to request an output file showing details of what Expect is doing internally. Summary File &dj; 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 .) If any of your tests use the procedures unresolved, unsupported, or runtested, the summary output also tabulates the corresponding outcomes. For example, after runtest --tool binutils, look for a summary log in binutils.sum. Normally, &dj; writes this file in your current working directory; use the 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 Log File &dj; 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, &dj; writes this file in your current working directory; use the option to select a different directory. Here is a brief example showing a detailed log for <productname>G++</productname> 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/latest/bin/g++ version cygnus-2.0.1 Debug Log File With the 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 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 <productname>GDB</productname> test: send: sent {break gdbme.c:34\n} to spawn id 6 expect: does {} (spawn_id 6) match pattern {Breakpoint.*at.* file gdbme.c, line 34.*\(gdb\) $}? no {.*\(gdb\) $}? no expect: does {} (spawn_id 0) match pattern {return} ? no {\(y or n\) }? no {buffer_full}? no {virtual}? no {memory}? no {exhausted}? no {Undefined}? no {command}? no break gdbme.c:34 Breakpoint 8 at 0x23d8: file gdbme.c, line 34. (gdb) expect: does {break gdbme.c:34\r\nBreakpoint 8 at 0x23d8: file gdbme.c, line 34.\r\n(gdb) } (spawn_id 6) match pattern {Breakpoint.*at.* file gdbme.c, line 34.*\(gdb\) $}? yes expect: set expect_out(0,start) {18} expect: set expect_out(0,end) {71} expect: set expect_out(0,string) {Breakpoint 8 at 0x23d8: file gdbme.c, line 34.\r\n(gdb) } epect: 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 &dj; that might be surprising at first glance: Empty output for the first attempted match. The first set of attempted matches shown ran against the output {} --- that is, no output. Expect begins attempting to match the patterns supplied immediately; often, the first pass is against incomplete output (or completely before all output, as in this case). Interspersed tool output. The beginning of the log entry for the second attempted match may be hard to spot: this is because the prompt {(gdb) } appears on the same line, just before the expect: that marks the beginning of the log entry. Fail-safe patterns. Many of the patterns tested are fail-safe patterns provided by GDB testing utilities, to reduce possible indeterminacy. It is useful to anticipate potential variations caused by extreme system conditions (GDB might issue the message virtual memory exhausted in rare circumstances), or by changes in the tested program (Undefined command is the likeliest outcome if the name of a tested command changes). The pattern {return} is a particularly interesting fail-safe to notice; it checks for an unexpected RET prompt. This may happen, for example, if the tested tool can filter output through a pager. These fail-safe patterns (like the debugging log itself) are primarily useful while developing test scripts. Use the error procedure to make the actions for fail-safe patterns produce messages starting with ERROR on standard output, and in the detailed log file. Customizing &dj; The site configuration file, site.exp, captures configuration-dependent values and propagates them to the &dj; test environment using Tcl variables. This ties the &dj; test scripts into the configure and make programs. If this file is setup correctly, it is possible to execute a testsuite merely by typing runtest. &dj; supports two site.exp files. The multiple instances of site.exp are loaded in a fixed order built into &dj;. The first file loaded is the local file site.exp, and then the optional global site.exp file as pointed to by the DEJAGNU environment variable. There is an optional master site.exp, capturing configuration values that apply to &dj; across the board, in each configuration-specific subdirectory of the &dj; library directory. runtest loads these values first. The master site.exp contains the default values for all targets and hosts supported by &dj;. This master file is identified by setting the environment variable DEJAGNU to the name of the file. This is also referred to as the ``global'' config file. Any directory containing a configured testsuite also has a local 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 global site.exp file. You can usually generate or update the testsuite's local site.exp by typing make site.exp in the testsuite directory, after the test suite is configured. 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 the all_flag so all the output gets printed, or your own verbosity levels. This file is usually restricted to setting command line options. 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. 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 global site.exp in the installed &dj; library. This file is mostly for supplying tool specific info that is required by the testsuite. All local site.exp 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 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 &dj;) 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 dependent, i.e., 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. Here's an example local site.exp file, as used for GCC/G++ testing. Local Config File ## these variables are automatically generated by make ## # Do not edit here. If you wish to override these values # add them to the last section set rootme "/build/devo-builds/i586-pc-linux-gnulibc1/gcc" set host_triplet i586-pc-linux-gnulibc1 set build_triplet i586-pc-linux-gnulibc1 set target_triplet i586-pc-linux-gnulibc1 set target_alias i586-pc-linux-gnulibc1 set CFLAGS "" set CXXFLAGS "-isystem /build/devo-builds/i586-pc-linux-gnulibc1/gcc/../libio -isystem $srcdir/../libg++/src -isystem $srcdir/../libio -isystem $srcdir/../libstdc++ -isystem $srcdir/../libstdc++/stl -L/build/devo-builds/i586-pc-linux-gnulibc1/gcc/../libg++ -L/build/devo-builds/i586-pc-linux-gnulibc1/gcc/../libstdc++" append LDFLAGS " -L/build/devo-builds/i586-pc-linux-gnulibc1/gcc/../ld" set tmpdir /build/devo-builds/i586-pc-linux-gnulibc1/gcc/testsuite set srcdir "${srcdir}/testsuite" ## All variables above are generated by configure. Do Not Edit ## This file defines the required fields for a local config file, namely the three config triplets, and the srcdir. It also defines several other Tcl variables that are used exclusively by the GCC testsuite. For most test cases, the CXXFLAGS and LDFLAGS are supplied by &dj; itself for cross testing, but to test a compiler, GCC needs to manipulate these itself. Global Config File The master config file is where all the target specific config variables 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 dependent. 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 Config file # Make sure we look in the right place for the board description files. if ![info exists boards_dir] { set boards_dir {} } lappend boards_dir "/nfs/cygint/s1/cygnus/dejagnu/boards" verbose "Global Config File: target_triplet is $target_triplet" 2 global target_list case "$target_triplet" in { { "native" } { set target_list "unix" } { "sparc64-*elf" } { set target_list "sparc64-sim" } { "mips-*elf" } { set target_list "mips-sim wilma barney" } { "mips-lsi-elf" } { set target_list "mips-lsi-sim{,soft-float,el}" } { "sh-*hms" } { set target_list { "sh-hms-sim" "bloozy" } } } In this case, we have support for several cross compilers, that all run on this host. For testing on operating systems that don't support Expect, &dj; can be run on the local build machine, and it can connect to the remote host and run all the tests for this cross compiler on that host. All the remote OS requires is a working Telnet server. As you can see, all one does is set the variable target_list to the list of targets and options to test. The simple settings, like for sparc64-elf only require setting the name of the single board config file. The mips-elf target is more complicated. Here it sets the list to three target boards. One is the default mips target, and both wilma barney are symbolic names for other mips boards. Symbolic names are covered in the chapter. The more complicated example is the one for mips-lsi-elf. This one runs the tests with multiple iterations using all possible combinations of the and the (little endian) option. Needless to say, this last feature is mostly compiler specific. Board Config File The board config file is where board specific config data is stored. A board config file contains all the higher-level configuration settings. There is a rough inheritance scheme, where it is possible to base a new board description file on an existing one. There are also collections of custom procedures for common environments. For more information on adding a new board config file, go to the chapter. An example board config file for a GNU simulator is as follows. set_board_info is a procedure that sets the field name to the specified value. The procedures in square brackets [] are helper procedures. These are used to find parts of a tool chain required to build an executable image that may reside in various locations. This is mostly of use for when the startup code, the standard C libraries, or the tool chain itself is part of your build tree. Board Config File # 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 There are five helper procedures used in this example. The first one, find gcc looks for a copy of the GNU compiler in your build tree, or it uses the one in your path. This will also return the proper transformed name for a cross compiler if you whole build tree is configured for one. The next helper procedures are libgloss_include_flags & libgloss_link_flags. These return the proper flags to compiler and link an executable image using , the GNU BSP (Board Support Package). The final procedures are newlib_include_flag & newlib_include_flag. These find the Newlib C library, which is a reentrant standard C library for embedded systems comprising of non GPL'd code. Remote Host Testing Thanks to DJ Delorie for the original paper that this section is based on. &dj; also supports running the tests on a remote host. To set this up, the remote host needs an FTP server, and a telnet server. Currently foreign operating systems used as remote hosts are VxWorks, VRTX, DOS/Windows 3.1, MacOS and Windows. The recommended source for a Windows-based FTP server is to get IIS (either IIS 1 or Personal Web Server) from http://www.microsoft.com. When you install it, make sure you install the FTP server - it's not selected by default. Go into the IIS manager and change the FTP server so that it does not allow anonymous FTP. Set the home directory to the root directory (i.e. c:\) of a suitable drive. Allow writing via FTP. It will create an account like IUSR_FOOBAR where foobar is the name of your machine. Go into the user editor and give that account a password that you don't mind hanging around in the clear (i.e. not the same as your admin or personal passwords). Also, add it to all the various permission groups. You'll also need a telnet server. For Windows, go to the Ataman web site, pick up the Ataman Remote Logon Services for Windows, and install it. You can get started on the eval period anyway. Add IUSR_FOOBAR to the list of allowed users, set the HOME directory to be the same as the FTP default directory. Change the Mode prompt to simple. Ok, now you need to pick a directory name to do all the testing in. For the sake of this example, we'll call it piggy (i.e. c:\piggy). Create this directory. You'll need a unix machine. Create a directory for the scripts you'll need. For this example, we'll use /usr/local/swamp/testing. You'll need to have a source tree somewhere, say /usr/src/devo. Now, copy some files from releng's area in SV to your machine: Remote host setup cd /usr/local/swamp/testing mkdir boards scp darkstar.welcomehome.org:/dejagnu/cst/bin/MkTestDir . scp darkstar.welcomehome.org:/dejagnu/site.exp . scp darkstar.welcomehome.org:/dejagnu/boards/useless98r2.exp boards/foobar.exp export DEJAGNU=/usr/local/swamp/testing/site.exp You must edit the boards/foobar.exp file to reflect your machine; change the hostname (foobar.com), username (iusr_foobar), password, and ftp_directory (c:/piggy) to match what you selected. Edit the global site.exp to reflect your boards directory: Add The Board Directory lappend boards_dir "/usr/local/swamp/testing/boards" Now run MkTestDir, which is in the contrib directory. The first parameter is the toolchain prefix, the second is the location of your devo tree. If you are testing a cross compiler (ex: you have sh-hms-gcc.exe in your PATH on the PC), do something like this: Setup Cross Remote Testing ./MkTestDir sh-hms /usr/dejagnu/src/devo If you are testing a native PC compiler (ex: you have gcc.exe in your PATH on the PC), do this: Setup Native Remote Testing ./MkTestDir '' /usr/dejagnu/src/devo To test the setup, ftp to your PC using the username (iusr_foobar) and password you selected. CD to the test directory. Upload a file to the PC. Now telnet to your PC using the same username and password. CD to the test directory. Make sure the file is there. Type "set" and/or "gcc -v" (or sh-hms-gcc -v) and make sure the default PATH contains the installation you want to test. Run Test Remotely cd /usr/local/swamp/testing make -k -w check RUNTESTFLAGS="--host_board foobar --target_board foobar -v -v" > check.out 2>&1 To run a specific test, use a command like this (for this example, you'd run this from the gcc directory that MkTestDir created): Run a Test Remotely make check RUNTESTFLAGS="--host_board sloth --target_board sloth -v compile.exp=921202-1.c" Note: if you are testing a cross-compiler, put in the correct target board. You'll also have to download more .exp files and modify them for your local configuration. The -v's are optional. Config File Values &dj; 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. Command Line Option Variables In the user editable second section of the you can not only override the configuration variables captured in the first section, but also specify default values for all on the runtest command line options. Save for , , and , 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. , for explanations of the command-line options. Tcl Variables For Command Line Options runtest option Tcl 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. --mail address Email the output log to the specified address.
Personal Config File The personal config file is used to customize runtest's behaviour for each person. It is typically used to set the user preferred setting for verbosity, and any experimental Tcl procedures. My personal ~/.dejagnurc file looks like: Personal Config File set all_flag 1 set RLOGIN /usr/ucb/rlogin set RSH /usr/local/sbin/ssh Here I set all_flag so I see all the test cases that PASS along with the ones that FAIL. I also set RLOGIN 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 version rather than the default that's in my path. I also set RSH to the SSH secure shell, as rsh is mostly used to test unix machines within a local network here.
Extending &dj; Adding A New Testsuite The testsuite for a new tool should always be located in that tools source directory. &dj; require the directory be named testsuite. Under this directory, the test cases go in a subdirectory whose name begins with the tool name. For example, for a tool named flubber, each subdirectory containing testsuites must start with "flubber.". Adding 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 testsuites. Unfortunately, well-established testsuites have a way of developing their own conventions: as test writers become more experienced with &dj; and with Tcl, they accumulate more utilities, and take advantage of more and more features of Expect and Tcl in general. Inspecting such established testsuites may make the prospect of creating an entirely new testsuite appear overwhelming. Nevertheless, it is quite straightforward to get a new testsuite going. There is one testsuite 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 &dj;. The example/ directory of the &dj; distribution contains both an interactive tool called calc, and a testsuite for it. Reading this testsuite, and experimenting with it, is a good way to supplement the information in this section. (Thanks to Robert Lupton for creating calc and its testsuite---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 testsuite for a program example. Create or select a directory to contain your new collection of tests. Change into that directory (shown here as testsuite): Create a configure.in file in this directory, to control configuration-dependent choices for your tests. So far as &dj; 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 GNU Autoconf. Create Makefile.in (if you are using Autoconf), or Makefile.am(if you are using Automake), the source file used by configure to build your Makefile. If you are using GNU Automake.just add the keyword dejagnu to the AUTOMAKE_OPTIONS variable in your Makefile.am file. This will add all the Makefile support needed to run &dj;, and support the target. You also need to include two targets important to &dj;: check, to run the tests, and site.exp, to set up the Tcl copies of configuration-dependent values. This is called the The check target must run the runtest program to execute the tests. The site.exp target should usually set up (among other things) the $tool variable for the name of your program. If the local site.exp file is setup correctly, it is possible to execute the tests by merely typing runtest on the command line. Sample Makefile.in Fragment # Look for a local version of &dj;, otherwise use one in the path RUNTEST = `if test -f $(top_srcdir)/../dejagnu/runtest; then \ echo $(top_srcdir) ../dejagnu/runtest; \ else \ echo runtest; \ fi` # The flags to pass to runtest RUNTESTFLAGS = # Execute the tests check: site.exp all $(RUNTEST) $(RUNTESTFLAGS) \ --tool ${example} --srcdir $(srcdir) # Make the local config file 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? Create a directory (in testsuite) called config. Make a Tool Init File in this directory. Its name must start with the target_abbrev value, or be named default.exp so call it config/unix.exp for our Unix based example. This is the file that contains the target-dependent procedures. Fortunately, on Unix, most of them do not have to do very much in order for runtest to run. If the program being tested is not interactive, you can get away with this minimal unix.exp to begin with: Simple Batch Program Tool Init File proc foo_exit {} {} proc foo_version {} {} If the program being tested is interactive, however, you might as well define a start routine and invoke it by using an init file like this: Simple Interactive Program Tool Init File proc foo_exit {} {} proc foo_version {} {} proc foo_start {} { global ${examplename} spawn ${examplename} expect { -re "" {} } } # Start the program running we want to test foo_start Create a directory whose name begins with your tool's name, to contain tests. For example, if your tool's name is gcc, then the directories all need to start with "gcc.". Create a sample test file. 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. Testing A New Tool Config send_user "Testing: one, two...\n" Back in the testsuite (top level) directory, run configure. Typically you do this while in the build directory. You may have to specify more of a path, if a suitable configure is not available in your execution path. You are now ready to triumphantly type make check or runtest. You should see something like this: Example Test Case Run 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. Write 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. Adding A New Target &dj; has some additional requirements for target support, beyond the general-purpose provisions of configure. &dj; 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 &dj; to the target. This permits &dj; itself to remain target independent. 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 @samp{--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. For cross targets, 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 &dj; library file. 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. Adding A New Board Adding a new board consists of creating a new board config file. Examples are in dejagnu/baseboards. Usually to make a new board file, it's easiest to copy an existing one. It is also possible to have your file be based on a baseboard file with only one or two changes needed. Typically, this can be as simple as just changing the linker script. Once the new baseboard file is done, add it to the boards_DATA list in the dejagnu/baseboards/Makefile.am, and regenerate the Makefile.in using automake. Then just rebuild and install &dj;. You can test it by: There is a crude inheritance scheme going on with board files, so you can include one board file into another, The two main procedures used to do this are load_generic_config and load_base_board_description. The generic config file contains other procedures used for a certain class of target. The board description file is where the board specific settings go. Commonly there are similar target environments with just different processors. Testing a New Board Config File make check RUNTESTFLAGS="--target_board=newboardfile". Here's an example of a board config file. There are several helper procedures used in this example. A helper procedure is one that look for a tool of files in commonly installed locations. These are mostly used when testing in the build tree, because the executables to be tested are in the same tree as the new dejagnu files. The helper procedures are the ones in square braces [], which is the Tcl execution characters. Example Board Config File # 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 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 "-Tsim.ld"; # The simulator doesn't return exit statuses and we need to indicate this. 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 Board Config File Values These fields are all in the board_info array. These are all set by using the set_board_info and add_board_info procedures as required. The parameters are the field name, followed by the value that the field is set to or is added to the field, respectively. Common Board Info Fields Field Sample Value Description compiler "[find_gcc]" The path to the compiler to use. cflags "-mca" Compilation flags for the compiler. ldflags "[libgloss_link_flags] [newlib_link_flags]" Linking flags for the compiler. ldscript "-Wl,-Tidt.ld" The linker script to use when cross compiling. libs "-lgcc" Any additional libraries to link in. shell_prompt "cygmon>" The command prompt of the remote shell. hex_startaddr "0xa0020000" The Starting address as a string. start_addr 0xa0008000 The starting address as a value. startaddr "a0020000" exit_statuses_bad 1 Whether there is an accurate exit status. reboot_delay 10 The delay between power off and power on. unreliable 1 Whether communication with the board is unreliable. sim [find_sim] The path to the simulator to use. objcopy $tempfil The path to the objcopy program. support_libs "${prefix_dir}/i386-coff/" Support libraries needed for cross compiling. addl_link_flags "-N" Additional link flags, rarely used.
These fields are used by the GCC and GDB tests, and are mostly only useful to somewhat trying to debug a new board file for one of these tools. Many of these are used only by a few testcases, and their purpose is esoteric. These are listed with sample values as a guide to better guessing if you need to change any of these. Board Info Fields For GCC & GDB Field Sample Value Description strip $tempfile Strip the executable of symbols. gdb_load_offset "0x40050000" gdb_protocol "remote" The GDB debugging protocol to use. gdb_sect_offset "0x41000000"; gdb_stub_ldscript "-Wl,-Teva-stub.ld" The linker script to use with a GDB stub. gdb,cannot_call_functions 1 Whether GDB can call functions on the target, gdb,noargs 1 Whether the target can take command line arguments. gdb,nosignals 1 Whether there are signals on the target. gdb,short_int 1 gdb,start_symbol "_start"; The starting symbol in the executable. gdb,target_sim_options "-sparclite" Special options to pass to the simulator. gdb,timeout 540 Timeout value to use for remote communication. gdb_init_command "set mipsfpu none" A single command to send to GDB before the program being debugged is started. gdb_init_commands "print/x \$fsr = 0x0" Same as gdb_init_command, except that this is a list, more commands can be added. gdb_load_offset "0x12020000" gdb_opts "--command gdbinit" gdb_prompt "\\(gdb960\\)" The prompt GDB is using. gdb_run_command "jump start" gdb_stub_offset "0x12010000" use_gdb_stub 1 Whether to use a GDB stub. use_vma_offset 1 wrap_m68k_aout 1 gcc,no_label_values 1 gcc,no_trampolines 1 gcc,no_varargs 1 gcc,stack_size 16384 Stack size to use with some GCC testcases. ieee_multilib_flags "-mieee"; is_simulator 1 needs_status_wrapper 1 no_double 1 no_long_long 1 noargs 1 nullstone,lib "mips-clock.c" nullstone,ticks_per_sec 3782018 sys_speed_value 200 target_install {sh-hms}
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 Tcl, 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: 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. Writing (and debugging) the generic Tcl procedures for compilation. 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 &dj;, 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 &dj; 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 Tcl procedures specialized for GDB testing. Debugging A Test Case These are the kinds of debugging information available from &dj;: 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 &dj; 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. 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 for information from the expect level; it generates displays of the expect attempts to match the tool output with the patterns specified. 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 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. Finally, if the value of verbose is 3 or greater, &dj; 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 is on) to dbg.log. Adding A Test Case To A Testsuite. 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: 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++). Add the new directory name to the configdirs definition in the configure.in file for the testsuite directory. This way when make and configure next run, they include the new directory. Add the new test case to the directory, as above. To add support in the new directory for configure and make, you must also create a Makefile.in and a configure.in. Hints On Writing A Test Case 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 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 option to runtest, and examine the debug log carefully. 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 &dj; procedures error or warning. Special variables used by test cases. There are special variables used by test cases. These contain other information from &dj;. Your test cases can use these variables, with conventional meanings (as well as the variables saved in site.exp. You can use the value of these variables, but they should never be changed. $prms_id The tracking system (e.g. GNATS) number identifying a corresponding bugreport. (0} if you do not specify it in the test script.) $item 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. $expect_out(buffer) The output from the last command. This is an internal variable set by Expect. More information can be found in the Expect manual. $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.
Unit Testing What Is Unit Testing ? Most regression testing as done by &dj; is system testing. This is the complete application is tested all at once. Unit testing is for testing single files, or small libraries. In this case, each file is linked with a test case in C or C++, and each function or class and method is tested in series, with the test case having to check private data or global variables to see if the function or method worked. This works particularly well for testing APIs and at level where it is easier to debug them, than by needing to trace through the entire application. Also if there is a specification for the API to be tested, the testcase can also function as a compliance test. The dejagnu.h Header File &dj; uses a single header file to assist in unit testing. As this file also produces its one test state output, it can be run stand-alone, which is very useful for testing on embedded systems. This header file has a C and C++ API for the test states, with simple totals, and standardized output. Because the output has been standardized, &dj; can be made to work with this test case, without writing almost any Tcl. The library module, dejagnu.exp, will look for the output messages, and then merge them into &dj;'s. dejagnu-1.5.3/doc/runtest.10000664000175000017500000000730312470770006012421 00000000000000.TH runtest 1 "2008-02-25" .SH NAME runtest \- DejaGnu test driver .SH SYNOPSIS .B runtest [OPTION]... .SH DESCRIPTION .I DejaGnu is a framework for testing programs using Expect. .B runtest is the driver program for .I DejaGnu. It controls what tests to run and how to run them. .SH OPTIONS .TP .B --all Output all test results. By default, only unexpected results are displayed. .TP .B --debug Turn on .B expect internal debugging output. The output is logged to a file called \fBdbg.log\fR. .TP .BI --build \ TRIPLET The configuration TRIPLET for the build system. .TP .BI --directory \ DIRECTORY Run only tests in the specified DIRECTORY. .TP .B --help Prints out a help screen and then exits. .TP .BI --host \ TRIPLET The configuration TRIPLET for the host system. .TP .BI --host_board \ NAME The host board definition to use. .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 --status Set the exit status to fail on Tcl errors. .TP .BI --strace \ N Turns on .B expect internal tracing to \fIN\fR levels deep. The output is logged to a file called \fBdbg.log\fR. .TP .BI --target \ TRIPLET The configuration TRIPLET for the target. .TP .BI --target_board \ NAME A list of target board NAMEs to run tests on. .TP .BI --tool \ TOOLNAME Specify the tool to be tested. \fITOOLNAME\fR controls the test suite applied, and the associated initialization module. .TP .BI --tool_exec \ PATH Specify the PATH to the executable to test. .TP .BI --tool_opts \ OPTIONS Additional OPTIONS to pass to the tool. .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 --xml[=FILE],\ -x Generate XML output. \fBFILE\fR is optional; if given it is the name of the output file. If not given, the output file is named after the tool. .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. The interrupt key will cause DejaGnu to drop to the debugger prompt. If it is 0, DejaGnu starts as usual, 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 test scripts (eg. foo.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 AUTHOR Rob Savoye (rob@welcomehome.org) .SH "REPORTING BUGS" Report bugs to . .SH COPYRIGHT Copyright \(co 2005, 2007, 2008 Free Software Foundation, Inc. .br This is free software. You may redistribute copies of it under the terms of the GNU General Public License . There is NO WARRANTY, to the extent permitted by law. .SH "SEE ALSO" The full documentation for .B DejaGnu is maintained as a Docbook manual. If the .B info program is properly installed at your site, the command .IP .B info dejagnu .PP should give you access to the complete manual. dejagnu-1.5.3/doc/dejagnu.info0000664000175000017500000066331312506237405013137 00000000000000This is dejagnu.info, produced by makeinfo version 5.2 from dejagnu.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * DejaGnu: (dejagnu). The GNU testing framework. END-INFO-DIR-ENTRY  File: dejagnu.info, Node: Top, Next: Abstract, Up: (dir) DejaGnu ******* * Menu: * Abstract:: * Overview:: * Getting DejaGnu up and running:: * Running Tests:: * Customizing DejaGnu:: * Extending DejaGnu:: * Unit Testing:: * Reference:: * Unit Testing API:: -- The Detailed Node Listing -- Overview * What is DejaGnu ?:: * New In This Release: Release Notes. * Design Goals:: * A POSIX conforming test framework: A POSIX Conforming Test Framework. Getting DejaGnu up and running * Test your installation:: * Create a minimal project, e.g. calc: Create a minimal project; e_g_ calc. * Our first automated tests:: * A first remote test:: Running Tests * Make check: Make Check. * Runtest:: * The files DejaGnu produces.: Output Files. Customizing DejaGnu * Local Config File:: * Global Config File:: * Board Config File:: * Remote Host Testing:: * Config File Values:: Extending DejaGnu * Adding A New Testsuite: Adding a new Testsuite. * Adding A New Tool:: * Adding A New Target:: * Adding A New Board:: * Board Config File Values: Board File Values. * Writing A Test Case:: * Debugging A Test Case:: * Adding A Test Case To A Testsuite.: Adding A Test Case To A Testsuite. * Hints On Writing A Test Case:: * Special variables used by test cases.: Test Case Variables. Unit Testing * What Is Unit Testing ?:: * The dejagnu.h Header File: The dejagnu_h Header File. Reference * Obtaining DejaGnu:: * Installation:: * Builtin Procedures:: * File Map:: Unit Testing API * C Unit Testing API:: * C++ Unit Testing API::  File: dejagnu.info, Node: Abstract, Next: Overview, Prev: Top, Up: Top 1 Abstract ********** This document describes the functionality of DejaGnu, the testing framework of the GNU project. DejaGnu is written in Expect, which uses Tcl as a command language. Expect acts as a very programmable shell. As with other Unix command shells, you can run any program, but once the program is started, your test script has programmable control over 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 creation of testsuites. Testsuites are distributed with each application.  File: dejagnu.info, Node: Overview, Next: Getting DejaGnu up and running, Prev: Abstract, Up: Top 2 Overview ********** * Menu: * What is DejaGnu ?:: * New In This Release: Release Notes. * Design Goals:: * A POSIX conforming test framework: A POSIX Conforming Test Framework.  File: dejagnu.info, Node: What is DejaGnu ?, Next: Release Notes, Up: Overview 2.1 What is DejaGnu ? ===================== DejaGnu is a framework for testing other programs. Its purpose is to provide a single front end for all tests. Think of it as a custom library of Tcl procedures crafted to support writing a test harness. A _Test Harness_ is the testing infrastructure that is created to support a specific program or tool. Each program can have multiple testsuites, all supported by a single test harness. DejaGnu is written in Expect, which in turn uses Tcl - Tool command language. There is more information on Tcl at the Scriptics (http://www.scriptics.com) web site and the Expect web site is at NIST (http://expect.nist.gov). Julia Menapace first coined the term "DejaGnu" to describe an earlier testing framework at Cygnus Support she had written for 'GDB'. When we replaced it with the Expect-based framework, it was like DejaGnu all over again. More importantly, it was also named after my daughter, Deja Snow Savoye (http://www.welcomehome.org/deja/) (now 14 years old as of Feb 2004), who was a toddler during DejaGnu's beginnings. DejaGnu offers several advantages for testing: * The flexibility and consistency of the DejaGnu framework make it easy to write tests for any program, with either batch oriented, or interactive programs. * 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 supported host system on any supported target system. DejaGnu runs tests on many single board computers, whose operating software ranges from a simple boot monitor to a real-time OS. * 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. * Using Tcl and Expect, it's easy to create wrappers for existing testsuites. By incorporating existing tests under DejaGnu, it's easier to have a single set of report analyse programs.. Running tests requires two things: the testing framework and the testsuites themselves. Tests are usually written in Expect using Tcl, but you can also use a Tcl script to run a testsuite 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.)  File: dejagnu.info, Node: Release Notes, Next: Design Goals, Prev: What is DejaGnu ?, Up: Overview 2.2 New In This Release ======================= This release has a number of substantial changes over version 1.3. 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. The biggest change is years of modifications to the target configuration system, used for cross testing. While this greatly improved cross testing, it has made that subsystem very complicated. The goal is to have this entirely rewritten using iTcl by the next release. Other changes are: * More built-in support for building target binaries with the correct linker flags. Currently this only works with GCC as the cross compiler, preferably with a target supported by *note Libgloss::. * Lots of little bug fixes from years of heavy use at Cygnus Solutions. * DejaGnu now uses Automake for Makefile configuration. * Updated documentation, now in DocBook XML. * Windows support. There is beta level support for Windows that is still a work in progress. This requires the Cygwin (http://www.cygwin.com/) POSIX subsystem for Windows. * Menu: * Windows Support::  File: dejagnu.info, Node: Windows Support, Up: Release Notes 2.2.1 Windows Support --------------------- To use DejaGnu on Windows, you need to first install the Cygwin (http://www.cygwin.com/) release. This works as of the B20.1 release. Cygwin is a POSIX system for Windows. This covers both utility programs and a library that adds POSIX system calls to Windows. Among them is pseudo tty support for Windows that emulates the POSIX pty standard. The latest Cygwin is always available from this location (http://www.cygwin.com/). This works well enough to run _"make check"_ of the GNU development tree on Windows after a native build. But the nature of ptys on Windows is still evolving. Your mileage may vary.  File: dejagnu.info, Node: Design Goals, Next: A POSIX Conforming Test Framework, Prev: Release Notes, Up: Overview 2.3 Design Goals ================ DejaGnu grew out of the internal needs of Cygnus Solutions, the company formerly known as Cygnus Support. Cygnus maintained and enhanced a variety of free programs in many different environments and we needed a testing tool that: * was useful to developers while fixing bugs; * automated running many tests during a software release process; * was portable among a variety of host computers; * supported cross-development testing; * permitted testing interactive programs, like 'GDB'; and * permitted 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. 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.  File: dejagnu.info, Node: A POSIX Conforming Test Framework, Prev: Design Goals, Up: Overview 2.4 A POSIX conforming test framework ===================================== DejaGnu conforms to the POSIX 1003.3 standard for test frameworks. Rob Savoye was a member of that committee. The 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. TET was created by Unisoft for a consortium comprised of X/Open, Unix International and the Open Software Foundation. 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 day or night. 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 testsuite 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 testsuite 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. 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 commands 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 place-holder, 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 testsuites and these procedures are already known to conform to POSIX 1003.3. For a DejaGnu testsuite 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.  File: dejagnu.info, Node: Getting DejaGnu up and running, Next: Running Tests, Prev: Overview, Up: Top 3 Getting DejaGnu up and running ******************************** This chapter was originally written by Niklaus Giger (ngiger@mus.ch) because he lost a week to figure out how DejaGnu works and how to write a first test. Follow these instructions as closely a possible in order get a good insight into how DejaGnu works, else you might run into a lot of subtle problems. You have been warned. It should be no big problems installing DejaGnu using your package manager or from the source code. On the Debian GNU/Linux system just run (as root): apt-get install dejagnu These examples were run on a primary machine with a AMD K6 and a Mac PowerBook G3 serving as a remote target. The tests for Windows were run under Windows using the actual Cygwin version (1.3.x as of October 2001). Its target system was a PPC embedded system running vxWorks. * Menu: * Test your installation:: * Create a minimal project, e.g. calc: Create a minimal project; e_g_ calc. * Our first automated tests:: * A first remote test::  File: dejagnu.info, Node: Test your installation, Next: Create a minimal project; e_g_ calc, Up: Getting DejaGnu up and running 3.1 Test your installation ========================== Create a new user called "dgt" (DejaGnuTest), which uses bash as it login shell. PS1 must be set to '\u:\w\$ ' in its ~/.bashrc. Login as this user, create an empty directory and change the working directory to it. e.g dgt:~$ mkdir ~/dejagnu.test dgt:~$ cd ~/dejagnu.test Now you are ready to test DejaGnu's main program called runtest. The expected output is shown *Runtest output in a empty directory * dgt:~/dejagnu.test$ runtest WARNING: Couldn't find the global config file. WARNING: No tool specified Test Run By dgt on Sun Nov 25 17:07:03 2001 Native configuration is i586-pc-linux-gnu === tests === Schedule of variations: unix Running target unix Using /usr/share/dejagnu/baseboards/unix.exp as board description file for target. Using /usr/share/dejagnu/config/unix.exp as generic interface file for target. ERROR: Couldn't find tool config file for unix. === Summary === We will show you later how to get rid of all the WARNING- and ERROR-messages. The files testrun.sum and testrun.log have been created, which do not interest us at this point. Let's remove them. :~/dejagnu.test$ rm testrun.sum testrun.log * Menu: * Windows:: * Getting the source code for the calc example::  File: dejagnu.info, Node: Windows, Next: Getting the source code for the calc example, Up: Test your installation 3.1.1 Windows ------------- On Windows systems DejaGnu is part of a port of a lot of Unix tools to the Windows OS, called Cygwin. Cygwin may be downloaded and installed from a mirror of http://www.cygwin.com/. All examples were also run on Windows. If nothing is said, you can assume that you should get the same output as on a Unix system. You will need a telnet daemon if you want to use a Windows box as a remote target. There seems to be a freeware telnet daemon at http://www.fictional.net/.  File: dejagnu.info, Node: Getting the source code for the calc example, Prev: Windows, Up: Test your installation 3.1.2 Getting the source code for the calc example -------------------------------------------------- If you are running a Debian distribution you can find the examples under /usr/share/doc/dejagnu/examples. These examples seem to be missing in Red Hat's RPM. In this case download the sources of DejaGnu and adjust the paths to the DejaGnu examples accordingly.  File: dejagnu.info, Node: Create a minimal project; e_g_ calc, Next: Our first automated tests, Prev: Test your installation, Up: Getting DejaGnu up and running 3.2 Create a minimal project, e.g. calc ======================================= In this section you will to start a small project, using the sample application calc, which is part of your DejaGnu distribution * Menu: * A simple project without the GNU autotools:: * Using autoconf/autoheader/automake::  File: dejagnu.info, Node: A simple project without the GNU autotools, Next: Using autoconf/autoheader/automake, Up: Create a minimal project; e_g_ calc 3.2.1 A simple project without the GNU autotools ------------------------------------------------ The runtest program can be run stand-alone. All the autoconf/automake support is just cause those programs are commonly used for other GNU applications. The key to running runtest stand-alone is having the local site.exp file setup correctly, which automake does. The generated site.exp should like like: set tool calc set srcdir . set objdir /home/dgt/dejagnu.test  File: dejagnu.info, Node: Using autoconf/autoheader/automake, Prev: A simple project without the GNU autotools, Up: Create a minimal project; e_g_ calc 3.2.2 Using autoconf/autoheader/automake ---------------------------------------- We have to prepare some input file in order to run autoconf and automake. There is book "GNU autoconf, automake and libtool" by Garry V. Vaughan, et al. NewRider, ISBN 1-57870-190-2 which describes this process thoroughly. From the calc example distributed with the DejaGnu documentation you should copy the program file itself (calc.c) and some additional files, which you might examine a little bit close to derive their meanings. dgt:~/dejagnu.test$ cp -r /usr/share/doc/dejagnu/examples/calc/\ {configure.in,Makefile.am,calc.c,testsuite} . In Makefile.am note the presence of the AUTOMAKE_OPTIONS = dejagnu. This option is needed. Run aclocal to generate aclocal.m4, which is a collection of macros needed by configure.in dgt:~/dejagnu.test$ aclocal autoconf is another part of the auto-tools. Run it to generate configure based on information contained in configure.in. dgt:~/dejagnu.test$ autoconf autoheader is another part of the auto-tools. Run it to generate calc.h.in. dgt:~/dejagnu.test$ autoheader The Makefile.am of this example was developed as port of the DejaGnu distribution. Adapt Makefile.am for this test. Replace the line "#noinst_PROGRAMS = calc" to "bin_PROGRAMS = calc". Change the RUNTESTDEFAULTFLAGS from "$$srcdir/testsuite" to "./testsuite". Running automake at this point contains a series of warning in its output as shown in the following example: *Sample output of automake with missing files* dgt:~/dejagnu.test$ automake --add-missing automake: configure.in: installing `./install-sh' automake: configure.in: installing `./mkinstalldirs' automake: configure.in: installing `./missing' automake: Makefile.am: installing `./INSTALL' automake: Makefile.am: required file `./NEWS' not found automake: Makefile.am: required file `./README' not found automake: Makefile.am: installing `./COPYING' automake: Makefile.am: required file `./AUTHORS' not found automake: Makefile.am: required file `./ChangeLog' not found configure.in: 4: required file `./calc.h.in' not found Makefile.am:6: required directory ./doc does not exist Create a empty directory doc and empty files INSTALL, NEWS, README, AUTHORS, ChangeLog and COPYING. The default COPYING will point to the GNU Public License (GPL). In a real project it would be time to add some meaningful text in each file. Adapt calc to your environment by calling configure. *Sample output of configure * dgt:~/dejagnu.test$ ./configure creating cache ./config.cache checking whether to enable maintainer-specific portions of Makefiles... no checking for a BSD compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking whether make sets ${MAKE}... yes checking for working aclocal... found checking for working autoconf... found checking for working automake... found checking for working autoheader... found checking for working makeinfo... found checking for gcc... gcc checking whether the C compiler (gcc ) works... yes checking whether the C compiler (gcc ) is a cross-compiler... no checking whether we are using GNU C... yes checking whether gcc accepts -g... yes checking for a BSD compatible install... /usr/bin/install -c checking how to run the C preprocessor... gcc -E checking for stdlib.h... yes checking for strcmp... yes updating cache ./config.cache creating ./config.status creating Makefile creating calc.h If you are familiar with GNU software, this output should not contain any surprise to you. Any errors should be easy to fix for such a simple program. Build the calc executable: *Sample output building calc * dgt:~/dejagnu.test$ make gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c calc.c gcc -g -O2 -o calc calc.o You prepared a few files and then called some commands. Respecting the right order assures a automatic and correctly compiled calc program. The following example resumes the correct order. *Creating the calc program using the GNU autotools* dgt:~/dejagnu.test$ aclocal dgt:~/dejagnu.test$ autoconf dgt:~/dejagnu.test$ autoheader dgt:~/dejagnu.test$ automake --add-missing dgt:~/dejagnu.test$ ./configure dgt:~/dejagnu.test$ make Play with calc and verify whether it works correctly. A sample session might look like this: dgt:~/dejagnu.test$ ./calc calc: version Version: 1.1 calc: add 3 4 7 calc: multiply 3 4 12 calc: multiply 2 4 12 calc: quit Look at the intentional bug that 2 times 4 equals 12. The tests run by DejaGnu need a file called site.exp, which is automatically generated if we call "make site.exp". This was the purpose of the "AUTOMAKE_OPTIONS = dejagnu" in Makefile.am. *Sample output generating a site.exp* dgt: make site.exp dgt:~/dejagnu.test$ make site.exp Making a new site.exp file...  File: dejagnu.info, Node: Our first automated tests, Next: A first remote test, Prev: Create a minimal project; e_g_ calc, Up: Getting DejaGnu up and running 3.3 Our first automated tests ============================= * Menu: * Running the test for the calc example:: * The various config files or how to avoid warnings:: * When trouble strikes:: * Testing "Hello world" locally::  File: dejagnu.info, Node: Running the test for the calc example, Next: The various config files or how to avoid warnings, Up: Our first automated tests 3.3.1 Running the test for the calc example ------------------------------------------- Now we are ready to call the automated tests *Sample output of runtest in a configured directory* dgt:~/dejagnu.test$ make check make check-DEJAGNU make[1]: Entering directory `/home/dgt/dejagnu.test' srcdir=`cd . && pwd`; export srcdir; \ EXPECT=expect; export EXPECT; \ runtest=runtest; \ if /bin/sh -c "$runtest --version" > /dev/null 2>&1; then \ $runtest --tool calc CALC=`pwd`/calc --srcdir ./testsuite ; \ else echo "WARNING: could not find \`runtest'" 1>&2; :;\ fi WARNING: Couldn't find the global config file. WARNING: Couldn't find tool init file Test Run By dgt on Sun Nov 25 21:42:21 2001 Native configuration is i586-pc-linux-gnu === calc tests === Schedule of variations: unix Running target unix Using /usr/share/dejagnu/baseboards/unix.exp as board description file for target. Using /usr/share/dejagnu/config/unix.exp as generic interface file for target. Using ./testsuite/config/unix.exp as tool-and-target-specific interface file. Running ./testsuite/calc.test/calc.exp ... FAIL: multiply2 (bad match) === calc Summary === # of expected passes 5 # of unexpected failures 1 /home/Dgt/dejagnu.test/calc version Version: 1.1 make[1]: *** [check-DEJAGNU] Fehler 1 make[1]: Leaving directory `/home/Dgt/dejagnu.test' make: *** [check-am] Fehler 2 Did you see the line "FAIL:"? The test cases for calc catch the bug in the calc.c file. Fix the error in calc.c later as the following examples assume a unchanged calc.c. Examine the output files calc.sum and calc.log. Try to understand the test cases written in ~/dejagnu.test/testsuite/calc.test/calc.exp. To understand Expect you might take a look at the book "Exploring Expect", which is an excellent resource for learning and using Expect. (Pub: O'Reilly, ISBN 1-56592-090-2) The book contains hundreds of examples and also includes a tutorial on Tcl. Exploring Expect is 602 pages long.  File: dejagnu.info, Node: The various config files or how to avoid warnings, Next: When trouble strikes, Prev: Running the test for the calc example, Up: Our first automated tests 3.3.2 The various config files or how to avoid warnings ------------------------------------------------------- DejaGnu may be customized by each user. It first searches for a file called ~/.dejagnurc. Create the file ~/.dejagnurc and insert the following line: puts "I am ~/.dejagnurc" Rerun make check. Test whether the output contains "I am ~/.dejagnurc". Create ~/my_dejagnu.exp and insert the following line: puts "I am ~/my_dejagnu.exp" In a Bash-Shell enter dgt:~/dejagnu.test$ export DEJAGNU=~/my_dejagnu.exp Run "make check" again. The output should not contain "WARNING: Couldn't find the global config file.". Create the sub-directory lib. Create the file "calc.exp" in it and insert the following line: puts "I am lib/calc.exp" The last warning "WARNING: Couldn't find tool init file" should not be part of the output of make check. Create the directory ~/boards. Create the file ~/boards/standard.exp and insert the following line: puts "I am boards/standard.exp" If the variable DEJAGNU is still not empty then the (abbreviated) output of "make check" should look like this: *Sample output of runtest with the usual configuration files* dgt:~/dejagnu.test$ make check <...> fi I am ~/.dejagnurc I am ~/my_dejagnu.exp I am lib/calc.exp Test Run By dgt on Sun Nov 25 22:19:14 2001 Native configuration is i586-pc-linux-gnu === calc tests === Using /home/Dgt/boards/standard.exp as standard board description\ file for build. I am ~/boards/standard.exp Using /home/Dgt/boards/standard.exp as standard board description\ file for host. I am ~/boards/standard.exp Schedule of variations: unix Running target unix Using /home/Dgt/boards/standard.exp as standard board description\ file for target. I am ~/boards/standard.exp Using /usr/share/dejagnu/baseboards/unix.exp as board description file\ for target. <...> It is up to you to decide when and where to use any of the above mentioned config files for customizing. This chapters showed you where and in which order the different config files are run.  File: dejagnu.info, Node: When trouble strikes, Next: Testing "Hello world" locally, Prev: The various config files or how to avoid warnings, Up: Our first automated tests 3.3.3 When trouble strikes -------------------------- Calling runtest with the '-v'-flag shows you in even more details which files are searched in which order. Passing it several times gives more and more details. *Displaying details about runtest execution* runtest -v -v -v --tool calc CALC=`pwd`/calc --srcdir ./testsuite Calling runtest with the '-debug'-flag logs a lot of details to dbg.log where you can analyse it afterwards. In all test cases you can temporary adjust the verbosity of information by adding the following Tcl command to any Tcl file that gets loaded by dejagnu, for instance, ~/.dejagnurc: set verbose 9  File: dejagnu.info, Node: Testing "Hello world" locally, Prev: When trouble strikes, Up: Our first automated tests 3.3.4 Testing "Hello world" locally ----------------------------------- This test checks whether the shell command 'echo Hello world' will really output "Hello world" to the console. Create the file '~/dejagnu.test/testsuite/calc.test/local_echo.exp'. It should contain the following lines: *A first (local) test case* set test "Local Hello World" spawn echo Hello World expect { "Hello World" { pass $test } default { fail $test } } Run runtest again and verify the output "calc.log"  File: dejagnu.info, Node: A first remote test, Prev: Our first automated tests, Up: Getting DejaGnu up and running 3.4 A first remote test ======================= Testing remote targets is a lot trickier especially if you are using an embedded target which has no built in support for things like a compiler, FTP server or a Bash-shell. Before you can test calc on a remote target you have to acquire a few basics skills. * Menu: * Setup telnet to your own host:: * A test case for login via telnet:: * Remote testing "Hello world":: * Transferring files from/to the target:: * Preparing for crosscompilation:: * Remote testing of calc:: * Using Windows as host and vxWorks as target::  File: dejagnu.info, Node: Setup telnet to your own host, Next: A test case for login via telnet, Up: A first remote test 3.4.1 Setup telnet to your own host ----------------------------------- The easiest remote host is usually the host you are working on. In this example we will use telnet to login in your own workstation. For security reasons you should never have a telnet daemon running on machine connected on the Internet, as password and user names are transmitted in clear text. We assume you know how to setup your machine for a telnet daemon. Next try whether you may login in your own host by issuing the command "telnet localhost.1". In order to be able to distinguish between a normal session and a telnet login add the following lines to /home/dgt/.bashrc. if [ "$REMOTEHOST" ] then PS1='remote:\w\$ ' fi Now on the machine a "remote" login looks like this: *Sample log of a telnet login to localhost* dgt:~/dejagnu.test$ telnet localhost Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. Debian GNU/Linux testing/unstable Linux K6Linux login: dgt Password: Last login: Sun Nov 25 22:46:34 2001 from localhost on pts/4 Linux K6Linux 2.4.14 #1 Fre Nov 16 19:28:25 CET 2001 i586 unknown No mail. remote:~$ exit logout Connection closed by foreign host.  File: dejagnu.info, Node: A test case for login via telnet, Next: Remote testing "Hello world", Prev: Setup telnet to your own host, Up: A first remote test 3.4.2 A test case for login via telnet -------------------------------------- In order to define a correct setup we have add a line containing "set target unix" either to ~/.dejagnurc or to ~/my_dejagnu.exp. In ~/boards/standard.exp add the following four lines to define a few patterns for the DejaGnu telnet login procedure. *Defining a remote target board* set_board_info shell_prompt "remote:" set_board_info telnet_username "dgt" set_board_info telnet_password "top_secret" set_board_info hostname "localhost" As DejaGnu will be parsing the telnet session output for some well known pattern the output there are a lot of things that can go wrong. If you have any problems verify your setup: * Is '/etc/motd' empty? * Is '/etc/issue.net' empty? * Exists a empty '~/.hushlogin'? * The LANG environment variable must be either empty or set to "C". To test the login via telnet write a sample test case. Create the file ~/dejagnu.test/testsuite/calc.test/remote_echo.exp and add the following few lines: *DejaGnu script for logging in into a remote target* puts "this is remote_echo.exp target for $target " target_info $target #set verbose 9 set shell_id [remote_open $target] set test "Remote login to $target" #set verbose 0 puts "Spawn id for remote shell is $shell_id" if { $shell_id > 0 } { pass "$test" } else { fail "Remote open to $target" } In the runtest output you should find something like: Running ./testsuite/calc.test/local_echo.exp ... Running ./testsuite/calc.test/remote_echo.exp ... this is remote_echo.exp target is unix Spawn id for remote shell is exp7 Have again a look at calc.log to get a feeling how DejaGnu and expect parse the input.  File: dejagnu.info, Node: Remote testing "Hello world", Next: Transferring files from/to the target, Prev: A test case for login via telnet, Up: A first remote test 3.4.3 Remote testing "Hello world" ---------------------------------- Next you will transform the above "hello world" example to its remote equivalent. This can be done by adding the following lines to our file remote_echo.exp. *A first (local) remote "Hello world" test* set test "Remote_send Hello World" set status [remote_send $target "echo \"Hello\" \"World\"\n" ] pass "$test" set test "Remote_expect Hello World" remote_expect $target 5 { -re "Hello World" { pass "$test" } } Call make check. The output should contain "# of expected passes 9" and "# of unexpected failures 1". Have a look at the procedures in /usr/share/dejagnu/remote.exp to have an overview of the offered procedures and their features. Now setup a real target. In the following example we assume as target a PowerBook running Debian. As above add a test user "dgt", install Telnet and FTP servers. In order to distinguish it from the host add the line PS1='test:>' to /home/dgt/.bash_profile. Also add a corresponding entry "powerbook" to /etc/hosts and verify that you are able to ping, telnet and ftp to the target "powerbook". In order to let runtest run its test on the "powerbook" target change the following lines in ~/boards/standard.exp: *Board definition for a remote target* set_board_info protocol "telnet" set_board_info telnet_username "dgt" set_board_info telnet_password "top_secret" set_board_info shell_prompt "test:> " set_board_info hostname "powerbook" Now call runtest again with the same arguments and verify whether all went okay by taking a close look at calc.log.  File: dejagnu.info, Node: Transferring files from/to the target, Next: Preparing for crosscompilation, Prev: Remote testing "Hello world", Up: A first remote test 3.4.4 Transferring files from/to the target ------------------------------------------- A simple procedure like this will do the job for you: *Test script to transfer a file to a remote target* set test "Remote_download" puts "Running Remote_download" # set verbose 9 set remfile /home/dgt/dejagnu2 set status [remote_download $target /home/dgt/.dejagnurc $remfile] if { "$status" == "" } { fail "Remote download to $remfile on $target" } else { pass "$test" } puts "status of remote_download ist $status" # set verbose 0 After running runtest again, check whether the file dejagnu2 exists on the target. This example will only work if the rcp command works with your target. If you have a working FTP-server on the target you can use it by adding the following lines to ~/boards/standard.exp: *Defining a board to use FTP as file transport* set_board_info file_transfer "ftp" set_board_info ftp_username "dgt" set_board_info ftp_password "1234"  File: dejagnu.info, Node: Preparing for crosscompilation, Next: Remote testing of calc, Prev: Transferring files from/to the target, Up: A first remote test 3.4.5 Preparing for crosscompilation ------------------------------------ For crosscompiling you need working binutils, gcc and a base library like libc or glib for your target. It is beyond the scope of this document to describe how to get it working. The following examples assume a cross compiler for PowerPC which is called linux-powerpc-gcc. Add AC_CANONICAL_TARGET in dejagnu.test/configure.in at the following location. Copy config.guess from /usr/share/automake to dejagnu.test. AM_CONFIG_HEADER(calc.h) AC_CANONICAL_TARGET([]) AM_INIT_AUTOMAKE(calc, 1.1) You need to run automake 2.5 or later. Depending on your installation calling autoconf2.5 instead of autoconf is not needed. The sequence to regenerate all files is: *Using autotools for cross development* $ autoconf2.5 $ autoheader $ automake $ ./configure --host=powerpc-linux --target=powerpc-linux configure: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used. checking build system type... ./config.guess: ./config.guess: No such file or directory configure: error: cannot guess build type; you must specify one $ cp /usr/share/automake/config.guess . $ ./configure --host=powerpc-linux --target=powerpc-linux configure: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used. \ checking build system type... i586-pc-linux-gnu checking host system type... powerpc-unknown-linux-gnu <...> checking whether we are cross compiling... yes <...> Configuration: Source code location: . C Compiler: powerpc-linux-gcc C Compiler flags: -g -O2 Everything should be ready to recompile for the target: $ make powerpc-linux-gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c calc.c powerpc-linux-gcc -g -O2 -o calc calc.o  File: dejagnu.info, Node: Remote testing of calc, Next: Using Windows as host and vxWorks as target, Prev: Preparing for crosscompilation, Up: A first remote test 3.4.6 Remote testing of calc ---------------------------- Not yet written, as I have problem getting libc6-dev-powerpc to work. Probably I first have to build my cross compiler.  File: dejagnu.info, Node: Using Windows as host and vxWorks as target, Prev: Remote testing of calc, Up: A first remote test 3.4.7 Using Windows as host and vxWorks as target ------------------------------------------------- A more thorough walk-through will be written in a few weeks. In order to test the vxWorks as a target I changed boards/standards.exp to reflect my settings (IP, username, password). Then I reconfigured vxWorks to include a FTP and telnet server (using the same username/password combination ad in boards/standard.exp). With this setup and some minor modification (e.g. replacing echo by printf) in my test cases I could test my vxWorks system. It sure does not seem to be a correct setup by DejaGnu standard. For instance, it still loading /usr/share/dejagnu/baseboards/unix.exp instead of vxWorks. In any case I found that (at least under Windows) I did not find out how the command line would let me override settings in my personal config files.  File: dejagnu.info, Node: Running Tests, Next: Customizing DejaGnu, Prev: Getting DejaGnu up and running, Up: Top 4 Running Tests *************** There are two ways to execute a testsuite. The most common way is when there is existing support in the 'Makefile'. This support consists of a _check_ target. The other way is to execute the 'runtest' program directly. To run 'runtest' directly from the command line requires either all the correct options, or the *note Local Config File:: must be setup correctly. * Menu: * Make check: Make Check. * Runtest:: * The files DejaGnu produces.: Output Files.  File: dejagnu.info, Node: Make Check, Next: Runtest, Up: Running Tests 4.1 Make check ============== To run tests from an existing collection, first use 'configure' as usual to set up the build directory. Then try typing: 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. The most common file the check builds is the _site.exp_. The site.exp file contains various variables that DejaGnu used to determine the configuration of the program being tested. This is mostly for supporting remote testing. The _check_ target is supported by GNU Automake. To have DejaGnu support added to your generated 'Makefile.in', just add the keyword dejagnu to the AUTOMAKE_OPTIONS variable in your 'Makefile.am' file. Once you have run _make check_ to build any auxiliary files, you can invoke the test driver 'runtest' directly to repeat the tests. You will also have to execute 'runtest' directly for test collections with no _check_ target in the 'Makefile'.  File: dejagnu.info, Node: Runtest, Next: Output Files, Prev: Make Check, Up: Running Tests 4.2 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. * Menu: * Output States:: * Invoking Runtest:: * Common Options: Common Operations.  File: dejagnu.info, Node: Output States, Next: Invoking Runtest, Up: Runtest 4.2.1 Output States ------------------- 'runtest' flags the outcome of each test as one of these cases. *note A POSIX Conforming Test Framework:: 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 testsuite 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 testsuites 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.  File: dejagnu.info, Node: Invoking Runtest, Next: Common Operations, Prev: Output States, Up: Runtest 4.2.2 Invoking Runtest ---------------------- This is the full set of command line options that 'runtest' recognizes. Arguments may be abbreviated to the shortest unique string. '--all' (-a) 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). '--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 separate. '--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 will be run on, not the machine DejaGnu is run on. '--host_board [name]' The host board to use. '--target [string]' Use this option to override the default setting (running native tests). _string_ is a full configuration "triple" name of the form _cpu-vendor-os_ as used by 'configure'. This option changes the configuration _runtest_ uses for the default tool names, and other setup information. '--debug' (-de) 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). '--ignore [name(s)] ' The names of specific tests to ignore. '--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 [name]' 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 [number]' 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'. '--connect [program]' 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.4 distribution are _rlogin_, _telnet_, _rsh_, _tip_, _kermit_, and _mondfe_. The default for this option depends on the configuration 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. '--baud [number]' 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.) '--target_board [name(s)]' The list of target boards to run tests on. '--tool[name(s)]' Specifies which testsuite 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' 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. '--tool_exec [name]' The path to the tool executable to test. '--tool_opts [options]' A list of additional options to pass to the tool. '--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. '--D[0-1]' Start the internal Tcl debugger. The Tcl debugger supports breakpoints, single stepping, and other common debugging activities. See the document "Debugger for Tcl Applications" by Don Libes. (Distributed in PostScript form with _expect_ as the file 'expect/tcl-debug.ps.'. 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 ). 'testfile'.exp[=arg(s)] 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.  File: dejagnu.info, Node: Common Operations, Prev: Invoking Runtest, Up: Runtest 4.2.3 Common Options -------------------- Typically, you don't need must to use any command-line options. '--tool' used is only required when there are more than one testsuite in the same directory. The default options are in the local site.exp file, created by "make site.exp". 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--srcdir /devo/gdb/testsuite 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. 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'.)  File: dejagnu.info, Node: Output Files, Prev: Runtest, Up: Running Tests 4.3 The files DejaGnu produces. =============================== DejaGnu 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 File:: * Log File:: * Debug Log File::  File: dejagnu.info, Node: Summary File, Next: Log File, Up: Output Files 4.3.1 Summary File ------------------ DejaGnu 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 'runtested', the summary output also tabulates the corresponding outcomes. For example, after 'runtest --tool binutils', look for a summary log in 'binutils.sum'. Normally, DejaGnu 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: Log File, Next: Debug Log File, Prev: Summary File, Up: Output Files 4.3.2 Log File -------------- DejaGnu 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, DejaGnu 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/latest/bin/g++ version cygnus-2.0.1  File: dejagnu.info, Node: Debug Log File, Prev: Log File, Up: Output Files 4.3.3 Debug Log File -------------------- 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 begin with a message of the form* expect: does {tool output} (spawn_id n) match pattern {expected pattern}? For every unsuccessful match, Expect issues a _no_ after this message; if other patterns are specified for the same Expect command, they are reflected also, but without the first part of the message (_expect... match pattern_). When Expect finds a match, the log for the successful match ends with _yes_, followed by a record of the Expect variables set to describe a successful match. *Here is an excerpt from the debugging log for a GDB test:* send: sent {break gdbme.c:34\n} to spawn id 6 expect: does {} (spawn_id 6) match pattern {Breakpoint.*at.* file gdbme.c, line 34.*\(gdb\) $}? no {.*\(gdb\) $}? no expect: does {} (spawn_id 0) match pattern {return} ? no {\(y or n\) }? no {buffer_full}? no {virtual}? no {memory}? no {exhausted}? no {Undefined}? no {command}? no break gdbme.c:34 Breakpoint 8 at 0x23d8: file gdbme.c, line 34. (gdb) expect: does {break gdbme.c:34\r\nBreakpoint 8 at 0x23d8: file gdbme.c, line 34.\r\n(gdb) } (spawn_id 6) match pattern {Breakpoint.*at.* file gdbme.c, line 34.*\(gdb\) $}? yes expect: set expect_out(0,start) {18} expect: set expect_out(0,end) {71} expect: set expect_out(0,string) {Breakpoint 8 at 0x23d8: file gdbme.c, line 34.\r\n(gdb) } epect: set expect_out(spawn_id) {6} expect: set expect_out(buffer) {break gdbme.c:34\r\nBreakpoint 8 at 0x23d8: file gdbme.c, line 34.\r\n(gdb) } PASS: 70 0 breakpoint line number in file This example exhibits three properties of Expect and DejaGnu that might be surprising at first glance: * Empty output for the first attempted match. The first set of attempted matches shown ran against the output _{}_ -- that is, no output. Expect begins attempting to match the patterns supplied immediately; often, the first pass is against incomplete output (or completely before all output, as in this case). * Interspersed tool output. The beginning of the log entry for the second attempted match may be hard to spot: this is because the prompt _{(gdb) }_ appears on the same line, just before the _expect:_ that marks the beginning of the log entry. * Fail-safe patterns. Many of the patterns tested are fail-safe patterns provided by GDB testing utilities, to reduce possible indeterminacy. It is useful to anticipate potential variations caused by extreme system conditions (GDB might issue the message _virtual memory exhausted_ in rare circumstances), or by changes in the tested program (_Undefined command_ is the likeliest outcome if the name of a tested command changes). The pattern _{return}_ is a particularly interesting fail-safe to notice; it checks for an unexpected 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 standard output, and in the detailed log file.  File: dejagnu.info, Node: Customizing DejaGnu, Next: Extending DejaGnu, Prev: Running Tests, Up: Top 5 Customizing DejaGnu ********************* 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. If this file is setup correctly, it is possible to execute a testsuite merely by typing 'runtest'. DejaGnu supports two 'site.exp' files. The multiple instances of 'site.exp' are loaded in a fixed order built into DejaGnu. The first file loaded is the local file 'site.exp', and then the optional global 'site.exp' file as pointed to by the 'DEJAGNU' environment variable. There is an 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. 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 referred to as the "global" config file. Any directory containing a configured testsuite also has a local '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 global 'site.exp' file. You can usually generate or update the testsuite's local 'site.exp' by typing 'make site.exp' in the testsuite directory, after the test suite is configured. 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 the 'all_flag' so all the output gets printed, or your own verbosity levels. This file is usually restricted to setting command line options. 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: * Local Config File:: * Global Config File:: * Board Config File:: * Remote Host Testing:: * Config File Values::  File: dejagnu.info, Node: Local Config File, Next: Global Config File, Up: Customizing DejaGnu 5.1 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 global 'site.exp' in the installed DejaGnu library. This file is mostly for supplying tool specific info that is required by the testsuite. All local 'site.exp' 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 dependent, i.e., 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. Here's an example local site.exp file, as used for GCC/G++ testing. *Local Config File* ## these variables are automatically generated by make ## # Do not edit here. If you wish to override these values # add them to the last section set rootme "/build/devo-builds/i586-pc-linux-gnulibc1/gcc" set host_triplet i586-pc-linux-gnulibc1 set build_triplet i586-pc-linux-gnulibc1 set target_triplet i586-pc-linux-gnulibc1 set target_alias i586-pc-linux-gnulibc1 set CFLAGS "" set CXXFLAGS "-isystem /build/devo-builds/i586-pc-linux-gnulibc1/gcc/../libio -isystem $srcdir/../libg++/src -isystem $srcdir/../libio -isystem $srcdir/../libstdc++ -isystem $srcdir/../libstdc++/stl -L/build/devo-builds/i586-pc-linux-gnulibc1/gcc/../libg++ -L/build/devo-builds/i586-pc-linux-gnulibc1/gcc/../libstdc++" append LDFLAGS " -L/build/devo-builds/i586-pc-linux-gnulibc1/gcc/../ld" set tmpdir /build/devo-builds/i586-pc-linux-gnulibc1/gcc/testsuite set srcdir "${srcdir}/testsuite" ## All variables above are generated by configure. Do Not Edit ## This file defines the required fields for a local config file, namely the three config triplets, and the srcdir. It also defines several other Tcl variables that are used exclusively by the GCC testsuite. For most test cases, the CXXFLAGS and LDFLAGS are supplied by DejaGnu itself for cross testing, but to test a compiler, GCC needs to manipulate these itself.  File: dejagnu.info, Node: Global Config File, Next: Board Config File, Prev: Local Config File, Up: Customizing DejaGnu 5.2 Global Config File ====================== The master config file is where all the target specific config variables 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 dependent. 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 Config file* # Make sure we look in the right place for the board description files. if ![info exists boards_dir] { set boards_dir {} } lappend boards_dir "/nfs/cygint/s1/cygnus/dejagnu/boards" verbose "Global Config File: target_triplet is $target_triplet" 2 global target_list case "$target_triplet" in { { "native" } { set target_list "unix" } { "sparc64-*elf" } { set target_list "sparc64-sim" } { "mips-*elf" } { set target_list "mips-sim wilma barney" } { "mips-lsi-elf" } { set target_list "mips-lsi-sim{,soft-float,el}" } { "sh-*hms" } { set target_list { "sh-hms-sim" "bloozy" } } } In this case, we have support for several cross compilers, that all run on this host. For testing on operating systems that don't support Expect, DejaGnu can be run on the local build machine, and it can connect to the remote host and run all the tests for this cross compiler on that host. All the remote OS requires is a working Telnet server. As you can see, all one does is set the variable 'target_list' to the list of targets and options to test. The simple settings, like for _sparc64-elf_ only require setting the name of the single board config file. The _mips-elf_ target is more complicated. Here it sets the list to three target boards. One is the default mips target, and both _wilma_ _barney_ are symbolic names for other mips boards. Symbolic names are covered in the *note Adding A New Board:: chapter. The more complicated example is the one for _mips-lsi-elf_. This one runs the tests with multiple iterations using all possible combinations of the '--soft-float' and the '--el' (little endian) option. Needless to say, this last feature is mostly compiler specific.  File: dejagnu.info, Node: Board Config File, Next: Remote Host Testing, Prev: Global Config File, Up: Customizing DejaGnu 5.3 Board Config File ===================== The board config file is where board specific config data is stored. A board config file contains all the higher-level configuration settings. There is a rough inheritance scheme, where it is possible to base a new board description file on an existing one. There are also collections of custom procedures for common environments. For more information on adding a new board config file, go to the *note Adding A New Board:: chapter. An example board config file for a GNU simulator is as follows. 'set_board_info' is a procedure that sets the field name to the specified value. The procedures in square brackets _[]_ are _helper procedures_. These are used to find parts of a tool chain required to build an executable image that may reside in various locations. This is mostly of use for when the startup code, the standard C libraries, or the tool chain itself is part of your build tree. *Board Config File* # 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 There are five helper procedures used in this example. The first one, 'find gcc' looks for a copy of the GNU compiler in your build tree, or it uses the one in your path. This will also return the proper transformed name for a cross compiler if you whole build tree is configured for one. The next helper procedures are 'libgloss_include_flags' & 'libgloss_link_flags'. These return the proper flags to compiler and link an executable image using *note Libgloss::, the GNU BSP (Board Support Package). The final procedures are 'newlib_include_flag' & 'newlib_include_flag'. These find the Newlib C library, which is a reentrant standard C library for embedded systems comprising of non GPL'd code.  File: dejagnu.info, Node: Remote Host Testing, Next: Config File Values, Prev: Board Config File, Up: Customizing DejaGnu 5.4 Remote Host Testing ======================= *Note* Thanks to DJ Delorie for the original paper that this section is based on. DejaGnu also supports running the tests on a remote host. To set this up, the remote host needs an FTP server, and a telnet server. Currently foreign operating systems used as remote hosts are VxWorks, VRTX, DOS/Windows 3.1, MacOS and Windows. The recommended source for a Windows-based FTP server is to get IIS (either IIS 1 or Personal Web Server) from http://www.microsoft.com (http://www.microsoft.com). When you install it, make sure you install the FTP server - it's not selected by default. Go into the IIS manager and change the FTP server so that it does not allow anonymous FTP. Set the home directory to the root directory (i.e. c:\) of a suitable drive. Allow writing via FTP. It will create an account like IUSR_FOOBAR where foobar is the name of your machine. Go into the user editor and give that account a password that you don't mind hanging around in the clear (i.e. not the same as your admin or personal passwords). Also, add it to all the various permission groups. You'll also need a telnet server. For Windows, go to the Ataman (http://ataman.com) web site, pick up the Ataman Remote Logon Services for Windows, and install it. You can get started on the eval period anyway. Add IUSR_FOOBAR to the list of allowed users, set the HOME directory to be the same as the FTP default directory. Change the Mode prompt to simple. Ok, now you need to pick a directory name to do all the testing in. For the sake of this example, we'll call it piggy (i.e. c:\piggy). Create this directory. You'll need a unix machine. Create a directory for the scripts you'll need. For this example, we'll use /usr/local/swamp/testing. You'll need to have a source tree somewhere, say /usr/src/devo. Now, copy some files from releng's area in SV to your machine: *Remote host setup* cd /usr/local/swamp/testing mkdir boards scp darkstar.welcomehome.org:/dejagnu/cst/bin/MkTestDir . scp darkstar.welcomehome.org:/dejagnu/site.exp . scp darkstar.welcomehome.org:/dejagnu/boards/useless98r2.exp boards/foobar.exp export DEJAGNU=/usr/local/swamp/testing/site.exp You must edit the boards/foobar.exp file to reflect your machine; change the hostname (foobar.com), username (iusr_foobar), password, and ftp_directory (c:/piggy) to match what you selected. Edit the global ' site.exp' to reflect your boards directory: *Add The Board Directory* lappend boards_dir "/usr/local/swamp/testing/boards" Now run MkTestDir, which is in the contrib directory. The first parameter is the toolchain prefix, the second is the location of your devo tree. If you are testing a cross compiler (ex: you have sh-hms-gcc.exe in your PATH on the PC), do something like this: *Setup Cross Remote Testing* ./MkTestDir sh-hms /usr/dejagnu/src/devo If you are testing a native PC compiler (ex: you have gcc.exe in your PATH on the PC), do this: *Setup Native Remote Testing* ./MkTestDir '' /usr/dejagnu/src/devo To test the setup, 'ftp' to your PC using the username (iusr_foobar) and password you selected. CD to the test directory. Upload a file to the PC. Now telnet to your PC using the same username and password. CD to the test directory. Make sure the file is there. Type "set" and/or "gcc -v" (or sh-hms-gcc -v) and make sure the default PATH contains the installation you want to test. *Run Test Remotely* cd /usr/local/swamp/testing make -k -w check RUNTESTFLAGS="--host_board foobar --target_board foobar -v -v" > check.out 2>&1 To run a specific test, use a command like this (for this example, you'd run this from the gcc directory that MkTestDir created): *Run a Test Remotely* make check RUNTESTFLAGS="--host_board sloth --target_board sloth -v compile.exp=921202-1.c" Note: if you are testing a cross-compiler, put in the correct target board. You'll also have to download more .exp files and modify them for your local configuration. The -v's are optional.  File: dejagnu.info, Node: Config File Values, Prev: Remote Host Testing, Up: Customizing DejaGnu 5.5 Config File Values ====================== 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. * Menu: * Command Line Option Variables: Option Variables. * Personal Config File::  File: dejagnu.info, Node: Option Variables, Next: Personal Config File, Up: Config File Values 5.5.1 Command Line Option Variables ----------------------------------- In the user editable second section of the *note Personal Config File:: you can not only override the configuration variables captured in the first section, but also specify default values for all on 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 Invoking Runtest::, for explanations of the command-line options. *Tcl Variables For Command Line Options* runtest option Tcl 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. -mail address Email the output log to the specified address.  File: dejagnu.info, Node: Personal Config File, Prev: Option Variables, Up: Config File Values 5.5.2 Personal Config File -------------------------- The personal config file is used to customize 'runtest's' behaviour for each person. It is typically used to set the user preferred setting for verbosity, and any experimental Tcl procedures. My personal '~/.dejagnurc' file looks like: *Personal Config File* set all_flag 1 set RLOGIN /usr/ucb/rlogin set RSH /usr/local/sbin/ssh Here I set 'all_flag' so I see all the test cases that PASS along with the ones that FAIL. I also set 'RLOGIN' 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 version rather than the default that's in my path. I also set 'RSH' to the SSH secure shell, as rsh is mostly used to test unix machines within a local network here.  File: dejagnu.info, Node: Extending DejaGnu, Next: Unit Testing, Prev: Customizing DejaGnu, Up: Top 6 Extending DejaGnu ******************* * Menu: * Adding A New Testsuite: Adding a new Testsuite. * Adding A New Tool:: * Adding A New Target:: * Adding A New Board:: * Board Config File Values: Board File Values. * Writing A Test Case:: * Debugging A Test Case:: * Adding A Test Case To A Testsuite.: Adding A Test Case To A Testsuite. * Hints On Writing A Test Case:: * Special variables used by test cases.: Test Case Variables.  File: dejagnu.info, Node: Adding a new Testsuite, Next: Adding A New Tool, Up: Extending DejaGnu 6.1 Adding A New Testsuite ========================== The testsuite for a new tool should always be located in that tools source directory. DejaGnu require the directory be named 'testsuite'. Under this directory, the test cases go in a subdirectory whose name begins with the tool name. For example, for a tool named _flubber_, each subdirectory containing testsuites must start with _"flubber."_.  File: dejagnu.info, Node: Adding A New Tool, Next: Adding A New Target, Prev: Adding a new Testsuite, Up: Extending DejaGnu 6.2 Adding 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 testsuites. Unfortunately, well-established testsuites 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 testsuites may make the prospect of creating an entirely new testsuite appear overwhelming. Nevertheless, it is quite straightforward to get a new testsuite going. There is one testsuite 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 testsuite for it. Reading this testsuite, and experimenting with it, is a good way to supplement the information in this section. (Thanks to Robert Lupton for creating calc and its testsuite--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 testsuite for a program example. * Create or select a directory to contain your new collection of tests. Change into that directory (shown here as 'testsuite'): 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 GNU Autoconf. * Create 'Makefile.in' (if you are using Autoconf), or 'Makefile.am'(if you are using Automake), the source file used by configure to build your 'Makefile'. If you are using GNU Automake.just add the keyword _dejagnu_ to the _AUTOMAKE_OPTIONS_ variable in your 'Makefile.am' file. This will add all the Makefile support needed to run DejaGnu, and support the *note Make Check:: target. 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. This is called the *note Local Config File:: The check target must run the 'runtest' program to execute the tests. The 'site.exp' target should usually set up (among other things) the $tool variable for the name of your program. If the local site.exp file is setup correctly, it is possible to execute the tests by merely typing 'runtest' on the command line. *Sample Makefile.in Fragment* # Look for a local version of DejaGnu, otherwise use one in the path RUNTEST = `if test -f $(top_srcdir)/../dejagnu/runtest; then \ echo $(top_srcdir) ../dejagnu/runtest; \ else \ echo runtest; \ fi` # The flags to pass to runtest RUNTESTFLAGS = # Execute the tests check: site.exp all $(RUNTEST) $(RUNTESTFLAGS) \ --tool ${example} --srcdir $(srcdir) # Make the local config file 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? * Create a directory (in 'testsuite') called 'config'. Make a _Tool Init File_ in this directory. Its name must start with the 'target_abbrev' value, or be named 'default.exp' so call it 'config/unix.exp' for our Unix based example. This is the file that contains the target-dependent procedures. Fortunately, on Unix, most of them do not have to do very much in order for 'runtest' to run. If the program being tested is not interactive, you can get away with this minimal 'unix.exp' to begin with: *Simple Batch Program Tool Init File* proc foo_exit {} {} proc foo_version {} {} If the program being tested is interactive, however, you might as well define a _start_ routine and invoke it by using an init file like this: *Simple Interactive Program Tool Init File* proc foo_exit {} {} proc foo_version {} {} proc foo_start {} { global ${examplename} spawn ${examplename} expect { -re "" {} } } # Start the program running we want to test foo_start * Create a directory whose name begins with your tool's name, to contain tests. For example, if your tool's name is _gcc_, then the directories all need to start with _"gcc."_. * Create a sample test file. 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. *Testing A New Tool Config* send_user "Testing: one, two...\n" * Back in the 'testsuite' (top level) directory, run 'configure'. Typically you do this while in the build directory. You may have to specify more of a path, if a suitable configure is not available in your execution path. * You are now ready to triumphantly type 'make check' or 'runtest'. You should see something like this: *Example Test Case Run* 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. * Write 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 A New Target, Next: Adding A New Board, Prev: Adding A New Tool, Up: Extending DejaGnu 6.3 Adding A New Target ======================= DejaGnu has some additional requirements for target support, beyond the general-purpose provisions of configure. DejaGnu 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. 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 @samp{-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. For cross targets, 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. 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: Adding A New Board, Next: Board File Values, Prev: Adding A New Target, Up: Extending DejaGnu 6.4 Adding A New Board ====================== Adding a new board consists of creating a new board config file. Examples are in 'dejagnu/baseboards'. Usually to make a new board file, it's easiest to copy an existing one. It is also possible to have your file be based on a _baseboard_ file with only one or two changes needed. Typically, this can be as simple as just changing the linker script. Once the new baseboard file is done, add it to the 'boards_DATA' list in the 'dejagnu/baseboards/Makefile.am', and regenerate the Makefile.in using automake. Then just rebuild and install DejaGnu. You can test it by: There is a crude inheritance scheme going on with board files, so you can include one board file into another, The two main procedures used to do this are 'load_generic_config' and 'load_base_board_description'. The generic config file contains other procedures used for a certain class of target. The board description file is where the board specific settings go. Commonly there are similar target environments with just different processors. *Testing a New Board Config File* make check RUNTESTFLAGS="--target_board=newboardfile". Here's an example of a board config file. There are several _helper procedures_ used in this example. A helper procedure is one that look for a tool of files in commonly installed locations. These are mostly used when testing in the build tree, because the executables to be tested are in the same tree as the new dejagnu files. The helper procedures are the ones in square braces _[]_, which is the Tcl execution characters. *Example Board Config File* # 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 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 "-Tsim.ld"; # The simulator doesn't return exit statuses and we need to indicate this. 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  File: dejagnu.info, Node: Board File Values, Next: Writing A Test Case, Prev: Adding A New Board, Up: Extending DejaGnu 6.5 Board Config File Values ============================ These fields are all in the 'board_info' array. These are all set by using the 'set_board_info' and 'add_board_info' procedures as required. The parameters are the field name, followed by the value that the field is set to or is added to the field, respectively. *Common Board Info Fields* Field Sample Value Description compiler "[find_gcc]" The path to the compiler to use. cflags "-mca" Compilation flags for the compiler. ldflags "[libgloss_link_flags] Linking flags for the [newlib_link_flags]" compiler. ldscript "-Wl,-Tidt.ld" The linker script to use when cross compiling. libs "-lgcc" Any additional libraries to link in. shell_prompt "cygmon>" The command prompt of the remote shell. hex_startaddr "0xa0020000" The Starting address as a string. start_addr 0xa0008000 The starting address as a value. startaddr "a0020000" exit_statuses_bad 1 Whether there is an accurate exit status. reboot_delay 10 The delay between power off and power on. unreliable 1 Whether communication with the board is unreliable. sim [find_sim] The path to the simulator to use. objcopy $tempfil The path to the 'objcopy' program. support_libs "${prefix_dir}/i386-coff/"Support libraries needed for cross compiling. addl_link_flags "-N" Additional link flags, rarely used. These fields are used by the GCC and GDB tests, and are mostly only useful to somewhat trying to debug a new board file for one of these tools. Many of these are used only by a few testcases, and their purpose is esoteric. These are listed with sample values as a guide to better guessing if you need to change any of these. *Board Info Fields For GCC & GDB* Field Sample Value Description strip $tempfile Strip the executable of symbols. gdb_load_offset "0x40050000" gdb_protocol "remote" The GDB debugging protocol to use. gdb_sect_offset "0x41000000"; gdb_stub_ldscript "-Wl,-Teva-stub.ld" The linker script to use with a GDB stub. gdb,cannot_call_functions1 Whether GDB can call functions on the target, gdb,noargs 1 Whether the target can take command line arguments. gdb,nosignals 1 Whether there are signals on the target. gdb,short_int 1 gdb,start_symbol "_start"; The starting symbol in the executable. gdb,target_sim_options "-sparclite" Special options to pass to the simulator. gdb,timeout 540 Timeout value to use for remote communication. gdb_init_command "set mipsfpu none" A single command to send to GDB before the program being debugged is started. gdb_init_commands "print/x \$fsr = 0x0" Same as _gdb_init_command_, except that this is a list, more commands can be added. gdb_load_offset "0x12020000" gdb_opts "-command gdbinit" gdb_prompt "\\(gdb960\\)" The prompt GDB is using. gdb_run_command "jump start" gdb_stub_offset "0x12010000" use_gdb_stub 1 Whether to use a GDB stub. use_vma_offset 1 wrap_m68k_aout 1 gcc,no_label_values 1 gcc,no_trampolines 1 gcc,no_varargs 1 gcc,stack_size 16384 Stack size to use with some GCC testcases. ieee_multilib_flags "-mieee"; is_simulator 1 needs_status_wrapper 1 no_double 1 no_long_long 1 noargs 1 nullstone,lib "mips-clock.c" nullstone,ticks_per_sec 3782018 sys_speed_value 200 target_install {sh-hms}  File: dejagnu.info, Node: Writing A Test Case, Next: Debugging A Test Case, Prev: Board File Values, Up: Extending DejaGnu 6.6 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 Tcl, 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: * 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. * Writing (and debugging) the generic Tcl procedures for compilation. * 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 Tcl procedures specialized for GDB testing.  File: dejagnu.info, Node: Debugging A Test Case, Next: Adding A Test Case To A Testsuite, Prev: Writing A Test Case, Up: Extending DejaGnu 6.7 Debugging A Test Case ========================= These are the kinds of debugging information available from DejaGnu: * 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 DejaGnu 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. * 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. 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. * Finally, if the value of _verbose_ is 3 or greater, DejaGnu 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 A Test Case To A Testsuite, Next: Hints On Writing A Test Case, Prev: Debugging A Test Case, Up: Extending DejaGnu 6.8 Adding A Test Case To A Testsuite. ====================================== 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: * 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++_). * Add the new directory name to the 'configdirs' definition in the 'configure.in' file for the testsuite directory. This way when 'make' and 'configure' next run, they include the new directory. * Add the new test case to the directory, as above. * To add support in the new directory for configure and make, you must also create a 'Makefile.in' and a 'configure.in'.  File: dejagnu.info, Node: Hints On Writing A Test Case, Next: Test Case Variables, Prev: Adding A Test Case To A Testsuite, Up: Extending DejaGnu 6.9 Hints On Writing A Test Case ================================ 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. 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: Test Case Variables, Prev: Hints On Writing A Test Case, Up: Extending DejaGnu 6.10 Special variables used by test cases. ========================================== There are special variables used by test cases. These contain other information from DejaGnu. Your test cases can use these variables, with conventional meanings (as well as the variables saved in 'site.exp'. You can use the value of these variables, but they should never be changed. $prms_id The tracking system (e.g. GNATS) number identifying a corresponding bugreport. (_0_} if you do not specify it in the test script.) $item 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. $expect_out(buffer) The output from the last command. This is an internal variable set by Expect. More information can be found in the Expect manual. $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: Unit Testing, Next: Reference, Prev: Extending DejaGnu, Up: Top 7 Unit Testing ************** * Menu: * What Is Unit Testing ?:: * The dejagnu.h Header File: The dejagnu_h Header File.  File: dejagnu.info, Node: What Is Unit Testing ?, Next: The dejagnu_h Header File, Up: Unit Testing 7.1 What Is Unit Testing ? ========================== Most regression testing as done by DejaGnu is system testing. This is the complete application is tested all at once. Unit testing is for testing single files, or small libraries. In this case, each file is linked with a test case in C or C++, and each function or class and method is tested in series, with the test case having to check private data or global variables to see if the function or method worked. This works particularly well for testing APIs and at level where it is easier to debug them, than by needing to trace through the entire application. Also if there is a specification for the API to be tested, the testcase can also function as a compliance test.  File: dejagnu.info, Node: The dejagnu_h Header File, Prev: What Is Unit Testing ?, Up: Unit Testing 7.2 The dejagnu.h Header File ============================= DejaGnu uses a single header file to assist in unit testing. As this file also produces its one test state output, it can be run stand-alone, which is very useful for testing on embedded systems. This header file has a C and C++ API for the test states, with simple totals, and standardized output. Because the output has been standardized, DejaGnu can be made to work with this test case, without writing almost any Tcl. The library module, dejagnu.exp, will look for the output messages, and then merge them into DejaGnu's.  File: dejagnu.info, Node: Reference, Next: Unit Testing API, Prev: Unit Testing, Up: Top 8 Reference *********** * Menu: * Obtaining DejaGnu:: * Installation:: * Builtin Procedures:: * File Map::  File: dejagnu.info, Node: Obtaining DejaGnu, Next: Installation, Up: Reference 8.1 Obtaining DejaGnu ===================== You can obtain DejaGnu from the DejaGnu web site at the Free Software Foundation (http://www.gnu.org), which is at www.gnu.org/software/dejagnu/ (http://www.gnu.org/software/dejagnu/)  File: dejagnu.info, Node: Installation, Next: Builtin Procedures, Prev: Obtaining DejaGnu, Up: Reference 8.2 Installation ================ 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 8.2.1 Configuring DejaGnu ------------------------- 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 separate tree for objects, execute the configure script from the source tree like this: ../dejagnu-1.5.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 testsuites; these are available separately. Testsuites for the GNU development tools are included in those releases. 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 check_ to build auxiliary programs required by some of the tests, and run the test suites.  File: dejagnu.info, Node: Installing DejaGnu, Prev: Configuring DejaGnu, Up: Installation 8.2.2 Installing DejaGnu ------------------------ To install DejaGnu in your file system (either in '/usr/local', or as specified by your '--prefix' option to _configure_), execute. eg$ make install _make install_does these things for DejaGnu: * 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. * Create another directory in the 'share' directory, called 'dejagnu', and copy all the library files into it. * Create a directory in the 'dejagnu/share' directory, called 'config', and copy all the configuration files into it. * Copy the _runtest_ shell script into '$exec_prefix/bin'. * Copy 'runtest.exp' into '$exec_prefix/lib/dejagnu'. This is the main Tcl code implementing DejaGnu.  File: dejagnu.info, Node: Builtin Procedures, Next: File Map, Prev: Installation, Up: Reference 8.3 Builtin Procedures ====================== DejaGnu provides these Tcl procedures. * Menu: * Core Internal Procedures:: * Procedures For Remote Communication:: * Procedures For Using Utilities to Connect: connprocs. * Procedures For Target Boards:: * Target Database Procedures: target database library file. * Platform Dependent Procedures: platform dependent procedures. * Utility Procedures:: * Libgloss, A Free BSP: Libgloss. * Procedures for debugging your Tcl code.: Debugging Procedures.  File: dejagnu.info, Node: Core Internal Procedures, Next: Procedures For Remote Communication, Up: Builtin Procedures 8.3.1 Core Internal Procedures ------------------------------ * Menu: * Mail_file Procedure: mail_file procedure. * Open_logs Procedure: open_logs procedure. * Close_logs Procedure: close_logs procedure. * Isbuild Procedure: isbuild procedure. * Is_remote Procedure: is_remote procedure. * is3way Procedure: is3way procedure. * Ishost Procedure: ishost procedure. * Istarget Procedure: istarget procedure. * Isnative Procedure: isnative procedure. * Unknown Procedure: unknown procedure. * Clone_output Procedure: clone_output procedure. * Reset_vars Procedure: reset_vars procedure. * Log_and_exit Procedure: log_and_exit procedure. * Log_summary Procedure: log_summary procedure. * Cleanup Procedure: cleanup procedure. * Setup_xfail Procedure: setup_xfail procedure. * Record_test Procedure: record_test procedure. * Pass Procedure: pass procedure. * Fail Procedure: fail procedure. * Xpass Procedure: xpass procedure. * Xfail Procedure: xfail procedure. * Set_warning_threshold Procedure: set_warning_threshold procedure. * Get_warning_threshold Procedure: get_warning_threshold procedure. * Warning Procedure: warning procedure. * Perror Procedure: perror procedure. * Note Procedure: note procedure. * Untested Procedure: untested procedure. * Unresolved Procedure: unresolved procedure. * Unsupported Procedure: unsupported procedure. * Init_testcounts Procedure: init_testcounts procedure. * Incr_count Procedure: incr_count procedure. * transform Procedure: transform procedure. * Check_conditional_xfail Procedure: check_conditional_xfail procedure. * Clear_xfail Procedure: clear_xfail procedure. * Verbose Procedure: verbose procedure. * Load_lib Procedure: load_lib procedure.  File: dejagnu.info, Node: mail_file procedure, Next: open_logs procedure, Up: Core Internal Procedures 8.3.1.1 Mail_file Procedure ........................... mail_file(file to subject); ''  File: dejagnu.info, Node: open_logs procedure, Next: close_logs procedure, Prev: mail_file procedure, Up: Core Internal Procedures 8.3.1.2 Open_logs Procedure ........................... open_logs();  File: dejagnu.info, Node: close_logs procedure, Next: isbuild procedure, Prev: open_logs procedure, Up: Core Internal Procedures 8.3.1.3 Close_logs Procedure ............................ close_logs();  File: dejagnu.info, Node: isbuild procedure, Next: is_remote procedure, Prev: close_logs procedure, Up: Core Internal Procedures 8.3.1.4 Isbuild Procedure ......................... 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. isbuild(pattern); 'pattern'  File: dejagnu.info, Node: is_remote procedure, Next: is3way procedure, Prev: isbuild procedure, Up: Core Internal Procedures 8.3.1.5 Is_remote Procedure ........................... is_remote(board); ''  File: dejagnu.info, Node: is3way procedure, Next: ishost procedure, Prev: is_remote procedure, Up: Core Internal Procedures 8.3.1.6 is3way Procedure ........................ Tests for a Canadian cross. This is when the tests will be run on a remotely hosted cross compiler. If it is a Canadian cross, then the result is _1_; otherwise the result is _0_. is3way();  File: dejagnu.info, Node: ishost procedure, Next: istarget procedure, Prev: is3way procedure, Up: Core Internal Procedures 8.3.1.7 Ishost Procedure ........................ 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). ishost(pattern); ''  File: dejagnu.info, Node: istarget procedure, Next: isnative procedure, Prev: ishost procedure, Up: Core Internal Procedures 8.3.1.8 Istarget Procedure .......................... 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. istarget(args); ''  File: dejagnu.info, Node: isnative procedure, Next: unknown procedure, Prev: istarget procedure, Up: Core Internal Procedures 8.3.1.9 Isnative Procedure .......................... 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_. isnative();  File: dejagnu.info, Node: unknown procedure, Next: clone_output procedure, Prev: isnative procedure, Up: Core Internal Procedures 8.3.1.10 Unknown Procedure .......................... unknown(args); 'args'  File: dejagnu.info, Node: clone_output procedure, Next: reset_vars procedure, Prev: unknown procedure, Up: Core Internal Procedures 8.3.1.11 Clone_output Procedure ............................... clone_output(message); 'message'  File: dejagnu.info, Node: reset_vars procedure, Next: log_and_exit procedure, Prev: clone_output procedure, Up: Core Internal Procedures 8.3.1.12 Reset_vars Procedure ............................. reset_vars();  File: dejagnu.info, Node: log_and_exit procedure, Next: log_summary procedure, Prev: reset_vars procedure, Up: Core Internal Procedures 8.3.1.13 Log_and_exit Procedure ............................... log_and_exit();  File: dejagnu.info, Node: log_summary procedure, Next: cleanup procedure, Prev: log_and_exit procedure, Up: Core Internal Procedures 8.3.1.14 Log_summary Procedure .............................. log_summary(args); 'args'  File: dejagnu.info, Node: cleanup procedure, Next: setup_xfail procedure, Prev: log_summary procedure, Up: Core Internal Procedures 8.3.1.15 Cleanup Procedure .......................... cleanup();  File: dejagnu.info, Node: setup_xfail procedure, Next: record_test procedure, Prev: cleanup procedure, Up: Core Internal Procedures 8.3.1.16 Setup_xfail Procedure .............................. 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. 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* 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. setup_xfail(config bugid); 'config' The config triplet to trigger whether this is an unexpected or expect failure. 'bugid' The optional bugid, used to tie this test case to a bug tracking system.  File: dejagnu.info, Node: record_test procedure, Next: pass procedure, Prev: setup_xfail procedure, Up: Core Internal Procedures 8.3.1.17 Record_test Procedure .............................. record_test(type message args); 'type' 'message' 'args'  File: dejagnu.info, Node: pass procedure, Next: fail procedure, Prev: record_test procedure, Up: Core Internal Procedures 8.3.1.18 Pass Procedure ....................... 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'. pass(string); 'string' The string to use for this PASS message.  File: dejagnu.info, Node: fail procedure, Next: xpass procedure, Prev: pass procedure, Up: Core Internal Procedures 8.3.1.19 Fail Procedure ....................... 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'. fail(string); 'string' The string to use for this FAIL message.  File: dejagnu.info, Node: xpass procedure, Next: xfail procedure, Prev: fail procedure, Up: Core Internal Procedures 8.3.1.20 Xpass Procedure ........................ Declares a test to have unexpectedly passed, when it was expected to be a failure. 'xpass' writes in the log files a message beginning with _XPASS_ (or _XFAIL_, if failure was expected), appending the argument 'string'. xpass(string); 'string' The string to use for this output state.  File: dejagnu.info, Node: xfail procedure, Next: set_warning_threshold procedure, Prev: xpass procedure, Up: Core Internal Procedures 8.3.1.21 Xfail Procedure ........................ Declares a test to have expectedly failed. 'xfail' writes in the log files a message beginning with _XFAIL_ (or _PASS_, if success was expected), appending the argument 'string'. xpass(string); 'string' The string to use for this output state.  File: dejagnu.info, Node: set_warning_threshold procedure, Next: get_warning_threshold procedure, Prev: xfail procedure, Up: Core Internal Procedures 8.3.1.22 Set_warning_threshold Procedure ........................................ 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_. set_warning_threshold(threshold); 'threshold' This is the value of the new warning threshold.  File: dejagnu.info, Node: get_warning_threshold procedure, Next: warning procedure, Prev: set_warning_threshold procedure, Up: Core Internal Procedures 8.3.1.23 Get_warning_threshold Procedure ........................................ Returns the current value of '{warning_threshold'. The default value is 3. This value controls how many 'warning' procedures can be called before becoming _UNRESOLVED_. get_warning_threshold();  File: dejagnu.info, Node: warning procedure, Next: perror procedure, Prev: get_warning_threshold procedure, Up: Core Internal Procedures 8.3.1.24 Warning Procedure .......................... 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 'perror' 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. warning(string number ); 'string' 'number' The optional number to set the error counter. This is only used to fake out the counter when using the 'xfail' procedure to control when it flips the output over to _UNRESOLVED_ state.  File: dejagnu.info, Node: perror procedure, Next: note procedure, Prev: warning procedure, Up: Core Internal Procedures 8.3.1.25 Perror Procedure ......................... Declares a severe error in the testing framework itself. 'perror' writes in the log files a message beginning with _ERROR_, appending the argument 'string'. 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. perror(string number ); 'string' 'number' The optional number to set the error counter. This is only used to fake out the counter when using the 'xfail' procedure to control when it flips the output over to _UNRESOLVED_ state.  File: dejagnu.info, Node: note procedure, Next: untested procedure, Prev: perror procedure, Up: Core Internal Procedures 8.3.1.26 Note Procedure ....................... 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. The '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'. note(string); 'string' The string to use for this note.  File: dejagnu.info, Node: untested procedure, Next: unresolved procedure, Prev: note procedure, Up: Core Internal Procedures 8.3.1.27 Untested Procedure ........................... 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. untested(string); 'string' The string to use for this output state.  File: dejagnu.info, Node: unresolved procedure, Next: unsupported procedure, Prev: untested procedure, Up: Core Internal Procedures 8.3.1.28 Unresolved Procedure ............................. 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). unresolved(string); 'string' The string to use for this output state.  File: dejagnu.info, Node: unsupported procedure, Next: init_testcounts procedure, Prev: unresolved procedure, Up: Core Internal Procedures 8.3.1.29 Unsupported Procedure .............................. 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. unsupported(string); 'string' The string to use for this output state.  File: dejagnu.info, Node: init_testcounts procedure, Next: incr_count procedure, Prev: unsupported procedure, Up: Core Internal Procedures 8.3.1.30 Init_testcounts Procedure .................................. init_testcounts();  File: dejagnu.info, Node: incr_count procedure, Next: transform procedure, Prev: init_testcounts procedure, Up: Core Internal Procedures 8.3.1.31 Incr_count Procedure ............................. incr_count(name args); 'name' 'args'  File: dejagnu.info, Node: transform procedure, Next: check_conditional_xfail procedure, Prev: incr_count procedure, Up: Core Internal Procedures 8.3.1.32 transform Procedure ............................ 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: For example, for a cross compiler supporting the _m68k-vxworks_ configuration, the result of transform 'gcc' is 'm68k-vxworks-gcc'. transform(toolname); 'toolname' The name of the cross-development program to transform.  File: dejagnu.info, Node: check_conditional_xfail procedure, Next: clear_xfail procedure, Prev: transform procedure, Up: Core Internal Procedures 8.3.1.33 Check_conditional_xfail Procedure .......................................... This procedure adds a conditional xfail, based on compiler options used to create a test case executable. If an include options is found in the compiler flags, and it's the right architecture, it'll trigger an _XFAIL_. Otherwise it'll produce an ordinary _FAIL_. You can also specify flags to exclude. This makes a result be a _FAIL_, even if the included options are found. To set the conditional, set the variable 'compiler_conditional_xfail_data' to the fields "[message string] [targets list] [includes list] [excludes list]" (descriptions below). This is the checked at pass/fail decision time, so there is no need to call the procedure yourself, unless you wish to know if it gets triggered. After a pass/fail, the variable is reset, so it doesn't effect other tests. It returns _1_ if the conditional is true, or _0_ if the conditional is false. check_conditional_xfail(message targets includes excludes); 'message' This is the message to print with the normal test result. 'targets' This is a string with the list targets to activate this conditional on. 'includes' This is a list of sets of options to search for in the compiler options to activate this conditional. If the list of sets of options is empty or if any set of the options matches, then this conditional is true. (It may be useful to specify an empty list of include sets if the conditional is always true unless one of the exclude sets matches.) 'excludes' This is a list of sets of options to search for in the compiler options to activate this conditional. If any set of the options matches, (regardless of whether any of the include sets match) then this conditional is de-activated. *Specifying the conditional xfail data* set compiler_conditional_xfail_data { \ "I sure wish I knew why this was hosed" \ "sparc*-sun*-* *-pc-*-*" \ {"-Wall -v" "-O3"} \ {"-O1" "-Map"} \ } What this does is it matches only for these two targets if "-Wall -v" or "-O3" is set, but neither "-O1" or "-Map" is set. For a set to match, the options specified are searched for independently of each other, so a "-Wall -v" matches either "-Wall -v" or "-v -Wall". A space separates the options in the string. Glob-style regular expressions are also permitted.  File: dejagnu.info, Node: clear_xfail procedure, Next: verbose procedure, Prev: check_conditional_xfail procedure, Up: Core Internal Procedures 8.3.1.34 Clear_xfail Procedure .............................. 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'. clear_xfail(config); 'config' The configuration triplets to clear.  File: dejagnu.info, Node: verbose procedure, Next: load_lib procedure, Prev: clear_xfail procedure, Up: Core Internal Procedures 8.3.1.35 Verbose Procedure .......................... 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 '-x' argument to log the test results into a parsable XML file. Use the optional '-n' argument to print string without a trailing newline. Use the optional '--' argument if string begins with "-". verbose(-log -x -n -r string number); '-x' '-log' '-n' '--' 'string' 'number'  File: dejagnu.info, Node: load_lib procedure, Prev: verbose procedure, Up: Core Internal Procedures 8.3.1.36 Load_lib Procedure ........................... Loads a DejaGnu library file by searching the default fixed paths built into DejaGnu. 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. load_lib(filespec); 'filespec' The name of the DejaGnu library file to load. The global variable 'libdirs', handled as a list, is appended to the default fixed paths built into DejaGnu. *Additional search directories for load_lib* # append a non-standard search path global libdirs lappend libdirs $srcdir/../../gcc/testsuite/lib # now loading $srcdir/../../gcc/testsuite/lib/foo.exp works load_lib foo.exp  File: dejagnu.info, Node: Procedures For Remote Communication, Next: connprocs, Prev: Core Internal Procedures, Up: Builtin Procedures 8.3.2 Procedures For Remote Communication ----------------------------------------- 'lib/remote.exp' defines these functions, for establishing and managing communications. 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. * Menu: * Call_remote Procedure: call_remote procedure. * Check_for_board_status Procedure: check_for_board_status procedure. * File_on_build Procedure: file_on_build procedure. * File_on_host Procedure: file_on_host procedure. * Local_exec Procedure: local_exec procedure. * Remote_binary Procedure: remote_binary procedure. * Remote_close Procedure: remote_close procedure. * Remote_download Procedure: remote_download procedure. * Remote_exec Procedure: remote_exec procedure. * Remote_expect Procedure: remote_expect procedure. * Remote_file Procedure: remote_file procedure. * Remote_ld Procedure: remote_ld procedure. * Remote_load Procedure: remote_load procedure. * Remote_open Procedure: remote_open procedure. * Remote_pop_conn Procedure: remote_pop_conn procedure. * Remote_push_conn Procedure: remote_push_conn procedure. * Remote_raw_binary Procedure: remote_raw_binary procedure. * Remote_raw_close Procedure: remote_raw_close procedure. * Remote_raw_file Procedure: remote_raw_file procedure. * remote_raw_ld Procedure: remote_raw_ld procedure. * Remote_raw_load Procedure: remote_raw_load procedure. * Remote_raw_open Procedure: remote_raw_open procedure. * Remote_raw_send Procedure: remote_raw_send procedure. * Remote_raw_spawn Procedure: remote_raw_spawn procedure. * Remote_raw_transmit Procedure: remote_raw_transmit procedure. * Remote_raw_wait Procedure: remote_raw_wait procedure. * Remote_reboot Procedure: remote_reboot procedure. * Remote_send Procedure: remote_send procedure. * Remote_spawn Procedure: remote_spawn procedure. * Remote_swap_conn Procedure: remote_swap_conn procedure. * Remote_transmit Procedure: remote_transmit procedure. * Remote_upload Procedure: remote_upload procedure. * Remote_wait Procedure: remote_wait procedure. * Standard_close Procedure: standard_close procedure. * Standard_download Procedure: standard_download procedure. * Standard_exec Procedure: standard_exec procedure. * Standard_file Procedure: standard_file procedure. * Standard_load Procedure: standard_load procedure. * Standard_reboot Procedure: standard_reboot procedure. * Standard_send Procedure: standard_send procedure. * Standard_spawn Procedure: standard_spawn procedure. * Standard_transmit Procedure: standard_transmit procedure. * Standard_upload Procedure: standard_upload procedure. * Standard_wait Procedure: standard_wait procedure. * Unix_clean_filename Procedure: unix_clean_filename procedure.  File: dejagnu.info, Node: call_remote procedure, Next: check_for_board_status procedure, Up: Procedures For Remote Communication 8.3.2.1 Call_remote Procedure ............................. call_remote(type proc dest args); 'proc' 'dest' 'args'  File: dejagnu.info, Node: check_for_board_status procedure, Next: file_on_build procedure, Prev: call_remote procedure, Up: Procedures For Remote Communication 8.3.2.2 Check_for_board_status Procedure ........................................ check_for_board_status(variable); 'variable'  File: dejagnu.info, Node: file_on_build procedure, Next: file_on_host procedure, Prev: check_for_board_status procedure, Up: Procedures For Remote Communication 8.3.2.3 File_on_build Procedure ............................... file_on_build(op file args); 'op' 'file' 'args'  File: dejagnu.info, Node: file_on_host procedure, Next: local_exec procedure, Prev: file_on_build procedure, Up: Procedures For Remote Communication 8.3.2.4 File_on_host Procedure .............................. file_on_host(op file args); 'op' 'file' 'args'  File: dejagnu.info, Node: local_exec procedure, Next: remote_binary procedure, Prev: file_on_host procedure, Up: Procedures For Remote Communication 8.3.2.5 Local_exec Procedure ............................ local_exec(commandline inp outp timeout); 'inp' 'outp' 'timeout'  File: dejagnu.info, Node: remote_binary procedure, Next: remote_close procedure, Prev: local_exec procedure, Up: Procedures For Remote Communication 8.3.2.6 Remote_binary Procedure ............................... remote_binary(host); 'host'  File: dejagnu.info, Node: remote_close procedure, Next: remote_download procedure, Prev: remote_binary procedure, Up: Procedures For Remote Communication 8.3.2.7 Remote_close Procedure .............................. remote_close(shellid); 'shellid' This is the 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.  File: dejagnu.info, Node: remote_download procedure, Next: remote_exec procedure, Prev: remote_close procedure, Up: Procedures For Remote Communication 8.3.2.8 Remote_download Procedure ................................. remote_download(dest file args); 'dest' 'file' 'args'  File: dejagnu.info, Node: remote_exec procedure, Next: remote_expect procedure, Prev: remote_download procedure, Up: Procedures For Remote Communication 8.3.2.9 Remote_exec Procedure ............................. remote_exec(hostname program args); 'hostname' 'program' 'args'  File: dejagnu.info, Node: remote_expect procedure, Next: remote_file procedure, Prev: remote_exec procedure, Up: Procedures For Remote Communication 8.3.2.10 Remote_expect Procedure ................................ remote_expect(board timeout args); 'board' 'timeout' 'args'  File: dejagnu.info, Node: remote_file procedure, Next: remote_ld procedure, Prev: remote_expect procedure, Up: Procedures For Remote Communication 8.3.2.11 Remote_file Procedure .............................. remote_file(dest args); 'dest' 'args'  File: dejagnu.info, Node: remote_ld procedure, Next: remote_load procedure, Prev: remote_file procedure, Up: Procedures For Remote Communication 8.3.2.12 Remote_ld Procedure ............................ remote_ld(dest prog); 'dest' 'prog'  File: dejagnu.info, Node: remote_load procedure, Next: remote_open procedure, Prev: remote_ld procedure, Up: Procedures For Remote Communication 8.3.2.13 Remote_load Procedure .............................. remote_load(dest prog args); 'dest' 'prog' 'args'  File: dejagnu.info, Node: remote_open procedure, Next: remote_pop_conn procedure, Prev: remote_load procedure, Up: Procedures For Remote Communication 8.3.2.14 Remote_open Procedure .............................. remote_open(type); 'type' 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.  File: dejagnu.info, Node: remote_pop_conn procedure, Next: remote_push_conn procedure, Prev: remote_open procedure, Up: Procedures For Remote Communication 8.3.2.15 Remote_pop_conn Procedure .................................. remote_pop_conn(host); 'host'  File: dejagnu.info, Node: remote_push_conn procedure, Next: remote_raw_binary procedure, Prev: remote_pop_conn procedure, Up: Procedures For Remote Communication 8.3.2.16 Remote_push_conn Procedure ................................... remote_push_conn(host); 'host'  File: dejagnu.info, Node: remote_raw_binary procedure, Next: remote_raw_close procedure, Prev: remote_push_conn procedure, Up: Procedures For Remote Communication 8.3.2.17 Remote_raw_binary Procedure .................................... remote_raw_binary(host); 'host'  File: dejagnu.info, Node: remote_raw_close procedure, Next: remote_raw_file procedure, Prev: remote_raw_binary procedure, Up: Procedures For Remote Communication 8.3.2.18 Remote_raw_close Procedure ................................... remote_raw_close(host); 'host'  File: dejagnu.info, Node: remote_raw_file procedure, Next: remote_raw_ld procedure, Prev: remote_raw_close procedure, Up: Procedures For Remote Communication 8.3.2.19 Remote_raw_file Procedure .................................. remote_raw_file(dest args); 'dest' 'args'  File: dejagnu.info, Node: remote_raw_ld procedure, Next: remote_raw_load procedure, Prev: remote_raw_file procedure, Up: Procedures For Remote Communication 8.3.2.20 remote_raw_ld Procedure ................................ remote_raw_ld(dest prog); 'dest' 'prog'  File: dejagnu.info, Node: remote_raw_load procedure, Next: remote_raw_open procedure, Prev: remote_raw_ld procedure, Up: Procedures For Remote Communication 8.3.2.21 Remote_raw_load Procedure .................................. remote_raw_load(dest prog args); 'dest' 'prog' 'args'  File: dejagnu.info, Node: remote_raw_open procedure, Next: remote_raw_send procedure, Prev: remote_raw_load procedure, Up: Procedures For Remote Communication 8.3.2.22 Remote_raw_open Procedure .................................. remote_raw_open(args); 'args'  File: dejagnu.info, Node: remote_raw_send procedure, Next: remote_raw_spawn procedure, Prev: remote_raw_open procedure, Up: Procedures For Remote Communication 8.3.2.23 Remote_raw_send Procedure .................................. remote_raw_send(dest string); 'dest' 'string'  File: dejagnu.info, Node: remote_raw_spawn procedure, Next: remote_raw_transmit procedure, Prev: remote_raw_send procedure, Up: Procedures For Remote Communication 8.3.2.24 Remote_raw_spawn Procedure ................................... remote_raw_spawn(dest commandline); 'dest' 'commandline'  File: dejagnu.info, Node: remote_raw_transmit procedure, Next: remote_raw_wait procedure, Prev: remote_raw_spawn procedure, Up: Procedures For Remote Communication 8.3.2.25 Remote_raw_transmit Procedure ...................................... remote_raw_transmit(dest file); 'dest' 'file'  File: dejagnu.info, Node: remote_raw_wait procedure, Next: remote_reboot procedure, Prev: remote_raw_transmit procedure, Up: Procedures For Remote Communication 8.3.2.26 Remote_raw_wait Procedure .................................. remote_raw_wait(dest timeout); 'dest' 'timeout'  File: dejagnu.info, Node: remote_reboot procedure, Next: remote_send procedure, Prev: remote_raw_wait procedure, Up: Procedures For Remote Communication 8.3.2.27 Remote_reboot Procedure ................................ Return value of this function depends on actual implementation of reboot that will be used, in practice it is expected that 'remote_reboot' returns _1_ on success and _0_ on failure. remote_reboot(host); 'host'  File: dejagnu.info, Node: remote_send procedure, Next: remote_spawn procedure, Prev: remote_reboot procedure, Up: Procedures For Remote Communication 8.3.2.28 Remote_send Procedure .............................. remote_send(dest string); 'dest' 'string'  File: dejagnu.info, Node: remote_spawn procedure, Next: remote_swap_conn procedure, Prev: remote_send procedure, Up: Procedures For Remote Communication 8.3.2.29 Remote_spawn Procedure ............................... remote_spawn(dest commandline args); 'dest' 'commandline' 'args'  File: dejagnu.info, Node: remote_swap_conn procedure, Next: remote_transmit procedure, Prev: remote_spawn procedure, Up: Procedures For Remote Communication 8.3.2.30 Remote_swap_conn Procedure ................................... remote_swap_conn(host); ''  File: dejagnu.info, Node: remote_transmit procedure, Next: remote_upload procedure, Prev: remote_swap_conn procedure, Up: Procedures For Remote Communication 8.3.2.31 Remote_transmit Procedure .................................. remote_transmit(dest file); 'dest' 'file'  File: dejagnu.info, Node: remote_upload procedure, Next: remote_wait procedure, Prev: remote_transmit procedure, Up: Procedures For Remote Communication 8.3.2.32 Remote_upload Procedure ................................ remote_upload(dest srcfile arg); 'dest' 'srcfile' 'arg'  File: dejagnu.info, Node: remote_wait procedure, Next: standard_close procedure, Prev: remote_upload procedure, Up: Procedures For Remote Communication 8.3.2.33 Remote_wait Procedure .............................. remote_wait(dest timeout); 'dest' 'timeout'  File: dejagnu.info, Node: standard_close procedure, Next: standard_download procedure, Prev: remote_wait procedure, Up: Procedures For Remote Communication 8.3.2.34 Standard_close Procedure ................................. standard_close(host); 'host'  File: dejagnu.info, Node: standard_download procedure, Next: standard_exec procedure, Prev: standard_close procedure, Up: Procedures For Remote Communication 8.3.2.35 Standard_download Procedure .................................... standard_download(dest file destfile); 'dest' 'file' 'destfile'  File: dejagnu.info, Node: standard_exec procedure, Next: standard_file procedure, Prev: standard_download procedure, Up: Procedures For Remote Communication 8.3.2.36 Standard_exec Procedure ................................ standard_exec(hostname args); 'hostname' 'args'  File: dejagnu.info, Node: standard_file procedure, Next: standard_load procedure, Prev: standard_exec procedure, Up: Procedures For Remote Communication 8.3.2.37 Standard_file Procedure ................................ standard_file(dest op args); ''  File: dejagnu.info, Node: standard_load procedure, Next: standard_reboot procedure, Prev: standard_file procedure, Up: Procedures For Remote Communication 8.3.2.38 Standard_load Procedure ................................ standard_load(dest prog args); 'dest' 'prog' 'args'  File: dejagnu.info, Node: standard_reboot procedure, Next: standard_send procedure, Prev: standard_load procedure, Up: Procedures For Remote Communication 8.3.2.39 Standard_reboot Procedure .................................. It looks like that this procedure is never called, instead '${board}_reboot' defined in 'base-config.exp' will be used because it has higher priority and 'base-config.exp' is always imported by 'runtest'. standard_reboot(host); 'host'  File: dejagnu.info, Node: standard_send procedure, Next: standard_spawn procedure, Prev: standard_reboot procedure, Up: Procedures For Remote Communication 8.3.2.40 Standard_send Procedure ................................ standard_send(dest string); 'dest' 'string'  File: dejagnu.info, Node: standard_spawn procedure, Next: standard_transmit procedure, Prev: standard_send procedure, Up: Procedures For Remote Communication 8.3.2.41 Standard_spawn Procedure ................................. standard_spawn(dest commandline); 'dest' 'commandline'  File: dejagnu.info, Node: standard_transmit procedure, Next: standard_upload procedure, Prev: standard_spawn procedure, Up: Procedures For Remote Communication 8.3.2.42 Standard_transmit Procedure .................................... standard_transmit(dest file); 'dest' 'file'  File: dejagnu.info, Node: standard_upload procedure, Next: standard_wait procedure, Prev: standard_transmit procedure, Up: Procedures For Remote Communication 8.3.2.43 Standard_upload Procedure .................................. standard_upload(dest srcfile destfile); 'dest' 'srcfile' 'destfile'  File: dejagnu.info, Node: standard_wait procedure, Next: unix_clean_filename procedure, Prev: standard_upload procedure, Up: Procedures For Remote Communication 8.3.2.44 Standard_wait Procedure ................................ standard_wait(dest timeout); 'dest' 'timeout'  File: dejagnu.info, Node: unix_clean_filename procedure, Prev: standard_wait procedure, Up: Procedures For Remote Communication 8.3.2.45 Unix_clean_filename Procedure ...................................... unix_clean_filename(dest file); 'dest' 'file'  File: dejagnu.info, Node: connprocs, Next: Procedures For Target Boards, Prev: Procedures For Remote Communication, Up: Builtin Procedures 8.3.3 Procedures For Using Utilities to Connect ----------------------------------------------- telnet, rsh, tip, kermit * Menu: * telnet Procedure: telnet procedure. * rsh Procedure: rsh procedure. * Tip Procedure: tip procedure. * Kermit Procedure: kermit procedure. * kermit_open Procedure: kermit_open procedure. * Kermit_command Procedure: kermit_command procedure. * Kermit_send Procedure: kermit_send procedure. * Kermit_transmit Procedure: kermit_transmit procedure. * Telnet_open Procedure: telnet_open procedure. * Telnet_binary Procedure: telnet_binary procedure. * Telnet_transmit Procedure: telnet_transmit procedure. * Tip_open Procedure: tip_open procedure. * Rlogin_open Procedure: rlogin_open procedure. * Rlogin_spawn Procedure: rlogin_spawn procedure. * Rsh_open Procedure: rsh_open procedure. * Rsh_download Procedure: rsh_download procedure. * Rsh_upload Procedure: rsh_upload procedure. * Rsh_exec Procedure: rsh_exec procedure. * Ftp_open Procedure: ftp_open procedure. * Ftp_upload Procedure: ftp_upload procedure. * Ftp_download Procedure: ftp_download procedure. * Ftp_close Procedure: ftp_close procedure. * Tip_download Procedure: tip_download procedure.  File: dejagnu.info, Node: telnet procedure, Next: rsh procedure, Up: connprocs 8.3.3.1 telnet Procedure ........................ telnet(hostname port); rlogin(hostname);  File: dejagnu.info, Node: rsh procedure, Next: tip procedure, Prev: telnet procedure, Up: connprocs 8.3.3.2 rsh Procedure ..................... rsh(hostname); 'hostname' This 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, separated by a _:_. If host or target is used in the 'hostname' field, than the config array is used for all information.  File: dejagnu.info, Node: tip procedure, Next: kermit procedure, Prev: rsh procedure, Up: connprocs 8.3.3.3 Tip Procedure ..................... tip(port); 'port' 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. the config array is used for all information.  File: dejagnu.info, Node: kermit procedure, Next: kermit_open procedure, Prev: tip procedure, Up: connprocs 8.3.3.4 Kermit Procedure ........................ kermit(port bps); 'port' Connect using the program 'kermit'. 'Port' is the device name, e.g. '/dev/ttyb'. 'bps' 'bps' is the line speed to use (in its 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. the config array is used for all information.  File: dejagnu.info, Node: kermit_open procedure, Next: kermit_command procedure, Prev: kermit procedure, Up: connprocs 8.3.3.5 kermit_open Procedure ............................. kermit_open(dest args); 'dest' 'args'  File: dejagnu.info, Node: kermit_command procedure, Next: kermit_send procedure, Prev: kermit_open procedure, Up: connprocs 8.3.3.6 Kermit_command Procedure ................................ kermit_command(dest args); 'dest' 'args'  File: dejagnu.info, Node: kermit_send procedure, Next: kermit_transmit procedure, Prev: kermit_command procedure, Up: connprocs 8.3.3.7 Kermit_send Procedure ............................. kermit_send(dest string args); 'dest' 'string' 'args'  File: dejagnu.info, Node: kermit_transmit procedure, Next: telnet_open procedure, Prev: kermit_send procedure, Up: connprocs 8.3.3.8 Kermit_transmit Procedure ................................. kermit_transmit(dest file args); 'dest' 'file' 'args'  File: dejagnu.info, Node: telnet_open procedure, Next: telnet_binary procedure, Prev: kermit_transmit procedure, Up: connprocs 8.3.3.9 Telnet_open Procedure ............................. telnet_open(hostname args); 'hostname' 'args'  File: dejagnu.info, Node: telnet_binary procedure, Next: telnet_transmit procedure, Prev: telnet_open procedure, Up: connprocs 8.3.3.10 Telnet_binary Procedure ................................ telnet_binary(hostname); 'hostname'  File: dejagnu.info, Node: telnet_transmit procedure, Next: tip_open procedure, Prev: telnet_binary procedure, Up: connprocs 8.3.3.11 Telnet_transmit Procedure .................................. telnet_transmit(dest file args); 'dest' 'file' 'args'  File: dejagnu.info, Node: tip_open procedure, Next: rlogin_open procedure, Prev: telnet_transmit procedure, Up: connprocs 8.3.3.12 Tip_open Procedure ........................... tip_open(hostname); 'hostname'  File: dejagnu.info, Node: rlogin_open procedure, Next: rlogin_spawn procedure, Prev: tip_open procedure, Up: connprocs 8.3.3.13 Rlogin_open Procedure .............................. rlogin_open(arg); 'arg'  File: dejagnu.info, Node: rlogin_spawn procedure, Next: rsh_open procedure, Prev: rlogin_open procedure, Up: connprocs 8.3.3.14 Rlogin_spawn Procedure ............................... rlogin_spawn(dest cmdline); 'dest' 'cmdline'  File: dejagnu.info, Node: rsh_open procedure, Next: rsh_download procedure, Prev: rlogin_spawn procedure, Up: connprocs 8.3.3.15 Rsh_open Procedure ........................... rsh_open(hostname); 'hostname'  File: dejagnu.info, Node: rsh_download procedure, Next: rsh_upload procedure, Prev: rsh_open procedure, Up: connprocs 8.3.3.16 Rsh_download Procedure ............................... rsh_download(desthost srcfile destfile); 'desthost' 'srcfile' 'destfile'  File: dejagnu.info, Node: rsh_upload procedure, Next: rsh_exec procedure, Prev: rsh_download procedure, Up: connprocs 8.3.3.17 Rsh_upload Procedure ............................. rsh_upload(desthost srcfile destfile); 'desthost' 'srcfile' 'destfile'  File: dejagnu.info, Node: rsh_exec procedure, Next: ftp_open procedure, Prev: rsh_upload procedure, Up: connprocs 8.3.3.18 Rsh_exec Procedure ........................... rsh_exec(boardname cmd args); 'boardname' 'cmd' 'args'  File: dejagnu.info, Node: ftp_open procedure, Next: ftp_upload procedure, Prev: rsh_exec procedure, Up: connprocs 8.3.3.19 Ftp_open Procedure ........................... ftp_open(host); 'host'  File: dejagnu.info, Node: ftp_upload procedure, Next: ftp_download procedure, Prev: ftp_open procedure, Up: connprocs 8.3.3.20 Ftp_upload Procedure ............................. ftp_upload(host remotefile localfile); 'host' 'remotefile' 'localfile'  File: dejagnu.info, Node: ftp_download procedure, Next: ftp_close procedure, Prev: ftp_upload procedure, Up: connprocs 8.3.3.21 Ftp_download Procedure ............................... ftp_download(host localfile remotefile); 'host' 'localfile' 'remotefile'  File: dejagnu.info, Node: ftp_close procedure, Next: tip_download procedure, Prev: ftp_download procedure, Up: connprocs 8.3.3.22 Ftp_close Procedure ............................ ftp_close(host); 'host'  File: dejagnu.info, Node: tip_download procedure, Prev: ftp_close procedure, Up: connprocs 8.3.3.23 Tip_download Procedure ............................... tip_download(spawnid file); 'spawnid' 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. 'file' This is the filename to download.  File: dejagnu.info, Node: Procedures For Target Boards, Next: target database library file, Prev: connprocs, Up: Builtin Procedures 8.3.4 Procedures For Target Boards ---------------------------------- * Menu: * Default_link Procedure: default_link procedure. * Default_target_assemble Procedure: default_target_assemble procedure. * default_target_compile Procedure: default_target_compile procedure. * Pop_config Procedure: pop_config procedure. * Prune_warnings Procedure: prune_warnings procedure. * Push_build Procedure: push_build procedure. * push_config Procedure: push_config procedure. * Reboot_target Procedure: reboot_target procedure. * Target_assemble Procedure: target_assemble procedure. * Target_compile Procedure: target_compile procedure.  File: dejagnu.info, Node: default_link procedure, Next: default_target_assemble procedure, Up: Procedures For Target Boards 8.3.4.1 Default_link Procedure .............................. default_link(board objects destfile flags); 'board' 'objects' 'destfile' 'flags'  File: dejagnu.info, Node: default_target_assemble procedure, Next: default_target_compile procedure, Prev: default_link procedure, Up: Procedures For Target Boards 8.3.4.2 Default_target_assemble Procedure ......................................... default_target_assemble(source destfile flags); 'source' 'destfile' 'flags'  File: dejagnu.info, Node: default_target_compile procedure, Next: pop_config procedure, Prev: default_target_assemble procedure, Up: Procedures For Target Boards 8.3.4.3 default_target_compile Procedure ........................................ default_target_compile(source destfile type options); 'source' 'destfile' 'type' 'options'  File: dejagnu.info, Node: pop_config procedure, Next: prune_warnings procedure, Prev: default_target_compile procedure, Up: Procedures For Target Boards 8.3.4.4 Pop_config Procedure ............................ pop_config(type); 'type'  File: dejagnu.info, Node: prune_warnings procedure, Next: push_build procedure, Prev: pop_config procedure, Up: Procedures For Target Boards 8.3.4.5 Prune_warnings Procedure ................................ prune_warnings(text); 'text'  File: dejagnu.info, Node: push_build procedure, Next: push_config procedure, Prev: prune_warnings procedure, Up: Procedures For Target Boards 8.3.4.6 Push_build Procedure ............................ push_build(name); 'name'  File: dejagnu.info, Node: push_config procedure, Next: reboot_target procedure, Prev: push_build procedure, Up: Procedures For Target Boards 8.3.4.7 push_config Procedure ............................. push_config(type name); 'type' 'name'  File: dejagnu.info, Node: reboot_target procedure, Next: target_assemble procedure, Prev: push_config procedure, Up: Procedures For Target Boards 8.3.4.8 Reboot_target Procedure ............................... reboot_target();  File: dejagnu.info, Node: target_assemble procedure, Next: target_compile procedure, Prev: reboot_target procedure, Up: Procedures For Target Boards 8.3.4.9 Target_assemble Procedure ................................. target_assemble(source destfile flags); 'source' 'destfile' 'flags'  File: dejagnu.info, Node: target_compile procedure, Prev: target_assemble procedure, Up: Procedures For Target Boards 8.3.4.10 Target_compile Procedure ................................. target_compile(source destfile type options); 'source' 'destfile' 'type' 'options'  File: dejagnu.info, Node: target database library file, Next: platform dependent procedures, Prev: Procedures For Target Boards, Up: Builtin Procedures 8.3.5 Target Database Procedures -------------------------------- * Menu: * Board_info Procedure: board_info procedure. * Host_info Procedure: host_info procedure. * Set_board_info Procedure: set_board_info procedure. * Add_board_info Procedure: add_board_info procedure. * Set_currtarget_info Procedure: set_currtarget_info procedure. * Target_info Procedure: target_info procedure. * Unset_board_info Procedure: unset_board_info procedure. * Unset_currtarget_info Procedure: unset_currtarget_info procedure. * Push_target Procedure: push_target procedure. * Pop_target Procedure: poptarget procedure. * List_targets Procedure: list_targets procedure. * Push_host Procedure: push_host procedure. * Pop_host Procedure: pop_host procedure. * Compile Procedure: compile procedure. * Archive Procedure: archive procedure. * Ranlib Procedure: ranlib procedure. * Execute_anywhere Procedure: execute_anywhere procedure.  File: dejagnu.info, Node: board_info procedure, Next: host_info procedure, Up: target database library file 8.3.5.1 Board_info Procedure ............................ board_info(machine op args); 'machine' 'op' 'args'  File: dejagnu.info, Node: host_info procedure, Next: set_board_info procedure, Prev: board_info procedure, Up: target database library file 8.3.5.2 Host_info Procedure ........................... host_info(op args); 'op' 'args'  File: dejagnu.info, Node: set_board_info procedure, Next: add_board_info procedure, Prev: host_info procedure, Up: target database library file 8.3.5.3 Set_board_info Procedure ................................ This checks if 'board_info' array's field _entry_ has been set already and if not, then sets it to _value_. set_board_info(entry value); 'entry' The name of a 'board_info' field to operate on. 'value' The value to set the field to.  File: dejagnu.info, Node: add_board_info procedure, Next: set_currtarget_info procedure, Prev: set_board_info procedure, Up: target database library file 8.3.5.4 Add_board_info Procedure ................................ This treats 'board_info' array's field _entry_ as a TCL list and adds _value_ at the end. add_board_info(entry value); 'entry' The name of a 'board_info' field to operate on. 'value' The value to add to the field.  File: dejagnu.info, Node: set_currtarget_info procedure, Next: target_info procedure, Prev: add_board_info procedure, Up: target database library file 8.3.5.5 Set_currtarget_info Procedure ..................................... set_currtarget_info(entry value); 'entry' 'value'  File: dejagnu.info, Node: target_info procedure, Next: unset_board_info procedure, Prev: set_currtarget_info procedure, Up: target database library file 8.3.5.6 Target_info Procedure ............................. target_info(op args); 'op' 'args'  File: dejagnu.info, Node: unset_board_info procedure, Next: unset_currtarget_info procedure, Prev: target_info procedure, Up: target database library file 8.3.5.7 Unset_board_info Procedure .................................. This checks if 'board_info' array's field _entry_ has been set and if so, then removes it. unset_board_info(entry); 'entry' The name of a 'board_info' field to operate on.  File: dejagnu.info, Node: unset_currtarget_info procedure, Next: push_target procedure, Prev: unset_board_info procedure, Up: target database library file 8.3.5.8 Unset_currtarget_info Procedure ....................................... unset_currtarget_info(entry); 'entry'  File: dejagnu.info, Node: push_target procedure, Next: poptarget procedure, Prev: unset_currtarget_info procedure, Up: target database library file 8.3.5.9 Push_target Procedure ............................. 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. push_target(name); 'name' The name of the target to make current connection.  File: dejagnu.info, Node: poptarget procedure, Next: list_targets procedure, Prev: push_target procedure, Up: target database library file 8.3.5.10 Pop_target Procedure ............................. This unsets the current target connection. pop_target();  File: dejagnu.info, Node: list_targets procedure, Next: push_host procedure, Prev: poptarget procedure, Up: target database library file 8.3.5.11 List_targets Procedure ............................... This lists all the supported targets for this architecture. list_targets();  File: dejagnu.info, Node: push_host procedure, Next: pop_host procedure, Prev: list_targets procedure, Up: target database library file 8.3.5.12 Push_host Procedure ............................ 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. push_host(name); 'name'  File: dejagnu.info, Node: pop_host procedure, Next: compile procedure, Prev: push_host procedure, Up: target database library file 8.3.5.13 Pop_host Procedure ........................... This unsets the current host connection. pop_host();  File: dejagnu.info, Node: compile procedure, Next: archive procedure, Prev: pop_host procedure, Up: target database library file 8.3.5.14 Compile Procedure .......................... 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'. compile(file); 'file'  File: dejagnu.info, Node: archive procedure, Next: ranlib procedure, Prev: compile procedure, Up: target database library file 8.3.5.15 Archive Procedure .......................... 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'. archive(file); 'file'  File: dejagnu.info, Node: ranlib procedure, Next: execute_anywhere procedure, Prev: archive procedure, Up: target database library file 8.3.5.16 Ranlib Procedure ......................... 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. ranlib(file); 'file'  File: dejagnu.info, Node: execute_anywhere procedure, Prev: ranlib procedure, Up: target database library file 8.3.5.17 Execute_anywhere Procedure ................................... 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. execute_anywhere(cmdline); 'cmdline'  File: dejagnu.info, Node: platform dependent procedures, Next: Utility Procedures, Prev: target database library file, Up: Builtin Procedures 8.3.6 Platform 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 underscore ___, and finally a suffix describing the procedure's purpose. For example, a procedure to extract the version from GDB is called 'gdb_version'. '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 testsuite. 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. * Menu: * ${tool}_start Procedure: ${tool}_start procedure. * ${tool}_load Procedure: ${tool}_load procedure. * ${tool}_exit Procedure: ${tool}_exit procedure. * ${tool}_version Procedure: ${tool}_version procedure.  File: dejagnu.info, Node: ${tool}_start procedure, Next: ${tool}_load procedure, Up: platform dependent procedures 8.3.6.1 ${tool}_start Procedure ............................... 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. DejaGnu 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}_start();  File: dejagnu.info, Node: ${tool}_load procedure, Next: ${tool}_exit procedure, Prev: ${tool}_start procedure, Up: platform dependent procedures 8.3.6.2 ${tool}_load Procedure .............................. 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}_load();  File: dejagnu.info, Node: ${tool}_exit procedure, Next: ${tool}_version procedure, Prev: ${tool}_load procedure, Up: platform dependent procedures 8.3.6.3 ${tool}_exit Procedure .............................. Cleans up (if necessary) before DejaGnu 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}_exit();  File: dejagnu.info, Node: ${tool}_version procedure, Prev: ${tool}_exit procedure, Up: platform dependent procedures 8.3.6.4 ${tool}_version Procedure ................................. 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. ${tool}_version();  File: dejagnu.info, Node: Utility Procedures, Next: Libgloss, Prev: platform dependent procedures, Up: Builtin Procedures 8.3.7 Utility Procedures ------------------------ * Menu: * Getdirs Procedure: getdirs procedure. * Find Procedure: find procedure. * Which Procedure: which procedure. * Grep Procedure: grep procedure. * Prune Procedure: prune procedure. * Slay Procedure: slay procedure. * Absolute Procedure: absolute procedure. * Psource Procedure: psource procedure. * Runtest_file_p Procedure: runtest_file_p procedure. * Diff Procedure: diff procedure. * Setenv Procedure: setenv procedure. * unsetenv Procedure: unsetenv procedure. * Getenv Procedure: getenv procedure. * Prune_system_crud Procedure: prune_system_crud procedure.  File: dejagnu.info, Node: getdirs procedure, Next: find procedure, Up: Utility Procedures 8.3.7.1 Getdirs Procedure ......................... Returns a list of all the directories in the single directory a single directory that match an optional pattern. getdirs(rootdir pattern); 'args' 'pattern' If you do not specify 'pattern', 'Getdirs' assumes a default pattern of _*_. You may use the common shell wildcard characters in the pattern. If no directories match the pattern, then a NULL string is returned.  File: dejagnu.info, Node: find procedure, Next: which procedure, Prev: getdirs procedure, Up: Utility Procedures 8.3.7.2 Find Procedure ...................... Search for files whose names match _pattern_ (using shell wildcard characters for filename expansion). Search subdirectories recursively, starting at _rootdir_. 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. find(rootdir pattern); 'rootdir' The top level directory to search the search from. 'pattern' A csh "glob" style regular expression representing the files to find.  File: dejagnu.info, Node: which procedure, Next: grep procedure, Prev: find procedure, Up: Utility Procedures 8.3.7.3 Which Procedure ....................... Searches the execution path for an executable file _binary_, like 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'. which(file); 'binary' The executable program or shell script to look for.  File: dejagnu.info, Node: grep procedure, Next: prune procedure, Prev: which procedure, Up: Utility Procedures 8.3.7.4 Grep Procedure ...................... 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'.) grep(filename regexp -line); 'filename' The file to search. 'regexp' The Unix style regular expression (as used by the 'grep' Unix utility) to search for. '--line' Prefix the line number to each line where the regexp matches.  File: dejagnu.info, Node: prune procedure, Next: slay procedure, Prev: grep procedure, Up: Utility Procedures 8.3.7.5 Prune Procedure ....................... This procedure is deprecated and will be removed in the next release of DejaGnu. If a testsuite uses this procedure, a copy of the procedure should be made and placed in the lib directory of the testsuite.  File: dejagnu.info, Node: slay procedure, Next: absolute procedure, Prev: prune procedure, Up: Utility Procedures 8.3.7.6 Slay Procedure ...................... This procedure is deprecated and will be removed in the next release of DejaGnu. If a testsuite uses this procedure, a copy of the procedure should be made and placed in the lib directory of the testsuite.  File: dejagnu.info, Node: absolute procedure, Next: psource procedure, Prev: slay procedure, Up: Utility Procedures 8.3.7.7 Absolute Procedure .......................... This procedure is deprecated and will be removed in the next release of DejaGnu. If a testsuite uses this procedure, a copy of the procedure should be made and placed in the lib directory of the testsuite.  File: dejagnu.info, Node: psource procedure, Next: runtest_file_p procedure, Prev: absolute procedure, Up: Utility Procedures 8.3.7.8 Psource Procedure ......................... This procedure is deprecated and will be removed in the next release of DejaGnu. If a testsuite uses this procedure, a copy of the procedure should be made and placed in the lib directory of the testsuite.  File: dejagnu.info, Node: runtest_file_p procedure, Next: diff procedure, Prev: psource procedure, Up: Utility Procedures 8.3.7.9 Runtest_file_p Procedure ................................ Search _runtest_s for _testcase_ and return _1_ if found, _0_ if not. _runtests_ is a list of two elements. The first 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. The second is the pathname of the current testcase under consideration. This is used by tools like compilers where each testcase is a file. runtest_file_p(runtests testcase); 'runtests' The list of patterns to compare against. 'testcase' The test case filename.  File: dejagnu.info, Node: diff procedure, Next: setenv procedure, Prev: runtest_file_p procedure, Up: Utility Procedures 8.3.7.10 Diff Procedure ....................... 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. diff(file_1 file_2); 'file_1' The first file to compare. 'file_2' The second file to compare.  File: dejagnu.info, Node: setenv procedure, Next: unsetenv procedure, Prev: diff procedure, Up: Utility Procedures 8.3.7.11 Setenv Procedure ......................... Sets the environment variable _var_ to the value _val_. setenv(var val); 'var' The environment variable to set. 'val' The value to set the variable to.  File: dejagnu.info, Node: unsetenv procedure, Next: getenv procedure, Prev: setenv procedure, Up: Utility Procedures 8.3.7.12 unsetenv Procedure ........................... Unsets the environment variable _var_. unsetenv(var); 'var' The environment variable to unset.  File: dejagnu.info, Node: getenv procedure, Next: prune_system_crud procedure, Prev: unsetenv procedure, Up: Utility Procedures 8.3.7.13 Getenv Procedure ......................... Returns the value of _var_ in the environment if it exists, otherwise it returns NULL. getenv(var); 'var' The environment variable to get the value of.  File: dejagnu.info, Node: prune_system_crud procedure, Prev: getenv procedure, Up: Utility Procedures 8.3.7.14 Prune_system_crud Procedure .................................... 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. prune_system_crud(system test); 'system' The system error messages to look for to screen out . 'text' The Tcl variable containing the text.  File: dejagnu.info, Node: Libgloss, Next: Debugging Procedures, Prev: Utility Procedures, Up: Builtin Procedures 8.3.8 Libgloss, A Free BSP -------------------------- Libgloss is a free "BSP" (Board Support Package) commonly used with GCC and G++ to produce a fully linked executable image for an embedded systems. * Menu: * Libgloss_link_flags Procedure: libgloss_link_flags procedure. * Libgloss_include_flags Procedure: libgloss_include_flags procedure. * Newlib_link_flags Procedure: newlib_link_flags procedure. * Newlib_include_flags Procedure: newlib_include_flags procedure. * Libio_include_flags Procedure: libio_include_flags procedure. * Libio_link_flags Procedure: libio_link_flags procedure. * G++_include_flags Procedure: g++_include_flags procedure. * G++_link_flags Procedure: g++_link_flags procedure. * Libstdc++_include_flags Procedure: libstdc++_include_flags procedure. * Libstdc++_link_flags Procedure: libstdc++_link_flags procedure. * Get_multilibs Procedure: get_multilibs procedure. * Find_binutils_prog Procedure: find_binutils_prog procedure. * Find_gcc Procedure: find_gcc procedure. * Find_gcj Procedure: find_gcj procedure. * Find_g++ Procedure: find_g++ procedure. * Find_g77 Procedure: find_g77 procedure. * Find_gfortran Procedure: find_gfortran procedure. * Process_multilib_options Procedure: process_multilib_options procedure. * Add_multilib_option Procedure: add_multilib_option procedure. * Find_gas Procedure: find_gas procedure. * Find_ld Procedure: find_ld procedure. * Build_wrapper Procedure: build_wrapper procedure. * Winsup_include_flags Procedure: winsup_include_flags procedure. * Winsup_link_flags Procedure: winsup_link_flags procedure.  File: dejagnu.info, Node: libgloss_link_flags procedure, Next: libgloss_include_flags procedure, Up: Libgloss 8.3.8.1 Libgloss_link_flags Procedure ..................................... libgloss_link_flags(args); 'args'  File: dejagnu.info, Node: libgloss_include_flags procedure, Next: newlib_link_flags procedure, Prev: libgloss_link_flags procedure, Up: Libgloss 8.3.8.2 Libgloss_include_flags Procedure ........................................ libgloss_include_flags(args); 'args'  File: dejagnu.info, Node: newlib_link_flags procedure, Next: newlib_include_flags procedure, Prev: libgloss_include_flags procedure, Up: Libgloss 8.3.8.3 Newlib_link_flags Procedure ................................... newlib_link_flags(args); 'args'  File: dejagnu.info, Node: newlib_include_flags procedure, Next: libio_include_flags procedure, Prev: newlib_link_flags procedure, Up: Libgloss 8.3.8.4 Newlib_include_flags Procedure ...................................... newlib_include_flags(args); 'args'  File: dejagnu.info, Node: libio_include_flags procedure, Next: libio_link_flags procedure, Prev: newlib_include_flags procedure, Up: Libgloss 8.3.8.5 Libio_include_flags Procedure ..................................... libio_include_flags(args); 'args'  File: dejagnu.info, Node: libio_link_flags procedure, Next: g++_include_flags procedure, Prev: libio_include_flags procedure, Up: Libgloss 8.3.8.6 Libio_link_flags Procedure .................................. libio_link_flags(args); 'args'  File: dejagnu.info, Node: g++_include_flags procedure, Next: g++_link_flags procedure, Prev: libio_link_flags procedure, Up: Libgloss 8.3.8.7 G++_include_flags Procedure ................................... g++_include_flags(args); 'args'  File: dejagnu.info, Node: g++_link_flags procedure, Next: libstdc++_include_flags procedure, Prev: g++_include_flags procedure, Up: Libgloss 8.3.8.8 G++_link_flags Procedure ................................ g++_link_flags(args); 'args'  File: dejagnu.info, Node: libstdc++_include_flags procedure, Next: libstdc++_link_flags procedure, Prev: g++_link_flags procedure, Up: Libgloss 8.3.8.9 Libstdc++_include_flags Procedure ......................................... libstdc++_include_flags(args); 'args'  File: dejagnu.info, Node: libstdc++_link_flags procedure, Next: get_multilibs procedure, Prev: libstdc++_include_flags procedure, Up: Libgloss 8.3.8.10 Libstdc++_link_flags Procedure ....................................... libstdc++_link_flags(args); 'args'  File: dejagnu.info, Node: get_multilibs procedure, Next: find_binutils_prog procedure, Prev: libstdc++_link_flags procedure, Up: Libgloss 8.3.8.11 Get_multilibs Procedure ................................ get_multilibs(args); 'args'  File: dejagnu.info, Node: find_binutils_prog procedure, Next: find_gcc procedure, Prev: get_multilibs procedure, Up: Libgloss 8.3.8.12 Find_binutils_prog Procedure ..................................... find_binutils_prog(name); 'name'  File: dejagnu.info, Node: find_gcc procedure, Next: find_gcj procedure, Prev: find_binutils_prog procedure, Up: Libgloss 8.3.8.13 Find_gcc Procedure ........................... find_gcc();  File: dejagnu.info, Node: find_gcj procedure, Next: find_g++ procedure, Prev: find_gcc procedure, Up: Libgloss 8.3.8.14 Find_gcj Procedure ........................... find_gcj();  File: dejagnu.info, Node: find_g++ procedure, Next: find_g77 procedure, Prev: find_gcj procedure, Up: Libgloss 8.3.8.15 Find_g++ Procedure ........................... find_g++();  File: dejagnu.info, Node: find_g77 procedure, Next: find_gfortran procedure, Prev: find_g++ procedure, Up: Libgloss 8.3.8.16 Find_g77 Procedure ........................... find_g77();  File: dejagnu.info, Node: find_gfortran procedure, Next: process_multilib_options procedure, Prev: find_g77 procedure, Up: Libgloss 8.3.8.17 Find_gfortran Procedure ................................ find_gfortran();  File: dejagnu.info, Node: process_multilib_options procedure, Next: add_multilib_option procedure, Prev: find_gfortran procedure, Up: Libgloss 8.3.8.18 Process_multilib_options Procedure ........................................... process_multilib_options(args); 'args'  File: dejagnu.info, Node: add_multilib_option procedure, Next: find_gas procedure, Prev: process_multilib_options procedure, Up: Libgloss 8.3.8.19 Add_multilib_option Procedure ...................................... add_multilib_option(args); 'args'  File: dejagnu.info, Node: find_gas procedure, Next: find_ld procedure, Prev: add_multilib_option procedure, Up: Libgloss 8.3.8.20 Find_gas Procedure ........................... find_gas();  File: dejagnu.info, Node: find_ld procedure, Next: build_wrapper procedure, Prev: find_gas procedure, Up: Libgloss 8.3.8.21 Find_ld Procedure .......................... find_ld();  File: dejagnu.info, Node: build_wrapper procedure, Next: winsup_include_flags procedure, Prev: find_ld procedure, Up: Libgloss 8.3.8.22 Build_wrapper Procedure ................................ build_wrapper(gluefile); 'gluefile'  File: dejagnu.info, Node: winsup_include_flags procedure, Next: winsup_link_flags procedure, Prev: build_wrapper procedure, Up: Libgloss 8.3.8.23 Winsup_include_flags Procedure ....................................... winsup_include_flags(args); 'args'  File: dejagnu.info, Node: winsup_link_flags procedure, Prev: winsup_include_flags procedure, Up: Libgloss 8.3.8.24 Winsup_link_flags Procedure .................................... winsup_link_flags(args); 'args'  File: dejagnu.info, Node: Debugging Procedures, Prev: Libgloss, Up: Builtin Procedures 8.3.9 Procedures for debugging your Tcl code. --------------------------------------------- 'lib/debugger.exp'defines these utility procedures: * Menu: * Dumpvars Procedure: dumpvars procedure. * Dumplocals Procedure: dumplocals procedure. * Dumprocs Procedure: dumprocs procedure. * Dumpwatch Procedure: dumpwatch procedure. * Watcharray Procedure: watcharray procedure. * Watchvar Procedure: watchvar procedure. * Watchunset Procedure: watchunset procedure. * Watchwrite Procedure: watchwrite procedure. * Watchread Procedure: watchread procedure. * Watchdel Procedure: watchdel procedure. * Print Procedure: print procedure. * Quit Procedure: quit procedure.  File: dejagnu.info, Node: dumpvars procedure, Next: dumplocals procedure, Up: Debugging Procedures 8.3.9.1 Dumpvars Procedure .......................... 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_. dumpvars(vars); 'vars' The variables to dump.  File: dejagnu.info, Node: dumplocals procedure, Next: dumprocs procedure, Prev: dumpvars procedure, Up: Debugging Procedures 8.3.9.2 Dumplocals Procedure ............................ 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_. dumplocals(args); 'args'  File: dejagnu.info, Node: dumprocs procedure, Next: dumpwatch procedure, Prev: dumplocals procedure, Up: Debugging Procedures 8.3.9.3 Dumprocs Procedure .......................... This takes a csh style regular expression (glob rules) and prints the body of all procs that match. It is abbreviated as _dp_. dumprocs(pattern); 'pattern' The csh "glob" style pattern to look for.  File: dejagnu.info, Node: dumpwatch procedure, Next: watcharray procedure, Prev: dumprocs procedure, Up: Debugging Procedures 8.3.9.4 Dumpwatch Procedure ........................... This takes a csh style regular expression (glob rules) and prints all the watchpoints. It is abbreviated as _dw_. dumpwatch(pattern); 'pattern' The csh "glob" style pattern to look for.  File: dejagnu.info, Node: watcharray procedure, Next: watchvar procedure, Prev: dumpwatch procedure, Up: Debugging Procedures 8.3.9.5 Watcharray Procedure ............................ watcharray(element type); 'type' The csh "glob" style pattern to look for.  File: dejagnu.info, Node: watchvar procedure, Next: watchunset procedure, Prev: watcharray procedure, Up: Debugging Procedures 8.3.9.6 Watchvar Procedure .......................... watchvar(var type); ''  File: dejagnu.info, Node: watchunset procedure, Next: watchwrite procedure, Prev: watchvar procedure, Up: Debugging Procedures 8.3.9.7 Watchunset Procedure ............................ This breaks program execution when the variable 'var' is unset. It is abbreviated as _wu_. watchunset(arg); 'args'  File: dejagnu.info, Node: watchwrite procedure, Next: watchread procedure, Prev: watchunset procedure, Up: Debugging Procedures 8.3.9.8 Watchwrite Procedure ............................ This breaks program execution when the variable 'var' is written. It is abbreviated as _ww_. watchwrite(var); 'var' The variable to watch.  File: dejagnu.info, Node: watchread procedure, Next: watchdel procedure, Prev: watchwrite procedure, Up: Debugging Procedures 8.3.9.9 Watchread Procedure ........................... This breaks program execution when the variable 'var' is read. It is abbreviated as _wr_. watchread(var); 'var' The variable to watch.  File: dejagnu.info, Node: watchdel procedure, Next: print procedure, Prev: watchread procedure, Up: Debugging Procedures 8.3.9.10 Watchdel Procedure ........................... This deletes a watchpoint from the watch list. It is abbreviated as _wd_. watchdel(args); 'args'  File: dejagnu.info, Node: print procedure, Next: quit procedure, Prev: watchdel procedure, Up: Debugging Procedures 8.3.9.11 Print Procedure ........................ This prints the value of the variable 'var'. It is abbreviated as _p_. print(var); 'var'  File: dejagnu.info, Node: quit procedure, Prev: print procedure, Up: Debugging Procedures 8.3.9.12 Quit Procedure ....................... This makes runtest exit. It is abbreviated as _q_. quit(); ''  File: dejagnu.info, Node: File Map, Prev: Builtin Procedures, Up: Reference 8.4 File Map ============ This is a map of the files in DejaGnu. * runtest * runtest.exp * stub-loader.c * testglue.c * config * baseboards * lib/debugger.exp * lib/dg.exp * lib/framework.exp * lib/ftp.exp * lib/kermit.exp * lib/libgloss.exp * lib/mondfe.exp * lib/remote.exp * lib/rlogin.exp * lib/rsh.exp * lib/standard.exp * lib/target.exp * lib/targetdb.exp * lib/telnet.exp * lib/tip.exp * lib/util-defs.exp * lib/utils.exp * lib/xsh.exp * lib/dejagnu.exp  File: dejagnu.info, Node: Unit Testing API, Prev: Reference, Up: Top 9 Unit Testing API ****************** * Menu: * C Unit Testing API:: * C++ Unit Testing API::  File: dejagnu.info, Node: C Unit Testing API, Next: C++ Unit Testing API, Up: Unit Testing API 9.1 C Unit Testing API ====================== All of the functions that take a 'msg' parameter use a C char * that is the message to be displayed. There currently is no support for variable length arguments. * Menu: * Pass Function: pass function. * Fail Function: fail function. * Untested Function: untested function. * Unresolved Function: unresolved function. * Totals Function: totals function.  File: dejagnu.info, Node: pass function, Next: fail function, Up: C Unit Testing API 9.1.1 Pass Function ------------------- This prints a message for a successful test completion. pass(msg);  File: dejagnu.info, Node: fail function, Next: untested function, Prev: pass function, Up: C Unit Testing API 9.1.2 Fail Function ------------------- This prints a message for an unsuccessful test completion. fail(msg);  File: dejagnu.info, Node: untested function, Next: unresolved function, Prev: fail function, Up: C Unit Testing API 9.1.3 Untested Function ----------------------- This prints a message for an test case that isn't run for some technical reason. untested(msg);  File: dejagnu.info, Node: unresolved function, Next: totals function, Prev: untested function, Up: C Unit Testing API 9.1.4 Unresolved Function ------------------------- This prints a message for an test case that is run, but there is no clear result. These output states require a human to look over the results to determine what happened. unresolved(msg);  File: dejagnu.info, Node: totals function, Prev: unresolved function, Up: C Unit Testing API 9.1.5 Totals Function --------------------- This prints out the total numbers of all the test state outputs. totals();  File: dejagnu.info, Node: C++ Unit Testing API, Prev: C Unit Testing API, Up: Unit Testing API 9.2 C++ Unit Testing API ======================== All of the methods that take a 'msg' parameter use a C char * or STL string, that is the message to be displayed. There currently is no support for variable length arguments. * Menu: * Pass Method: pass method. * Fail Method: fail method. * Untested Method: untested method. * Unresolved Method: unresolved method. * Totals Method: totals method.  File: dejagnu.info, Node: pass method, Next: fail method, Up: C++ Unit Testing API 9.2.1 Pass Method ----------------- This prints a message for a successful test completion. TestState::pass(msg);  File: dejagnu.info, Node: fail method, Next: untested method, Prev: pass method, Up: C++ Unit Testing API 9.2.2 Fail Method ----------------- This prints a message for an unsuccessful test completion. TestState::fail(msg);  File: dejagnu.info, Node: untested method, Next: unresolved method, Prev: fail method, Up: C++ Unit Testing API 9.2.3 Untested Method --------------------- This prints a message for an test case that isn't run for some technical reason. TestState::untested(msg);  File: dejagnu.info, Node: unresolved method, Next: totals method, Prev: untested method, Up: C++ Unit Testing API 9.2.4 Unresolved Method ----------------------- This prints a message for an test case that is run, but there is no clear result. These output states require a human to look over the results to determine what happened. TestState::unresolved(msg);  File: dejagnu.info, Node: totals method, Prev: unresolved method, Up: C++ Unit Testing API 9.2.5 Totals Method ------------------- This prints out the total numbers of all the test state outputs. TestState::totals();  Tag Table: Node: Top204 Node: Abstract1746 Node: Overview2509 Node: What is DejaGnu ?2796 Node: Release Notes5418 Node: Windows Support6694 Node: Design Goals7421 Node: A POSIX Conforming Test Framework9072 Node: Getting DejaGnu up and running14432 Node: Test your installation15580 Node: Windows17049 Node: Getting the source code for the calc example17676 Node: Create a minimal project; e_g_ calc18162 Node: A simple project without the GNU autotools18637 Node: Using autoconf/autoheader/automake19284 Node: Our first automated tests24607 Node: Running the test for the calc example24998 Node: The various config files or how to avoid warnings27270 Node: When trouble strikes29678 Node: Testing "Hello world" locally30516 Node: A first remote test31173 Node: Setup telnet to your own host31870 Node: A test case for login via telnet33273 Node: Remote testing "Hello world"35269 Node: Transferring files from/to the target37139 Node: Preparing for crosscompilation38368 Node: Remote testing of calc40535 Node: Using Windows as host and vxWorks as target40885 Node: Running Tests41878 Node: Make Check42496 Node: Runtest43593 Node: Output States44195 Node: Invoking Runtest46686 Ref: --tool[name[s]]52411 Node: Common Operations55602 Node: Output Files57263 Node: Summary File57765 Node: Log File59534 Node: Debug Log File61393 Node: Customizing DejaGnu65339 Node: Local Config File67673 Node: Global Config File71578 Node: Board Config File74609 Node: Remote Host Testing77839 Node: Config File Values82182 Node: Option Variables82695 Node: Personal Config File86361 Node: Extending DejaGnu87294 Node: Adding a new Testsuite87836 Node: Adding A New Tool88342 Node: Adding A New Target96637 Node: Adding A New Board98635 Node: Board File Values101692 Node: Writing A Test Case108122 Node: Debugging A Test Case110558 Node: Adding A Test Case To A Testsuite112878 Node: Hints On Writing A Test Case114907 Node: Test Case Variables117581 Node: Unit Testing119031 Node: What Is Unit Testing ?119252 Node: The dejagnu_h Header File120096 Node: Reference120793 Node: Obtaining DejaGnu120999 Node: Installation121314 Node: Configuring DejaGnu121714 Node: Installing DejaGnu123411 Node: Builtin Procedures124375 Node: Core Internal Procedures124979 Node: mail_file procedure126796 Node: open_logs procedure127000 Node: close_logs procedure127214 Node: isbuild procedure127429 Node: is_remote procedure128123 Node: is3way procedure128340 Node: ishost procedure128721 Node: istarget procedure129298 Node: isnative procedure129984 Node: unknown procedure130358 Node: clone_output procedure130579 Node: reset_vars procedure130823 Node: log_and_exit procedure131048 Node: log_summary procedure131278 Node: cleanup procedure131514 Node: setup_xfail procedure131725 Node: record_test procedure133256 Node: pass procedure133520 Node: fail procedure133943 Node: xpass procedure134360 Node: xfail procedure134834 Node: set_warning_threshold procedure135284 Node: get_warning_threshold procedure135773 Node: warning procedure136218 Node: perror procedure137586 Node: note procedure138624 Node: untested procedure139196 Node: unresolved procedure139727 Node: unsupported procedure140331 Node: init_testcounts procedure140832 Node: incr_count procedure141074 Node: transform procedure141324 Node: check_conditional_xfail procedure141989 Node: clear_xfail procedure144652 Node: verbose procedure145252 Node: load_lib procedure146144 Node: Procedures For Remote Communication147293 Node: call_remote procedure150742 Node: check_for_board_status procedure151002 Node: file_on_build procedure151304 Node: file_on_host procedure151594 Node: local_exec procedure151869 Node: remote_binary procedure152158 Node: remote_close procedure152414 Node: remote_download procedure152919 Node: remote_exec procedure153210 Node: remote_expect procedure153504 Node: remote_file procedure153796 Node: remote_ld procedure154059 Node: remote_load procedure154314 Node: remote_open procedure154588 Node: remote_pop_conn procedure155382 Node: remote_push_conn procedure155653 Node: remote_raw_binary procedure155933 Node: remote_raw_close procedure156217 Node: remote_raw_file procedure156497 Node: remote_raw_ld procedure156783 Node: remote_raw_load procedure157062 Node: remote_raw_open procedure157360 Node: remote_raw_send procedure157634 Node: remote_raw_spawn procedure157926 Node: remote_raw_transmit procedure158235 Node: remote_raw_wait procedure158539 Node: remote_reboot procedure158834 Node: remote_send procedure159280 Node: remote_spawn procedure159550 Node: remote_swap_conn procedure159849 Node: remote_transmit procedure160120 Node: remote_upload procedure160406 Node: remote_wait procedure160698 Node: standard_close procedure160972 Node: standard_download procedure161240 Node: standard_exec procedure161553 Node: standard_file procedure161840 Node: standard_load procedure162106 Node: standard_reboot procedure162396 Node: standard_send procedure162872 Node: standard_spawn procedure163154 Node: standard_transmit procedure163451 Node: standard_upload procedure163745 Node: standard_wait procedure164059 Node: unix_clean_filename procedure164348 Node: connprocs164615 Node: telnet procedure165948 Node: rsh procedure166137 Node: tip procedure166866 Node: kermit procedure167555 Node: kermit_open procedure168188 Node: kermit_command procedure168421 Node: kermit_send procedure168668 Node: kermit_transmit procedure168927 Node: telnet_open procedure169191 Node: telnet_binary procedure169440 Node: telnet_transmit procedure169684 Node: tip_open procedure169949 Node: rlogin_open procedure170173 Node: rlogin_spawn procedure170393 Node: rsh_open procedure170637 Node: rsh_download procedure170859 Node: rsh_upload procedure171131 Node: rsh_exec procedure171397 Node: ftp_open procedure171639 Node: ftp_upload procedure171847 Node: ftp_download procedure172113 Node: ftp_close procedure172386 Node: tip_download procedure172604 Node: Procedures For Target Boards173164 Node: default_link procedure173932 Node: default_target_assemble procedure174216 Node: default_target_compile procedure174557 Node: pop_config procedure174910 Node: prune_warnings procedure175161 Node: push_build procedure175412 Node: push_config procedure175652 Node: reboot_target procedure175907 Node: target_assemble procedure176148 Node: target_compile procedure176450 Node: target database library file176736 Node: board_info procedure177813 Node: host_info procedure178046 Node: set_board_info procedure178290 Node: add_board_info procedure178759 Node: set_currtarget_info procedure179220 Node: target_info procedure179513 Node: unset_board_info procedure179776 Node: unset_currtarget_info procedure180194 Node: push_target procedure180482 Node: poptarget procedure180956 Node: list_targets procedure181227 Node: push_host procedure181519 Node: pop_host procedure181924 Node: compile procedure182179 Node: archive procedure182855 Node: ranlib procedure183400 Node: execute_anywhere procedure183767 Node: platform dependent procedures184678 Node: ${tool}_start procedure186037 Node: ${tool}_load procedure187072 Node: ${tool}_exit procedure187963 Node: ${tool}_version procedure188438 Node: Utility Procedures188885 Node: getdirs procedure189637 Node: find procedure190184 Node: which procedure190926 Node: grep procedure191493 Node: prune procedure192423 Node: slay procedure192797 Node: absolute procedure193173 Node: psource procedure193559 Node: runtest_file_p procedure193953 Node: diff procedure194693 Node: setenv procedure195133 Node: unsetenv procedure195479 Node: getenv procedure195768 Node: prune_system_crud procedure196121 Node: Libgloss196694 Node: libgloss_link_flags procedure198394 Node: libgloss_include_flags procedure198628 Node: newlib_link_flags procedure198907 Node: newlib_include_flags procedure199172 Node: libio_include_flags procedure199443 Node: libio_link_flags procedure199710 Node: g++_include_flags procedure199965 Node: g++_link_flags procedure200218 Node: libstdc++_include_flags procedure200469 Node: libstdc++_link_flags procedure200750 Node: get_multilibs procedure201023 Node: find_binutils_prog procedure201270 Node: find_gcc procedure201520 Node: find_gcj procedure201723 Node: find_g++ procedure201916 Node: find_g77 procedure202109 Node: find_gfortran procedure202307 Node: process_multilib_options procedure202536 Node: add_multilib_option procedure202821 Node: find_gas procedure203086 Node: find_ld procedure203289 Node: build_wrapper procedure203483 Node: winsup_include_flags procedure203727 Node: winsup_link_flags procedure203994 Node: Debugging Procedures204220 Node: dumpvars procedure204979 Node: dumplocals procedure205344 Node: dumprocs procedure205713 Node: dumpwatch procedure206113 Node: watcharray procedure206503 Node: watchvar procedure206782 Node: watchunset procedure207001 Node: watchwrite procedure207318 Node: watchread procedure207665 Node: watchdel procedure208004 Node: print procedure208295 Node: quit procedure208567 Node: File Map208783 Node: Unit Testing API209428 Node: C Unit Testing API209600 Node: pass function210106 Node: fail function210312 Node: untested function210547 Node: unresolved function210822 Node: totals function211196 Node: C++ Unit Testing API211422 Node: pass method211925 Node: fail method212136 Node: untested method212374 Node: unresolved method212652 Node: totals method213029  End Tag Table  Local Variables: coding: us-ascii End: dejagnu-1.5.3/doc/ref.xml0000644000175000017500000046372612417172022012141 00000000000000 Reference Obtaining &dj; You can obtain &dj; from the &dj; web site at the Free Software Foundation, which is at www.gnu.org/software/dejagnu/ Installation Once you have the &dj; 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. Configuring &dj; It is usually best to configure in a directory separate from the source tree, specifying where to find the source with the optional option to configure. &dj; 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 separate tree for objects, execute the configure script from the source tree like this: ../dejagnu-&version;/configure &dj; 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 to specify where you want &dj; and its supporting code installed. By default, installation is in subdirectories of /usr/local, but you can select any alternate directory altdir by including {altdir}} on the configure command line. (This value is captured in the Makefile variables prefix and execprefix}.) Save for a small number of example tests, the &dj; distribution itself does not include any testsuites; these are available separately. Testsuites for the GNU development tools are included in those releases. After configuring the top-level &dj; directory, unpack and configure the test directories for the tools you want to test; then, in each test directory, run make check to build auxiliary programs required by some of the tests, and run the test suites. Installing &dj; To install &dj; in your file system (either in /usr/local, or as specified by your option to configure), execute. eg$ make install make installdoes these things for &dj;: 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. Create another directory in the share directory, called dejagnu, and copy all the library files into it. Create a directory in the dejagnu/share directory, called config, and copy all the configuration files into it. Copy the runtest shell script into $exec_prefix/bin. Copy runtest.exp into $exec_prefix/lib/dejagnu. This is the main Tcl code implementing &dj;. Builtin Procedures &dj; provides these Tcl procedures. Core Internal Procedures Mail_file Procedure mail_file file to subject Open_logs Procedure open_logs Close_logs Procedure close_logs Isbuild Procedure 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. isbuild pattern pattern Is_remote Procedure is_remote board is3way Procedure Tests for a Canadian cross. This is when the tests will be run on a remotely hosted cross compiler. If it is a Canadian cross, then the result is 1; otherwise the result is 0. is3way Ishost Procedure 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). ishost pattern Istarget Procedure 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. istarget args Isnative Procedure 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. isnative Unknown Procedure unknown args args Clone_output Procedure clone_output message message Reset_vars Procedure reset_vars Log_and_exit Procedure log_and_exit Log_summary Procedure log_summary args args Cleanup Procedure cleanup Setup_xfail Procedure 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. 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. setup_xfail config bugid config The config triplet to trigger whether this is an unexpected or expect failure. bugid The optional bugid, used to tie this test case to a bug tracking system. Record_test Procedure record_test type message args type message args Pass Procedure 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. pass string string The string to use for this PASS message. Fail Procedure 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. fail string string The string to use for this FAIL message. Xpass Procedure Declares a test to have unexpectedly passed, when it was expected to be a failure. xpass writes in the log files a message beginning with XPASS (or XFAIL, if failure was expected), appending the argument string. xpass string string The string to use for this output state. Xfail Procedure Declares a test to have expectedly failed. xfail writes in the log files a message beginning with XFAIL (or PASS, if success was expected), appending the argument string. xpass string string The string to use for this output state. Set_warning_threshold Procedure 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. set_warning_threshold threshold threshold This is the value of the new warning threshold. Get_warning_threshold Procedure Returns the current value of {warning_threshold. The default value is 3. This value controls how many warning procedures can be called before becoming UNRESOLVED. get_warning_threshold Warning Procedure 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 perror 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. warning string number string number The optional number to set the error counter. This is only used to fake out the counter when using the xfail procedure to control when it flips the output over to UNRESOLVED state. Perror Procedure Declares a severe error in the testing framework itself. perror writes in the log files a message beginning with ERROR, appending the argument string. 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. perror string number string number The optional number to set the error counter. This is only used to fake out the counter when using the xfail procedure to control when it flips the output over to UNRESOLVED state. Note Procedure 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. The 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. note string string The string to use for this note. Untested Procedure 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. untested string string The string to use for this output state. Unresolved Procedure 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). unresolved string string The string to use for this output state. Unsupported Procedure 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. unsupported string string The string to use for this output state. Init_testcounts Procedure init_testcounts Incr_count Procedure incr_count name args name args transform Procedure 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: For example, for a cross compiler supporting the m68k-vxworks configuration, the result of transform gcc is m68k-vxworks-gcc. transform toolname toolname The name of the cross-development program to transform. Check_conditional_xfail Procedure This procedure adds a conditional xfail, based on compiler options used to create a test case executable. If an include options is found in the compiler flags, and it's the right architecture, it'll trigger an XFAIL. Otherwise it'll produce an ordinary FAIL. You can also specify flags to exclude. This makes a result be a FAIL, even if the included options are found. To set the conditional, set the variable compiler_conditional_xfail_data to the fields "[message string] [targets list] [includes list] [excludes list]" (descriptions below). This is the checked at pass/fail decision time, so there is no need to call the procedure yourself, unless you wish to know if it gets triggered. After a pass/fail, the variable is reset, so it doesn't effect other tests. It returns 1 if the conditional is true, or 0 if the conditional is false. check_conditional_xfail message targets includes excludes message This is the message to print with the normal test result. targets This is a string with the list targets to activate this conditional on. includes This is a list of sets of options to search for in the compiler options to activate this conditional. If the list of sets of options is empty or if any set of the options matches, then this conditional is true. (It may be useful to specify an empty list of include sets if the conditional is always true unless one of the exclude sets matches.) excludes This is a list of sets of options to search for in the compiler options to activate this conditional. If any set of the options matches, (regardless of whether any of the include sets match) then this conditional is de-activated. Specifying the conditional xfail data set compiler_conditional_xfail_data { \ "I sure wish I knew why this was hosed" \ "sparc*-sun*-* *-pc-*-*" \ {"-Wall -v" "-O3"} \ {"-O1" "-Map"} \ } What this does is it matches only for these two targets if "-Wall -v" or "-O3" is set, but neither "-O1" or "-Map" is set. For a set to match, the options specified are searched for independently of each other, so a "-Wall -v" matches either "-Wall -v" or "-v -Wall". A space separates the options in the string. Glob-style regular expressions are also permitted. Clear_xfail Procedure 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. clear_xfail config config The configuration triplets to clear. Verbose Procedure Test cases can use this function to issue helpful messages depending on the number of 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 argument to cause string to always be added to the log file, even if it won't be printed. Use the optional argument to log the test results into a parsable XML file. Use the optional argument to print string without a trailing newline. Use the optional argument if string begins with "-". verbose -log -x -n -r string number -x -log -n -- string number Load_lib Procedure Loads a &dj; library file by searching the default fixed paths built into &dj;. If &dj; has been installed, it looks in a path starting with the installed library directory. If you are running &dj; 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. load_lib filespec filespec The name of the &dj; library file to load. The global variable libdirs, handled as a list, is appended to the default fixed paths built into &dj;. Additional search directories for <function>load_lib</function> # append a non-standard search path global libdirs lappend libdirs $srcdir/../../gcc/testsuite/lib # now loading $srcdir/../../gcc/testsuite/lib/foo.exp works load_lib foo.exp Procedures For Remote Communication lib/remote.exp defines these functions, for establishing and managing communications. 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 option was used on the runtest command line, then the target is rebooted before the connection is made. Call_remote Procedure call_remote type proc dest args proc dest args Check_for_board_status Procedure check_for_board_status variable variable File_on_build Procedure file_on_build op file args op file args File_on_host Procedure file_on_host op file args op file args Local_exec Procedure local_exec commandline inp outp timeout inp outp timeout Remote_binary Procedure remote_binary host host Remote_close Procedure remote_close shellid shellid This is the 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. Remote_download Procedure remote_download dest file args dest file args Remote_exec Procedure remote_exec hostname program args hostname program args Remote_expect Procedure remote_expect board timeout args board timeout args Remote_file Procedure remote_file dest args dest args Remote_ld Procedure remote_ld dest prog dest prog Remote_load Procedure remote_load dest prog args dest prog args Remote_open Procedure remote_open type type This is passed or . 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_pop_conn Procedure remote_pop_conn host host Remote_push_conn Procedure remote_push_conn host host Remote_raw_binary Procedure remote_raw_binary host host Remote_raw_close Procedure remote_raw_close host host Remote_raw_file Procedure remote_raw_file dest args dest args remote_raw_ld Procedure remote_raw_ld dest prog dest prog Remote_raw_load Procedure remote_raw_load dest prog args dest prog args Remote_raw_open Procedure remote_raw_open args args Remote_raw_send Procedure remote_raw_send dest string dest string Remote_raw_spawn Procedure remote_raw_spawn dest commandline dest commandline Remote_raw_transmit Procedure remote_raw_transmit dest file dest file Remote_raw_wait Procedure remote_raw_wait dest timeout dest timeout Remote_reboot Procedure Return value of this function depends on actual implementation of reboot that will be used, in practice it is expected that remote_reboot returns 1 on success and 0 on failure. remote_reboot host host Remote_send Procedure remote_send dest string dest string Remote_spawn Procedure remote_spawn dest commandline args dest commandline args Remote_swap_conn Procedure remote_swap_conn host Remote_transmit Procedure remote_transmit dest file dest file Remote_upload Procedure remote_upload dest srcfile arg dest srcfile arg Remote_wait Procedure remote_wait dest timeout dest timeout Standard_close Procedure standard_close host host Standard_download Procedure standard_download dest file destfile dest file destfile Standard_exec Procedure standard_exec hostname args hostname args Standard_file Procedure standard_file dest op args Standard_load Procedure standard_load dest prog args dest prog args Standard_reboot Procedure It looks like that this procedure is never called, instead ${board}_reboot defined in base-config.exp will be used because it has higher priority and base-config.exp is always imported by runtest. standard_reboot host host Standard_send Procedure standard_send dest string dest string Standard_spawn Procedure standard_spawn dest commandline dest commandline Standard_transmit Procedure standard_transmit dest file dest file Standard_upload Procedure standard_upload dest srcfile destfile dest srcfile destfile Standard_wait Procedure standard_wait dest timeout dest timeout Unix_clean_filename Procedure unix_clean_filename dest file dest file Procedures For Using Utilities to Connect telnet, rsh, tip, kermit telnet Procedure telnet hostname port rlogin hostname rsh Procedure rsh hostname hostname This 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, separated by a :. If host or target is used in the hostname field, than the config array is used for all information. Tip Procedure tip port port Connect using the Unix utility tip. Portmust 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 or is used in the port field, than the config array is used for all information. the config array is used for all information. Kermit Procedure kermit port bps port Connect using the program kermit. Port is the device name, e.g. /dev/ttyb. bps bps is the line speed to use (in its per second) for the connection. The value of the serial field in the target_info array is used. (was $serialport) If or is used in the port field, than the config array is used for all information. the config array is used for all information. kermit_open Procedure kermit_open dest args dest args Kermit_command Procedure kermit_command dest args dest args Kermit_send Procedure kermit_send dest string args dest string args Kermit_transmit Procedure kermit_transmit dest file args dest file args Telnet_open Procedure telnet_open hostname args hostname args Telnet_binary Procedure telnet_binary hostname hostname Telnet_transmit Procedure telnet_transmit dest file args dest file args Tip_open Procedure tip_open hostname hostname Rlogin_open Procedure rlogin_open arg arg Rlogin_spawn Procedure rlogin_spawn dest cmdline dest cmdline Rsh_open Procedure rsh_open hostname hostname Rsh_download Procedure rsh_download desthost srcfile destfile desthost srcfile destfile Rsh_upload Procedure rsh_upload desthost srcfile destfile desthost srcfile destfile Rsh_exec Procedure rsh_exec boardname cmd args boardname cmd args Ftp_open Procedure ftp_open host host Ftp_upload Procedure ftp_upload host remotefile localfile host remotefile localfile Ftp_download Procedure ftp_download host localfile remotefile host localfile remotefile Ftp_close Procedure ftp_close host host Tip_download Procedure tip_download spawnid file spawnid Download 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. file This is the filename to download. Procedures For Target Boards Default_link Procedure default_link board objects destfile flags board objects destfile flags Default_target_assemble Procedure default_target_assemble source destfile flags source destfile flags default_target_compile Procedure default_target_compile source destfile type options source destfile type options Pop_config Procedure pop_config type type Prune_warnings Procedure prune_warnings text text Push_build Procedure push_build name name push_config Procedure push_config type name type name Reboot_target Procedure reboot_target Target_assemble Procedure target_assemble source destfile flags source destfile flags Target_compile Procedure target_compile source destfile type options source destfile type options Target Database Procedures Board_info Procedure board_info machine op args machine op args Host_info Procedure host_info op args op args Set_board_info Procedure This checks if board_info array's field entry has been set already and if not, then sets it to value. set_board_info entry value entry The name of a board_info field to operate on. value The value to set the field to. Add_board_info Procedure This treats board_info array's field entry as a TCL list and adds value at the end. add_board_info entry value entry The name of a board_info field to operate on. value The value to add to the field. Set_currtarget_info Procedure set_currtarget_info entry value entry value Target_info Procedure target_info op args op args Unset_board_info Procedure This checks if board_info array's field entry has been set and if so, then removes it. unset_board_info entry entry The name of a board_info field to operate on. Unset_currtarget_info Procedure unset_currtarget_info entry entry Push_target Procedure 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. push_target name name The name of the target to make current connection. Pop_target Procedure This unsets the current target connection. pop_target List_targets Procedure This lists all the supported targets for this architecture. list_targets Push_host Procedure 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. push_host name name Pop_host Procedure This unsets the current host connection. pop_host Compile Procedure This invokes the compiler as set by CC to compile the file file. The default options for many cross compilation targets are guessed by &dj;, 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. compile file file Archive Procedure 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. archive file file Ranlib Procedure 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. ranlib file file Execute_anywhere Procedure 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 &dj; 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. execute_anywhere cmdline cmdline Platform 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 underscore _, and finally a suffix describing the procedure's purpose. For example, a procedure to extract the version from GDB is called gdb_version. 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 testsuite. 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. ${tool}_start Procedure 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. &dj; 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}_start ${tool}_load Procedure 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 &dj; to a new tool or a new target, if it requires much communication coding or file downloading. Test scripts call ${tool}_load. ${tool}_load ${tool}_exit Procedure Cleans up (if necessary) before &dj; 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}_exit ${tool}_version Procedure Prints the version label and number for ${tool}. This is called by the &dj; 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. ${tool}_version Utility Procedures Getdirs Procedure Returns a list of all the directories in the single directory a single directory that match an optional pattern. getdirs rootdir pattern args pattern If you do not specify pattern, Getdirs assumes a default pattern of *. You may use the common shell wildcard characters in the pattern. If no directories match the pattern, then a NULL string is returned. Find Procedure Search for files whose names match pattern (using shell wildcard characters for filename expansion). Search subdirectories recursively, starting at rootdir. 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. find rootdir pattern rootdir The top level directory to search the search from. pattern A csh "glob" style regular expression representing the files to find. Which Procedure Searches the execution path for an executable file binary, like 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. which file binary The executable program or shell script to look for. Grep Procedure 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 .) grep filename regexp --line filename The file to search. regexp The Unix style regular expression (as used by the grep Unix utility) to search for. --line Prefix the line number to each line where the regexp matches. Prune Procedure This procedure is deprecated and will be removed in the next release of &dj;. If a testsuite uses this procedure, a copy of the procedure should be made and placed in the lib directory of the testsuite. Slay Procedure This procedure is deprecated and will be removed in the next release of &dj;. If a testsuite uses this procedure, a copy of the procedure should be made and placed in the lib directory of the testsuite. Absolute Procedure This procedure is deprecated and will be removed in the next release of &dj;. If a testsuite uses this procedure, a copy of the procedure should be made and placed in the lib directory of the testsuite. Psource Procedure This procedure is deprecated and will be removed in the next release of &dj;. If a testsuite uses this procedure, a copy of the procedure should be made and placed in the lib directory of the testsuite. Runtest_file_p Procedure Search runtests for testcase and return 1 if found, 0 if not. runtests is a list of two elements. The first 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. The second is the pathname of the current testcase under consideration. This is used by tools like compilers where each testcase is a file. runtest_file_p runtests testcase runtests The list of patterns to compare against. testcase The test case filename. Diff Procedure 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. diff file_1 file_2 file_1 The first file to compare. file_2 The second file to compare. Setenv Procedure Sets the environment variable var to the value val. setenv var val var The environment variable to set. val The value to set the variable to. unsetenv Procedure Unsets the environment variable var. unsetenv var var The environment variable to unset. Getenv Procedure Returns the value of var in the environment if it exists, otherwise it returns NULL. getenv var var The environment variable to get the value of. Prune_system_crud Procedure 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. prune_system_crud system test system The system error messages to look for to screen out . text The Tcl variable containing the text. Libgloss, A Free BSP Libgloss is a free BSP (Board Support Package) commonly used with GCC and G++ to produce a fully linked executable image for an embedded systems. Libgloss_link_flags Procedure libgloss_link_flags args args Libgloss_include_flags Procedure libgloss_include_flags args args Newlib_link_flags Procedure newlib_link_flags args args Newlib_include_flags Procedure newlib_include_flags args args Libio_include_flags Procedure libio_include_flags args args Libio_link_flags Procedure libio_link_flags args args G++_include_flags Procedure g++_include_flags args args G++_link_flags Procedure g++_link_flags args args Libstdc++_include_flags Procedure libstdc++_include_flags args args Libstdc++_link_flags Procedure libstdc++_link_flags args args Get_multilibs Procedure get_multilibs args args Find_binutils_prog Procedure find_binutils_prog name name Find_gcc Procedure find_gcc Find_gcj Procedure find_gcj Find_g++ Procedure find_g++ Find_g77 Procedure find_g77 Find_gfortran Procedure find_gfortran Process_multilib_options Procedure process_multilib_options args args Add_multilib_option Procedure add_multilib_option args args Find_gas Procedure find_gas Find_ld Procedure find_ld Build_wrapper Procedure build_wrapper gluefile gluefile Winsup_include_flags Procedure winsup_include_flags args args Winsup_link_flags Procedure winsup_link_flags args args Procedures for debugging your Tcl code. lib/debugger.expdefines these utility procedures: Dumpvars Procedure 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. dumpvars vars vars The variables to dump. Dumplocals Procedure 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. dumplocals args args Dumprocs Procedure This takes a csh style regular expression (glob rules) and prints the body of all procs that match. It is abbreviated as dp. dumprocs pattern pattern The csh "glob" style pattern to look for. Dumpwatch Procedure This takes a csh style regular expression (glob rules) and prints all the watchpoints. It is abbreviated as dw. dumpwatch pattern pattern The csh "glob" style pattern to look for. Watcharray Procedure watcharray element type type The csh "glob" style pattern to look for. Watchvar Procedure watchvar var type Watchunset Procedure This breaks program execution when the variable var is unset. It is abbreviated as wu. watchunset arg args Watchwrite Procedure This breaks program execution when the variable var is written. It is abbreviated as ww. watchwrite var var The variable to watch. Watchread Procedure This breaks program execution when the variable var is read. It is abbreviated as wr. watchread var var The variable to watch. Watchdel Procedure This deletes a watchpoint from the watch list. It is abbreviated as wd. watchdel args args Print Procedure This prints the value of the variable var. It is abbreviated as p. print var var Quit Procedure This makes runtest exit. It is abbreviated as q. quit File Map This is a map of the files in &dj;. runtest runtest.exp stub-loader.c testglue.c config baseboards lib/debugger.exp lib/dg.exp lib/framework.exp lib/ftp.exp lib/kermit.exp lib/libgloss.exp lib/mondfe.exp lib/remote.exp lib/rlogin.exp lib/rsh.exp lib/standard.exp lib/target.exp lib/targetdb.exp lib/telnet.exp lib/tip.exp lib/util-defs.exp lib/utils.exp lib/xsh.exp lib/dejagnu.exp Unit Testing API C Unit Testing API All of the functions that take a msg parameter use a C char * that is the message to be displayed. There currently is no support for variable length arguments. Pass Function This prints a message for a successful test completion. pass msg Fail Function This prints a message for an unsuccessful test completion. fail msg Untested Function This prints a message for an test case that isn't run for some technical reason. untested msg Unresolved Function This prints a message for an test case that is run, but there is no clear result. These output states require a human to look over the results to determine what happened. unresolved msg Totals Function This prints out the total numbers of all the test state outputs. totals C++ Unit Testing API All of the methods that take a msg parameter use a C char * or STL string, that is the message to be displayed. There currently is no support for variable length arguments. Pass Method This prints a message for a successful test completion. TestState::pass msg Fail Method This prints a message for an unsuccessful test completion. TestState::fail msg Untested Method This prints a message for an test case that isn't run for some technical reason. TestState::untested msg Unresolved Method This prints a message for an test case that is run, but there is no clear result. These output states require a human to look over the results to determine what happened. TestState::unresolved msg Totals Method This prints out the total numbers of all the test state outputs. TestState::totals dejagnu-1.5.3/doc/dejagnu.xml0000664000175000017500000004353112506237371013000 00000000000000 DejaGnu"> ]>
&dj; The GNU Testing Framework January 2006 Rob Savoye Ben Elliston 2006 Free Software Foundation, Inc. 0.6.2 2002-07-16 rob Add new tutorial as a new sect1. 0.6.1 2001-02-16 rob Add info on the new dejagnu.h file. 0.6 2001-02-16 rob Updated for new release. 0.5 2000-01-24 rob Initial version after conversion to DocBook. Abstract This document describes the functionality of &dj;, the testing framework of the GNU project. &dj; is written in Expect, which uses Tcl as a command language. Expect acts as a very programmable shell. As with other Unix command shells, you can run any program, but once the program is started, your test script has programmable control over 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. &dj; itself is merely a framework for the creation of testsuites. Testsuites are distributed with each application. Overview What is &dj; ? &dj; is a framework for testing other programs. Its purpose is to provide a single front end for all tests. Think of it as a custom library of Tcl procedures crafted to support writing a test harness. A Test Harness is the testing infrastructure that is created to support a specific program or tool. Each program can have multiple testsuites, all supported by a single test harness. &dj; is written in Expect, which in turn uses Tcl -- Tool command language. There is more information on Tcl at the Scriptics web site and the Expect web site is at NIST. Julia Menapace first coined the term ``&dj;'' to describe an earlier testing framework at Cygnus Support she had written for GDB. When we replaced it with the Expect-based framework, it was like &dj; all over again. More importantly, it was also named after my daughter, Deja Snow Savoye (now 14 years old as of Feb 2004), who was a toddler during &dj;'s beginnings. &dj; offers several advantages for testing: The flexibility and consistency of the &dj; framework make it easy to write tests for any program, with either batch oriented, or interactive programs. &dj; 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 supported host system on any supported target system. &dj; runs tests on many single board computers, whose operating software ranges from a simple boot monitor to a real-time OS. All tests have the same output format. This makes it easy to integrate testing into other software development processes. &dj;'s output is designed to be parsed by other filtering script and it is also human readable. Using Tcl and Expect, it's easy to create wrappers for existing testsuites. By incorporating existing tests under &dj;, it's easier to have a single set of report analyse programs.. Running tests requires two things: the testing framework and the testsuites themselves. Tests are usually written in Expect using Tcl, but you can also use a Tcl script to run a testsuite that is not based on Expect. Expect script filenames conventionally use .exp as a suffix; for example, the main implementation of the &dj; test driver is in the file runtest.exp.) New In This Release This release has a number of substantial changes over version 1.3. 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. The biggest change is years of modifications to the target configuration system, used for cross testing. While this greatly improved cross testing, it has made that subsystem very complicated. The goal is to have this entirely rewritten using iTcl by the next release. Other changes are: More built-in support for building target binaries with the correct linker flags. Currently this only works with GCC as the cross compiler, preferably with a target supported by . Lots of little bug fixes from years of heavy use at Cygnus Solutions. &dj; now uses Automake for Makefile configuration. Updated documentation, now in DocBook XML. Windows support. There is beta level support for Windows that is still a work in progress. This requires the Cygwin POSIX subsystem for Windows. Windows Support To use &dj; on Windows, you need to first install the Cygwin release. This works as of the B20.1 release. Cygwin is a POSIX system for Windows. This covers both utility programs and a library that adds POSIX system calls to Windows. Among them is pseudo tty support for Windows that emulates the POSIX pty standard. The latest Cygwin is always available from this location. This works well enough to run "make check" of the GNU development tree on Windows after a native build. But the nature of ptys on Windows is still evolving. Your mileage may vary. Design Goals &dj; grew out of the internal needs of Cygnus Solutions, the company formerly known as Cygnus Support. Cygnus maintained and enhanced a variety of free programs in many different environments and we needed a testing tool that: was useful to developers while fixing bugs; automated running many tests during a software release process; was portable among a variety of host computers; supported cross-development testing; permitted testing interactive programs, like GDB; and permitted 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. 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. &dj; 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 &dj; can use rsh, rlogin, telnet, tip, kermit and mondfe for remote communications. A POSIX conforming test framework &dj; conforms to the POSIX 1003.3 standard for test frameworks. Rob Savoye was a member of that committee. The 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. TET was created by Unisoft for a consortium comprised of X/Open, Unix International and the Open Software Foundation. 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 day or night. 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 testsuite 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. &dj; supports the use of all five output messages. In this sense a testsuite 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. 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 commands 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 &dj; 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 place-holder, 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. &dj; 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. &dj; uses the same output procedures to produce these messages for all testsuites and these procedures are already known to conform to POSIX 1003.3. For a &dj; testsuite to conform to POSIX 1003.3, you must avoid the setupxfail} 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. &user; &ref;
dejagnu-1.5.3/doc/dejagnu.texi0000664000175000017500000062426112506237371013156 00000000000000\input texinfo @setfilename dejagnu.info @documentencoding us-ascii @settitle DejaGnu @dircategory Programming @direntry * DejaGnu: (dejagnu). The GNU testing framework. @end direntry @node Top, Abstract, , (dir) @top DejaGnu @menu * Abstract:: * Overview:: * Getting DejaGnu up and running:: * Running Tests:: * Customizing DejaGnu:: * Extending DejaGnu:: * Unit Testing:: * Reference:: * Unit Testing API:: @detailmenu --- The Detailed Node Listing --- Overview * What is DejaGnu ?:: * New In This Release: Release Notes. * Design Goals:: * A POSIX conforming test framework: A POSIX Conforming Test Framework. Getting DejaGnu up and running * Test your installation:: * Create a minimal project, e.g. calc: Create a minimal project; e_g_ calc. * Our first automated tests:: * A first remote test:: Running Tests * Make check: Make Check. * Runtest:: * The files DejaGnu produces.: Output Files. Customizing DejaGnu * Local Config File:: * Global Config File:: * Board Config File:: * Remote Host Testing:: * Config File Values:: Extending DejaGnu * Adding A New Testsuite: Adding a new Testsuite. * Adding A New Tool:: * Adding A New Target:: * Adding A New Board:: * Board Config File Values: Board File Values. * Writing A Test Case:: * Debugging A Test Case:: * Adding A Test Case To A Testsuite.: Adding A Test Case To A Testsuite. * Hints On Writing A Test Case:: * Special variables used by test cases.: Test Case Variables. Unit Testing * What Is Unit Testing ?:: * The dejagnu.h Header File: The dejagnu_h Header File. Reference * Obtaining DejaGnu:: * Installation:: * Builtin Procedures:: * File Map:: Unit Testing API * C Unit Testing API:: * C++ Unit Testing API:: @end detailmenu @end menu @node Abstract, Overview, Top, Top @chapter Abstract This document describes the functionality of DejaGnu, the testing framework of the GNU project. DejaGnu is written in Expect, which uses Tcl as a command language. Expect acts as a very programmable shell. As with other Unix command shells, you can run any program, but once the program is started, your test script has programmable control over its input and output. This does not just apply to the programs under test; @code{expect} can also run any auxiliary program, such as @code{diff} or @code{sh}, with full control over its input and output. DejaGnu itself is merely a framework for the creation of testsuites. Testsuites are distributed with each application. @node Overview, Getting DejaGnu up and running, Abstract, Top @chapter Overview @menu * What is DejaGnu ?:: * New In This Release: Release Notes. * Design Goals:: * A POSIX conforming test framework: A POSIX Conforming Test Framework. @end menu @node What is DejaGnu ?, Release Notes, , Overview @section What is DejaGnu ? DejaGnu is a framework for testing other programs. Its purpose is to provide a single front end for all tests. Think of it as a custom library of Tcl procedures crafted to support writing a test harness. A @emph{Test Harness} is the testing infrastructure that is created to support a specific program or tool. Each program can have multiple testsuites, all supported by a single test harness. DejaGnu is written in Expect, which in turn uses Tcl -- Tool command language. There is more information on Tcl at the @uref{http://www.scriptics.com,Scriptics} web site and the Expect web site is at @uref{http://expect.nist.gov,NIST}. Julia Menapace first coined the term ``DejaGnu'' to describe an earlier testing framework at Cygnus Support she had written for @code{GDB}. When we replaced it with the Expect-based framework, it was like DejaGnu all over again. More importantly, it was also named after my daughter, @uref{http://www.welcomehome.org/deja/,Deja Snow Savoye} (now 14 years old as of Feb 2004), who was a toddler during DejaGnu's beginnings. DejaGnu offers several advantages for testing: @itemize @item The flexibility and consistency of the DejaGnu framework make it easy to write tests for any program, with either batch oriented, or interactive programs. @item 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 @code{GDB} can run from any supported host system on any supported target system. DejaGnu runs tests on many single board computers, whose operating software ranges from a simple boot monitor to a real-time OS. @item 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. @item Using Tcl and Expect, it's easy to create wrappers for existing testsuites. By incorporating existing tests under DejaGnu, it's easier to have a single set of report analyse programs.. @end itemize Running tests requires two things: the testing framework and the testsuites themselves. Tests are usually written in Expect using Tcl, but you can also use a Tcl script to run a testsuite that is not based on Expect. Expect script filenames conventionally use @emph{.exp} as a suffix; for example, the main implementation of the DejaGnu test driver is in the file runtest.exp.) @node Release Notes, Design Goals, What is DejaGnu ?, Overview @section New In This Release This release has a number of substantial changes over version 1.3. 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. The biggest change is years of modifications to the target configuration system, used for cross testing. While this greatly improved cross testing, it has made that subsystem very complicated. The goal is to have this entirely rewritten using iTcl by the next release. Other changes are: @itemize @item More built-in support for building target binaries with the correct linker flags. Currently this only works with GCC as the cross compiler, preferably with a target supported by @ref{Libgloss}. @item Lots of little bug fixes from years of heavy use at Cygnus Solutions. @item DejaGnu now uses Automake for Makefile configuration. @item Updated documentation, now in DocBook XML. @item Windows support. There is beta level support for Windows that is still a work in progress. This requires the @uref{http://www.cygwin.com/,Cygwin} POSIX subsystem for Windows. @end itemize @menu * Windows Support:: @end menu @node Windows Support, , , Release Notes @subsection Windows Support To use DejaGnu on Windows, you need to first install the @uref{http://www.cygwin.com/,Cygwin} release. This works as of the B20.1 release. Cygwin is a POSIX system for Windows. This covers both utility programs and a library that adds POSIX system calls to Windows. Among them is pseudo tty support for Windows that emulates the POSIX pty standard. The latest Cygwin is always available from @uref{http://www.cygwin.com/,this location}. This works well enough to run @emph{"make check"} of the GNU development tree on Windows after a native build. But the nature of ptys on Windows is still evolving. Your mileage may vary. @node Design Goals, A POSIX Conforming Test Framework, Release Notes, Overview @section Design Goals DejaGnu grew out of the internal needs of Cygnus Solutions, the company formerly known as Cygnus Support. Cygnus maintained and enhanced a variety of free programs in many different environments and we needed a testing tool that: @itemize @item was useful to developers while fixing bugs; @item automated running many tests during a software release process; @item was portable among a variety of host computers; @item supported cross-development testing; @item permitted testing interactive programs, like @code{GDB}; and @item permitted testing batch oriented programs, like @code{GCC}. @end itemize 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 @code{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. 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 @code{rsh}, @code{rlogin}, @code{telnet}, @code{tip}, @code{kermit} and @code{mondfe} for remote communications. @node A POSIX Conforming Test Framework, , Design Goals, Overview @section A POSIX conforming test framework DejaGnu conforms to the POSIX 1003.3 standard for test frameworks. Rob Savoye was a member of that committee. The 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. TET was created by Unisoft for a consortium comprised of X/Open, Unix International and the Open Software Foundation. The POSIX documentation refers to @dfn{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 day or night. 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 testsuite 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 testsuite that uses exactly these messages can be considered POSIX conforming. These definitions specify the output of a test case: @table @asis @item PASS A test has succeeded. That is, it demonstrated that the assertion is true. @item XFAIL POSIX 1003.3 does not incorporate the notion of expected failures, so @emph{PASS}, instead of @emph{XPASS}, must also be returned for test cases which were expected to fail and did not. This means that @emph{PASS} is in some sense more ambiguous than if @emph{XPASS} is also used. @item FAIL A test has produced the bug it was intended to capture. That is, it has demonstrated that the assertion is false. The @emph{FAIL} message is based on the test case only. Other messages are used to indicate a failure of the framework. As with @emph{PASS}, POSIX tests must return @emph{FAIL} rather than @emph{XFAIL} even if a failure was expected. @item 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 @emph{PASS} or @emph{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 @emph{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 commands like @emph{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 @emph{UNRESOLVED}: @end table @itemize @item A test's execution is interrupted. @item A test does not produce a clear result. This is usually because there was an @emph{ERROR} from DejaGnu while processing the test, or because there were three or more @emph{WARNING} messages. Any @emph{WARNING} or @emph{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. @item A test depends on a previous test, which fails. @item The test was set up incorrectly. @end itemize @table @asis @item UNTESTED A test was not run. This is a place-holder, used when there is no real test case yet. @end table The only remaining output message left is intended to test features that are specified by the applicable POSIX standard as conditional: @table @asis @item 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 @emph{gethostname} would never work on a target board running only a boot monitor. @end table DejaGnu uses the same output procedures to produce these messages for all testsuites and these procedures are already known to conform to POSIX 1003.3. For a DejaGnu testsuite to conform to POSIX 1003.3, you must avoid the @emph{setup}xfail@} procedure as described in the @emph{PASS} section above and you must be careful to return @emph{UNRESOLVED} where appropriate, as described in the @emph{UNRESOLVED} section above. @node Getting DejaGnu up and running, Running Tests, Overview, Top @chapter Getting DejaGnu up and running This chapter was originally written by Niklaus Giger (ngiger@@mus.ch) because he lost a week to figure out how DejaGnu works and how to write a first test. Follow these instructions as closely a possible in order get a good insight into how DejaGnu works, else you might run into a lot of subtle problems. You have been warned. It should be no big problems installing DejaGnu using your package manager or from the source code. On the Debian GNU/Linux system just run (as root): @example apt-get install dejagnu @end example These examples were run on a primary machine with a AMD K6 and a Mac PowerBook G3 serving as a remote target. The tests for Windows were run under Windows using the actual Cygwin version (1.3.x as of October 2001). Its target system was a PPC embedded system running vxWorks. @menu * Test your installation:: * Create a minimal project, e.g. calc: Create a minimal project; e_g_ calc. * Our first automated tests:: * A first remote test:: @end menu @node Test your installation, Create a minimal project; e_g_ calc, , Getting DejaGnu up and running @section Test your installation Create a new user called "dgt" (DejaGnuTest), which uses bash as it login shell. PS1 must be set to '\u:\w\$ ' in its ~/.bashrc. Login as this user, create an empty directory and change the working directory to it. e.g @example dgt:~$ mkdir ~/dejagnu.test dgt:~$ cd ~/dejagnu.test @end example Now you are ready to test DejaGnu's main program called runtest. The expected output is shown @strong{Runtest output in a empty directory } @example dgt:~/dejagnu.test$ runtest WARNING: Couldn't find the global config file. WARNING: No tool specified Test Run By dgt on Sun Nov 25 17:07:03 2001 Native configuration is i586-pc-linux-gnu === tests === Schedule of variations: unix Running target unix Using /usr/share/dejagnu/baseboards/unix.exp as board description file for target. Using /usr/share/dejagnu/config/unix.exp as generic interface file for target. ERROR: Couldn't find tool config file for unix. === Summary === @end example We will show you later how to get rid of all the WARNING- and ERROR-messages. The files testrun.sum and testrun.log have been created, which do not interest us at this point. Let's remove them. @example :~/dejagnu.test$ rm testrun.sum testrun.log @end example @menu * Windows:: * Getting the source code for the calc example:: @end menu @node Windows, Getting the source code for the calc example, , Test your installation @subsection Windows On Windows systems DejaGnu is part of a port of a lot of Unix tools to the Windows OS, called Cygwin. Cygwin may be downloaded and installed from a mirror of http://www.cygwin.com/. All examples were also run on Windows. If nothing is said, you can assume that you should get the same output as on a Unix system. You will need a telnet daemon if you want to use a Windows box as a remote target. There seems to be a freeware telnet daemon at http://www.fictional.net/. @node Getting the source code for the calc example, , Windows, Test your installation @subsection Getting the source code for the calc example If you are running a Debian distribution you can find the examples under /usr/share/doc/dejagnu/examples. These examples seem to be missing in Red Hat's RPM. In this case download the sources of DejaGnu and adjust the paths to the DejaGnu examples accordingly. @node Create a minimal project; e_g_ calc, Our first automated tests, Test your installation, Getting DejaGnu up and running @section Create a minimal project, e.g. calc In this section you will to start a small project, using the sample application calc, which is part of your DejaGnu distribution @menu * A simple project without the GNU autotools:: * Using autoconf/autoheader/automake:: @end menu @node A simple project without the GNU autotools, Using autoconf/autoheader/automake, , Create a minimal project; e_g_ calc @subsection A simple project without the GNU autotools The runtest program can be run stand-alone. All the autoconf/automake support is just cause those programs are commonly used for other GNU applications. The key to running runtest stand-alone is having the local site.exp file setup correctly, which automake does. The generated site.exp should like like: @example set tool calc set srcdir . set objdir /home/dgt/dejagnu.test @end example @node Using autoconf/autoheader/automake, , A simple project without the GNU autotools, Create a minimal project; e_g_ calc @subsection Using autoconf/autoheader/automake We have to prepare some input file in order to run autoconf and automake. There is book "GNU autoconf, automake and libtool" by Garry V. Vaughan, et al. NewRider, ISBN 1-57870-190-2 which describes this process thoroughly. From the calc example distributed with the DejaGnu documentation you should copy the program file itself (calc.c) and some additional files, which you might examine a little bit close to derive their meanings. @example dgt:~/dejagnu.test$ cp -r /usr/share/doc/dejagnu/examples/calc/\ @{configure.in,Makefile.am,calc.c,testsuite@} . @end example In Makefile.am note the presence of the AUTOMAKE_OPTIONS = dejagnu. This option is needed. Run aclocal to generate aclocal.m4, which is a collection of macros needed by configure.in @example dgt:~/dejagnu.test$ aclocal @end example autoconf is another part of the auto-tools. Run it to generate configure based on information contained in configure.in. @example dgt:~/dejagnu.test$ autoconf @end example autoheader is another part of the auto-tools. Run it to generate calc.h.in. @example dgt:~/dejagnu.test$ autoheader @end example The Makefile.am of this example was developed as port of the DejaGnu distribution. Adapt Makefile.am for this test. Replace the line "#noinst_PROGRAMS = calc" to "bin_PROGRAMS = calc". Change the RUNTESTDEFAULTFLAGS from "$$srcdir/testsuite" to "./testsuite". Running automake at this point contains a series of warning in its output as shown in the following example: @strong{Sample output of automake with missing files} @example dgt:~/dejagnu.test$ automake --add-missing automake: configure.in: installing `./install-sh' automake: configure.in: installing `./mkinstalldirs' automake: configure.in: installing `./missing' automake: Makefile.am: installing `./INSTALL' automake: Makefile.am: required file `./NEWS' not found automake: Makefile.am: required file `./README' not found automake: Makefile.am: installing `./COPYING' automake: Makefile.am: required file `./AUTHORS' not found automake: Makefile.am: required file `./ChangeLog' not found configure.in: 4: required file `./calc.h.in' not found Makefile.am:6: required directory ./doc does not exist @end example Create a empty directory doc and empty files INSTALL, NEWS, README, AUTHORS, ChangeLog and COPYING. The default COPYING will point to the GNU Public License (GPL). In a real project it would be time to add some meaningful text in each file. Adapt calc to your environment by calling configure. @strong{Sample output of configure } @example dgt:~/dejagnu.test$ ./configure creating cache ./config.cache checking whether to enable maintainer-specific portions of Makefiles... no checking for a BSD compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking whether make sets $@{MAKE@}... yes checking for working aclocal... found checking for working autoconf... found checking for working automake... found checking for working autoheader... found checking for working makeinfo... found checking for gcc... gcc checking whether the C compiler (gcc ) works... yes checking whether the C compiler (gcc ) is a cross-compiler... no checking whether we are using GNU C... yes checking whether gcc accepts -g... yes checking for a BSD compatible install... /usr/bin/install -c checking how to run the C preprocessor... gcc -E checking for stdlib.h... yes checking for strcmp... yes updating cache ./config.cache creating ./config.status creating Makefile creating calc.h @end example If you are familiar with GNU software, this output should not contain any surprise to you. Any errors should be easy to fix for such a simple program. Build the calc executable: @strong{Sample output building calc } @example dgt:~/dejagnu.test$ make gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c calc.c gcc -g -O2 -o calc calc.o @end example You prepared a few files and then called some commands. Respecting the right order assures a automatic and correctly compiled calc program. The following example resumes the correct order. @strong{Creating the calc program using the GNU autotools} @example dgt:~/dejagnu.test$ aclocal dgt:~/dejagnu.test$ autoconf dgt:~/dejagnu.test$ autoheader dgt:~/dejagnu.test$ automake --add-missing dgt:~/dejagnu.test$ ./configure dgt:~/dejagnu.test$ make @end example Play with calc and verify whether it works correctly. A sample session might look like this: @example dgt:~/dejagnu.test$ ./calc calc: version Version: 1.1 calc: add 3 4 7 calc: multiply 3 4 12 calc: multiply 2 4 12 calc: quit @end example Look at the intentional bug that 2 times 4 equals 12. The tests run by DejaGnu need a file called site.exp, which is automatically generated if we call "make site.exp". This was the purpose of the "AUTOMAKE_OPTIONS = dejagnu" in Makefile.am. @strong{Sample output generating a site.exp} @example dgt: make site.exp dgt:~/dejagnu.test$ make site.exp Making a new site.exp file... @end example @node Our first automated tests, A first remote test, Create a minimal project; e_g_ calc, Getting DejaGnu up and running @section Our first automated tests @menu * Running the test for the calc example:: * The various config files or how to avoid warnings:: * When trouble strikes:: * Testing "Hello world" locally:: @end menu @node Running the test for the calc example, The various config files or how to avoid warnings, , Our first automated tests @subsection Running the test for the calc example Now we are ready to call the automated tests @strong{Sample output of runtest in a configured directory} @example dgt:~/dejagnu.test$ make check make check-DEJAGNU make[1]: Entering directory `/home/dgt/dejagnu.test' srcdir=`cd . && pwd`; export srcdir; \ EXPECT=expect; export EXPECT; \ runtest=runtest; \ if /bin/sh -c "$runtest --version" > /dev/null 2>&1; then \ $runtest --tool calc CALC=`pwd`/calc --srcdir ./testsuite ; \ else echo "WARNING: could not find \`runtest'" 1>&2; :;\ fi WARNING: Couldn't find the global config file. WARNING: Couldn't find tool init file Test Run By dgt on Sun Nov 25 21:42:21 2001 Native configuration is i586-pc-linux-gnu === calc tests === Schedule of variations: unix Running target unix Using /usr/share/dejagnu/baseboards/unix.exp as board description file for target. Using /usr/share/dejagnu/config/unix.exp as generic interface file for target. Using ./testsuite/config/unix.exp as tool-and-target-specific interface file. Running ./testsuite/calc.test/calc.exp ... FAIL: multiply2 (bad match) === calc Summary === # of expected passes 5 # of unexpected failures 1 /home/Dgt/dejagnu.test/calc version Version: 1.1 make[1]: *** [check-DEJAGNU] Fehler 1 make[1]: Leaving directory `/home/Dgt/dejagnu.test' make: *** [check-am] Fehler 2 @end example Did you see the line "FAIL:"? The test cases for calc catch the bug in the calc.c file. Fix the error in calc.c later as the following examples assume a unchanged calc.c. Examine the output files calc.sum and calc.log. Try to understand the test cases written in ~/dejagnu.test/testsuite/calc.test/calc.exp. To understand Expect you might take a look at the book "Exploring Expect", which is an excellent resource for learning and using Expect. (Pub: O'Reilly, ISBN 1-56592-090-2) The book contains hundreds of examples and also includes a tutorial on Tcl. Exploring Expect is 602 pages long. @node The various config files or how to avoid warnings, When trouble strikes, Running the test for the calc example, Our first automated tests @subsection The various config files or how to avoid warnings DejaGnu may be customized by each user. It first searches for a file called ~/.dejagnurc. Create the file ~/.dejagnurc and insert the following line: @example puts "I am ~/.dejagnurc" @end example Rerun make check. Test whether the output contains "I am ~/.dejagnurc". Create ~/my_dejagnu.exp and insert the following line: @example puts "I am ~/my_dejagnu.exp" @end example In a Bash-Shell enter @example dgt:~/dejagnu.test$ export DEJAGNU=~/my_dejagnu.exp @end example Run "make check" again. The output should not contain "WARNING: Couldn't find the global config file.". Create the sub-directory lib. Create the file "calc.exp" in it and insert the following line: @example puts "I am lib/calc.exp" @end example The last warning "WARNING: Couldn't find tool init file" should not be part of the output of make check. Create the directory ~/boards. Create the file ~/boards/standard.exp and insert the following line: @example puts "I am boards/standard.exp" @end example If the variable DEJAGNU is still not empty then the (abbreviated) output of "make check" should look like this: @strong{Sample output of runtest with the usual configuration files} @example dgt:~/dejagnu.test$ make check <...> fi I am ~/.dejagnurc I am ~/my_dejagnu.exp I am lib/calc.exp Test Run By dgt on Sun Nov 25 22:19:14 2001 Native configuration is i586-pc-linux-gnu === calc tests === Using /home/Dgt/boards/standard.exp as standard board description\ file for build. I am ~/boards/standard.exp Using /home/Dgt/boards/standard.exp as standard board description\ file for host. I am ~/boards/standard.exp Schedule of variations: unix Running target unix Using /home/Dgt/boards/standard.exp as standard board description\ file for target. I am ~/boards/standard.exp Using /usr/share/dejagnu/baseboards/unix.exp as board description file\ for target. <...> @end example It is up to you to decide when and where to use any of the above mentioned config files for customizing. This chapters showed you where and in which order the different config files are run. @node When trouble strikes, Testing "Hello world" locally, The various config files or how to avoid warnings, Our first automated tests @subsection When trouble strikes Calling runtest with the '-v'-flag shows you in even more details which files are searched in which order. Passing it several times gives more and more details. @strong{Displaying details about runtest execution} @example runtest -v -v -v --tool calc CALC=`pwd`/calc --srcdir ./testsuite @end example Calling runtest with the '--debug'-flag logs a lot of details to dbg.log where you can analyse it afterwards. In all test cases you can temporary adjust the verbosity of information by adding the following Tcl command to any Tcl file that gets loaded by dejagnu, for instance, ~/.dejagnurc: @example set verbose 9 @end example @node Testing "Hello world" locally, , When trouble strikes, Our first automated tests @subsection Testing "Hello world" locally This test checks whether the shell command @code{echo Hello world} will really output "Hello world" to the console. Create the file @file{~/dejagnu.test/testsuite/calc.test/local_echo.exp}. It should contain the following lines: @strong{A first (local) test case} @example set test "Local Hello World" spawn echo Hello World expect @{ "Hello World" @{ pass $test @} default @{ fail $test @} @} @end example Run runtest again and verify the output "calc.log" @node A first remote test, , Our first automated tests, Getting DejaGnu up and running @section A first remote test Testing remote targets is a lot trickier especially if you are using an embedded target which has no built in support for things like a compiler, FTP server or a Bash-shell. Before you can test calc on a remote target you have to acquire a few basics skills. @menu * Setup telnet to your own host:: * A test case for login via telnet:: * Remote testing "Hello world":: * Transferring files from/to the target:: * Preparing for crosscompilation:: * Remote testing of calc:: * Using Windows as host and vxWorks as target:: @end menu @node Setup telnet to your own host, A test case for login via telnet, , A first remote test @subsection Setup telnet to your own host The easiest remote host is usually the host you are working on. In this example we will use telnet to login in your own workstation. For security reasons you should never have a telnet daemon running on machine connected on the Internet, as password and user names are transmitted in clear text. We assume you know how to setup your machine for a telnet daemon. Next try whether you may login in your own host by issuing the command "telnet localhost.1". In order to be able to distinguish between a normal session and a telnet login add the following lines to /home/dgt/.bashrc. @example if [ "$REMOTEHOST" ] then PS1='remote:\w\$ ' fi @end example Now on the machine a "remote" login looks like this: @strong{Sample log of a telnet login to localhost} @example dgt:~/dejagnu.test$ telnet localhost Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. Debian GNU/Linux testing/unstable Linux K6Linux login: dgt Password: Last login: Sun Nov 25 22:46:34 2001 from localhost on pts/4 Linux K6Linux 2.4.14 #1 Fre Nov 16 19:28:25 CET 2001 i586 unknown No mail. remote:~$ exit logout Connection closed by foreign host. @end example @node A test case for login via telnet, Remote testing "Hello world", Setup telnet to your own host, A first remote test @subsection A test case for login via telnet In order to define a correct setup we have add a line containing "set target unix" either to ~/.dejagnurc or to ~/my_dejagnu.exp. In ~/boards/standard.exp add the following four lines to define a few patterns for the DejaGnu telnet login procedure. @strong{Defining a remote target board} @example set_board_info shell_prompt "remote:" set_board_info telnet_username "dgt" set_board_info telnet_password "top_secret" set_board_info hostname "localhost" @end example As DejaGnu will be parsing the telnet session output for some well known pattern the output there are a lot of things that can go wrong. If you have any problems verify your setup: @itemize @item Is @file{/etc/motd} empty? @item Is @file{/etc/issue.net} empty? @item Exists a empty @file{~/.hushlogin}? @item The LANG environment variable must be either empty or set to "C". @end itemize To test the login via telnet write a sample test case. Create the file ~/dejagnu.test/testsuite/calc.test/remote_echo.exp and add the following few lines: @strong{DejaGnu script for logging in into a remote target} @example puts "this is remote_echo.exp target for $target " target_info $target #set verbose 9 set shell_id [remote_open $target] set test "Remote login to $target" #set verbose 0 puts "Spawn id for remote shell is $shell_id" if @{ $shell_id > 0 @} @{ pass "$test" @} else @{ fail "Remote open to $target" @} @end example In the runtest output you should find something like: @example Running ./testsuite/calc.test/local_echo.exp ... Running ./testsuite/calc.test/remote_echo.exp ... this is remote_echo.exp target is unix Spawn id for remote shell is exp7 @end example Have again a look at calc.log to get a feeling how DejaGnu and expect parse the input. @node Remote testing "Hello world", Transferring files from/to the target, A test case for login via telnet, A first remote test @subsection Remote testing "Hello world" Next you will transform the above "hello world" example to its remote equivalent. This can be done by adding the following lines to our file remote_echo.exp. @strong{A first (local) remote "Hello world" test} @example set test "Remote_send Hello World" set status [remote_send $target "echo \"Hello\" \"World\"\n" ] pass "$test" set test "Remote_expect Hello World" remote_expect $target 5 @{ -re "Hello World" @{ pass "$test" @} @} @end example Call make check. The output should contain "# of expected passes 9" and "# of unexpected failures 1". Have a look at the procedures in /usr/share/dejagnu/remote.exp to have an overview of the offered procedures and their features. Now setup a real target. In the following example we assume as target a PowerBook running Debian. As above add a test user "dgt", install Telnet and FTP servers. In order to distinguish it from the host add the line @example PS1='test:>' @end example to /home/dgt/.bash_profile. Also add a corresponding entry "powerbook" to /etc/hosts and verify that you are able to ping, telnet and ftp to the target "powerbook". In order to let runtest run its test on the "powerbook" target change the following lines in ~/boards/standard.exp: @strong{Board definition for a remote target} @example set_board_info protocol "telnet" set_board_info telnet_username "dgt" set_board_info telnet_password "top_secret" set_board_info shell_prompt "test:> " set_board_info hostname "powerbook" @end example Now call runtest again with the same arguments and verify whether all went okay by taking a close look at calc.log. @node Transferring files from/to the target, Preparing for crosscompilation, Remote testing "Hello world", A first remote test @subsection Transferring files from/to the target A simple procedure like this will do the job for you: @strong{Test script to transfer a file to a remote target} @example set test "Remote_download" puts "Running Remote_download" # set verbose 9 set remfile /home/dgt/dejagnu2 set status [remote_download $target /home/dgt/.dejagnurc $remfile] if @{ "$status" == "" @} @{ fail "Remote download to $remfile on $target" @} else @{ pass "$test" @} puts "status of remote_download ist $status" # set verbose 0 @end example After running runtest again, check whether the file dejagnu2 exists on the target. This example will only work if the rcp command works with your target. If you have a working FTP-server on the target you can use it by adding the following lines to ~/boards/standard.exp: @strong{Defining a board to use FTP as file transport} @example set_board_info file_transfer "ftp" set_board_info ftp_username "dgt" set_board_info ftp_password "1234" @end example @node Preparing for crosscompilation, Remote testing of calc, Transferring files from/to the target, A first remote test @subsection Preparing for crosscompilation For crosscompiling you need working binutils, gcc and a base library like libc or glib for your target. It is beyond the scope of this document to describe how to get it working. The following examples assume a cross compiler for PowerPC which is called linux-powerpc-gcc. Add AC_CANONICAL_TARGET in dejagnu.test/configure.in at the following location. Copy config.guess from /usr/share/automake to dejagnu.test. @example AM_CONFIG_HEADER(calc.h) AC_CANONICAL_TARGET([]) AM_INIT_AUTOMAKE(calc, 1.1) @end example You need to run automake 2.5 or later. Depending on your installation calling autoconf2.5 instead of autoconf is not needed. The sequence to regenerate all files is: @strong{Using autotools for cross development} @example $ autoconf2.5 $ autoheader $ automake $ ./configure --host=powerpc-linux --target=powerpc-linux configure: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used. checking build system type... ./config.guess: ./config.guess: No such file or directory configure: error: cannot guess build type; you must specify one $ cp /usr/share/automake/config.guess . $ ./configure --host=powerpc-linux --target=powerpc-linux configure: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used. \ checking build system type... i586-pc-linux-gnu checking host system type... powerpc-unknown-linux-gnu <...> checking whether we are cross compiling... yes <...> Configuration: Source code location: . C Compiler: powerpc-linux-gcc C Compiler flags: -g -O2 @end example Everything should be ready to recompile for the target: @example $ make powerpc-linux-gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c calc.c powerpc-linux-gcc -g -O2 -o calc calc.o @end example @node Remote testing of calc, Using Windows as host and vxWorks as target, Preparing for crosscompilation, A first remote test @subsection Remote testing of calc Not yet written, as I have problem getting libc6-dev-powerpc to work. Probably I first have to build my cross compiler. @node Using Windows as host and vxWorks as target, , Remote testing of calc, A first remote test @subsection Using Windows as host and vxWorks as target A more thorough walk-through will be written in a few weeks. In order to test the vxWorks as a target I changed boards/standards.exp to reflect my settings (IP, username, password). Then I reconfigured vxWorks to include a FTP and telnet server (using the same username/password combination ad in boards/standard.exp). With this setup and some minor modification (e.g. replacing echo by printf) in my test cases I could test my vxWorks system. It sure does not seem to be a correct setup by DejaGnu standard. For instance, it still loading /usr/share/dejagnu/baseboards/unix.exp instead of vxWorks. In any case I found that (at least under Windows) I did not find out how the command line would let me override settings in my personal config files. @node Running Tests, Customizing DejaGnu, Getting DejaGnu up and running, Top @chapter Running Tests There are two ways to execute a testsuite. The most common way is when there is existing support in the @file{Makefile}. This support consists of a @emph{check} target. The other way is to execute the @code{runtest} program directly. To run @code{runtest} directly from the command line requires either all the correct options, or the @ref{Local Config File} must be setup correctly. @menu * Make check: Make Check. * Runtest:: * The files DejaGnu produces.: Output Files. @end menu @node Make Check, Runtest, , Running Tests @section Make check To run tests from an existing collection, first use @code{configure} as usual to set up the build directory. Then try typing: @example make check @end example If the @emph{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. The most common file the check builds is the @emph{site.exp}. The site.exp file contains various variables that DejaGnu used to determine the configuration of the program being tested. This is mostly for supporting remote testing. The @emph{check} target is supported by GNU Automake. To have DejaGnu support added to your generated @file{Makefile.in}, just add the keyword dejagnu to the AUTOMAKE_OPTIONS variable in your @file{Makefile.am} file. Once you have run @emph{make check} to build any auxiliary files, you can invoke the test driver @code{runtest} directly to repeat the tests. You will also have to execute @code{runtest} directly for test collections with no @emph{check} target in the @file{Makefile}. @node Runtest, Output Files, Make Check, Running Tests @section Runtest @code{runtest} is the executable test driver for DejaGnu. You can specify two kinds of things on the @code{runtest} command line: command line options, and Tcl variables for the test scripts. The options are listed alphabetically below. @code{runtest} returns an exit code of @emph{1} if any test has an unexpected result; otherwise (if all tests pass or fail as expected) it returns @emph{0} as the exit code. @menu * Output States:: * Invoking Runtest:: * Common Options: Common Operations. @end menu @node Output States, Invoking Runtest, , Runtest @subsection Output States @file{runtest} flags the outcome of each test as one of these cases. @ref{A POSIX Conforming Test Framework} for a discussion of how POSIX specifies the meanings of these cases. @table @asis @item PASS The most desirable outcome: the test succeeded, and was expected to succeed. @item 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. @item 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. @item 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 @emph{UNSUPPORTED} instead. @item UNRESOLVED Output from a test requires manual inspection; the testsuite could not automatically determine the outcome. For example, your tests can report this outcome is when a test does not complete as expected. @item UNTESTED A test case is not yet complete, and in particular cannot yet produce a @emph{PASS} or @emph{FAIL}. You can also use this outcome in dummy ``tests'' that note explicitly the absence of a real test case for a particular property. @item 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. @end table runtest may also display the following messages: @table @asis @item 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 testsuites should not emit this message; use @emph{UNSUPPORTED}, @emph{UNTESTED}, or @emph{UNRESOLVED} instead, as appropriate.) @item WARNING Indicates a possible problem in running the test. Usually warnings correspond to recoverable errors, or display an important message about the following tests. @item NOTE An informational message about the test case. @end table @node Invoking Runtest, Common Operations, Output States, Runtest @subsection Invoking Runtest This is the full set of command line options that @file{runtest} recognizes. Arguments may be abbreviated to the shortest unique string. @table @asis @item @code{--all} (-a) Display all test output. By default, @emph{runtest} shows only the output of tests that produce unexpected results; that is, tests with status @emph{FAIL} (unexpected failure), @emph{XPASS} (unexpected success), or @emph{ERROR} (a severe error in the test case itself). Specify @code{--all} to see output for tests with status @emph{PASS} (success, as expected) @emph{XFAIL} (failure, as expected), or @emph{WARNING} (minor error in the test case itself). @item @code{--build [string]} @emph{string} is a full configuration ``triple'' name as used by @code{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 separate. @item @code{--host [string]} @code{string} is a full configuration ``triple'' name as used by @emph{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 @emph{only} DejaGnu procedures that compare the host string with particular values. The procedures @emph{ishost}, @emph{istarget}, @emph{isnative}, and @emph{setup}xfail@} are affected by @code{--host}. In this usage, @emph{host} refers to the machine that the tests are to be run on, which may not be the same as the @emph{build} machine. If @code{--build} is also specified, then @code{--host} refers to the machine that the tests will be run on, not the machine DejaGnu is run on. @item @code{--host_board [name]} The host board to use. @item @code{--target [string]} Use this option to override the default setting (running native tests). @emph{string} is a full configuration ``triple'' name of the form @emph{cpu-vendor-os} as used by @code{configure}. This option changes the configuration @emph{runtest} uses for the default tool names, and other setup information. @item @code{--debug} (-de) Turns on the @emph{expect} internal debugging output. Debugging output is displayed as part of the @emph{runtest} output, and logged to a file called @file{dbg.log}. The extra debugging output does @emph{not} appear on standard output, unless the verbose level is greater than 2 (for instance, to see debug output immediately, specify @code{--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 @code{--strace} also goes into @file{dbg.log}. @item @code{--help} (-he) Prints out a short summary of the @emph{runtest} options, then exits (even if you also specify other options). @item @code{--ignore [name(s)] } The names of specific tests to ignore. @item @code{--objdir [path]} Use @emph{path} as the top directory containing any auxiliary compiled test code. This defaults to @file{.}. Use this option to locate pre-compiled test code. You can normally prepare any auxiliary files needed with @emph{make}. @item @code{--outdir [path]} Write output logs in directory @file{path}. The default is @emph{.@}, the} directory where you start @emph{runtest}. This option affects only the summary and the detailed log files @file{tool.sum} and @file{tool.log}. The DejaGnu debug log @file{dbg.log} always appears (when requested) in the local directory. @item @code{--reboot [name]} Reboot the target board when @emph{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. @item @code{--srcdir [path]} Use @file{path} as the top directory for test scripts to run. @emph{runtest} looks in this directory for any subdirectory whose name begins with the toolname (specified with @code{--tool}). For instance, with @code{--tool}gdb@}, @emph{runtest} uses tests in subdirectories @file{gdb.*} (with the usual shell-like filename expansion). If you do not use @code{--srcdir}, @emph{runtest} looks for test directories under the current working directory. @item @code{--strace [number]} Turn on internal tracing for @emph{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 @emph{case} or @emph{if} statements. Each procedure call or control structure counts as one ``level''. The output is recorded in the same file, @file{dbg.log}, used for output from @code{--debug}. @item @code{--connect [program]} Connect to a target testing environment as specified by @emph{type}, if the target is not the computer running @emph{runtest}. For example, use @code{--connect} to change the program used to connect to a ``bare board'' boot monitor. The choices for @emph{type} in the DejaGnu 1.4 distribution are @emph{rlogin}, @emph{telnet}, @emph{rsh}, @emph{tip}, @emph{kermit}, and @emph{mondfe}. The default for this option depends on the configuration 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. @item @code{--baud [number]} Set the default baud rate to something other than 9600. (Some serial interface programs, like @emph{tip}, use a separate initialization file instead of this value.) @item @code{--target_board [name(s)]} The list of target boards to run tests on. @anchor{--tool[name[s]]}@item @code{--tool[name(s)]} Specifies which testsuite to run, and what initialization module to use. @code{--tool} is used @emph{only} for these two purposes. It is @emph{not} used to name the executable program to test. Executable tool names (and paths) are recorded in @file{site.exp} and you can override them by specifying Tcl variables on the command line. For example, including "@code{--tool} gcc" on the @emph{runtest} command line runs tests from all test subdirectories whose names match @file{gcc.*}, and uses one of the initialization modules named @file{config/*-gcc.exp}. To specify the name of the compiler (perhaps as an alternative path to what @emph{runtest} would use by default), use @emph{GCC=binname} on the @emph{runtest} command line. @item @code{--tool_exec [name]} The path to the tool executable to test. @item @code{--tool_opts [options]} A list of additional options to pass to the tool. @item @code{--verbose} (-v) Turns on more output. Repeating this option increases the amount of output displayed. Level one (@emph{-v}) is simply test output. Level two (@emph{-v}-v@}) shows messages on options, configuration, and process control. Verbose messages appear in the detailed (@file{*.log}) log file, but not in the summary (@file{*.sum}) log file. @item @code{--version} (-V) Prints out the version numbers of DejaGnu, @emph{expect} and Tcl, and exits without running any tests. @item @code{--D[0-1]} Start the internal Tcl debugger. The Tcl debugger supports breakpoints, single stepping, and other common debugging activities. See the document "Debugger for Tcl Applications" by Don Libes. (Distributed in PostScript form with @emph{expect} as the file @file{expect/tcl-debug.ps.}. If you specify @emph{-D1}, the @emph{expect} shell stops at a breakpoint as soon as DejaGnu invokes it. If you specify @emph{-D0}, DejaGnu starts as usual, but you can enter the debugger by sending an interrupt (e.g. by typing @key{C}@key{c}). @item @file{testfile}.exp[=arg(s)] Specify the names of testsuites to run. By default, @emph{runtest} runs all tests for the tool, but you can restrict it to particular testsuites by giving the names of the @emph{.exp expect} scripts that control them. @emph{testsuite}.exp may not include path information; use plain filenames. @item @file{testfile}.exp="testfile1 ..." Specify a subset of tests in a suite to run. For compiler or assembler tests, which often use a single @emph{.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 @emph{?}, @emph{*}, and @emph{[chars]}. @item @code{tclvar}=value You can define Tcl variables for use by your test scripts in the same style used with @emph{make} for environment variables. For example, @emph{runtest GDB=gdb.old} defines a variable called @code{GDB}; when your scripts refer to @code{$GDB} in this run, they use the value @emph{gdb.old}. The default Tcl variables used for most tools are defined in the main DejaGnu @emph{Makefile}; their values are captured in the @file{site.exp} file. @end table @node Common Operations, , Invoking Runtest, Runtest @subsection Common Options Typically, you don't need must to use any command-line options. @code{--tool} used is only required when there are more than one testsuite in the same directory. The default options are in the local site.exp file, created by "make site.exp". For example, if the directory @file{gdb/testsuite} contains a collection of DejaGnu tests for GDB, you can run them like this: @example eg$ cd gdb/testsuite eg$ runtest --tool gdb @end example Test output follows, ending with: @example === gdb Summary === # of expected passes 508 # of expected failures 103 /usr/latest/bin/gdb version 4.14.4 -nx @end example You can use the option @code{--srcdir} to point to some other directory containing a collection of tests: @example eg$ runtest--srcdir /devo/gdb/testsuite @end example By default, @code{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 @code{--all} option. For more verbose output about processes being run, communication, and so on, use @code{--verbose}. To see even more output, use multiple @code{--verbose} options. for a more detailed explanation of each @code{runtest} option. Test output goes into two files in your current directory: summary output in @file{tool.sum}, and detailed output in @file{ tool.log}. (@emph{tool} refers to the collection of tests; for example, after a run with @code{--tool} gdb, look for output files @file{gdb.sum} and @file{gdb.log}.) @node Output Files, , Runtest, Running Tests @section The files DejaGnu produces. DejaGnu 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 @code{--debug} to request an output file showing details of what Expect is doing internally. @menu * Summary File:: * Log File:: * Debug Log File:: @end menu @node Summary File, Log File, , Output Files @subsection Summary File DejaGnu always produces a summary output file @file{tool.sum}. This summary shows the names of all test files run; for each test file, one line of output from each @code{pass} command (showing status @emph{PASS} or @emph{XPASS}) or @code{fail} command (status @emph{FAIL} or @emph{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 @code{--all}.) If any of your tests use the procedures @code{unresolved}, @code{unsupported}, or @code{runtested}, the summary output also tabulates the corresponding outcomes. For example, after @code{runtest --tool binutils}, look for a summary log in @file{binutils.sum}. Normally, DejaGnu writes this file in your current working directory; use the @code{--outdir} option to select a different directory. @strong{Here is a short sample summary log} @example 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 @end example @node Log File, Debug Log File, Summary File, Output Files @subsection Log File DejaGnu also saves a detailed log file @file{tool.log}, showing any output generated by tests as well as the summary output. For example, after @code{runtest --tool binutils}, look for a detailed log in @file{binutils.log}. Normally, DejaGnu writes this file in your current working directory; use the @code{--outdir} option to select a different directory. @strong{Here is a brief example showing a detailed log for G++ tests} @example 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/latest/bin/g++ version cygnus-2.0.1 @end example @node Debug Log File, , Log File, Output Files @subsection Debug Log File With the @code{--debug} option, you can request a log file showing the output from Expect itself, running in debugging mode. This file (@file{dbg.log}, in the directory where you start @code{runtest}) shows each pattern Expect considers in analyzing test output. This file reflects each @code{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. @strong{The log messages begin with a message of the form} @example expect: does @{tool output@} (spawn_id n) match pattern @{expected pattern@}? @end example For every unsuccessful match, Expect issues a @emph{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 (@emph{expect... match pattern}). When Expect finds a match, the log for the successful match ends with @emph{yes}, followed by a record of the Expect variables set to describe a successful match. @strong{Here is an excerpt from the debugging log for a GDB test:} @example send: sent @{break gdbme.c:34\n@} to spawn id 6 expect: does @{@} (spawn_id 6) match pattern @{Breakpoint.*at.* file gdbme.c, line 34.*\(gdb\) $@}? no @{.*\(gdb\) $@}? no expect: does @{@} (spawn_id 0) match pattern @{return@} ? no @{\(y or n\) @}? no @{buffer_full@}? no @{virtual@}? no @{memory@}? no @{exhausted@}? no @{Undefined@}? no @{command@}? no break gdbme.c:34 Breakpoint 8 at 0x23d8: file gdbme.c, line 34. (gdb) expect: does @{break gdbme.c:34\r\nBreakpoint 8 at 0x23d8: file gdbme.c, line 34.\r\n(gdb) @} (spawn_id 6) match pattern @{Breakpoint.*at.* file gdbme.c, line 34.*\(gdb\) $@}? yes expect: set expect_out(0,start) @{18@} expect: set expect_out(0,end) @{71@} expect: set expect_out(0,string) @{Breakpoint 8 at 0x23d8: file gdbme.c, line 34.\r\n(gdb) @} epect: 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 @end example This example exhibits three properties of Expect and DejaGnu that might be surprising at first glance: @itemize @item Empty output for the first attempted match. The first set of attempted matches shown ran against the output @emph{@{@}} --- 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). @item Interspersed tool output. The beginning of the log entry for the second attempted match may be hard to spot: this is because the prompt @emph{@{(gdb) @}} appears on the same line, just before the @emph{expect:} that marks the beginning of the log entry. @item 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 @emph{virtual memory exhausted} in rare circumstances), or by changes in the tested program (@emph{Undefined command} is the likeliest outcome if the name of a tested command changes). The pattern @emph{@{return@}} is a particularly interesting fail-safe to notice; it checks for an unexpected @key{RET} prompt. This may happen, for example, if the tested tool can filter output through a pager. These fail-safe patterns (like the debugging log itself) are primarily useful while developing test scripts. Use the @code{error} procedure to make the actions for fail-safe patterns produce messages starting with @emph{ERROR} on standard output, and in the detailed log file. @end itemize @node Customizing DejaGnu, Extending DejaGnu, Running Tests, Top @chapter Customizing DejaGnu The site configuration file, @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 @code{configure} and @code{make} programs. If this file is setup correctly, it is possible to execute a testsuite merely by typing @code{runtest}. DejaGnu supports two @file{site.exp} files. The multiple instances of @file{site.exp} are loaded in a fixed order built into DejaGnu. The first file loaded is the local file @file{site.exp}, and then the optional global @file{site.exp} file as pointed to by the @code{DEJAGNU} environment variable. There is an optional @emph{master} @file{site.exp}, capturing configuration values that apply to DejaGnu across the board, in each configuration-specific subdirectory of the DejaGnu library directory. @code{runtest} loads these values first. The master @file{site.exp} contains the default values for all targets and hosts supported by DejaGnu. This master file is identified by setting the environment variable @code{DEJAGNU} to the name of the file. This is also referred to as the ``global'' config file. Any directory containing a configured testsuite also has a local @file{site.exp}, capturing configuration values specific to the tool under test. Since @code{runtest} loads these values last, the individual test configuration can either rely on and use, or override, any of the global values from the global @file{site.exp} file. You can usually generate or update the testsuite's local @file{site.exp} by typing @code{make site.exp} in the testsuite directory, after the test suite is configured. You can also have a file in your home directory called @file{.dejagnurc}. This gets loaded first before the other config files. Usually this is used for personal stuff, like setting the @code{all_flag} so all the output gets printed, or your own verbosity levels. This file is usually restricted to setting command line options. You can further override the default values in a user-editable section of any @file{site.exp}, or by setting variables on the @code{runtest} command line. @menu * Local Config File:: * Global Config File:: * Board Config File:: * Remote Host Testing:: * Config File Values:: @end menu @node Local Config File, Global Config File, , Customizing DejaGnu @section Local Config File It is usually more convenient to keep these @emph{manual overrides} in the @file{site.exp} local to each test directory, rather than in the global @file{site.exp} in the installed DejaGnu library. This file is mostly for supplying tool specific info that is required by the testsuite. All local @file{site.exp} files have two sections, separated by comment text. The first section is the part that is generated by @code{make}. It is essentially a collection of Tcl variable definitions based on @file{Makefile} environment variables. Since they are generated by @code{make}, they contain the values as specified by @code{configure}. (You can also customize these values by using the @code{--site} option to @code{configure}.) In particular, this section contains the @file{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 @code{make}. @strong{The first section starts with} @example ## these variables are automatically generated by make ## # Do not edit here. If you wish to override these values # add them to the last section @end example 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 @code{runtest}. This allows you to easily customize @code{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.) @strong{The first section ends with this line} @example ## All variables above are generated by configure. Do Not Edit ## @end example 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 @code{host_triplet}, @code{build_triplet}, @code{target_triplet}. All other variables are tool dependent, i.e., for testing a compiler, the value for @code{CC} might be set to a freshly built binary, as opposed to one in the user's path. Here's an example local site.exp file, as used for GCC/G++ testing. @strong{Local Config File} @example ## these variables are automatically generated by make ## # Do not edit here. If you wish to override these values # add them to the last section set rootme "/build/devo-builds/i586-pc-linux-gnulibc1/gcc" set host_triplet i586-pc-linux-gnulibc1 set build_triplet i586-pc-linux-gnulibc1 set target_triplet i586-pc-linux-gnulibc1 set target_alias i586-pc-linux-gnulibc1 set CFLAGS "" set CXXFLAGS "-isystem /build/devo-builds/i586-pc-linux-gnulibc1/gcc/../libio -isystem $srcdir/../libg++/src -isystem $srcdir/../libio -isystem $srcdir/../libstdc++ -isystem $srcdir/../libstdc++/stl -L/build/devo-builds/i586-pc-linux-gnulibc1/gcc/../libg++ -L/build/devo-builds/i586-pc-linux-gnulibc1/gcc/../libstdc++" append LDFLAGS " -L/build/devo-builds/i586-pc-linux-gnulibc1/gcc/../ld" set tmpdir /build/devo-builds/i586-pc-linux-gnulibc1/gcc/testsuite set srcdir "$@{srcdir@}/testsuite" ## All variables above are generated by configure. Do Not Edit ## @end example This file defines the required fields for a local config file, namely the three config triplets, and the srcdir. It also defines several other Tcl variables that are used exclusively by the GCC testsuite. For most test cases, the CXXFLAGS and LDFLAGS are supplied by DejaGnu itself for cross testing, but to test a compiler, GCC needs to manipulate these itself. @node Global Config File, Board Config File, Local Config File, Customizing DejaGnu @section Global Config File The master config file is where all the target specific config variables 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 @emph{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 dependent. 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. @strong{Global Config file} @example # Make sure we look in the right place for the board description files. if ![info exists boards_dir] @{ set boards_dir @{@} @} lappend boards_dir "/nfs/cygint/s1/cygnus/dejagnu/boards" verbose "Global Config File: target_triplet is $target_triplet" 2 global target_list case "$target_triplet" in @{ @{ "native" @} @{ set target_list "unix" @} @{ "sparc64-*elf" @} @{ set target_list "sparc64-sim" @} @{ "mips-*elf" @} @{ set target_list "mips-sim wilma barney" @} @{ "mips-lsi-elf" @} @{ set target_list "mips-lsi-sim@{,soft-float,el@}" @} @{ "sh-*hms" @} @{ set target_list @{ "sh-hms-sim" "bloozy" @} @} @} @end example In this case, we have support for several cross compilers, that all run on this host. For testing on operating systems that don't support Expect, DejaGnu can be run on the local build machine, and it can connect to the remote host and run all the tests for this cross compiler on that host. All the remote OS requires is a working Telnet server. As you can see, all one does is set the variable @code{target_list} to the list of targets and options to test. The simple settings, like for @emph{sparc64-elf} only require setting the name of the single board config file. The @emph{mips-elf} target is more complicated. Here it sets the list to three target boards. One is the default mips target, and both @emph{wilma} @emph{barney} are symbolic names for other mips boards. Symbolic names are covered in the @ref{Adding A New Board} chapter. The more complicated example is the one for @emph{mips-lsi-elf}. This one runs the tests with multiple iterations using all possible combinations of the @code{--soft-float} and the @code{--el} (little endian) option. Needless to say, this last feature is mostly compiler specific. @node Board Config File, Remote Host Testing, Global Config File, Customizing DejaGnu @section Board Config File The board config file is where board specific config data is stored. A board config file contains all the higher-level configuration settings. There is a rough inheritance scheme, where it is possible to base a new board description file on an existing one. There are also collections of custom procedures for common environments. For more information on adding a new board config file, go to the @ref{Adding A New Board} chapter. An example board config file for a GNU simulator is as follows. @code{set_board_info} is a procedure that sets the field name to the specified value. The procedures in square brackets @emph{[]} are @emph{helper procedures}. These are used to find parts of a tool chain required to build an executable image that may reside in various locations. This is mostly of use for when the startup code, the standard C libraries, or the tool chain itself is part of your build tree. @strong{Board Config File} @example # 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 @end example There are five helper procedures used in this example. The first one, @code{find gcc} looks for a copy of the GNU compiler in your build tree, or it uses the one in your path. This will also return the proper transformed name for a cross compiler if you whole build tree is configured for one. The next helper procedures are @code{libgloss_include_flags} & @code{libgloss_link_flags}. These return the proper flags to compiler and link an executable image using @ref{Libgloss}, the GNU BSP (Board Support Package). The final procedures are @code{newlib_include_flag} & @code{newlib_include_flag}. These find the Newlib C library, which is a reentrant standard C library for embedded systems comprising of non GPL'd code. @node Remote Host Testing, Config File Values, Board Config File, Customizing DejaGnu @section Remote Host Testing @quotation @strong{Note} Thanks to DJ Delorie for the original paper that this section is based on. @end quotation DejaGnu also supports running the tests on a remote host. To set this up, the remote host needs an FTP server, and a telnet server. Currently foreign operating systems used as remote hosts are VxWorks, VRTX, DOS/Windows 3.1, MacOS and Windows. The recommended source for a Windows-based FTP server is to get IIS (either IIS 1 or Personal Web Server) from @uref{http://www.microsoft.com,http://www.microsoft.com}. When you install it, make sure you install the FTP server - it's not selected by default. Go into the IIS manager and change the FTP server so that it does not allow anonymous FTP. Set the home directory to the root directory (i.e. c:\) of a suitable drive. Allow writing via FTP. It will create an account like IUSR_FOOBAR where foobar is the name of your machine. Go into the user editor and give that account a password that you don't mind hanging around in the clear (i.e. not the same as your admin or personal passwords). Also, add it to all the various permission groups. You'll also need a telnet server. For Windows, go to the @uref{http://ataman.com,Ataman} web site, pick up the Ataman Remote Logon Services for Windows, and install it. You can get started on the eval period anyway. Add IUSR_FOOBAR to the list of allowed users, set the HOME directory to be the same as the FTP default directory. Change the Mode prompt to simple. Ok, now you need to pick a directory name to do all the testing in. For the sake of this example, we'll call it piggy (i.e. c:\piggy). Create this directory. You'll need a unix machine. Create a directory for the scripts you'll need. For this example, we'll use /usr/local/swamp/testing. You'll need to have a source tree somewhere, say /usr/src/devo. Now, copy some files from releng's area in SV to your machine: @strong{Remote host setup} @example cd /usr/local/swamp/testing mkdir boards scp darkstar.welcomehome.org:/dejagnu/cst/bin/MkTestDir . scp darkstar.welcomehome.org:/dejagnu/site.exp . scp darkstar.welcomehome.org:/dejagnu/boards/useless98r2.exp boards/foobar.exp export DEJAGNU=/usr/local/swamp/testing/site.exp @end example You must edit the boards/foobar.exp file to reflect your machine; change the hostname (foobar.com), username (iusr_foobar), password, and ftp_directory (c:/piggy) to match what you selected. Edit the global @file{ site.exp} to reflect your boards directory: @strong{Add The Board Directory} @example lappend boards_dir "/usr/local/swamp/testing/boards" @end example Now run MkTestDir, which is in the contrib directory. The first parameter is the toolchain prefix, the second is the location of your devo tree. If you are testing a cross compiler (ex: you have sh-hms-gcc.exe in your PATH on the PC), do something like this: @strong{Setup Cross Remote Testing} @example ./MkTestDir sh-hms /usr/dejagnu/src/devo @end example If you are testing a native PC compiler (ex: you have gcc.exe in your PATH on the PC), do this: @strong{Setup Native Remote Testing} @example ./MkTestDir '' /usr/dejagnu/src/devo @end example To test the setup, @code{ftp} to your PC using the username (iusr_foobar) and password you selected. CD to the test directory. Upload a file to the PC. Now telnet to your PC using the same username and password. CD to the test directory. Make sure the file is there. Type "set" and/or "gcc -v" (or sh-hms-gcc -v) and make sure the default PATH contains the installation you want to test. @strong{Run Test Remotely} @example cd /usr/local/swamp/testing make -k -w check RUNTESTFLAGS="--host_board foobar --target_board foobar -v -v" > check.out 2>&1 @end example To run a specific test, use a command like this (for this example, you'd run this from the gcc directory that MkTestDir created): @strong{Run a Test Remotely} @example make check RUNTESTFLAGS="--host_board sloth --target_board sloth -v compile.exp=921202-1.c" @end example Note: if you are testing a cross-compiler, put in the correct target board. You'll also have to download more .exp files and modify them for your local configuration. The -v's are optional. @node Config File Values, , Remote Host Testing, Customizing DejaGnu @section Config File Values 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 @code{target_info}, and it has two indices. The following fields are part of the array. @menu * Command Line Option Variables: Option Variables. * Personal Config File:: @end menu @node Option Variables, Personal Config File, , Config File Values @subsection Command Line Option Variables In the user editable second section of the @ref{Personal Config File} you can not only override the configuration variables captured in the first section, but also specify default values for all on the @code{runtest} command line options. Save for @code{--debug}, @code{--help}, and @code{--version}, each command line option has an associated Tcl variable. Use the Tcl @code{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 @file{site.exp}. @ref{Invoking Runtest}, for explanations of the command-line options. @strong{Tcl Variables For Command Line Options} @multitable @columnfractions 0.333333333333333 0.333333333333333 0.333333333333333 @item runtest option@tab Tcl variable@tab description @item --all@tab all_flag@tab display all test results if set @item --baud@tab baud@tab set the default baud rate to something other than 9600. @item --connect@tab connectmode@tab @code{rlogin}, @code{telnet}, @code{rsh}, @code{kermit}, @code{tip}, or @code{mondfe} @item --outdir@tab outdir@tab directory for @file{tool.sum} and @file{tool.log.} @item --objdir@tab objdir@tab directory for pre-compiled binaries @item --reboot@tab reboot@tab reboot the target if set to @emph{"1"}; do not reboot if set to @emph{"0"} (the default). @item --srcdir@tab srcdir@tab directory of test subdirectories @item --strace@tab tracelevel@tab a number: Tcl trace depth @item --tool@tab tool@tab name of tool to test; identifies init, test subdir @item --verbose@tab verbose@tab verbosity level. As option, use multiple times; as variable, set a number, 0 or greater. @item --target@tab target_triplet@tab The canonical configuration string for the target. @item --host@tab host_triplet@tab The canonical configuration string for the host. @item --build@tab build_triplet@tab The canonical configuration string for the build host. @item --mail@tab address@tab Email the output log to the specified address. @end multitable @node Personal Config File, , Option Variables, Config File Values @subsection Personal Config File The personal config file is used to customize @code{runtest's} behaviour for each person. It is typically used to set the user preferred setting for verbosity, and any experimental Tcl procedures. My personal @file{~/.dejagnurc} file looks like: @strong{Personal Config File} @example set all_flag 1 set RLOGIN /usr/ucb/rlogin set RSH /usr/local/sbin/ssh @end example Here I set @code{all_flag} so I see all the test cases that PASS along with the ones that FAIL. I also set @code{RLOGIN} 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 version rather than the default that's in my path. I also set @code{RSH} to the SSH secure shell, as rsh is mostly used to test unix machines within a local network here. @node Extending DejaGnu, Unit Testing, Customizing DejaGnu, Top @chapter Extending DejaGnu @menu * Adding A New Testsuite: Adding a new Testsuite. * Adding A New Tool:: * Adding A New Target:: * Adding A New Board:: * Board Config File Values: Board File Values. * Writing A Test Case:: * Debugging A Test Case:: * Adding A Test Case To A Testsuite.: Adding A Test Case To A Testsuite. * Hints On Writing A Test Case:: * Special variables used by test cases.: Test Case Variables. @end menu @node Adding a new Testsuite, Adding A New Tool, , Extending DejaGnu @section Adding A New Testsuite The testsuite for a new tool should always be located in that tools source directory. DejaGnu require the directory be named @file{testsuite}. Under this directory, the test cases go in a subdirectory whose name begins with the tool name. For example, for a tool named @emph{flubber}, each subdirectory containing testsuites must start with @emph{"flubber."}. @node Adding A New Tool, Adding A New Target, Adding a new Testsuite, Extending DejaGnu @section Adding 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 testsuites. Unfortunately, well-established testsuites 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 testsuites may make the prospect of creating an entirely new testsuite appear overwhelming. Nevertheless, it is quite straightforward to get a new testsuite going. There is one testsuite 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 @file{example/} directory of the DejaGnu distribution contains both an interactive tool called @code{calc}, and a testsuite for it. Reading this testsuite, and experimenting with it, is a good way to supplement the information in this section. (Thanks to Robert Lupton for creating calc and its testsuite---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 testsuite for a program example. @itemize @item Create or select a directory to contain your new collection of tests. Change into that directory (shown here as @file{testsuite}): Create a @file{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 @code{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 @emph{unix} as the value.) What else is needed in @file{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 GNU Autoconf. @item Create @file{Makefile.in} (if you are using Autoconf), or @file{Makefile.am}(if you are using Automake), the source file used by configure to build your @file{Makefile}. If you are using GNU Automake.just add the keyword @emph{dejagnu} to the @emph{AUTOMAKE_OPTIONS} variable in your @file{Makefile.am} file. This will add all the Makefile support needed to run DejaGnu, and support the @ref{Make Check} target. You also need to include two targets important to DejaGnu: @emph{check}, to run the tests, and @emph{site.exp}, to set up the Tcl copies of configuration-dependent values. This is called the @ref{Local Config File} The check target must run the @code{runtest} program to execute the tests. The @file{site.exp} target should usually set up (among other things) the $tool variable for the name of your program. If the local site.exp file is setup correctly, it is possible to execute the tests by merely typing @code{runtest} on the command line. @strong{Sample Makefile.in Fragment} @example # Look for a local version of DejaGnu, otherwise use one in the path RUNTEST = `if test -f $(top_srcdir)/../dejagnu/runtest; then \ echo $(top_srcdir) ../dejagnu/runtest; \ else \ echo runtest; \ fi` # The flags to pass to runtest RUNTESTFLAGS = # Execute the tests check: site.exp all $(RUNTEST) $(RUNTESTFLAGS) \ --tool $@{example@} --srcdir $(srcdir) # Make the local config file 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? @end example @item Create a directory (in @file{testsuite}) called @file{config}. Make a @emph{Tool Init File} in this directory. Its name must start with the @code{target_abbrev} value, or be named @file{default.exp} so call it @file{config/unix.exp} for our Unix based example. This is the file that contains the target-dependent procedures. Fortunately, on Unix, most of them do not have to do very much in order for @code{runtest} to run. If the program being tested is not interactive, you can get away with this minimal @file{unix.exp} to begin with: @strong{Simple Batch Program Tool Init File} @example proc foo_exit @{@} @{@} proc foo_version @{@} @{@} @end example If the program being tested is interactive, however, you might as well define a @emph{start} routine and invoke it by using an init file like this: @strong{Simple Interactive Program Tool Init File} @example proc foo_exit @{@} @{@} proc foo_version @{@} @{@} proc foo_start @{@} @{ global $@{examplename@} spawn $@{examplename@} expect @{ -re "" @{@} @} @} # Start the program running we want to test foo_start @end example @item Create a directory whose name begins with your tool's name, to contain tests. For example, if your tool's name is @emph{gcc}, then the directories all need to start with @emph{"gcc."}. @item Create a sample test file. Its name must end with @file{.exp}. You can use @file{first-try.exp}. To begin with, just write there a line of Tcl code to issue a message. @strong{Testing A New Tool Config} @example send_user "Testing: one, two...\n" @end example @item Back in the @file{testsuite} (top level) directory, run @code{configure}. Typically you do this while in the build directory. You may have to specify more of a path, if a suitable configure is not available in your execution path. @item You are now ready to triumphantly type @code{make check} or @code{runtest}. You should see something like this: @strong{Example Test Case Run} @example 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 === @end example There is no output in the summary, because so far the example does not call any of the procedures that establish a test outcome. @item Write 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. @end itemize @node Adding A New Target, Adding A New Board, Adding A New Tool, Extending DejaGnu @section Adding A New Target DejaGnu has some additional requirements for target support, beyond the general-purpose provisions of configure. DejaGnu 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. 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 @@samp@{--debug@} option to see what is really going on. When you code an initialization module, be generous in printing information controlled by the @code{verbose} procedure. For cross targets, 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. 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 @code{expect -i} together with other command-line options and arguments; or you can run the command @code{interpreter} from any Expect procedure. Use @code{return} to get back to the calling procedure (if any), or @code{return -tcl} to make the calling procedure itself return to its caller; use @code{exit} or end-of-file to leave Expect altogether.) Run the program whose name is recorded in @code{$connectmode}, with the arguments in @code{$targetname}, to establish a connection. You should at least be able to get a prompt from any target that is physically connected. @node Adding A New Board, Board File Values, Adding A New Target, Extending DejaGnu @section Adding A New Board Adding a new board consists of creating a new board config file. Examples are in @file{dejagnu/baseboards}. Usually to make a new board file, it's easiest to copy an existing one. It is also possible to have your file be based on a @emph{baseboard} file with only one or two changes needed. Typically, this can be as simple as just changing the linker script. Once the new baseboard file is done, add it to the @code{boards_DATA} list in the @file{dejagnu/baseboards/Makefile.am}, and regenerate the Makefile.in using automake. Then just rebuild and install DejaGnu. You can test it by: There is a crude inheritance scheme going on with board files, so you can include one board file into another, The two main procedures used to do this are @code{load_generic_config} and @code{load_base_board_description}. The generic config file contains other procedures used for a certain class of target. The board description file is where the board specific settings go. Commonly there are similar target environments with just different processors. @strong{Testing a New Board Config File} @example make check RUNTESTFLAGS="--target_board=newboardfile". @end example Here's an example of a board config file. There are several @emph{helper procedures} used in this example. A helper procedure is one that look for a tool of files in commonly installed locations. These are mostly used when testing in the build tree, because the executables to be tested are in the same tree as the new dejagnu files. The helper procedures are the ones in square braces @emph{[]}, which is the Tcl execution characters. @strong{Example Board Config File} @example # 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 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 "-Tsim.ld"; # The simulator doesn't return exit statuses and we need to indicate this. 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 @end example @node Board File Values, Writing A Test Case, Adding A New Board, Extending DejaGnu @section Board Config File Values These fields are all in the @code{board_info} array. These are all set by using the @code{set_board_info} and @code{add_board_info} procedures as required. The parameters are the field name, followed by the value that the field is set to or is added to the field, respectively. @strong{Common Board Info Fields} @multitable @columnfractions 0.333333333333333 0.333333333333333 0.333333333333333 @item Field@tab Sample Value@tab Description @item compiler@tab "[find_gcc]"@tab The path to the compiler to use. @item cflags@tab "-mca"@tab Compilation flags for the compiler. @item ldflags@tab "[libgloss_link_flags] [newlib_link_flags]"@tab Linking flags for the compiler. @item ldscript@tab "-Wl,-Tidt.ld"@tab The linker script to use when cross compiling. @item libs@tab "-lgcc"@tab Any additional libraries to link in. @item shell_prompt@tab "cygmon>"@tab The command prompt of the remote shell. @item hex_startaddr@tab "0xa0020000"@tab The Starting address as a string. @item start_addr@tab 0xa0008000@tab The starting address as a value. @item startaddr@tab "a0020000"@tab @item exit_statuses_bad@tab 1@tab Whether there is an accurate exit status. @item reboot_delay@tab 10@tab The delay between power off and power on. @item unreliable@tab 1@tab Whether communication with the board is unreliable. @item sim@tab [find_sim]@tab The path to the simulator to use. @item objcopy@tab $tempfil@tab The path to the @code{objcopy} program. @item support_libs@tab "$@{prefix_dir@}/i386-coff/"@tab Support libraries needed for cross compiling. @item addl_link_flags@tab "-N"@tab Additional link flags, rarely used. @end multitable These fields are used by the GCC and GDB tests, and are mostly only useful to somewhat trying to debug a new board file for one of these tools. Many of these are used only by a few testcases, and their purpose is esoteric. These are listed with sample values as a guide to better guessing if you need to change any of these. @strong{Board Info Fields For GCC & GDB} @multitable @columnfractions 0.333333333333333 0.333333333333333 0.333333333333333 @item Field@tab Sample Value@tab Description @item strip@tab $tempfile@tab Strip the executable of symbols. @item gdb_load_offset@tab "0x40050000"@tab @item gdb_protocol@tab "remote"@tab The GDB debugging protocol to use. @item gdb_sect_offset@tab "0x41000000";@tab @item gdb_stub_ldscript@tab "-Wl,-Teva-stub.ld"@tab The linker script to use with a GDB stub. @item gdb,cannot_call_functions@tab 1@tab Whether GDB can call functions on the target, @item gdb,noargs@tab 1@tab Whether the target can take command line arguments. @item gdb,nosignals@tab 1@tab Whether there are signals on the target. @item gdb,short_int@tab 1@tab @item gdb,start_symbol@tab "_start";@tab The starting symbol in the executable. @item gdb,target_sim_options@tab "-sparclite"@tab Special options to pass to the simulator. @item gdb,timeout@tab 540@tab Timeout value to use for remote communication. @item gdb_init_command@tab "set mipsfpu none"@tab A single command to send to GDB before the program being debugged is started. @item gdb_init_commands@tab "print/x \$fsr = 0x0"@tab Same as @emph{gdb_init_command}, except that this is a list, more commands can be added. @item gdb_load_offset@tab "0x12020000"@tab @item gdb_opts@tab "--command gdbinit"@tab @item gdb_prompt@tab "\\(gdb960\\)"@tab The prompt GDB is using. @item gdb_run_command@tab "jump start"@tab @item gdb_stub_offset@tab "0x12010000"@tab @item use_gdb_stub@tab 1@tab Whether to use a GDB stub. @item use_vma_offset@tab 1@tab @item wrap_m68k_aout@tab 1@tab @item gcc,no_label_values@tab 1@tab @item gcc,no_trampolines@tab 1@tab @item gcc,no_varargs@tab 1@tab @item gcc,stack_size@tab 16384@tab Stack size to use with some GCC testcases. @item ieee_multilib_flags@tab "-mieee";@tab @item is_simulator@tab 1@tab @item needs_status_wrapper@tab 1@tab @item no_double@tab 1@tab @item no_long_long@tab 1@tab @item noargs@tab 1@tab @item nullstone,lib@tab "mips-clock.c"@tab @item nullstone,ticks_per_sec@tab 3782018@tab @item sys_speed_value@tab 200@tab @item target_install@tab @{sh-hms@}@tab @end multitable @node Writing A Test Case, Debugging A Test Case, Board File Values, Extending DejaGnu @section 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 Tcl, 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 @file{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: @itemize @item 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. @item Writing (and debugging) the generic Tcl procedures for compilation. @item Writing the simple test driver: its main task is to search the directory (using the Tcl procedure @emph{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. @end itemize 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 Tcl procedures specialized for GDB testing. @node Debugging A Test Case, Adding A Test Case To A Testsuite, Writing A Test Case, Extending DejaGnu @section Debugging A Test Case These are the kinds of debugging information available from DejaGnu: @itemize @item 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 DejaGnu log file. To do the same for new tests, use the @code{verbose} procedure (which in turn uses the variable also called @emph{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 @emph{$verbose} is @emph{0}, there should be no output other than the output from @emph{pass}, @emph{fail}, @emph{error}, and @emph{warning}. Then, to whatever extent is appropriate for the particular test, allow successively higher values of @emph{$verbose} to generate more information. Be kind to other programmers who use your tests: provide for a lot of debugging information. @item 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 @file{dbg.log} in the current directory. Use @code{--debug} for information from the expect level; it generates displays of the expect attempts to match the tool output with the patterns specified. 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 @file{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. @item Use @code{--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. @item Finally, if the value of @emph{verbose} is 3 or greater, DejaGnu turns on the expect command @code{log_user}. This command prints all expect actions to the expect standard output, to the detailed log file, and (if @code{--debug} is on) to @file{dbg.log}. @end itemize @node Adding A Test Case To A Testsuite, Hints On Writing A Test Case, Debugging A Test Case, Extending DejaGnu @section Adding A Test Case To A Testsuite. 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 @file{gcc} and it runs on the next: @example runtest --tool gcc @end example 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 @emph{.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 @file{Makefile.in} file for that test directory, then run @code{configure} and @code{make}. Adding a test by creating a new directory is very similar: @itemize @item 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 @file{g++.other}. There can be multiple test directories that start with the same tool name (such as @emph{g++}). @item Add the new directory name to the @code{configdirs} definition in the @file{configure.in} file for the testsuite directory. This way when @code{make} and @code{configure} next run, they include the new directory. @item Add the new test case to the directory, as above. @item To add support in the new directory for configure and make, you must also create a @file{Makefile.in} and a @file{configure.in}. @end itemize @node Hints On Writing A Test Case, Test Case Variables, Adding A Test Case To A Testsuite, Extending DejaGnu @section Hints On Writing A Test Case 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 @code{expect} command. In this situation, the precise boundary that determines which @code{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 @code{-re} option for the @code{expect} command to write the pattern as a full regular expressions; then you can match the end of output using a @emph{$}. It is also a good idea to write patterns that match all available output by using @emph{.*\} after the text of interest; this will also match any intervening blank lines. Sometimes an alternative is to match end of line using @emph{\r} or @emph{\n}, but this is usually too dependent on terminal settings. Always escape punctuation, such as @emph{(} or @emph{"}, in your patterns; for example, write @emph{\(}. If you forget to escape punctuation, you will usually see an error message like: @example extra characters after close-quote @end example If you have trouble understanding why a pattern does not match the program output, try using the @code{--debug} option to @code{runtest}, and examine the debug log carefully. 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 @emph{set height 0\n} command. The purpose is simply to make sure GDB never calls a paging program. The @emph{set height} command in GDB does not generate any output; but running any command makes GDB issue a new @emph{(gdb) } prompt. If there were no @code{expect} command to match this prompt, the output @emph{(gdb) } begins the text seen by the next @code{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 @code{error} or @code{warning}. @node Test Case Variables, , Hints On Writing A Test Case, Extending DejaGnu @section Special variables used by test cases. There are special variables used by test cases. These contain other information from DejaGnu. Your test cases can use these variables, with conventional meanings (as well as the variables saved in @file{site.exp}. You can use the value of these variables, but they should never be changed. @table @asis @item $prms_id The tracking system (e.g. GNATS) number identifying a corresponding bugreport. (@emph{0}@} if you do not specify it in the test script.) @item $item bug_id An optional bug id; may reflect a bug identification from another organization. (@emph{0} if you do not specify it.) @item $subdir The subdirectory for the current test case. @item $expect_out(buffer) The output from the last command. This is an internal variable set by Expect. More information can be found in the Expect manual. @item $exec_output This is the output from a @code{$@{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. @item $comp_output This is the output from a @code{$@{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. @end table @node Unit Testing, Reference, Extending DejaGnu, Top @chapter Unit Testing @menu * What Is Unit Testing ?:: * The dejagnu.h Header File: The dejagnu_h Header File. @end menu @node What Is Unit Testing ?, The dejagnu_h Header File, , Unit Testing @section What Is Unit Testing ? Most regression testing as done by DejaGnu is system testing. This is the complete application is tested all at once. Unit testing is for testing single files, or small libraries. In this case, each file is linked with a test case in C or C++, and each function or class and method is tested in series, with the test case having to check private data or global variables to see if the function or method worked. This works particularly well for testing APIs and at level where it is easier to debug them, than by needing to trace through the entire application. Also if there is a specification for the API to be tested, the testcase can also function as a compliance test. @node The dejagnu_h Header File, , What Is Unit Testing ?, Unit Testing @section The dejagnu.h Header File DejaGnu uses a single header file to assist in unit testing. As this file also produces its one test state output, it can be run stand-alone, which is very useful for testing on embedded systems. This header file has a C and C++ API for the test states, with simple totals, and standardized output. Because the output has been standardized, DejaGnu can be made to work with this test case, without writing almost any Tcl. The library module, dejagnu.exp, will look for the output messages, and then merge them into DejaGnu's. @node Reference, Unit Testing API, Unit Testing, Top @chapter Reference @menu * Obtaining DejaGnu:: * Installation:: * Builtin Procedures:: * File Map:: @end menu @node Obtaining DejaGnu, Installation, , Reference @section Obtaining DejaGnu You can obtain DejaGnu from the DejaGnu web site at the @uref{http://www.gnu.org,Free Software Foundation}, which is at @uref{http://www.gnu.org/software/dejagnu/,www.gnu.org/software/dejagnu/ } @node Installation, Builtin Procedures, Obtaining DejaGnu, Reference @section Installation 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:: @end menu @node Configuring DejaGnu, Installing DejaGnu, , Installation @subsection Configuring DejaGnu It is usually best to configure in a directory separate from the source tree, specifying where to find the source with the optional @code{--srcdir} option to @emph{configure}. DejaGnu uses the GNU @emph{autoconf} to configure itself. For more info on using autoconf, read the GNU autoconf manual. To configure, execute the @file{configure} program, no other options are required. For an example, to configure in a separate tree for objects, execute the configure script from the source tree like this: @example ../dejagnu-1.5.3/configure @end example 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 @code{configure} option @code{--prefix} to specify where you want DejaGnu and its supporting code installed. By default, installation is in subdirectories of @file{/usr/local}, but you can select any alternate directory @code{altdir} by including @code{--prefix}@{altdir@}@} on the @code{configure} command line. (This value is captured in the Makefile variables @emph{prefix} and @emph{exec}prefix@}.) Save for a small number of example tests, the DejaGnu distribution itself does not include any testsuites; these are available separately. Testsuites for the GNU development tools are included in those releases. 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 @emph{make check} to build auxiliary programs required by some of the tests, and run the test suites. @node Installing DejaGnu, , Configuring DejaGnu, Installation @subsection Installing DejaGnu To install DejaGnu in your file system (either in @file{/usr/local}, or as specified by your @code{--prefix} option to @emph{configure}), execute. @example eg$ make install @end example @emph{make install}does these things for DejaGnu: @itemize @item Look in the path specified for executables @code{$exec_prefix}) for directories called @file{lib} and @file{bin}. If these directories do not exist, @emph{make install} creates them. @item Create another directory in the @file{share} directory, called @file{dejagnu}, and copy all the library files into it. @item Create a directory in the @file{dejagnu/share} directory, called @file{config}, and copy all the configuration files into it. @item Copy the @emph{runtest} shell script into @file{$exec_prefix/bin}. @item Copy @file{runtest.exp} into @file{$exec_prefix/lib/dejagnu}. This is the main Tcl code implementing DejaGnu. @end itemize @node Builtin Procedures, File Map, Installation, Reference @section Builtin Procedures DejaGnu provides these Tcl procedures. @menu * Core Internal Procedures:: * Procedures For Remote Communication:: * Procedures For Using Utilities to Connect: connprocs. * Procedures For Target Boards:: * Target Database Procedures: target database library file. * Platform Dependent Procedures: platform dependent procedures. * Utility Procedures:: * Libgloss, A Free BSP: Libgloss. * Procedures for debugging your Tcl code.: Debugging Procedures. @end menu @node Core Internal Procedures, Procedures For Remote Communication, , Builtin Procedures @subsection Core Internal Procedures @menu * Mail_file Procedure: mail_file procedure. * Open_logs Procedure: open_logs procedure. * Close_logs Procedure: close_logs procedure. * Isbuild Procedure: isbuild procedure. * Is_remote Procedure: is_remote procedure. * is3way Procedure: is3way procedure. * Ishost Procedure: ishost procedure. * Istarget Procedure: istarget procedure. * Isnative Procedure: isnative procedure. * Unknown Procedure: unknown procedure. * Clone_output Procedure: clone_output procedure. * Reset_vars Procedure: reset_vars procedure. * Log_and_exit Procedure: log_and_exit procedure. * Log_summary Procedure: log_summary procedure. * Cleanup Procedure: cleanup procedure. * Setup_xfail Procedure: setup_xfail procedure. * Record_test Procedure: record_test procedure. * Pass Procedure: pass procedure. * Fail Procedure: fail procedure. * Xpass Procedure: xpass procedure. * Xfail Procedure: xfail procedure. * Set_warning_threshold Procedure: set_warning_threshold procedure. * Get_warning_threshold Procedure: get_warning_threshold procedure. * Warning Procedure: warning procedure. * Perror Procedure: perror procedure. * Note Procedure: note procedure. * Untested Procedure: untested procedure. * Unresolved Procedure: unresolved procedure. * Unsupported Procedure: unsupported procedure. * Init_testcounts Procedure: init_testcounts procedure. * Incr_count Procedure: incr_count procedure. * transform Procedure: transform procedure. * Check_conditional_xfail Procedure: check_conditional_xfail procedure. * Clear_xfail Procedure: clear_xfail procedure. * Verbose Procedure: verbose procedure. * Load_lib Procedure: load_lib procedure. @end menu @node mail_file procedure, open_logs procedure, , Core Internal Procedures @subsubsection Mail_file Procedure @quotation @t{@b{mail_file}(@i{file to subject});} @end quotation @table @asis @item @code{} @end table @node open_logs procedure, close_logs procedure, mail_file procedure, Core Internal Procedures @subsubsection Open_logs Procedure @quotation @t{@b{open_logs}(@i{});} @end quotation @node close_logs procedure, isbuild procedure, open_logs procedure, Core Internal Procedures @subsubsection Close_logs Procedure @quotation @t{@b{close_logs}(@i{});} @end quotation @node isbuild procedure, is_remote procedure, close_logs procedure, Core Internal Procedures @subsubsection Isbuild Procedure Tests for a particular build host environment. If the currently configured host matches the argument string, the result is @emph{1}; otherwise the result is @emph{0}. @emph{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. @quotation @t{@b{isbuild}(@i{pattern});} @end quotation @table @asis @item @code{pattern} @end table @node is_remote procedure, is3way procedure, isbuild procedure, Core Internal Procedures @subsubsection Is_remote Procedure @quotation @t{@b{is_remote}(@i{board});} @end quotation @table @asis @item @code{} @end table @node is3way procedure, ishost procedure, is_remote procedure, Core Internal Procedures @subsubsection is3way Procedure Tests for a Canadian cross. This is when the tests will be run on a remotely hosted cross compiler. If it is a Canadian cross, then the result is @emph{1}; otherwise the result is @emph{0}. @quotation @t{@b{is3way}(@i{});} @end quotation @node ishost procedure, istarget procedure, is3way procedure, Core Internal Procedures @subsubsection Ishost Procedure Tests for a particular host environment. If the currently configured host matches the argument string, the result is @emph{1}; otherwise the result is @emph{0}. @emph{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). @quotation @t{@b{ishost}(@i{pattern});} @end quotation @table @asis @item @code{} @end table @node istarget procedure, isnative procedure, ishost procedure, Core Internal Procedures @subsubsection Istarget Procedure Tests for a particular target environment. If the currently configured target matches the argument string, the result is @emph{1} ; otherwise the result is @emph{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 @emph{NULL} string, then it returns the name of the build canonical configuration. @quotation @t{@b{istarget}(@i{args});} @end quotation @table @asis @item @code{} @end table @node isnative procedure, unknown procedure, istarget procedure, Core Internal Procedures @subsubsection Isnative Procedure Tests whether the current configuration has the same host and target. When it runs in a native configuration this procedure returns a @emph{1}; otherwise it returns a @emph{0}. @quotation @t{@b{isnative}(@i{});} @end quotation @node unknown procedure, clone_output procedure, isnative procedure, Core Internal Procedures @subsubsection Unknown Procedure @quotation @t{@b{unknown}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node clone_output procedure, reset_vars procedure, unknown procedure, Core Internal Procedures @subsubsection Clone_output Procedure @quotation @t{@b{clone_output}(@i{message});} @end quotation @table @asis @item @code{message} @end table @node reset_vars procedure, log_and_exit procedure, clone_output procedure, Core Internal Procedures @subsubsection Reset_vars Procedure @quotation @t{@b{reset_vars}(@i{});} @end quotation @node log_and_exit procedure, log_summary procedure, reset_vars procedure, Core Internal Procedures @subsubsection Log_and_exit Procedure @quotation @t{@b{log_and_exit}(@i{});} @end quotation @node log_summary procedure, cleanup procedure, log_and_exit procedure, Core Internal Procedures @subsubsection Log_summary Procedure @quotation @t{@b{log_summary}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node cleanup procedure, setup_xfail procedure, log_summary procedure, Core Internal Procedures @subsubsection Cleanup Procedure @quotation @t{@b{cleanup}(@i{});} @end quotation @node setup_xfail procedure, record_test procedure, cleanup procedure, Core Internal Procedures @subsubsection Setup_xfail Procedure 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 @emph{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. Once you use @code{setup_xfail}, the @code{fail} and @code{pass} procedures produce the messages @emph{XFAIL} and @emph{XPASS} respectively, allowing you to distinguish expected failures (and unexpected success!) from other test outcomes. @quotation @strong{Warning} Warning you must clear the expected failure after using setup_xfail in a test case. Any call to @code{pass }or @code{fail} clears the expected failure implicitly; if the test has some other outcome, e.g. an error, you can call @code{clear_xfail} to clear the expected failure explicitly. Otherwise, the expected-failure declaration applies to whatever test runs next, leading to surprising results. @end quotation @quotation @t{@b{setup_xfail}(@i{config} @i{bugid});} @end quotation @table @asis @item @code{config} The config triplet to trigger whether this is an unexpected or expect failure. @item @code{bugid} The optional bugid, used to tie this test case to a bug tracking system. @end table @node record_test procedure, pass procedure, setup_xfail procedure, Core Internal Procedures @subsubsection Record_test Procedure @quotation @t{@b{record_test}(@i{type} @i{message} @i{args});} @end quotation @table @asis @item @code{type} @item @code{message} @item @code{args} @end table @node pass procedure, fail procedure, record_test procedure, Core Internal Procedures @subsubsection Pass Procedure Declares a test to have passed. @code{pass} writes in the log files a message beginning with @emph{PASS} (or @emph{XPASS}, if failure was expected), appending the argument @code{string}. @quotation @t{@b{pass}(@i{string});} @end quotation @table @asis @item @code{string} The string to use for this PASS message. @end table @node fail procedure, xpass procedure, pass procedure, Core Internal Procedures @subsubsection Fail Procedure Declares a test to have failed. @code{fail} writes in the log files a message beginning with @emph{FAIL} (or @emph{XFAIL}, if failure was expected), appending the argument @code{string}. @quotation @t{@b{fail}(@i{string});} @end quotation @table @asis @item @code{string} The string to use for this FAIL message. @end table @node xpass procedure, xfail procedure, fail procedure, Core Internal Procedures @subsubsection Xpass Procedure Declares a test to have unexpectedly passed, when it was expected to be a failure. @code{xpass} writes in the log files a message beginning with @emph{XPASS} (or @emph{XFAIL}, if failure was expected), appending the argument @code{string}. @quotation @t{@b{xpass}(@i{string});} @end quotation @table @asis @item @code{string} The string to use for this output state. @end table @node xfail procedure, set_warning_threshold procedure, xpass procedure, Core Internal Procedures @subsubsection Xfail Procedure Declares a test to have expectedly failed. @code{xfail} writes in the log files a message beginning with @emph{XFAIL} (or @emph{PASS}, if success was expected), appending the argument @code{string}. @quotation @t{@b{xpass}(@i{string});} @end quotation @table @asis @item @code{string} The string to use for this output state. @end table @node set_warning_threshold procedure, get_warning_threshold procedure, xfail procedure, Core Internal Procedures @subsubsection Set_warning_threshold Procedure Sets the value of @code{warning_threshold}. A value of @emph{0} disables it: calls to @code{warning} will not turn a @emph{PASS} or @emph{FAIL} into an @emph{UNRESOLVED}. @quotation @t{@b{set_warning_threshold}(@i{threshold});} @end quotation @table @asis @item @code{threshold} This is the value of the new warning threshold. @end table @node get_warning_threshold procedure, warning procedure, set_warning_threshold procedure, Core Internal Procedures @subsubsection Get_warning_threshold Procedure Returns the current value of @code{@{warning_threshold}. The default value is 3. This value controls how many @code{warning} procedures can be called before becoming @emph{UNRESOLVED}. @quotation @t{@b{get_warning_threshold}(@i{});} @end quotation @node warning procedure, perror procedure, get_warning_threshold procedure, Core Internal Procedures @subsubsection Warning Procedure Declares detection of a minor error in the test case itself. @code{warning} writes in the log files a message beginning with @emph{WARNING}, appending the argument @code{string}. Use @code{warning} rather than @code{perror} for cases (such as communication failure to be followed by a retry) where the test case can recover from the error. If the optional @code{number} is supplied, then this is used to set the internal count of warnings to that value. As a side effect, @code{warning_threshold} or more calls to warning in a single test case also changes the effect of the next @code{pass} or @code{fail} command: the test outcome becomes @emph{UNRESOLVED} since an automatic @emph{PASS} or @emph{FAIL} may not be trustworthy after many warnings. If the optional numeric value is @emph{0}, then there are no further side effects to calling this function, and the following test outcome doesn't become @emph{UNRESOLVED}. This can be used for errors with no known side effects. @quotation @t{@b{warning}(@i{string} @i{number} );} @end quotation @table @asis @item @code{string} @item @code{number} The optional number to set the error counter. This is only used to fake out the counter when using the @code{xfail} procedure to control when it flips the output over to @emph{UNRESOLVED} state. @end table @node perror procedure, note procedure, warning procedure, Core Internal Procedures @subsubsection Perror Procedure Declares a severe error in the testing framework itself. @code{perror} writes in the log files a message beginning with @emph{ERROR}, appending the argument @code{string}. As a side effect, perror also changes the effect of the next @code{pass} or @code{fail} command: the test outcome becomes @emph{UNRESOLVED}, since an automatic @emph{PASS} or @emph{FAIL} cannot be trusted after a severe error in the test framework. If the optional numeric value is @emph{0}, then there are no further side effects to calling this function, and the following test outcome doesn't become @emph{UNRESOLVED}. This can be used for errors with no known side effects. @quotation @t{@b{perror}(@i{string} @i{number} );} @end quotation @table @asis @item @code{string} @item @code{number} The optional number to set the error counter. This is only used to fake out the counter when using the @code{xfail} procedure to control when it flips the output over to @emph{UNRESOLVED} state. @end table @node note procedure, untested procedure, perror procedure, Core Internal Procedures @subsubsection Note Procedure Appends an informational message to the log file. @code{note} writes in the log files a message beginning with @emph{NOTE}, appending the argument @code{string}. Use @code{note} sparingly. The @code{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 @code{note}. @quotation @t{@b{note}(@i{string});} @end quotation @table @asis @item @code{string} The string to use for this note. @end table @node untested procedure, unresolved procedure, note procedure, Core Internal Procedures @subsubsection Untested Procedure Declares a test was not run. @code{untested} writes in the log file a message beginning with @emph{UNTESTED}, appending the argument @emph{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. @quotation @t{@b{untested}(@i{string});} @end quotation @table @asis @item @code{string} The string to use for this output state. @end table @node unresolved procedure, unsupported procedure, untested procedure, Core Internal Procedures @subsubsection Unresolved Procedure Declares a test to have an unresolved outcome. @code{unresolved} writes in the log file a message beginning with @emph{UNRESOLVED}, appending the argument @emph{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). @quotation @t{@b{unresolved}(@i{string});} @end quotation @table @asis @item @code{string} The string to use for this output state. @end table @node unsupported procedure, init_testcounts procedure, unresolved procedure, Core Internal Procedures @subsubsection Unsupported Procedure Declares that a test case depends on some facility that does not exist in the testing environment. @code{unsupported} writes in the log file a message beginning with @emph{UNSUPPORTED}, appending the argument string. @quotation @t{@b{unsupported}(@i{string});} @end quotation @table @asis @item @code{string} The string to use for this output state. @end table @node init_testcounts procedure, incr_count procedure, unsupported procedure, Core Internal Procedures @subsubsection Init_testcounts Procedure @quotation @t{@b{init_testcounts}(@i{});} @end quotation @node incr_count procedure, transform procedure, init_testcounts procedure, Core Internal Procedures @subsubsection Incr_count Procedure @quotation @t{@b{incr_count}(@i{name} @i{args});} @end quotation @table @asis @item @code{name} @item @code{args} @end table @node transform procedure, check_conditional_xfail procedure, incr_count procedure, Core Internal Procedures @subsubsection transform Procedure Generates a string for the name of a tool as it was configured and installed, given its native name (as the argument @code{toolname}). This makes the assumption that all tools are installed using the same naming conventions: For example, for a cross compiler supporting the @emph{m68k-vxworks} configuration, the result of transform @code{gcc} is @code{m68k-vxworks-gcc}. @quotation @t{@b{transform}(@i{toolname});} @end quotation @table @asis @item @code{toolname} The name of the cross-development program to transform. @end table @node check_conditional_xfail procedure, clear_xfail procedure, transform procedure, Core Internal Procedures @subsubsection Check_conditional_xfail Procedure This procedure adds a conditional xfail, based on compiler options used to create a test case executable. If an include options is found in the compiler flags, and it's the right architecture, it'll trigger an @emph{XFAIL}. Otherwise it'll produce an ordinary @emph{FAIL}. You can also specify flags to exclude. This makes a result be a @emph{FAIL}, even if the included options are found. To set the conditional, set the variable @code{compiler_conditional_xfail_data} to the fields @example "[message string] [targets list] [includes list] [excludes list]" @end example (descriptions below). This is the checked at pass/fail decision time, so there is no need to call the procedure yourself, unless you wish to know if it gets triggered. After a pass/fail, the variable is reset, so it doesn't effect other tests. It returns @emph{1} if the conditional is true, or @emph{0} if the conditional is false. @quotation @t{@b{check_conditional_xfail}(@i{message} @i{targets} @i{includes} @i{excludes});} @end quotation @table @asis @item @code{message} This is the message to print with the normal test result. @item @code{targets} This is a string with the list targets to activate this conditional on. @item @code{includes} This is a list of sets of options to search for in the compiler options to activate this conditional. If the list of sets of options is empty or if any set of the options matches, then this conditional is true. (It may be useful to specify an empty list of include sets if the conditional is always true unless one of the exclude sets matches.) @item @code{excludes} This is a list of sets of options to search for in the compiler options to activate this conditional. If any set of the options matches, (regardless of whether any of the include sets match) then this conditional is de-activated. @end table @strong{Specifying the conditional xfail data} @example set compiler_conditional_xfail_data @{ \ "I sure wish I knew why this was hosed" \ "sparc*-sun*-* *-pc-*-*" \ @{"-Wall -v" "-O3"@} \ @{"-O1" "-Map"@} \ @} @end example What this does is it matches only for these two targets if "-Wall -v" or "-O3" is set, but neither "-O1" or "-Map" is set. For a set to match, the options specified are searched for independently of each other, so a "-Wall -v" matches either "-Wall -v" or "-v -Wall". A space separates the options in the string. Glob-style regular expressions are also permitted. @node clear_xfail procedure, verbose procedure, check_conditional_xfail procedure, Core Internal Procedures @subsubsection Clear_xfail Procedure Cancel an expected failure (previously declared with @code{setup_xfail}) for a particular set of configurations. The @code{config} argument is a list of configuration target names. It is only necessary to call @code{clear_xfail} if a test case ends without calling either @code{pass} or @code{fail}, after calling @code{setup_xfail}. @quotation @t{@b{clear_xfail}(@i{config});} @end quotation @table @asis @item @code{config} The configuration triplets to clear. @end table @node verbose procedure, load_lib procedure, clear_xfail procedure, Core Internal Procedures @subsubsection Verbose Procedure Test cases can use this function to issue helpful messages depending on the number of @code{--verbose} options on the runtest command line. It prints string if the value of the variable @code{verbose} is higher than or equal to the optional number. The default value for number is @emph{1}. Use the optional @code{-log} argument to cause string to always be added to the log file, even if it won't be printed. Use the optional @code{-x} argument to log the test results into a parsable XML file. Use the optional @code{-n} argument to print string without a trailing newline. Use the optional @code{--} argument if string begins with "-". @quotation @t{@b{verbose}(@i{-log} @i{-x} @i{-n} @i{-r} @i{string} @i{number});} @end quotation @table @asis @item @code{-x} @item @code{-log} @item @code{-n} @item @code{--} @item @code{string} @item @code{number} @end table @node load_lib procedure, , verbose procedure, Core Internal Procedures @subsubsection Load_lib Procedure Loads a DejaGnu library file by searching the default fixed paths built into DejaGnu. 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 @code{make install}, this path defaults to the current directory. In either case, it then looks in the current directory for a directory called @file{lib}. If there are duplicate definitions, the last one loaded takes precedence over the earlier ones. @quotation @t{@b{load_lib}(@i{filespec});} @end quotation @table @asis @item @code{filespec} The name of the DejaGnu library file to load. @end table The global variable @code{libdirs}, handled as a list, is appended to the default fixed paths built into DejaGnu. @strong{Additional search directories for load_lib} @example # append a non-standard search path global libdirs lappend libdirs $srcdir/../../gcc/testsuite/lib # now loading $srcdir/../../gcc/testsuite/lib/foo.exp works load_lib foo.exp @end example @node Procedures For Remote Communication, connprocs, Core Internal Procedures, Builtin Procedures @subsection Procedures For Remote Communication @file{lib/remote.exp} defines these functions, for establishing and managing communications. 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 @emph{-1}, when the connection cannot be established, or the spawn ID returned by the Expect command @code{spawn}. It use the value of the @code{connect} field in the @code{target_info} array (was @code{connectmode} as the type of connection to make. Current supported connection types are tip, kermit, telnet, rsh, rlogin, and netdata. If the @code{--reboot} option was used on the runtest command line, then the target is rebooted before the connection is made. @menu * Call_remote Procedure: call_remote procedure. * Check_for_board_status Procedure: check_for_board_status procedure. * File_on_build Procedure: file_on_build procedure. * File_on_host Procedure: file_on_host procedure. * Local_exec Procedure: local_exec procedure. * Remote_binary Procedure: remote_binary procedure. * Remote_close Procedure: remote_close procedure. * Remote_download Procedure: remote_download procedure. * Remote_exec Procedure: remote_exec procedure. * Remote_expect Procedure: remote_expect procedure. * Remote_file Procedure: remote_file procedure. * Remote_ld Procedure: remote_ld procedure. * Remote_load Procedure: remote_load procedure. * Remote_open Procedure: remote_open procedure. * Remote_pop_conn Procedure: remote_pop_conn procedure. * Remote_push_conn Procedure: remote_push_conn procedure. * Remote_raw_binary Procedure: remote_raw_binary procedure. * Remote_raw_close Procedure: remote_raw_close procedure. * Remote_raw_file Procedure: remote_raw_file procedure. * remote_raw_ld Procedure: remote_raw_ld procedure. * Remote_raw_load Procedure: remote_raw_load procedure. * Remote_raw_open Procedure: remote_raw_open procedure. * Remote_raw_send Procedure: remote_raw_send procedure. * Remote_raw_spawn Procedure: remote_raw_spawn procedure. * Remote_raw_transmit Procedure: remote_raw_transmit procedure. * Remote_raw_wait Procedure: remote_raw_wait procedure. * Remote_reboot Procedure: remote_reboot procedure. * Remote_send Procedure: remote_send procedure. * Remote_spawn Procedure: remote_spawn procedure. * Remote_swap_conn Procedure: remote_swap_conn procedure. * Remote_transmit Procedure: remote_transmit procedure. * Remote_upload Procedure: remote_upload procedure. * Remote_wait Procedure: remote_wait procedure. * Standard_close Procedure: standard_close procedure. * Standard_download Procedure: standard_download procedure. * Standard_exec Procedure: standard_exec procedure. * Standard_file Procedure: standard_file procedure. * Standard_load Procedure: standard_load procedure. * Standard_reboot Procedure: standard_reboot procedure. * Standard_send Procedure: standard_send procedure. * Standard_spawn Procedure: standard_spawn procedure. * Standard_transmit Procedure: standard_transmit procedure. * Standard_upload Procedure: standard_upload procedure. * Standard_wait Procedure: standard_wait procedure. * Unix_clean_filename Procedure: unix_clean_filename procedure. @end menu @node call_remote procedure, check_for_board_status procedure, , Procedures For Remote Communication @subsubsection Call_remote Procedure @quotation @t{@b{call_remote}(@i{type} @i{proc} @i{dest} @i{args});} @end quotation @table @asis @item @code{proc} @item @code{dest} @item @code{args} @end table @node check_for_board_status procedure, file_on_build procedure, call_remote procedure, Procedures For Remote Communication @subsubsection Check_for_board_status Procedure @quotation @t{@b{check_for_board_status}(@i{variable});} @end quotation @table @asis @item @code{variable} @end table @node file_on_build procedure, file_on_host procedure, check_for_board_status procedure, Procedures For Remote Communication @subsubsection File_on_build Procedure @quotation @t{@b{file_on_build}(@i{op} @i{file} @i{args});} @end quotation @table @asis @item @code{op} @item @code{file} @item @code{args} @end table @node file_on_host procedure, local_exec procedure, file_on_build procedure, Procedures For Remote Communication @subsubsection File_on_host Procedure @quotation @t{@b{file_on_host}(@i{op} @i{file} @i{args});} @end quotation @table @asis @item @code{op} @item @code{file} @item @code{args} @end table @node local_exec procedure, remote_binary procedure, file_on_host procedure, Procedures For Remote Communication @subsubsection Local_exec Procedure @quotation @t{@b{local_exec}(@i{commandline} @i{inp} @i{outp} @i{timeout});} @end quotation @table @asis @item @code{inp} @item @code{outp} @item @code{timeout} @end table @node remote_binary procedure, remote_close procedure, local_exec procedure, Procedures For Remote Communication @subsubsection Remote_binary Procedure @quotation @t{@b{remote_binary}(@i{host});} @end quotation @table @asis @item @code{host} @end table @node remote_close procedure, remote_download procedure, remote_binary procedure, Procedures For Remote Communication @subsubsection Remote_close Procedure @quotation @t{@b{remote_close}(@i{shellid});} @end quotation @table @asis @item @code{shellid} This is the value returned by a call to @code{remote_open}. This closes the connection to the target so resources can be used by others. This parameter can be left off if the @code{fileid} field in the @code{target_info} array is set. @end table @node remote_download procedure, remote_exec procedure, remote_close procedure, Procedures For Remote Communication @subsubsection Remote_download Procedure @quotation @t{@b{remote_download}(@i{dest} @i{file} @i{args});} @end quotation @table @asis @item @code{dest} @item @code{file} @item @code{args} @end table @node remote_exec procedure, remote_expect procedure, remote_download procedure, Procedures For Remote Communication @subsubsection Remote_exec Procedure @quotation @t{@b{remote_exec}(@i{hostname} @i{program} @i{args});} @end quotation @table @asis @item @code{hostname} @item @code{program} @item @code{args} @end table @node remote_expect procedure, remote_file procedure, remote_exec procedure, Procedures For Remote Communication @subsubsection Remote_expect Procedure @quotation @t{@b{remote_expect}(@i{board} @i{timeout} @i{args});} @end quotation @table @asis @item @code{board} @item @code{timeout} @item @code{args} @end table @node remote_file procedure, remote_ld procedure, remote_expect procedure, Procedures For Remote Communication @subsubsection Remote_file Procedure @quotation @t{@b{remote_file}(@i{dest} @i{args});} @end quotation @table @asis @item @code{dest} @item @code{args} @end table @node remote_ld procedure, remote_load procedure, remote_file procedure, Procedures For Remote Communication @subsubsection Remote_ld Procedure @quotation @t{@b{remote_ld}(@i{dest} @i{prog});} @end quotation @table @asis @item @code{dest} @item @code{prog} @end table @node remote_load procedure, remote_open procedure, remote_ld procedure, Procedures For Remote Communication @subsubsection Remote_load Procedure @quotation @t{@b{remote_load}(@i{dest} @i{prog} @i{args});} @end quotation @table @asis @item @code{dest} @item @code{prog} @item @code{args} @end table @node remote_open procedure, remote_pop_conn procedure, remote_load procedure, Procedures For Remote Communication @subsubsection Remote_open Procedure @quotation @t{@b{remote_open}(@i{type});} @end quotation @table @asis @item @code{type} This is passed @code{host} or @code{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 @code{spawn_id} of the process that manages the connection. This value can be used in Expect or @code{exp_send} statements, or passed to other procedures that need the connection process's id. This also sets the @code{fileid} field in the @code{target_info} array. @end table @node remote_pop_conn procedure, remote_push_conn procedure, remote_open procedure, Procedures For Remote Communication @subsubsection Remote_pop_conn Procedure @quotation @t{@b{remote_pop_conn}(@i{host});} @end quotation @table @asis @item @code{host} @end table @node remote_push_conn procedure, remote_raw_binary procedure, remote_pop_conn procedure, Procedures For Remote Communication @subsubsection Remote_push_conn Procedure @quotation @t{@b{remote_push_conn}(@i{host});} @end quotation @table @asis @item @code{host} @end table @node remote_raw_binary procedure, remote_raw_close procedure, remote_push_conn procedure, Procedures For Remote Communication @subsubsection Remote_raw_binary Procedure @quotation @t{@b{remote_raw_binary}(@i{host});} @end quotation @table @asis @item @code{host} @end table @node remote_raw_close procedure, remote_raw_file procedure, remote_raw_binary procedure, Procedures For Remote Communication @subsubsection Remote_raw_close Procedure @quotation @t{@b{remote_raw_close}(@i{host});} @end quotation @table @asis @item @code{host} @end table @node remote_raw_file procedure, remote_raw_ld procedure, remote_raw_close procedure, Procedures For Remote Communication @subsubsection Remote_raw_file Procedure @quotation @t{@b{remote_raw_file}(@i{dest} @i{args});} @end quotation @table @asis @item @code{dest} @item @code{args} @end table @node remote_raw_ld procedure, remote_raw_load procedure, remote_raw_file procedure, Procedures For Remote Communication @subsubsection remote_raw_ld Procedure @quotation @t{@b{remote_raw_ld}(@i{dest} @i{prog});} @end quotation @table @asis @item @code{dest} @item @code{prog} @end table @node remote_raw_load procedure, remote_raw_open procedure, remote_raw_ld procedure, Procedures For Remote Communication @subsubsection Remote_raw_load Procedure @quotation @t{@b{remote_raw_load}(@i{dest} @i{prog} @i{args});} @end quotation @table @asis @item @code{dest} @item @code{prog} @item @code{args} @end table @node remote_raw_open procedure, remote_raw_send procedure, remote_raw_load procedure, Procedures For Remote Communication @subsubsection Remote_raw_open Procedure @quotation @t{@b{remote_raw_open}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node remote_raw_send procedure, remote_raw_spawn procedure, remote_raw_open procedure, Procedures For Remote Communication @subsubsection Remote_raw_send Procedure @quotation @t{@b{remote_raw_send}(@i{dest} @i{string});} @end quotation @table @asis @item @code{dest} @item @code{string} @end table @node remote_raw_spawn procedure, remote_raw_transmit procedure, remote_raw_send procedure, Procedures For Remote Communication @subsubsection Remote_raw_spawn Procedure @quotation @t{@b{remote_raw_spawn}(@i{dest} @i{commandline});} @end quotation @table @asis @item @code{dest} @item @code{commandline} @end table @node remote_raw_transmit procedure, remote_raw_wait procedure, remote_raw_spawn procedure, Procedures For Remote Communication @subsubsection Remote_raw_transmit Procedure @quotation @t{@b{remote_raw_transmit}(@i{dest} @i{file});} @end quotation @table @asis @item @code{dest} @item @code{file} @end table @node remote_raw_wait procedure, remote_reboot procedure, remote_raw_transmit procedure, Procedures For Remote Communication @subsubsection Remote_raw_wait Procedure @quotation @t{@b{remote_raw_wait}(@i{dest} @i{timeout});} @end quotation @table @asis @item @code{dest} @item @code{timeout} @end table @node remote_reboot procedure, remote_send procedure, remote_raw_wait procedure, Procedures For Remote Communication @subsubsection Remote_reboot Procedure Return value of this function depends on actual implementation of reboot that will be used, in practice it is expected that @code{remote_reboot} returns @emph{1} on success and @emph{0} on failure. @quotation @t{@b{remote_reboot}(@i{host});} @end quotation @table @asis @item @code{host} @end table @node remote_send procedure, remote_spawn procedure, remote_reboot procedure, Procedures For Remote Communication @subsubsection Remote_send Procedure @quotation @t{@b{remote_send}(@i{dest} @i{string});} @end quotation @table @asis @item @code{dest} @item @code{string} @end table @node remote_spawn procedure, remote_swap_conn procedure, remote_send procedure, Procedures For Remote Communication @subsubsection Remote_spawn Procedure @quotation @t{@b{remote_spawn}(@i{dest} @i{commandline} @i{args});} @end quotation @table @asis @item @code{dest} @item @code{commandline} @item @code{args} @end table @node remote_swap_conn procedure, remote_transmit procedure, remote_spawn procedure, Procedures For Remote Communication @subsubsection Remote_swap_conn Procedure @quotation @t{@b{remote_swap_conn}(@i{host});} @end quotation @table @asis @item @code{} @end table @node remote_transmit procedure, remote_upload procedure, remote_swap_conn procedure, Procedures For Remote Communication @subsubsection Remote_transmit Procedure @quotation @t{@b{remote_transmit}(@i{dest} @i{file});} @end quotation @table @asis @item @code{dest} @item @code{file} @end table @node remote_upload procedure, remote_wait procedure, remote_transmit procedure, Procedures For Remote Communication @subsubsection Remote_upload Procedure @quotation @t{@b{remote_upload}(@i{dest} @i{srcfile} @i{arg});} @end quotation @table @asis @item @code{dest} @item @code{srcfile} @item @code{arg} @end table @node remote_wait procedure, standard_close procedure, remote_upload procedure, Procedures For Remote Communication @subsubsection Remote_wait Procedure @quotation @t{@b{remote_wait}(@i{dest} @i{timeout});} @end quotation @table @asis @item @code{dest} @item @code{timeout} @end table @node standard_close procedure, standard_download procedure, remote_wait procedure, Procedures For Remote Communication @subsubsection Standard_close Procedure @quotation @t{@b{standard_close}(@i{host});} @end quotation @table @asis @item @code{host} @end table @node standard_download procedure, standard_exec procedure, standard_close procedure, Procedures For Remote Communication @subsubsection Standard_download Procedure @quotation @t{@b{standard_download}(@i{dest} @i{file} @i{destfile});} @end quotation @table @asis @item @code{dest} @item @code{file} @item @code{destfile} @end table @node standard_exec procedure, standard_file procedure, standard_download procedure, Procedures For Remote Communication @subsubsection Standard_exec Procedure @quotation @t{@b{standard_exec}(@i{hostname} @i{args});} @end quotation @table @asis @item @code{hostname} @item @code{args} @end table @node standard_file procedure, standard_load procedure, standard_exec procedure, Procedures For Remote Communication @subsubsection Standard_file Procedure @quotation @t{@b{standard_file}(@i{dest} @i{op} @i{args});} @end quotation @table @asis @item @code{} @end table @node standard_load procedure, standard_reboot procedure, standard_file procedure, Procedures For Remote Communication @subsubsection Standard_load Procedure @quotation @t{@b{standard_load}(@i{dest} @i{prog} @i{args});} @end quotation @table @asis @item @code{dest} @item @code{prog} @item @code{args} @end table @node standard_reboot procedure, standard_send procedure, standard_load procedure, Procedures For Remote Communication @subsubsection Standard_reboot Procedure It looks like that this procedure is never called, instead @code{$@{board@}_reboot} defined in @file{base-config.exp} will be used because it has higher priority and @file{base-config.exp} is always imported by @code{runtest}. @quotation @t{@b{standard_reboot}(@i{host});} @end quotation @table @asis @item @code{host} @end table @node standard_send procedure, standard_spawn procedure, standard_reboot procedure, Procedures For Remote Communication @subsubsection Standard_send Procedure @quotation @t{@b{standard_send}(@i{dest} @i{string});} @end quotation @table @asis @item @code{dest} @item @code{string} @end table @node standard_spawn procedure, standard_transmit procedure, standard_send procedure, Procedures For Remote Communication @subsubsection Standard_spawn Procedure @quotation @t{@b{standard_spawn}(@i{dest} @i{commandline});} @end quotation @table @asis @item @code{dest} @item @code{commandline} @end table @node standard_transmit procedure, standard_upload procedure, standard_spawn procedure, Procedures For Remote Communication @subsubsection Standard_transmit Procedure @quotation @t{@b{standard_transmit}(@i{dest} @i{file});} @end quotation @table @asis @item @code{dest} @item @code{file} @end table @node standard_upload procedure, standard_wait procedure, standard_transmit procedure, Procedures For Remote Communication @subsubsection Standard_upload Procedure @quotation @t{@b{standard_upload}(@i{dest srcfile destfile});} @end quotation @table @asis @item @code{dest} @item @code{srcfile} @item @code{destfile} @end table @node standard_wait procedure, unix_clean_filename procedure, standard_upload procedure, Procedures For Remote Communication @subsubsection Standard_wait Procedure @quotation @t{@b{standard_wait}(@i{dest} @i{timeout});} @end quotation @table @asis @item @code{dest} @item @code{timeout} @end table @node unix_clean_filename procedure, , standard_wait procedure, Procedures For Remote Communication @subsubsection Unix_clean_filename Procedure @quotation @t{@b{unix_clean_filename}(@i{dest} @i{file});} @end quotation @table @asis @item @code{dest} @item @code{file} @end table @node connprocs, Procedures For Target Boards, Procedures For Remote Communication, Builtin Procedures @subsection Procedures For Using Utilities to Connect telnet, rsh, tip, kermit @menu * telnet Procedure: telnet procedure. * rsh Procedure: rsh procedure. * Tip Procedure: tip procedure. * Kermit Procedure: kermit procedure. * kermit_open Procedure: kermit_open procedure. * Kermit_command Procedure: kermit_command procedure. * Kermit_send Procedure: kermit_send procedure. * Kermit_transmit Procedure: kermit_transmit procedure. * Telnet_open Procedure: telnet_open procedure. * Telnet_binary Procedure: telnet_binary procedure. * Telnet_transmit Procedure: telnet_transmit procedure. * Tip_open Procedure: tip_open procedure. * Rlogin_open Procedure: rlogin_open procedure. * Rlogin_spawn Procedure: rlogin_spawn procedure. * Rsh_open Procedure: rsh_open procedure. * Rsh_download Procedure: rsh_download procedure. * Rsh_upload Procedure: rsh_upload procedure. * Rsh_exec Procedure: rsh_exec procedure. * Ftp_open Procedure: ftp_open procedure. * Ftp_upload Procedure: ftp_upload procedure. * Ftp_download Procedure: ftp_download procedure. * Ftp_close Procedure: ftp_close procedure. * Tip_download Procedure: tip_download procedure. @end menu @node telnet procedure, rsh procedure, , connprocs @subsubsection telnet Procedure @quotation @t{@b{telnet}(@i{hostname} @i{port});} @end quotation @quotation @t{@b{rlogin}(@i{hostname});} @end quotation @node rsh procedure, tip procedure, telnet procedure, connprocs @subsubsection rsh Procedure @quotation @t{@b{rsh}(@i{hostname});} @end quotation @table @asis @item @code{hostname} This refers to the IP address or name (for example, an entry in @file{/etc/hosts}) for this target. The procedure names reflect the Unix utility used to establish a connection. The optional @code{port} is used to specify the IP port number. The value of the @code{netport} field in the @code{target_info} array is used. (was @code{$netport}) This value has two parts, the hostname and the port number, separated by a @emph{:}. If host or target is used in the @code{hostname} field, than the config array is used for all information. @end table @node tip procedure, kermit procedure, rsh procedure, connprocs @subsubsection Tip Procedure @quotation @t{@b{tip}(@i{port});} @end quotation @table @asis @item @code{port} Connect using the Unix utility @code{tip}. @code{Port}must be a name from the tip configuration file @file{/etc/remote}. Often, this is called @code{hardwire}, or something like @code{ttya}. This file holds all the configuration data for the serial port. The value of the @code{serial} field in the @code{target_info} array is used. (was @code{$serialport}) If @code{host} or @code{target} is used in the @code{port} field, than the config array is used for all information. the config array is used for all information. @end table @node kermit procedure, kermit_open procedure, tip procedure, connprocs @subsubsection Kermit Procedure @quotation @t{@b{kermit}(@i{port} @i{bps});} @end quotation @table @asis @item @code{port} Connect using the program @code{kermit}. @code{Port} is the device name, e.g. @file{/dev/ttyb}. @item @code{bps} @code{bps} is the line speed to use (in its per second) for the connection. The value of the @code{serial} field in the @code{target_info} array is used. (was @code{$serialport}) If @code{host} or @code{target} is used in the @code{port} field, than the config array is used for all information. the config array is used for all information. @end table @node kermit_open procedure, kermit_command procedure, kermit procedure, connprocs @subsubsection kermit_open Procedure @quotation @t{@b{kermit_open}(@i{dest} @i{args});} @end quotation @table @asis @item @code{dest} @item @code{args} @end table @node kermit_command procedure, kermit_send procedure, kermit_open procedure, connprocs @subsubsection Kermit_command Procedure @quotation @t{@b{kermit_command}(@i{dest} @i{args});} @end quotation @table @asis @item @code{dest} @item @code{args} @end table @node kermit_send procedure, kermit_transmit procedure, kermit_command procedure, connprocs @subsubsection Kermit_send Procedure @quotation @t{@b{kermit_send}(@i{dest string args});} @end quotation @table @asis @item @code{dest} @item @code{string} @item @code{args} @end table @node kermit_transmit procedure, telnet_open procedure, kermit_send procedure, connprocs @subsubsection Kermit_transmit Procedure @quotation @t{@b{kermit_transmit}(@i{dest} @i{file} @i{args});} @end quotation @table @asis @item @code{dest} @item @code{file} @item @code{args} @end table @node telnet_open procedure, telnet_binary procedure, kermit_transmit procedure, connprocs @subsubsection Telnet_open Procedure @quotation @t{@b{telnet_open}(@i{hostname} @i{args});} @end quotation @table @asis @item @code{hostname} @item @code{args} @end table @node telnet_binary procedure, telnet_transmit procedure, telnet_open procedure, connprocs @subsubsection Telnet_binary Procedure @quotation @t{@b{telnet_binary}(@i{hostname});} @end quotation @table @asis @item @code{hostname} @end table @node telnet_transmit procedure, tip_open procedure, telnet_binary procedure, connprocs @subsubsection Telnet_transmit Procedure @quotation @t{@b{telnet_transmit}(@i{dest} @i{file} @i{args});} @end quotation @table @asis @item @code{dest} @item @code{file} @item @code{args} @end table @node tip_open procedure, rlogin_open procedure, telnet_transmit procedure, connprocs @subsubsection Tip_open Procedure @quotation @t{@b{tip_open}(@i{hostname});} @end quotation @table @asis @item @code{hostname} @end table @node rlogin_open procedure, rlogin_spawn procedure, tip_open procedure, connprocs @subsubsection Rlogin_open Procedure @quotation @t{@b{rlogin_open}(@i{arg});} @end quotation @table @asis @item @code{arg} @end table @node rlogin_spawn procedure, rsh_open procedure, rlogin_open procedure, connprocs @subsubsection Rlogin_spawn Procedure @quotation @t{@b{rlogin_spawn}(@i{dest} @i{cmdline});} @end quotation @table @asis @item @code{dest} @item @code{cmdline} @end table @node rsh_open procedure, rsh_download procedure, rlogin_spawn procedure, connprocs @subsubsection Rsh_open Procedure @quotation @t{@b{rsh_open}(@i{hostname});} @end quotation @table @asis @item @code{hostname} @end table @node rsh_download procedure, rsh_upload procedure, rsh_open procedure, connprocs @subsubsection Rsh_download Procedure @quotation @t{@b{rsh_download}(@i{desthost} @i{srcfile} @i{destfile});} @end quotation @table @asis @item @code{desthost} @item @code{srcfile} @item @code{destfile} @end table @node rsh_upload procedure, rsh_exec procedure, rsh_download procedure, connprocs @subsubsection Rsh_upload Procedure @quotation @t{@b{rsh_upload}(@i{desthost} @i{srcfile} @i{destfile});} @end quotation @table @asis @item @code{desthost} @item @code{srcfile} @item @code{destfile} @end table @node rsh_exec procedure, ftp_open procedure, rsh_upload procedure, connprocs @subsubsection Rsh_exec Procedure @quotation @t{@b{rsh_exec}(@i{boardname} @i{cmd} @i{args});} @end quotation @table @asis @item @code{boardname} @item @code{cmd} @item @code{args} @end table @node ftp_open procedure, ftp_upload procedure, rsh_exec procedure, connprocs @subsubsection Ftp_open Procedure @quotation @t{@b{ftp_open}(@i{host});} @end quotation @table @asis @item @code{host} @end table @node ftp_upload procedure, ftp_download procedure, ftp_open procedure, connprocs @subsubsection Ftp_upload Procedure @quotation @t{@b{ftp_upload}(@i{host} @i{remotefile} @i{localfile});} @end quotation @table @asis @item @code{host} @item @code{remotefile} @item @code{localfile} @end table @node ftp_download procedure, ftp_close procedure, ftp_upload procedure, connprocs @subsubsection Ftp_download Procedure @quotation @t{@b{ftp_download}(@i{host} @i{localfile} @i{remotefile});} @end quotation @table @asis @item @code{host} @item @code{localfile} @item @code{remotefile} @end table @node ftp_close procedure, tip_download procedure, ftp_download procedure, connprocs @subsubsection Ftp_close Procedure @quotation @t{@b{ftp_close}(@i{host});} @end quotation @table @asis @item @code{host} @end table @node tip_download procedure, , ftp_close procedure, connprocs @subsubsection Tip_download Procedure @quotation @t{@b{tip_download}(@i{spawnid} @i{file});} @end quotation @table @asis @item @code{spawnid} Download @code{file} to the process @code{spawnid} (the value returned when the connection was established), using the @code{~put} command under tip. Most often used for single board computers that require downloading programs in ASCII S-records. Returns @emph{1} if an error occurs, @emph{0} otherwise. @item @code{file} This is the filename to download. @end table @node Procedures For Target Boards, target database library file, connprocs, Builtin Procedures @subsection Procedures For Target Boards @menu * Default_link Procedure: default_link procedure. * Default_target_assemble Procedure: default_target_assemble procedure. * default_target_compile Procedure: default_target_compile procedure. * Pop_config Procedure: pop_config procedure. * Prune_warnings Procedure: prune_warnings procedure. * Push_build Procedure: push_build procedure. * push_config Procedure: push_config procedure. * Reboot_target Procedure: reboot_target procedure. * Target_assemble Procedure: target_assemble procedure. * Target_compile Procedure: target_compile procedure. @end menu @node default_link procedure, default_target_assemble procedure, , Procedures For Target Boards @subsubsection Default_link Procedure @quotation @t{@b{default_link}(@i{board} @i{objects} @i{destfile} @i{flags});} @end quotation @table @asis @item @code{board} @item @code{objects} @item @code{destfile} @item @code{flags} @end table @node default_target_assemble procedure, default_target_compile procedure, default_link procedure, Procedures For Target Boards @subsubsection Default_target_assemble Procedure @quotation @t{@b{default_target_assemble}(@i{source} @i{destfile} @i{flags});} @end quotation @table @asis @item @code{source} @item @code{destfile} @item @code{flags} @end table @node default_target_compile procedure, pop_config procedure, default_target_assemble procedure, Procedures For Target Boards @subsubsection default_target_compile Procedure @quotation @t{@b{default_target_compile}(@i{source} @i{destfile} @i{type} @i{options});} @end quotation @table @asis @item @code{source} @item @code{destfile} @item @code{type} @item @code{options} @end table @node pop_config procedure, prune_warnings procedure, default_target_compile procedure, Procedures For Target Boards @subsubsection Pop_config Procedure @quotation @t{@b{pop_config}(@i{type});} @end quotation @table @asis @item @code{type} @end table @node prune_warnings procedure, push_build procedure, pop_config procedure, Procedures For Target Boards @subsubsection Prune_warnings Procedure @quotation @t{@b{prune_warnings}(@i{text});} @end quotation @table @asis @item @code{text} @end table @node push_build procedure, push_config procedure, prune_warnings procedure, Procedures For Target Boards @subsubsection Push_build Procedure @quotation @t{@b{push_build}(@i{name});} @end quotation @table @asis @item @code{name} @end table @node push_config procedure, reboot_target procedure, push_build procedure, Procedures For Target Boards @subsubsection push_config Procedure @quotation @t{@b{push_config}(@i{type} @i{name});} @end quotation @table @asis @item @code{type} @item @code{name} @end table @node reboot_target procedure, target_assemble procedure, push_config procedure, Procedures For Target Boards @subsubsection Reboot_target Procedure @quotation @t{@b{reboot_target}(@i{});} @end quotation @node target_assemble procedure, target_compile procedure, reboot_target procedure, Procedures For Target Boards @subsubsection Target_assemble Procedure @quotation @t{@b{target_assemble}(@i{source destfile flags});} @end quotation @table @asis @item @code{source} @item @code{destfile} @item @code{flags} @end table @node target_compile procedure, , target_assemble procedure, Procedures For Target Boards @subsubsection Target_compile Procedure @quotation @t{@b{target_compile}(@i{source} @i{destfile} @i{type} @i{options});} @end quotation @table @asis @item @code{source} @item @code{destfile} @item @code{type} @item @code{options} @end table @node target database library file, platform dependent procedures, Procedures For Target Boards, Builtin Procedures @subsection Target Database Procedures @menu * Board_info Procedure: board_info procedure. * Host_info Procedure: host_info procedure. * Set_board_info Procedure: set_board_info procedure. * Add_board_info Procedure: add_board_info procedure. * Set_currtarget_info Procedure: set_currtarget_info procedure. * Target_info Procedure: target_info procedure. * Unset_board_info Procedure: unset_board_info procedure. * Unset_currtarget_info Procedure: unset_currtarget_info procedure. * Push_target Procedure: push_target procedure. * Pop_target Procedure: poptarget procedure. * List_targets Procedure: list_targets procedure. * Push_host Procedure: push_host procedure. * Pop_host Procedure: pop_host procedure. * Compile Procedure: compile procedure. * Archive Procedure: archive procedure. * Ranlib Procedure: ranlib procedure. * Execute_anywhere Procedure: execute_anywhere procedure. @end menu @node board_info procedure, host_info procedure, , target database library file @subsubsection Board_info Procedure @quotation @t{@b{board_info}(@i{machine} @i{op} @i{args});} @end quotation @table @asis @item @code{machine} @item @code{op} @item @code{args} @end table @node host_info procedure, set_board_info procedure, board_info procedure, target database library file @subsubsection Host_info Procedure @quotation @t{@b{host_info}(@i{op} @i{args});} @end quotation @table @asis @item @code{op} @item @code{args} @end table @node set_board_info procedure, add_board_info procedure, host_info procedure, target database library file @subsubsection Set_board_info Procedure This checks if @code{board_info} array's field @emph{entry} has been set already and if not, then sets it to @emph{value}. @quotation @t{@b{set_board_info}(@i{entry} @i{value});} @end quotation @table @asis @item @code{entry} The name of a @code{board_info} field to operate on. @item @code{value} The value to set the field to. @end table @node add_board_info procedure, set_currtarget_info procedure, set_board_info procedure, target database library file @subsubsection Add_board_info Procedure This treats @code{board_info} array's field @emph{entry} as a TCL list and adds @emph{value} at the end. @quotation @t{@b{add_board_info}(@i{entry} @i{value});} @end quotation @table @asis @item @code{entry} The name of a @code{board_info} field to operate on. @item @code{value} The value to add to the field. @end table @node set_currtarget_info procedure, target_info procedure, add_board_info procedure, target database library file @subsubsection Set_currtarget_info Procedure @quotation @t{@b{set_currtarget_info}(@i{entry} @i{value});} @end quotation @table @asis @item @code{entry} @item @code{value} @end table @node target_info procedure, unset_board_info procedure, set_currtarget_info procedure, target database library file @subsubsection Target_info Procedure @quotation @t{@b{target_info}(@i{op} @i{args});} @end quotation @table @asis @item @code{op} @item @code{args} @end table @node unset_board_info procedure, unset_currtarget_info procedure, target_info procedure, target database library file @subsubsection Unset_board_info Procedure This checks if @code{board_info} array's field @emph{entry} has been set and if so, then removes it. @quotation @t{@b{unset_board_info}(@i{entry});} @end quotation @table @asis @item @code{entry} The name of a @code{board_info} field to operate on. @end table @node unset_currtarget_info procedure, push_target procedure, unset_board_info procedure, target database library file @subsubsection Unset_currtarget_info Procedure @quotation @t{@b{unset_currtarget_info}(@i{entry});} @end quotation @table @asis @item @code{entry} @end table @node push_target procedure, poptarget procedure, unset_currtarget_info procedure, target database library file @subsubsection Push_target Procedure This makes the target named @emph{name} be the current target connection. The value of @emph{name} is an index into the @code{target_info} array and is set in the global config file. @quotation @t{@b{push_target}(@i{name});} @end quotation @table @asis @item @code{name} The name of the target to make current connection. @end table @node poptarget procedure, list_targets procedure, push_target procedure, target database library file @subsubsection Pop_target Procedure This unsets the current target connection. @quotation @t{@b{pop_target}(@i{});} @end quotation @node list_targets procedure, push_host procedure, poptarget procedure, target database library file @subsubsection List_targets Procedure This lists all the supported targets for this architecture. @quotation @t{@b{list_targets}(@i{});} @end quotation @node push_host procedure, pop_host procedure, list_targets procedure, target database library file @subsubsection Push_host Procedure This makes the host named @emph{name} be the current remote host connection. The value of @emph{name} is an index into the @code{target_info} array and is set in the global config file. @quotation @t{@b{push_host}(@i{name});} @end quotation @table @asis @item @code{name} @end table @node pop_host procedure, compile procedure, push_host procedure, target database library file @subsubsection Pop_host Procedure This unsets the current host connection. @quotation @t{@b{pop_host}(@i{});} @end quotation @node compile procedure, archive procedure, pop_host procedure, target database library file @subsubsection Compile Procedure This invokes the compiler as set by CC to compile the file @file{file}. The default options for many cross compilation targets are @emph{guessed} by DejaGnu, and these options can be added to by passing in more parameters as arguments to @code{compile}. Optionally, this will also use the value of the @emph{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 @code{execute_anywhere}. @quotation @t{@b{compile}(@i{file});} @end quotation @table @asis @item @code{file} @end table @node archive procedure, ranlib procedure, compile procedure, target database library file @subsubsection Archive Procedure This produces an archive file. Any parameters passed to @code{archive} are used in addition to the default flags. Optionally, this will also use the value of the @emph{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 @code{execute_anywhere}. @quotation @t{@b{archive}(@i{file});} @end quotation @table @asis @item @code{file} @end table @node ranlib procedure, execute_anywhere procedure, archive procedure, target database library file @subsubsection Ranlib Procedure This generates an index for the archive file for systems that aren't POSIX yet. Any parameters passed to @code{ranlib} are used in for the flags. @quotation @t{@b{ranlib}(@i{file});} @end quotation @table @asis @item @code{file} @end table @node execute_anywhere procedure, , ranlib procedure, target database library file @subsubsection Execute_anywhere Procedure This executes the @emph{cmdline} on the proper host. This should be used as a replacement for the Tcl command @code{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. @quotation @t{@b{execute_anywhere}(@i{cmdline});} @end quotation @table @asis @item @code{cmdline} @end table @node platform dependent procedures, Utility Procedures, target database library file, Builtin Procedures @subsection Platform 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 underscore @emph{_}, and finally a suffix describing the procedure's purpose. For example, a procedure to extract the version from GDB is called @code{gdb_version}. @code{runtest} itself calls only two of these procedures, @code{$@{tool@}_exit} and @code{$@{tool@}_version}; these procedures use no arguments. The other two procedures, @code{$@{tool@}_start} and @code{$@{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 testsuite. The usual convention for return codes from any of these procedures (although it is not required by @code{runtest}) is to return @emph{0} if the procedure succeeded, @emph{1} if it failed, and @emph{-1} if there was a communication error. @menu * $@{tool@}_start Procedure: $@{tool@}_start procedure. * $@{tool@}_load Procedure: $@{tool@}_load procedure. * $@{tool@}_exit Procedure: $@{tool@}_exit procedure. * $@{tool@}_version Procedure: $@{tool@}_version procedure. @end menu @node $@{tool@}_start procedure, $@{tool@}_load procedure, , platform dependent procedures @subsubsection $@{tool@}_start Procedure Starts a particular tool. For an interactive tool, @code{$@{tool@}_start} starts and initializes the tool, leaving the tool up and running for the test cases; an example is @code{gdb_start}, the start function for GDB. For a batch oriented tool, @code{$@{tool@}_start} is optional; the recommended convention is to let @code{$@{tool@}_start} run the tool, leaving the output in a variable called @code{comp_output}. Test scripts can then analyze @code{$comp_output} to determine the test results. An example of this second kind of start function is @code{gcc_start}, the start function for GCC. DejaGnu itself does not call @code{$@{tool@}_start}. The initialization module @code{$@{tool@}_init.exp} must call @code{$@{tool@}_start} for interactive tools; for batch-oriented tools, each individual test script calls @code{$@{tool@}_start} (or makes other arrangements to run the tool). @quotation @t{@b{$@{tool@}_start}(@i{});} @end quotation @node $@{tool@}_load procedure, $@{tool@}_exit procedure, $@{tool@}_start procedure, platform dependent procedures @subsubsection $@{tool@}_load Procedure Loads something into a tool. For an interactive tool, this conditions the tool for a particular test case; for example, @code{gdb_load} loads a new executable file into the debugger. For batch oriented tools, @code{$@{tool@}_load} may do nothing---though, for example, the GCC support uses @code{gcc_load} to load and run a binary on the target environment. Conventionally, @code{$@{tool@}_load} leaves the output of any program it runs in a variable called @code{$exec_output}. Writing @code{$@{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 @code{$@{tool@}_load}. @quotation @t{@b{$@{tool@}_load}(@i{});} @end quotation @node $@{tool@}_exit procedure, $@{tool@}_version procedure, $@{tool@}_load procedure, platform dependent procedures @subsubsection $@{tool@}_exit Procedure Cleans up (if necessary) before DejaGnu exits. For interactive tools, this usually ends the interactive session. You can also use @code{$@{tool@}_exit} to remove any temporary files left over from the tests. @code{runtest} calls @code{$@{tool@}_exit}. @quotation @t{@b{$@{tool@}_exit}(@i{});} @end quotation @node $@{tool@}_version procedure, , $@{tool@}_exit procedure, platform dependent procedures @subsubsection $@{tool@}_version Procedure Prints the version label and number for @code{$@{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. @quotation @t{@b{$@{tool@}_version}(@i{});} @end quotation @node Utility Procedures, Libgloss, platform dependent procedures, Builtin Procedures @subsection Utility Procedures @menu * Getdirs Procedure: getdirs procedure. * Find Procedure: find procedure. * Which Procedure: which procedure. * Grep Procedure: grep procedure. * Prune Procedure: prune procedure. * Slay Procedure: slay procedure. * Absolute Procedure: absolute procedure. * Psource Procedure: psource procedure. * Runtest_file_p Procedure: runtest_file_p procedure. * Diff Procedure: diff procedure. * Setenv Procedure: setenv procedure. * unsetenv Procedure: unsetenv procedure. * Getenv Procedure: getenv procedure. * Prune_system_crud Procedure: prune_system_crud procedure. @end menu @node getdirs procedure, find procedure, , Utility Procedures @subsubsection Getdirs Procedure Returns a list of all the directories in the single directory a single directory that match an optional pattern. @quotation @t{@b{getdirs}(@i{rootdir} @i{pattern});} @end quotation @table @asis @item @code{args} @item @code{pattern} If you do not specify @code{pattern}, @code{Getdirs} assumes a default pattern of @emph{*}. You may use the common shell wildcard characters in the pattern. If no directories match the pattern, then a NULL string is returned. @end table @node find procedure, which procedure, getdirs procedure, Utility Procedures @subsubsection Find Procedure Search for files whose names match @emph{pattern} (using shell wildcard characters for filename expansion). Search subdirectories recursively, starting at @emph{rootdir}. 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. @quotation @t{@b{find}(@i{rootdir} @i{pattern});} @end quotation @table @asis @item @code{rootdir} The top level directory to search the search from. @item @code{pattern} A csh "glob" style regular expression representing the files to find. @end table @node which procedure, grep procedure, find procedure, Utility Procedures @subsubsection Which Procedure Searches the execution path for an executable file @emph{binary}, like the BSD @code{which} utility. This procedure uses the shell environment variable @emph{PATH}. It returns @emph{0} if the binary is not in the path, or if there is no @emph{PATH} environment variable. If @code{binary} is in the path, it returns the full path to @code{binary}. @quotation @t{@b{which}(@i{file});} @end quotation @table @asis @item @code{binary} The executable program or shell script to look for. @end table @node grep procedure, prune procedure, which procedure, Utility Procedures @subsubsection Grep Procedure Search the file called @file{filename} (a fully specified path) for lines that contain a match for regular expression @emph{regexp}. The result is a list of all the lines that match. If no lines match, the result is an empty string. Specify @emph{regexp} using the standard regular expression style used by the Unix utility program grep. Use the optional third argument @emph{line} to start lines in the result with the line number in @file{filename}. (This argument is simply an option flag; type it just as shown @code{--line}.) @quotation @t{@b{grep}(@i{filename} @i{regexp} @i{--line});} @end quotation @table @asis @item @code{filename} The file to search. @item @code{regexp} The Unix style regular expression (as used by the @code{grep} Unix utility) to search for. @item @code{--line} Prefix the line number to each line where the regexp matches. @end table @node prune procedure, slay procedure, grep procedure, Utility Procedures @subsubsection Prune Procedure This procedure is deprecated and will be removed in the next release of DejaGnu. If a testsuite uses this procedure, a copy of the procedure should be made and placed in the lib directory of the testsuite. @node slay procedure, absolute procedure, prune procedure, Utility Procedures @subsubsection Slay Procedure This procedure is deprecated and will be removed in the next release of DejaGnu. If a testsuite uses this procedure, a copy of the procedure should be made and placed in the lib directory of the testsuite. @node absolute procedure, psource procedure, slay procedure, Utility Procedures @subsubsection Absolute Procedure This procedure is deprecated and will be removed in the next release of DejaGnu. If a testsuite uses this procedure, a copy of the procedure should be made and placed in the lib directory of the testsuite. @node psource procedure, runtest_file_p procedure, absolute procedure, Utility Procedures @subsubsection Psource Procedure This procedure is deprecated and will be removed in the next release of DejaGnu. If a testsuite uses this procedure, a copy of the procedure should be made and placed in the lib directory of the testsuite. @node runtest_file_p procedure, diff procedure, psource procedure, Utility Procedures @subsubsection Runtest_file_p Procedure Search @emph{runtest}s for @emph{testcase} and return @emph{1} if found, @emph{0} if not. @emph{runtests} is a list of two elements. The first is a copy of what was on the right side of the @emph{=} if @example foo.exp="..." @end example was specified, or an empty string if no such argument is present. The second is the pathname of the current testcase under consideration. This is used by tools like compilers where each testcase is a file. @quotation @t{@b{runtest_file_p}(@i{runtests} @i{testcase});} @end quotation @table @asis @item @code{runtests} The list of patterns to compare against. @item @code{testcase} The test case filename. @end table @node diff procedure, setenv procedure, runtest_file_p procedure, Utility Procedures @subsubsection Diff Procedure Compares the two files and returns a @emph{1} if they match, or a @emph{0} if they don't. If @code{verbose} is set, then it'll print the differences to the screen. @quotation @t{@b{diff}(@i{file_1} @i{file_2});} @end quotation @table @asis @item @code{file_1} The first file to compare. @item @code{file_2} The second file to compare. @end table @node setenv procedure, unsetenv procedure, diff procedure, Utility Procedures @subsubsection Setenv Procedure Sets the environment variable @emph{var} to the value @emph{val}. @quotation @t{@b{setenv}(@i{var} @i{val});} @end quotation @table @asis @item @code{var} The environment variable to set. @item @code{val} The value to set the variable to. @end table @node unsetenv procedure, getenv procedure, setenv procedure, Utility Procedures @subsubsection unsetenv Procedure Unsets the environment variable @emph{var}. @quotation @t{@b{unsetenv}(@i{var});} @end quotation @table @asis @item @code{var} The environment variable to unset. @end table @node getenv procedure, prune_system_crud procedure, unsetenv procedure, Utility Procedures @subsubsection Getenv Procedure Returns the value of @emph{var} in the environment if it exists, otherwise it returns NULL. @quotation @t{@b{getenv}(@i{var});} @end quotation @table @asis @item @code{var} The environment variable to get the value of. @end table @node prune_system_crud procedure, , getenv procedure, Utility Procedures @subsubsection Prune_system_crud Procedure For system @emph{system}, delete text the host or target operating system might issue that will interfere with pattern matching of program output in @emph{text}. An example is the message that is printed if a shared library is out of date. @quotation @t{@b{prune_system_crud}(@i{system} @i{test});} @end quotation @table @asis @item @code{system} The system error messages to look for to screen out . @item @code{text} The Tcl variable containing the text. @end table @node Libgloss, Debugging Procedures, Utility Procedures, Builtin Procedures @subsection Libgloss, A Free BSP Libgloss is a free @dfn{BSP} (Board Support Package) commonly used with GCC and G++ to produce a fully linked executable image for an embedded systems. @menu * Libgloss_link_flags Procedure: libgloss_link_flags procedure. * Libgloss_include_flags Procedure: libgloss_include_flags procedure. * Newlib_link_flags Procedure: newlib_link_flags procedure. * Newlib_include_flags Procedure: newlib_include_flags procedure. * Libio_include_flags Procedure: libio_include_flags procedure. * Libio_link_flags Procedure: libio_link_flags procedure. * G++_include_flags Procedure: g++_include_flags procedure. * G++_link_flags Procedure: g++_link_flags procedure. * Libstdc++_include_flags Procedure: libstdc++_include_flags procedure. * Libstdc++_link_flags Procedure: libstdc++_link_flags procedure. * Get_multilibs Procedure: get_multilibs procedure. * Find_binutils_prog Procedure: find_binutils_prog procedure. * Find_gcc Procedure: find_gcc procedure. * Find_gcj Procedure: find_gcj procedure. * Find_g++ Procedure: find_g++ procedure. * Find_g77 Procedure: find_g77 procedure. * Find_gfortran Procedure: find_gfortran procedure. * Process_multilib_options Procedure: process_multilib_options procedure. * Add_multilib_option Procedure: add_multilib_option procedure. * Find_gas Procedure: find_gas procedure. * Find_ld Procedure: find_ld procedure. * Build_wrapper Procedure: build_wrapper procedure. * Winsup_include_flags Procedure: winsup_include_flags procedure. * Winsup_link_flags Procedure: winsup_link_flags procedure. @end menu @node libgloss_link_flags procedure, libgloss_include_flags procedure, , Libgloss @subsubsection Libgloss_link_flags Procedure @quotation @t{@b{libgloss_link_flags}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node libgloss_include_flags procedure, newlib_link_flags procedure, libgloss_link_flags procedure, Libgloss @subsubsection Libgloss_include_flags Procedure @quotation @t{@b{libgloss_include_flags}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node newlib_link_flags procedure, newlib_include_flags procedure, libgloss_include_flags procedure, Libgloss @subsubsection Newlib_link_flags Procedure @quotation @t{@b{newlib_link_flags}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node newlib_include_flags procedure, libio_include_flags procedure, newlib_link_flags procedure, Libgloss @subsubsection Newlib_include_flags Procedure @quotation @t{@b{newlib_include_flags}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node libio_include_flags procedure, libio_link_flags procedure, newlib_include_flags procedure, Libgloss @subsubsection Libio_include_flags Procedure @quotation @t{@b{libio_include_flags}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node libio_link_flags procedure, g++_include_flags procedure, libio_include_flags procedure, Libgloss @subsubsection Libio_link_flags Procedure @quotation @t{@b{libio_link_flags}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node g++_include_flags procedure, g++_link_flags procedure, libio_link_flags procedure, Libgloss @subsubsection G++_include_flags Procedure @quotation @t{@b{g++_include_flags}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node g++_link_flags procedure, libstdc++_include_flags procedure, g++_include_flags procedure, Libgloss @subsubsection G++_link_flags Procedure @quotation @t{@b{g++_link_flags}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node libstdc++_include_flags procedure, libstdc++_link_flags procedure, g++_link_flags procedure, Libgloss @subsubsection Libstdc++_include_flags Procedure @quotation @t{@b{libstdc++_include_flags}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node libstdc++_link_flags procedure, get_multilibs procedure, libstdc++_include_flags procedure, Libgloss @subsubsection Libstdc++_link_flags Procedure @quotation @t{@b{libstdc++_link_flags}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node get_multilibs procedure, find_binutils_prog procedure, libstdc++_link_flags procedure, Libgloss @subsubsection Get_multilibs Procedure @quotation @t{@b{get_multilibs}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node find_binutils_prog procedure, find_gcc procedure, get_multilibs procedure, Libgloss @subsubsection Find_binutils_prog Procedure @quotation @t{@b{find_binutils_prog}(@i{name});} @end quotation @table @asis @item @code{name} @end table @node find_gcc procedure, find_gcj procedure, find_binutils_prog procedure, Libgloss @subsubsection Find_gcc Procedure @quotation @t{@b{find_gcc}(@i{});} @end quotation @node find_gcj procedure, find_g++ procedure, find_gcc procedure, Libgloss @subsubsection Find_gcj Procedure @quotation @t{@b{find_gcj}(@i{});} @end quotation @node find_g++ procedure, find_g77 procedure, find_gcj procedure, Libgloss @subsubsection Find_g++ Procedure @quotation @t{@b{find_g++}(@i{});} @end quotation @node find_g77 procedure, find_gfortran procedure, find_g++ procedure, Libgloss @subsubsection Find_g77 Procedure @quotation @t{@b{find_g77}(@i{});} @end quotation @node find_gfortran procedure, process_multilib_options procedure, find_g77 procedure, Libgloss @subsubsection Find_gfortran Procedure @quotation @t{@b{find_gfortran}(@i{});} @end quotation @node process_multilib_options procedure, add_multilib_option procedure, find_gfortran procedure, Libgloss @subsubsection Process_multilib_options Procedure @quotation @t{@b{process_multilib_options}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node add_multilib_option procedure, find_gas procedure, process_multilib_options procedure, Libgloss @subsubsection Add_multilib_option Procedure @quotation @t{@b{add_multilib_option}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node find_gas procedure, find_ld procedure, add_multilib_option procedure, Libgloss @subsubsection Find_gas Procedure @quotation @t{@b{find_gas}(@i{});} @end quotation @node find_ld procedure, build_wrapper procedure, find_gas procedure, Libgloss @subsubsection Find_ld Procedure @quotation @t{@b{find_ld}(@i{});} @end quotation @node build_wrapper procedure, winsup_include_flags procedure, find_ld procedure, Libgloss @subsubsection Build_wrapper Procedure @quotation @t{@b{build_wrapper}(@i{gluefile});} @end quotation @table @asis @item @code{gluefile} @end table @node winsup_include_flags procedure, winsup_link_flags procedure, build_wrapper procedure, Libgloss @subsubsection Winsup_include_flags Procedure @quotation @t{@b{winsup_include_flags}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node winsup_link_flags procedure, , winsup_include_flags procedure, Libgloss @subsubsection Winsup_link_flags Procedure @quotation @t{@b{winsup_link_flags}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node Debugging Procedures, , Libgloss, Builtin Procedures @subsection Procedures for debugging your Tcl code. @file{lib/debugger.exp}defines these utility procedures: @menu * Dumpvars Procedure: dumpvars procedure. * Dumplocals Procedure: dumplocals procedure. * Dumprocs Procedure: dumprocs procedure. * Dumpwatch Procedure: dumpwatch procedure. * Watcharray Procedure: watcharray procedure. * Watchvar Procedure: watchvar procedure. * Watchunset Procedure: watchunset procedure. * Watchwrite Procedure: watchwrite procedure. * Watchread Procedure: watchread procedure. * Watchdel Procedure: watchdel procedure. * Print Procedure: print procedure. * Quit Procedure: quit procedure. @end menu @node dumpvars procedure, dumplocals procedure, , Debugging Procedures @subsubsection Dumpvars Procedure This takes a csh style regular expression (glob rules) and prints the values of the global variable names that match. It is abbreviated as @emph{dv}. @quotation @t{@b{dumpvars}(@i{vars});} @end quotation @table @asis @item @code{vars} The variables to dump. @end table @node dumplocals procedure, dumprocs procedure, dumpvars procedure, Debugging Procedures @subsubsection Dumplocals Procedure This takes a csh style regular expression (glob rules) and prints the values of the local variable names that match. It is abbreviated as @emph{dl}. @quotation @t{@b{dumplocals}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node dumprocs procedure, dumpwatch procedure, dumplocals procedure, Debugging Procedures @subsubsection Dumprocs Procedure This takes a csh style regular expression (glob rules) and prints the body of all procs that match. It is abbreviated as @emph{dp}. @quotation @t{@b{dumprocs}(@i{pattern});} @end quotation @table @asis @item @code{pattern} The csh "glob" style pattern to look for. @end table @node dumpwatch procedure, watcharray procedure, dumprocs procedure, Debugging Procedures @subsubsection Dumpwatch Procedure This takes a csh style regular expression (glob rules) and prints all the watchpoints. It is abbreviated as @emph{dw}. @quotation @t{@b{dumpwatch}(@i{pattern});} @end quotation @table @asis @item @code{pattern} The csh "glob" style pattern to look for. @end table @node watcharray procedure, watchvar procedure, dumpwatch procedure, Debugging Procedures @subsubsection Watcharray Procedure @quotation @t{@b{watcharray}(@i{element} @i{type});} @end quotation @table @asis @item @code{type} The csh "glob" style pattern to look for. @end table @node watchvar procedure, watchunset procedure, watcharray procedure, Debugging Procedures @subsubsection Watchvar Procedure @quotation @t{@b{watchvar}(@i{var} @i{type});} @end quotation @table @asis @item @code{} @end table @node watchunset procedure, watchwrite procedure, watchvar procedure, Debugging Procedures @subsubsection Watchunset Procedure This breaks program execution when the variable @code{var} is unset. It is abbreviated as @emph{wu}. @quotation @t{@b{watchunset}(@i{arg});} @end quotation @table @asis @item @code{args} @end table @node watchwrite procedure, watchread procedure, watchunset procedure, Debugging Procedures @subsubsection Watchwrite Procedure This breaks program execution when the variable @code{var} is written. It is abbreviated as @emph{ww}. @quotation @t{@b{watchwrite}(@i{var});} @end quotation @table @asis @item @code{var} The variable to watch. @end table @node watchread procedure, watchdel procedure, watchwrite procedure, Debugging Procedures @subsubsection Watchread Procedure This breaks program execution when the variable @code{var} is read. It is abbreviated as @emph{wr}. @quotation @t{@b{watchread}(@i{var});} @end quotation @table @asis @item @code{var} The variable to watch. @end table @node watchdel procedure, print procedure, watchread procedure, Debugging Procedures @subsubsection Watchdel Procedure This deletes a watchpoint from the watch list. It is abbreviated as @emph{wd}. @quotation @t{@b{watchdel}(@i{args});} @end quotation @table @asis @item @code{args} @end table @node print procedure, quit procedure, watchdel procedure, Debugging Procedures @subsubsection Print Procedure This prints the value of the variable @code{var}. It is abbreviated as @emph{p}. @quotation @t{@b{print}(@i{var});} @end quotation @table @asis @item @code{var} @end table @node quit procedure, , print procedure, Debugging Procedures @subsubsection Quit Procedure This makes runtest exit. It is abbreviated as @emph{q}. @quotation @t{@b{quit}(@i{});} @end quotation @table @asis @item @code{} @end table @node File Map, , Builtin Procedures, Reference @section File Map This is a map of the files in DejaGnu. @itemize @item runtest @item runtest.exp @item stub-loader.c @item testglue.c @item config @item baseboards @item lib/debugger.exp @item lib/dg.exp @item lib/framework.exp @item lib/ftp.exp @item lib/kermit.exp @item lib/libgloss.exp @item lib/mondfe.exp @item lib/remote.exp @item lib/rlogin.exp @item lib/rsh.exp @item lib/standard.exp @item lib/target.exp @item lib/targetdb.exp @item lib/telnet.exp @item lib/tip.exp @item lib/util-defs.exp @item lib/utils.exp @item lib/xsh.exp @item lib/dejagnu.exp @end itemize @node Unit Testing API, , Reference, Top @chapter Unit Testing API @menu * C Unit Testing API:: * C++ Unit Testing API:: @end menu @node C Unit Testing API, C++ Unit Testing API, , Unit Testing API @section C Unit Testing API All of the functions that take a @code{msg} parameter use a C char * that is the message to be displayed. There currently is no support for variable length arguments. @menu * Pass Function: pass function. * Fail Function: fail function. * Untested Function: untested function. * Unresolved Function: unresolved function. * Totals Function: totals function. @end menu @node pass function, fail function, , C Unit Testing API @subsection Pass Function This prints a message for a successful test completion. @quotation @t{@b{pass}(@i{msg});} @end quotation @node fail function, untested function, pass function, C Unit Testing API @subsection Fail Function This prints a message for an unsuccessful test completion. @quotation @t{@b{fail}(@i{msg});} @end quotation @node untested function, unresolved function, fail function, C Unit Testing API @subsection Untested Function This prints a message for an test case that isn't run for some technical reason. @quotation @t{@b{untested}(@i{msg});} @end quotation @node unresolved function, totals function, untested function, C Unit Testing API @subsection Unresolved Function This prints a message for an test case that is run, but there is no clear result. These output states require a human to look over the results to determine what happened. @quotation @t{@b{unresolved}(@i{msg});} @end quotation @node totals function, , unresolved function, C Unit Testing API @subsection Totals Function This prints out the total numbers of all the test state outputs. @quotation @t{@b{totals}(@i{});} @end quotation @node C++ Unit Testing API, , C Unit Testing API, Unit Testing API @section C++ Unit Testing API All of the methods that take a @code{msg} parameter use a C char * or STL string, that is the message to be displayed. There currently is no support for variable length arguments. @menu * Pass Method: pass method. * Fail Method: fail method. * Untested Method: untested method. * Unresolved Method: unresolved method. * Totals Method: totals method. @end menu @node pass method, fail method, , C++ Unit Testing API @subsection Pass Method This prints a message for a successful test completion. @quotation @t{@b{TestState::pass}(@i{msg});} @end quotation @node fail method, untested method, pass method, C++ Unit Testing API @subsection Fail Method This prints a message for an unsuccessful test completion. @quotation @t{@b{TestState::fail}(@i{msg});} @end quotation @node untested method, unresolved method, fail method, C++ Unit Testing API @subsection Untested Method This prints a message for an test case that isn't run for some technical reason. @quotation @t{@b{TestState::untested}(@i{msg});} @end quotation @node unresolved method, totals method, untested method, C++ Unit Testing API @subsection Unresolved Method This prints a message for an test case that is run, but there is no clear result. These output states require a human to look over the results to determine what happened. @quotation @t{@b{TestState::unresolved}(@i{msg});} @end quotation @node totals method, , unresolved method, C++ Unit Testing API @subsection Totals Method This prints out the total numbers of all the test state outputs. @quotation @t{@b{TestState::totals}(@i{});} @end quotation @bye dejagnu-1.5.3/doc/legal.xml0000644000175000017500000000713012417172022012430 00000000000000 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy of the GFDL at this link or in the file COPYING-DOCS distributed with this manual. This manual is part of a collection of GNOME manuals distributed under the GFDL. If you want to distribute this manual separately from the collection, you can do so by adding a copy of the license to the manual, as described in section 6 of the license. Many of the names used by companies to distinguish their products and services are claimed as trademarks. Where those names appear in any GNOME documentation, and the members of the GNOME Documentation Project are made aware of those trademarks, then the names are in capital letters or initial capital letters. DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: DOCUMENT IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. dejagnu-1.5.3/lib/0000775000175000017500000000000012506237416010714 500000000000000dejagnu-1.5.3/lib/rlogin.exp0000644000175000017500000001051212320744410012630 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # Connect to ARG using rlogin. This is for systems using rlogin to # braindead targets. It returns either the spawn_id or a -1. # proc rlogin_open { arg } { global board_info set tries 0 set result -1 if {[board_info $arg exists fileid]} { return [board_info $arg fileid] } # get the hostname and port number from the config array if {[board_info $arg exists netport]} { set hostname [lindex [split [board_info $arg netport] ":"] 0] } else { set hostname $arg } if {![board_info $arg exists shell_prompt]} { # if no prompt, then set it to something generic set shell_prompt ".*> " } else { set shell_prompt [board_info $arg shell_prompt] } if {[board_info $arg exists fileid]} { unset board_info($arg,fileid) } # get the right version of rlogin if {![board_info $arg exists rlogin_prog]} { set RLOGIN rlogin } else { set RLOGIN [board_info $arg rlogin_prog] } # start connection and store the spawn_id verbose "Opening a $RLOGIN connection to $hostname" 2 spawn $RLOGIN $hostname if { $spawn_id < 0 } { perror "invalid spawn id from rlogin" return } set board_info($arg,fileid) $spawn_id # Try to connect to the target. We give up after 3 attempts. while { $tries <= 3 } { expect { -re ".*$shell_prompt.*$" { verbose "Got prompt\n" set result 0 break } -re "TERM = .*\\)\[ ]*$" { send "dumb\r\n" expect { "Terminal type is*$" { verbose "rlogin: set the terminal to dumb" 2 } default { warning "rlogin: couldn't set terminmal type" } } set result 10 break } "unknown host" { perror "rlogin: unknown host" break } "has logged on from" { exp_continue } "Terminal type is" { verbose "rlogin: connected, got terminal prompt" 2 set result 0 break } -re "Maximum number of users already logged in.*$" { warning "rlogin: maximum number of users already logged in" } -re "Sorry, shell is locked.*Connection closed.*$" { warning "rlogin: lready connected." } -re "Sorry, this system is engaged.*Connection closed.*$" { warning "rlogin: system engaged." } timeout { warning "rlogin: timed out trying to connect." } eof { perror "rlogin: got EOF while trying to connect." break } } incr tries } # see if we maxed out on errors if { $result < 0 } { catch "close -i $spawn_id" catch "wait -i $spawn_id" set spawn_id -1 } else { verbose "rlogin: connected to $hostname" 2 } return $spawn_id } # Start CMDLINE running on DEST. Return the shell_id associated with # the command. # proc rlogin_spawn { dest cmdline } { if {![board_info $dest exists shell_prompt]} { set shell_prompt "(^|\[\r\n\])\[^\r\n\]*>" } else { 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" return [board_info $dest fileid] } } dejagnu-1.5.3/lib/dejagnu.exp0000644000175000017500000001405212434731072012764 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file was written by Rob Savoye . # A hairy pattern to recognize text. set text "\[- A-Za-z0-9\.\;\"\_\:\'\`\(\)\!\#\=\+\?\&\*]" set SIZE size if { [which $SIZE] == 0 } { perror "Can't find $SIZE." } # Get the size of the various section in OBJECT. proc exe_size {object} { global SIZE # Make sure size exists if { [which $SIZE] == 0 } { return [list "-1" "Can't find $SIZE."] } else { verbose "Using $SIZE for \"size\" program." 2 } set status [catch "exec $SIZE -V" output] if {[regexp "GNU size" $output] == 0} { perror "Need GNU size from the binutils" 0 return [list "-1" "Need GNU size."] } # Get the object size. We pass -x, to force hex output verbose "Getting the object file size for $object" 2 set status [catch "exec $SIZE -x $object" output] verbose -log "Size of $object is\n$output" 2 # Remove the header line from the size output. This currently only # works with GNU size regsub "text.*filename\[\r\n\]*" $output "" output # look for the size of the .text section regexp "\[\r\n\]*0x\[0-9a-fA-F\]*" $output text regsub "\[\r\n\]*0x\[0-9a-fA-F\]*\[ \t\]*" $output "" output # look for the size of the .data section regexp "0x\[0-9a-fA-F\]*\[ \t\]*" $output data regsub "0x\[0-9a-fA-F\]*\[ \t\]*" $output "" output # Values returns as hex return [list $text $data] } # Run the host's native compiler, not the cross one. Filter out the # warnings and other extraneous stuff. # Returns: # A "" (empty) string if everything worked, or the # output if there was a problem. # proc host_compile {compline} { global INCLUDES global LIBS global CXX, CC # execute the compiler verbose "Compiling for the host using: $CC $INCLUDES $LIBS $compline" 2 set status [catch "exec $CC $INCLUDES $LIBS $compline" comp_output] verbose "Compiler returned $comp_output" 2 # prune common warnings and other stuff we can safely ignore set comp_output [prune_warnings $comp_output] # Trim multiple CR/LF pairs out to keep things consistant regsub "^\[\r\n\]+" $comp_output "" comp_output # if we got a compiler error, log it if { [lindex $status 0] != 0 } { verbose -log "compiler exited with status [lindex $status 0]" } if { [lindex $status 1] != "" } { verbose -log "output is:\n[lindex $status 1]" 2 } # return the filtered output return ${comp_output} } # Execute the executable file, and anaylyse the output for the # test state keywords. # Returns: # A "" (empty) string if everything worked, or an error message # if there was a problem. # proc host_execute {args} { global text set timeoutmsg "Timed out: Never got started, " set timeout 100 set file all set timetol 0 set arguments "" if { [llength $args] == 0} { set executable $args } else { set executable [string trimleft [lindex [split $args " "] 0] "\{"] set params [string trimleft [lindex [split $args " "] 1] "\{"] set params [string trimright $params "\}"] } verbose "The executable is $executable" 2 if {![file exists ${executable}]} { perror "The executable, \"$executable\" is missing" 0 return "No source file found" } # spawn the executable and look for the DejaGnu output messages from the # test case. # spawn -noecho -open [open "|./${executable}" "r"] spawn -noecho "./${executable}" ${params} set prefix "\[^\r\n\]*" expect { -re "^$prefix\[0-9\]\[0-9\]:..:..:${text}*\r\n" { regsub "\[\n\r\t\]*NOTE: $text\r\n" $expect_out(0,string) "" output verbose "$output" 3 set timetol 0 exp_continue } -re "^$prefix\tNOTE:${text}*" { regsub "\[\n\r\t\]*NOTE: $text\r\n" $expect_out(0,string) "" output set output [string range $output 6 end] verbose "$output" 2 set timetol 0 exp_continue } -re "^$prefix\tPASSED:${text}*" { regsub "\[\n\r\t\]*PASSED: $text\r\n" $expect_out(0,string) "" output set output [string range $output 8 end] pass "$output" set timetol 0 exp_continue } -re "^$prefix\tFAILED:${text}*" { regsub "\[\n\r\t\]*FAILED: $text\r\n" $expect_out(0,string) "" output set output [string range $output 8 end] fail "$output" set timetol 0 exp_continue } -re "^$prefix\tUNTESTED:${text}*" { regsub "\[\n\r\t\]*TESTED: $text\r\n" $expect_out(0,string) "" output set output [string range $output 8 end] untested "$output" set timetol 0 exp_continue } -re "^$prefix\tUNRESOLVED:${text}*" { regsub "\[\n\r\t\]*UNRESOLVED: $text\r\n" $expect_out(0,string) "" output set output [string range $output 8 end] unresolved "$output" set timetol 0 exp_continue } -re "^Totals" { verbose "All done" 2 } eof { # unresolved "${executable} died prematurely" # catch close # return "${executable} died prematurely" } timeout { warning "Timed out executing test case" if { $timetol <= 2 } { incr timetol exp_continue } else { catch close return "Timed out executing test case" } } -re "^$prefix\r\n" { exp_continue } } # force a close of the executable to be safe. catch close return "" } dejagnu-1.5.3/lib/rsh.exp0000644000175000017500000001700512417171746012153 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # Connect to HOSTNAME using rlogin(1). # proc rsh_open { hostname } { global spawn_id set tries 0 set result -1 if {![board_info $hostname exists rsh_prog]} { if { [which remsh] != 0 } { set RSH remsh } else { set RSH rsh } } else { set RSH [board_info $hostname rsh_prog] } if {[board_info $hostname exists username]} { set rsh_useropts "-l [board_info $hostname username]" } else { set rsh_useropts "" } # Get the hostname and port number from the config array. if {[board_info $hostname exists name]} { set hostname [board_info $hostname name] } set hostname [lindex [split [board_info ${hostname} netport] ":"] 0] if {[board_info ${hostname} exists shell_prompt]} { set shell_prompt [board_info ${hostname} shell_prompt] } else { set shell_prompt ".*> " } if {[board_info $hostname exists fileid]} { unset board_info($hostname,fileid) } spawn $RSH $rsh_useropts $hostname if { $spawn_id < 0 } { perror "invalid spawn id from $RSH" return -1 } send "\r\n" while { $tries <= 3 } { expect { -re ".*$shell_prompt.*$" { verbose "Got prompt\n" set result 0 break } -re "TERM = .*$" { warning "Setting terminal type to vt100" set result 0 send "vt100\n" break } "unknown host" { exp_send "\003" perror "telnet: unknown host" break } "has logged on from" { exp_continue } -re "isn't registered for Kerberos.*service.*$" { warning "$RSH: isn't registered for Kerberos, please kinit" catch close catch wait break } -re "Kerberos rcmd failed.*$" { warning "$RSH: Kerberos rcmd failed, please kinit" catch close catch wait break } -re "You have no Kerberos tickets.*$" { warning "$RSH: No kerberos Tickets, please kinit" catch close catch wait break } "Terminal type is" { verbose "$RSH: connected, got terminal prompt" 2 set result 0 break } -re "trying normal rlogin.*$" { warning "$RSH: trying normal rlogin." catch close catch wait break } -re "unencrypted connection.*$" { warning "$RSH: unencrypted connection, please kinit" catch close catch wait break } -re "Sorry, shell is locked.*Connection closed.*$" { warning "$RSH: already connected." } timeout { warning "$RSH: timed out trying to connect." } eof { perror "$RSH: got EOF while trying to connect." break } } incr tries } if { $result < 0 } { close -i $spawn_id set spawn_id -1 } else { set board_info($hostname,fileid) $spawn_id } return $spawn_id } # Download SRCFILE to DESTFILE on DESTHOST. # proc rsh_download {desthost srcfile destfile} { # must be done before desthost is rewritten if {[board_info $desthost exists rcp_prog]} { set RCP [board_info $desthost rcp_prog] } else { set RCP rcp } if {[board_info $desthost exists rsh_prog]} { set RSH [board_info $desthost rsh_prog] } else { if { [which remsh] != 0 } { set RSH remsh } else { set RSH rsh } } if {[board_info $desthost exists username]} { set rsh_useropts "-l [board_info $desthost username]" set rcp_user "[board_info $desthost username]@" } else { set rsh_useropts "" set rcp_user "" } if {[board_info $desthost exists name]} { set desthost [board_info $desthost name] } if {[board_info $desthost exists hostname]} { set desthost [board_info $desthost hostname] } set status [catch "exec $RSH $rsh_useropts $desthost rm -f $destfile |& cat" output] set status [catch "exec $RCP $srcfile $rcp_user$desthost:$destfile |& cat" output] if { $status == 0 } { verbose "Copied $srcfile to $desthost:$destfile" 2 return $destfile } else { verbose "Download to $desthost failed, $output." return "" } } proc rsh_upload {desthost srcfile destfile} { if {[board_info $desthost exists rcp_prog]} { set RCP [board_info $desthost rcp_prog] } else { set RCP rcp } if {[board_info $desthost exists username]} { set rcp_user "[board_info $desthost username]@" } else { set rcp_user "" } if {[board_info $desthost exists name]} { set desthost [board_info $desthost name] } if {[board_info $desthost exists hostname]} { set desthost [board_info $desthost hostname] } set status [catch "exec $RCP $rcp_user$desthost:$srcfile $destfile" output] if { $status == 0 } { verbose "Copied $desthost:$srcfile to $destfile" 2 return $destfile } else { verbose "Upload from $desthost failed, $output." return "" } } # Execute CMD on BOARDNAME. # proc rsh_exec { boardname program pargs inp outp } { global timeout verbose "Executing $boardname:$program $pargs < $inp" if {![board_info $boardname exists rsh_prog]} { if { [which remsh] != 0 } { set RSH remsh } else { set RSH rsh } } else { set RSH [board_info $boardname rsh_prog] } if {[board_info $boardname exists username]} { set rsh_useropts "-l [board_info $boardname username]" } else { set rsh_useropts "" } if {[board_info $boardname exists name]} { set boardname [board_info $boardname name] } if {[board_info $boardname exists hostname]} { set hostname [board_info $boardname hostname] } else { set hostname $boardname } # If CMD sends any output to stderr, exec will think it failed. # More often than not that will be true, but it doesn't catch the # case where there is no output but the exit code is non-zero. if { $inp == "" } { set inp "/dev/null" } set ret [local_exec "$RSH $rsh_useropts $hostname sh -c '$program $pargs \\; echo XYZ\\\${?}ZYX'" $inp $outp $timeout] set status [lindex $ret 0] set output [lindex $ret 1] verbose "$RSH status is $status, output is $output" # `status' doesn't mean much here other than rsh worked ok. # What we want is whether $program ran ok. Return $status # if the program timed out, status will be 1 indicating that # rsh ran and failed. If rsh fails, we will get FAIL rather # than UNRESOLVED - this will help the problem be noticed. if { $status != 0 } { regsub "XYZ(\[0-9\]*)ZYX\n?" $output "" output return [list $status "$RSH to $boardname failed for $program, $output"] } regexp "XYZ(\[0-9\]*)ZYX" $output junk status verbose "rsh_exec: status:$status text:$output" 4 if { $status == "" } { return [list -1 "Couldn't parse $RSH output, $output."] } regsub "XYZ(\[0-9\]*)ZYX\n?" $output "" output # Delete one trailing \n because that is what `exec' will do and we want # to behave identical to it. regsub "\n$" $output "" output return [list [expr {$status != 0}] $output] } dejagnu-1.5.3/lib/telnet.exp0000644000175000017500000001416512320744410012641 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # Connect to HOSTNAME using Telnet. ARGS is a list of options. # Currently the only supported option is "raw". Sets the fileid field # in the config array and returns -1 for error or the spawn id. # proc telnet_open { hostname args } { global verbose global connectmode global spawn_id global timeout global board_info set raw 0 foreach arg $args { switch $arg { "raw" { set raw 1 } } } set port 23 if {[board_info $hostname exists name]} { set connhost [board_info $hostname name] } else { set connhost $hostname } if {[board_info $connhost exists hostname]} { set hostname [board_info $connhost hostname] } if {[file exists /usr/kerberos/bin/telnet]} { set telnet /usr/kerberos/bin/telnet } else { set telnet telnet } # Instead of unsetting it, let's return it. One connection at a # time, please. if {[board_info $connhost exists fileid]} { return [board_info $connhost fileid] } # Get the hostname and port number from the config array. if {[board_info $connhost exists netport]} { set type $hostname set hosttmp [split [board_info $connhost netport] ":"] set hostname [lindex $hosttmp 0] if { [llength $hosttmp] > 1 } { set port [lindex $hosttmp 1] } unset hosttmp } else { set type target } if {[board_info $connhost exists shell_prompt]} { set shell_prompt [board_info $connhost shell_prompt] } if {![info exists shell_prompt]} { # If no prompt, then set it to something generic. set shell_prompt ".*> " } set tries 0 set result -1 set need_respawn 1 verbose "Starting a telnet connection to $hostname:$port $shell_prompt" 2 while { $result < 0 && $tries <= 3 } { if { $need_respawn } { set need_respawn 0 spawn $telnet $hostname $port } expect { "Trying " { exp_continue } -re "$shell_prompt.*$" { verbose "Got prompt\n" set result 0 } -re "nt Name:|ogin:" { if {[board_info $connhost exists telnet_username]} { exp_send "[board_info $connhost telnet_username]\n" exp_continue } if {[board_info $connhost exists username]} { exp_send "[board_info $connhost username]\n" exp_continue } perror "telnet: need to login" break } "assword:" { if {[board_info $connhost exists telnet_password]} { exp_send "[board_info $connhost telnet_password]\n" exp_continue } if {[board_info $connhost exists password]} { exp_send "[board_info $connhost password]\n" exp_continue } perror "telnet: need a password" break } -re "advance.*y/n.*\\?" { exp_send "n\n" exp_continue } -re {([Aa]dvanced|[Ss]imple) or ([Ss]imple|[Aa]dvanced)} { exp_send "simple\n" exp_continue } "Connected to" { exp_continue } "unknown host" { exp_send "\003" perror "telnet: unknown host" break } "VxWorks Boot" { exp_send "@\n" sleep 20 exp_continue } -re "Escape character is.*\\.\[\r\n\]" { if { $raw || [board_info $connhost exists dont_wait_for_prompt] } { set result 0 } else { if {[board_info $connhost exists send_initial_cr]} { exp_send "\n" } exp_continue } } "has logged on from" { exp_continue } "You have no Kerberos tickets" { warning "telnet: no kerberos Tickets, please kinit" break } -re "Connection refused.*$" { catch "exp_send \"\003\"" foo sleep 5 warning "telnet: connection refused." } -re "Sorry, this system is engaged.*" { exp_send "\003" warning "telnet: already connected." } "Connection closed by foreign host.*$" { warning "telnet: connection closed by foreign host." break } -re "\[\r\n\]+" { exp_continue } timeout { exp_send "\n" } eof { warning "telnet: got unexpected EOF from telnet." catch close catch wait set need_respawn 1 sleep 5 } } incr tries } # We look for this here again cause it means something went wrong, # and it doesn't always show up in the expect in buffer till the # server times out. if {[info exists expect_out(buffer)]} { if {[regexp "assword:|ogin:" $expect_out(buffer)]} { perror "telnet: need to supply a login and password." } } if { $result < 0 } { catch close catch wait set spawn_id -1 } if { $spawn_id >= 0 } { verbose "setting board_info($connhost,fileid) to $spawn_id" 3 set board_info($connhost,fileid) $spawn_id } return $spawn_id } # Put the Telnet connection to HOSTNAME into binary mode. # proc telnet_binary { hostname } { if {[board_info $hostname exists fileid]} { remote_send $hostname "" remote_expect $hostname 5 { -re "telnet> *$" {} default {} } remote_send $hostname "set binary\n" remote_expect $hostname 5 { -re "Format is .*telnet> *$" { remote_send $hostname "toggle binary\n" exp_continue } -re "Negotiating network ascii.*telnet> *$" { remote_send $hostname "toggle binary\n" exp_continue } -re "Negotiating binary.*\[\r\n\].*$" { } -re "binary.*unknown argument.*telnet> *$" { remote_send $hostname "mode character\n" } -re "Already operating in binary.*\[\r\n\].*$" { } timeout { warning "Never got binary response from telnet." } } } } dejagnu-1.5.3/lib/framework.exp0000644000175000017500000006613512470770432013360 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file was written by Rob Savoye . # These variables are local to this file. # This or more warnings and a test fails. set warning_threshold 3 # This or more errors and a test fails. set perror_threshold 1 proc mail_file { file to subject } { if {[file readable $file]} { catch "exec mail -s \"$subject\" $to < $file" } } # Check for XML output flag or environment variable. # proc check_xml { } { global env set x "RUNTESTFLAGS" return [format "%s" $env($x)] } # Insert DTD for xml format checking. # proc insertdtd { } { xml_output " \]>" } # Open the output logs. # proc open_logs { } { global outdir global tool global sum_file global xml_file global xml_file_name global xml if { ${tool} == "" } { set tool testrun } catch "file delete -force -- $outdir/$tool.sum" set sum_file [open [file join $outdir $tool.sum] w] if { $xml } { catch "file delete -force -- $outdir/$tool.xml" if { ![string compare $xml_file_name ""] } { set xml_file_name $tool.xml } set xml_file [open [file join $outdir $xml_file_name] w] xml_output "" insertdtd xml_output "" } catch "file delete -force -- $outdir/$tool.log" log_file -a "$outdir/$tool.log" verbose "Opening log files in $outdir" if { ${tool} == "testrun" } { set tool "" } fconfigure $sum_file -buffering line } # Close the output logs. # proc close_logs { } { global sum_file global xml global xml_file if { $xml } { xml_output "" catch "close $xml_file" } catch "close $sum_file" } # Check build host triplet for PATTERN. # With no arguments it returns the triplet string. # proc isbuild { pattern } { global build_triplet global host_triplet if {![info exists build_triplet]} { set build_triplet ${host_triplet} } if {[string match "" $pattern]} { return $build_triplet } verbose "Checking pattern \"$pattern\" with $build_triplet" 2 if {[string match "$pattern" $build_triplet]} { return 1 } else { return 0 } } # Is $board remote? Return a non-zero value if so. # proc is_remote { board } { global host_board global target_list verbose "calling is_remote $board" 3 # Remove any target variant specifications from the name. set board [lindex [split $board "/"] 0] # Map the host or build back into their short form. if { [board_info build name] == $board } { set board "build" } elseif { [board_info host name] == $board } { set board "host" } # We're on the "build". The check for the empty string is just for # paranoia's sake--we shouldn't ever get one. "unix" is a magic # string that should really go away someday. if { $board == "build" || $board == "unix" || $board == "" } { verbose "board is $board, not remote" 3 return 0 } if { $board == "host" } { if { [info exists host_board] && $host_board != "" } { verbose "board is $board, is remote" 3 return 1 } else { verbose "board is $board, host is local" 3 return 0 } } if { $board == "target" } { global current_target_name if {[info exists current_target_name]} { # This shouldn't happen, but we'll be paranoid anyway. if { $current_target_name != "target" } { return [is_remote $current_target_name] } } return 0 } if {[board_info $board exists isremote]} { verbose "board is $board, isremote is [board_info $board isremote]" 3 return [board_info $board isremote] } return 1 } # If this is a canadian (3 way) cross. This means the tools are # being built with a cross compiler for another host. # proc is3way {} { global host_triplet global build_triplet if {![info exists build_triplet]} { set build_triplet ${host_triplet} } verbose "Checking $host_triplet against $build_triplet" 2 if { "$build_triplet" == "$host_triplet" } { return 0 } return 1 } # Check host triplet for PATTERN. # With no arguments it returns the triplet string. # proc ishost { pattern } { global host_triplet if {[string match "" $pattern]} { return $host_triplet } verbose "Checking pattern \"$pattern\" with $host_triplet" 2 if {[string match "$pattern" $host_triplet]} { return 1 } else { return 0 } } # Check target triplet for pattern. # # With no arguments it returns the triplet string. # Returns 1 if the target looked for, or 0 if not. # proc istarget { args } { global target_triplet # if no arg, return the config string if {[string match "" $args]} { if {[info exists target_triplet]} { return $target_triplet } else { perror "No target configuration names found." } } set triplet [lindex $args 0] # now check against the cannonical name if {[info exists target_triplet]} { verbose "Checking \"$triplet\" against \"$target_triplet\"" 2 if {[string match $triplet $target_triplet]} { return 1 } } # nope, no match return 0 } # Check to see if we're running the tests in a native environment # Returns 1 if running native, 0 if on a target. # proc isnative { } { global target_triplet global build_triplet if {[string match $build_triplet $target_triplet]} { return 1 } return 0 } # unknown -- called by expect if a proc is called that doesn't exist # # Rename unknown to tcl_unknown so that we can wrap tcl_unknown. # This allows Tcl package autoloading to work in the modern age. rename ::unknown ::tcl_unknown proc unknown args { if {[catch {uplevel 1 ::tcl_unknown $args} msg]} { global errorCode global errorInfo global exit_status clone_output "ERROR: (DejaGnu) proc \"$args\" does not exist." if {[info exists errorCode]} { send_error "The error code is $errorCode\n" } if {[info exists errorInfo]} { send_error "The info on the error is:\n$errorInfo\n" } set exit_status 1 log_and_exit } } # Print output to stdout (or stderr) and to log file # # If the --all flag (-a) option was used then all messages go the the screen. # Without this, all messages that start with a keyword are written only to the # detail log file. All messages that go to the screen will also appear in the # detail log. This should only be used by the framework itself using pass, # fail, xpass, xfail, kpass, kfail, warning, perror, note, untested, unresolved, # or unsupported procedures. # proc clone_output { message } { global sum_file global all_flag if { $sum_file != "" } { puts $sum_file "$message" } regsub "^\[ \t\]*(\[^ \t\]+).*$" "$message" "\\1" firstword switch -glob "$firstword" { "PASS:" - "XFAIL:" - "KFAIL:" - "UNRESOLVED:" - "UNSUPPORTED:" - "UNTESTED:" { if {$all_flag} { send_user -- "$message\n" return "$message" } else { send_log -- "$message\n" } } {"ERROR:" "WARNING:" "NOTE:"} { send_error -- "$message\n" return "$message" } default { send_user -- "$message\n" return "$message" } } } # Reset a few counters. # proc reset_vars {} { global test_names test_counts global warncnt errcnt # other miscellaneous variables global prms_id global bug_id # reset them all set prms_id 0 set bug_id 0 set warncnt 0 set errcnt 0 foreach x $test_names { set test_counts($x,count) 0 } # Variables local to this file. global warning_threshold perror_threshold set warning_threshold 3 set perror_threshold 1 } proc log_and_exit {} { global exit_status global tool mail_logs outdir mailing_list log_summary total # extract version number if {[info procs ${tool}_version] != ""} { if {[catch "${tool}_version" output]} { warning "${tool}_version failed:\n$output" } } close_logs cleanup verbose -log "runtest completed at [timestamp -format %c]" if {$mail_logs} { if { ${tool} == "" } { set tool testrun } mail_file $outdir/$tool.sum $mailing_list "Dejagnu Summary Log" } remote_close host remote_close target exit $exit_status } proc xml_output { message } { global xml_file if { $xml_file != "" } { puts $xml_file "$message" } } # Print summary of all pass/fail counts. # proc log_summary { args } { global tool global sum_file global xml_file global xml global exit_status global mail_logs global outdir global mailing_list global current_target_name global test_counts global testcnt if { [llength $args] == 0 } { set which "count" } else { set which [lindex $args 0] } if { [llength $args] == 0 } { clone_output "\n\t\t=== $tool Summary for $current_target_name ===\n" } else { clone_output "\n\t\t=== $tool Summary ===\n" } # If the tool set `testcnt', it wants us to do a sanity check on the # total count, so compare the reported number of testcases with the # expected number. Maintaining an accurate count in `testcnt' isn't easy # so it's not clear how often this will be used. if {[info exists testcnt]} { if { $testcnt > 0 } { set totlcnt 0 # total all the testcases reported foreach x { FAIL PASS XFAIL KFAIL XPASS KPASS UNTESTED UNRESOLVED UNSUPPORTED } { incr totlcnt test_counts($x,$which) } set testcnt test_counts(total,$which) if { $testcnt>$totlcnt || $testcnt<$totlcnt } { if { $testcnt > $totlcnt } { set mismatch "unreported [expr {$testcnt - $totlcnt}]" } if { $testcnt < $totlcnt } { set mismatch "misreported [expr {$totlcnt - $testcnt}]" } } else { verbose "# of testcases run $testcnt" } if {[info exists mismatch]} { clone_output "### ERROR: totals do not equal number of testcases run" clone_output "### ERROR: # of testcases expected $testcnt" clone_output "### ERROR: # of testcases reported $totlcnt" clone_output "### ERROR: # of testcases $mismatch\n" } } } foreach x { PASS FAIL XPASS XFAIL KPASS KFAIL UNRESOLVED UNTESTED UNSUPPORTED } { set val $test_counts($x,$which) if { $val > 0 } { set mess "# of $test_counts($x,name)" if { $xml } { xml_output " " xml_output " $x" xml_output " $mess" xml_output " $val" xml_output " " } if { [string length $mess] < 24 } { append mess "\t" } clone_output "$mess\t$val" } } } # Close all open files, remove temp file and core files. # proc cleanup {} { global sum_file global exit_status global done_list global subdir #catch "exec rm -f [glob xgdb core *.x *.o *_soc a.out]" #catch "exec rm -f [glob -nocomplain $subdir/*.o $subdir/*.x $subdir/*_soc]" } # Setup a flag to control whether a failure is expected or not # # Multiple target triplet patterns can be specified for targets # for which the test fails. A bug report ID can be specified, # which is a string without '-'. # proc setup_xfail { args } { global xfail_flag global xfail_prms set xfail_prms 0 set argc [ llength $args ] for { set i 0 } { $i < $argc } { incr i } { set sub_arg [ lindex $args $i ] # is a prms number. we assume this is a string with no '-' characters if {[regexp "^\[^\-\]+$" $sub_arg]} { set xfail_prms $sub_arg continue } if {[istarget $sub_arg]} { set xfail_flag 1 continue } } } # Setup a flag to control whether it is a known failure. # # A bug report ID _MUST_ be specified, and is the first argument. # It still must be a string without '-' so we can be sure someone # did not just forget it and we end-up using a taget triple as # bug id. # # Multiple target triplet patterns can be specified for targets # for which the test is known to fail. # proc setup_kfail { args } { global kfail_flag global kfail_prms set kfail_prms 0 set argc [ llength $args ] for { set i 0 } { $i < $argc } { incr i } { set sub_arg [ lindex $args $i ] # is a prms number. we assume this is a string with no '-' characters if {[regexp "^\[^\-\]+$" $sub_arg]} { set kfail_prms $sub_arg continue } if {[istarget $sub_arg]} { set kfail_flag 1 continue } } if {$kfail_prms == 0} { perror "Attempt to set a kfail without specifying bug tracking id" } } # Check to see if a conditional xfail is triggered. # message {targets} {include} {exclude} # proc check_conditional_xfail { args } { global compiler_flags set all_args [lindex $args 0] set message [lindex $all_args 0] set target_list [lindex $all_args 1] verbose "Limited to targets: $target_list" 3 # get the list of flags to look for set includes [lindex $all_args 2] verbose "Will search for options $includes" 3 # get the list of flags to exclude if { [llength $all_args] > 3 } { set excludes [lindex $all_args 3] verbose "Will exclude for options $excludes" 3 } else { set excludes "" } # loop through all the targets, checking the options for each one verbose "Compiler flags are: $compiler_flags" 2 set incl_hit 0 set excl_hit 0 foreach targ $target_list { if {[istarget $targ]} { # look through the compiler options for flags we want to see # this is really messy cause each set of options to look for # may also be a list. We also want to find each element of the # list, regardless of order to make sure they're found. # So we look for lists in side of lists, and make sure all # the elements match before we decide this is legit. # Se we 'incl_hit' to 1 before the loop so that if the 'includes' # list is empty, this test will report a hit. (This can be # useful if a target will always fail unless certain flags, # specified in the 'excludes' list, are used.) set incl_hit 1 for { set i 0 } { $i < [llength $includes] } { incr i } { set incl_hit 0 set opt [lindex $includes $i] verbose "Looking for $opt to include in the compiler flags" 2 foreach j "$opt" { if {[string match "* $j *" $compiler_flags]} { verbose "Found $j to include in the compiler flags" 2 incr incl_hit } } # if the number of hits we get is the same as the number of # specified options, then we got a match if {$incl_hit == [llength $opt]} { break } else { set incl_hit 0 } } # look through the compiler options for flags we don't # want to see for { set i 0 } { $i < [llength $excludes] } { incr i } { set excl_hit 0 set opt [lindex $excludes $i] verbose "Looking for $opt to exclude in the compiler flags" 2 foreach j "$opt" { if {[string match "* $j *" $compiler_flags]} { verbose "Found $j to exclude in the compiler flags" 2 incr excl_hit } } # if the number of hits we get is the same as the number of # specified options, then we got a match if {$excl_hit == [llength $opt]} { break } else { set excl_hit 0 } } # if we got a match for what to include, but didn't find any reasons # to exclude this, then we got a match! So return one to turn this into # an expected failure. if {$incl_hit && ! $excl_hit } { verbose "This is a conditional match" 2 return 1 } else { verbose "This is not a conditional match" 2 return 0 } } } return 0 } # Clear the xfail flag for a particular target. # proc clear_xfail { args } { global xfail_flag global xfail_prms set argc [ llength $args ] for { set i 0 } { $i < $argc } { incr i } { set sub_arg [ lindex $args $i ] switch -glob $sub_arg { "*-*-*" { # is a configuration triplet if {[istarget $sub_arg]} { set xfail_flag 0 set xfail_prms 0 } continue } } } } # Clear the kfail flag for a particular target. # proc clear_kfail { args } { global kfail_flag global kfail_prms set argc [ llength $args ] for { set i 0 } { $i < $argc } { incr i } { set sub_arg [ lindex $args $i ] switch -glob $sub_arg { "*-*-*" { # is a configuration triplet if {[istarget $sub_arg]} { set kfail_flag 0 set kfail_prms 0 } continue } } } } # Record that a test has passed or failed (perhaps unexpectedly). # This is an internal procedure, only used in this file. # proc record_test { type message args } { global exit_status global xml global prms_id bug_id global xfail_flag xfail_prms global kfail_flag kfail_prms global errcnt warncnt global warning_threshold perror_threshold global pf_prefix if { [llength $args] > 0 } { set count [lindex $args 0] } else { set count 1 } if {[info exists pf_prefix]} { set message [concat $pf_prefix " " $message] } # If we have too many warnings or errors, # the output of the test can't be considered correct. if { $warning_threshold > 0 && $warncnt >= $warning_threshold || $perror_threshold > 0 && $errcnt >= $perror_threshold } { verbose "Error/Warning threshold exceeded: \ $errcnt $warncnt (max. $perror_threshold $warning_threshold)" set type UNRESOLVED } incr_count $type if { $xml } { global errorInfo set error "" if {[info exists errorInfo]} { set error $errorInfo } global expect_out set rio { "" "" } if { [catch { set rio [split $expect_out(buffer) "\n"] } result]} { #do nothing - leave as { "" "" } } set output "" set output "expect_out(buffer)" xml_output " " xml_output " [string trimright [lindex $rio 0]]" xml_output " [string trimright [lindex $rio 1]]" xml_output " $type" xml_output " $message" xml_output " $prms_id" xml_output " " } switch $type { PASS { if {$prms_id} { set message [concat $message "\t(PRMS $prms_id)"] } } FAIL { set exit_status 1 if {$prms_id} { set message [concat $message "\t(PRMS $prms_id)"] } } XPASS { set exit_status 1 if { $xfail_prms != 0 } { set message [concat $message "\t(PRMS $xfail_prms)"] } } XFAIL { if { $xfail_prms != 0 } { set message [concat $message "\t(PRMS $xfail_prms)"] } } KPASS { set exit_status 1 if { $kfail_prms != 0 } { set message [concat $message "\t(PRMS $kfail_prms)"] } } KFAIL { if { $kfail_prms != 0 } { set message [concat $message "\t(PRMS: $kfail_prms)"] } } UNTESTED { # The only reason we look at the xfail/kfail stuff is to pick up # `xfail_prms'. if { $kfail_flag && $kfail_prms != 0 } { set message [concat $message "\t(PRMS $kfail_prms)"] } elseif { $xfail_flag && $xfail_prms != 0 } { set message [concat $message "\t(PRMS $xfail_prms)"] } elseif { $prms_id } { set message [concat $message "\t(PRMS $prms_id)"] } } UNRESOLVED { set exit_status 1 # The only reason we look at the xfail/kfail stuff is to pick up # `xfail_prms'. if { $kfail_flag && $kfail_prms != 0 } { set message [concat $message "\t(PRMS $kfail_prms)"] } elseif { $xfail_flag && $xfail_prms != 0 } { set message [concat $message "\t(PRMS $xfail_prms)"] } elseif { $prms_id } { set message [concat $message "\t(PRMS $prms_id)"] } } UNSUPPORTED { # The only reason we look at the xfail/kfail stuff is to pick up # `xfail_prms'. if { $kfail_flag && $kfail_prms != 0 } { set message [concat $message "\t(PRMS $kfail_prms)"] } elseif { $xfail_flag && $xfail_prms != 0 } { set message [concat $message "\t(PRMS $xfail_prms)"] } elseif { $prms_id } { set message [concat $message "\t(PRMS $prms_id)"] } } default { perror "record_test called with bad type `$type'" set errcnt 0 return } } if { $bug_id } { set message [concat $message "\t(BUG $bug_id)"] } global multipass_name if { $multipass_name != "" } { set message [format "$type: %s: $message" "$multipass_name"] } else { set message "$type: $message" } clone_output "$message" # If a command name exists in the $local_record_procs associative # array for this type of result, then invoke it. set lowcase_type [string tolower $type] global local_record_procs if {[info exists local_record_procs($lowcase_type)]} { $local_record_procs($lowcase_type) "$message" } # Reset these so they're ready for the next test case. We don't reset # prms_id or bug_id here. There may be multiple tests for them. Instead # they are reset in the main loop after each test. It is also the # testsuite driver's responsibility to reset them after each testcase. set warncnt 0 set errcnt 0 set xfail_flag 0 set kfail_flag 0 set xfail_prms 0 set kfail_prms 0 } # Record that a test has passed. # proc pass { message } { global xfail_flag kfail_flag compiler_conditional_xfail_data # if we have a conditional xfail setup, then see if our compiler flags match if {[ info exists compiler_conditional_xfail_data ]} { if {[check_conditional_xfail $compiler_conditional_xfail_data]} { set xfail_flag 1 } unset compiler_conditional_xfail_data } if { $kfail_flag } { record_test KPASS $message } elseif { $xfail_flag } { record_test XPASS $message } else { record_test PASS $message } } # Record that a test has failed. # proc fail { message } { global xfail_flag kfail_flag compiler_conditional_xfail_data # if we have a conditional xfail setup, then see if our compiler flags match if {[ info exists compiler_conditional_xfail_data ]} { if {[check_conditional_xfail $compiler_conditional_xfail_data]} { set xfail_flag 1 } unset compiler_conditional_xfail_data } if { $kfail_flag } { record_test KFAIL $message } elseif { $xfail_flag } { record_test XFAIL $message } else { record_test FAIL $message } } # Record that a test that was expected to fail has passed unexpectedly. # proc xpass { message } { record_test XPASS $message } # Record that a test that was expected to fail did indeed fail. # proc xfail { message } { record_test XFAIL $message } # Record that a test for a known bug has passed unexpectedly. # proc kpass { bugid message } { global kfail_flag kfail_prms set kfail_flag 1 set kfail_prms $bugid record_test KPASS $message } # Record that a test has failed due to a known bug. # proc kfail { bugid message } { global kfail_flag kfail_prms set kfail_flag 1 set kfail_prms $bugid record_test KFAIL $message } # Set warning threshold. # proc set_warning_threshold { threshold } { global warning_threshold set warning_threshold $threshold } # Get warning threshold. # proc get_warning_threshold { } { global warning_threshold return $warning_threshold } # Prints warning messages. # These are warnings from the framework, not from the tools being # tested. It takes a string, and an optional number and returns # nothing. # proc warning { args } { global warncnt if { [llength $args] > 1 } { set warncnt [lindex $args 1] } else { incr warncnt } set message [lindex $args 0] clone_output "WARNING: $message" global errorInfo if {[info exists errorInfo]} { unset errorInfo } } # Prints error messages. # These are errors from the framework, not from the tools being # tested. It takes a string, and an optional number and returns # nothing. # proc perror { args } { global errcnt if { [llength $args] > 1 } { set errcnt [lindex $args 1] } else { incr errcnt } set message [lindex $args 0] clone_output "ERROR: $message" global errorInfo if {[info exists errorInfo]} { unset errorInfo } } # Prints informational messages. # # These are messages from the framework, not from the tools being # tested. This means that it is currently illegal to call this proc # outside of dejagnu proper. # proc note { message } { clone_output "NOTE: $message" # ??? It's not clear whether we should do this. Let's not, and only do # so if we find a real need for it. #global errorInfo #if [info exists errorInfo] { # unset errorInfo #} } # untested -- mark the test case as untested. # proc untested { message } { record_test UNTESTED $message } # Mark the test case as unresolved. # proc unresolved { message } { record_test UNRESOLVED $message } # Mark the test case as unsupported. # Usually this is used for a test that is missing OS support. # proc unsupported { message } { record_test UNSUPPORTED $message } # Set up the values in the test_counts array (name and initial # totals). # proc init_testcounts { } { global test_counts test_names set test_counts(TOTAL,name) "testcases run" set test_counts(PASS,name) "expected passes" set test_counts(FAIL,name) "unexpected failures" set test_counts(XFAIL,name) "expected failures" set test_counts(XPASS,name) "unexpected successes" set test_counts(KFAIL,name) "known failures" set test_counts(KPASS,name) "unknown successes" set test_counts(WARNING,name) "warnings" set test_counts(ERROR,name) "errors" set test_counts(UNSUPPORTED,name) "unsupported tests" set test_counts(UNRESOLVED,name) "unresolved testcases" set test_counts(UNTESTED,name) "untested testcases" set j "" foreach i [lsort [array names test_counts]] { regsub ",.*$" "$i" "" i if { $i == $j } { continue } set test_counts($i,total) 0 lappend test_names $i set j $i } } # Increment NAME in the test_counts array; the amount to increment can # be is optional (defaults to 1). # proc incr_count { name args } { global test_counts if { [llength $args] == 0 } { set count 1 } else { set count [lindex $args 0] } if {[info exists test_counts($name,count)]} { incr test_counts($name,count) $count incr test_counts($name,total) $count } else { perror "$name doesn't exist in incr_count" } } # Create an exp_continue proc if it doesn't exist. # For compatibility with old versions. # global argv0 if {![info exists argv0]} { proc exp_continue { } { continue -expect } } dejagnu-1.5.3/lib/ftp.exp0000644000175000017500000001304312320744410012131 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # Open an FTP connection to HOST. # proc ftp_open {host} { set prompt "ftp>" global board_info if {[board_info $host exists name]} { set host [board_info $host name] } if {[board_info $host exists ftp_fileid]} { return [board_info $host ftp_fileid] } if {[board_info $host exists hostname]} { set remotehost [board_info $host hostname] } else { set remotehost $host } # LoseQVT tends to get stuck sometimes; we'll loop around a few million # times when it gets a "connection refused". set spawn_id -1 set count 3 while {$spawn_id < 0 && $count >= 0} { spawn ftp -n $remotehost expect { -i $spawn_id -re ".*220.*$prompt" { } -i $spawn_id -re ".*Connection refused.*$prompt" { sleep 2 send "open $remotehost\n" exp_continue } -i $spawn_id default { close -i $spawn_id wait -i $spawn_id set spawn_id -1 } } incr count -1 } if {$spawn_id < 0} { return -1 } set board_info($host,ftp_fileid) $spawn_id if {[board_info $host exists ftp_username]} { if {[board_info $host exists ftp_password]} { set command "user [board_info $host ftp_username] [board_info $host ftp_password]\n" } else { set command "user [board_info $host ftp_username]\n" } send "$command" expect { -i $spawn_id -re ".*230.*$prompt" { } -i $spawn_id default { close -i $spawn_id wait -i $spawn_id return -1 } } } set timeout 15 send -i $spawn_id "binary\n" expect { -i $spawn_id -re "200.*$prompt" { } -i $spawn_id timeout { close -i $spawn_id wait -i $spawn_id return -1 } } if {[board_info $host exists ftp_directory]} { send "cd [board_info $host ftp_directory]\n" expect { -i $spawn_id -re "250.*$prompt" { } -i $spawn_id default { close -i $spawn_id wait -i $spawn_id return -1 } } } if {[board_info $host exists ftp_no_passive]} { send "passive\n" expect { -i $spawn_id -re "Passive mode off.*$prompt" { } -i $spawn_id -re "Passive mode on.*$prompt" { send "passive\n" exp_continue } -i $spawn_id -re ".*$prompt" { } } } set board_info($host,ftp_fileid) $spawn_id return $spawn_id } # Fetch REMOTEFILE from HOST and store it as LOCALFILE. # proc ftp_upload {host remotefile localfile} { set prompt "ftp>" verbose "ftping $remotefile from $host to $localfile" set timeout 15 set spawn_id [ftp_open $host] if {$spawn_id < 0} { return "" } set loop 1 while {$loop} { send -i $spawn_id "get $remotefile $localfile\n" expect { -i $spawn_id -re ".*Too many open files.*$prompt" { ftp_close $host } -i $spawn_id -re ".*No such file or directory.*$prompt" { set loop 0 set remotefile "" } -i $spawn_id -re "(^|\[\r\n\])226.*$prompt" {set loop 0} -i $spawn_id -re "(^|\[\r\n\])\[0-9\]\[0-9\]\[0-9\].*$prompt" { set loop 0 set remotefile "" } -i $spawn_id default { ftp_close $host } } if {$loop} { set spawn_id [ftp_open $host] if {$spawn_id < 0} { return "" } } } return $localfile } # Download LOCALFILE to HOST as REMOTEFILE. # proc ftp_download {host localfile remotefile} { set prompt "ftp>" verbose "putting $localfile $remotefile" if {[board_info $host exists hostname]} { set remotehost [board_info $host hostname] } else { set remotehost $host } set spawn_id [ftp_open $host] if {$spawn_id < 0} { return "" } set loop 1 while {$loop} { send -i $spawn_id "put $localfile $remotefile\n" expect { -i $spawn_id -re ".*Too many open files.*$prompt" { ftp_close $host } -i $spawn_id -re ".*No such file or directory.*$prompt" { set loop 0 set remotefile "" } -re "(^|\[\r\n\])150.*connection for (.*) \[(\]\[0-9.,\]+\\)\[\r\n\]" { set remotefile $expect_out(2,string) exp_continue } -i $spawn_id -re "(^|\[\r\n\])226.*$prompt" { set loop 0 } -i $spawn_id -re "Timeout.*$prompt" { ftp_close $host } -i $spawn_id -re "(^|\[\r\n\])\[0-9\]\[0-9\]\[0-9\].*$prompt" { set loop 0 set remotefile "" } -i $spawn_id default { ftp_close $host } } if {$loop} { set spawn_id [ftp_open $host] if {$spawn_id < 0} { return "" } } } return $remotefile } # Close the FTP connection to HOST. # proc ftp_close {host} { global board_info if {[board_info $host exists name]} { set host [board_info $host name] } if {![board_info $host exists ftp_fileid]} { return "" } set spawn_id [board_info $host ftp_fileid] unset board_info($host,ftp_fileid) send -i $spawn_id "quit\n" close -i $spawn_id wait -i $spawn_id return "" } dejagnu-1.5.3/lib/debugger.exp0000644000175000017500000001247512320744410013134 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file was written by Rob Savoye . # Dump the values of a shell expression representing variable names. # proc dumpvars { args } { uplevel 1 [list foreach i [uplevel 1 "info vars $args"] { if { [catch "array names $i" names ] } { eval "puts \"${i} = \$${i}\"" } else { foreach k $names { eval "puts \"$i\($k\) = \$$i\($k\)\"" } } } ] } # Dump the values of a shell expression representing variable names. # proc dumplocals { args } { uplevel 1 [list foreach i [uplevel 1 "info locals $args"] { if { [catch "array names $i" names ] } { eval "puts \"${i} = \$${i}\"" } else { foreach k $names { eval "puts \"$i\($k\) = \$$i\($k\)\"" } } } ] } # Dump the body of procedures specified by a regexp. # proc dumprocs { args } { foreach i [info procs $args] { puts "\nproc $i \{ [info args $i] \} \{ [info body $i]\}" } } # Dump all the current watchpoints. # proc dumpwatch { args } { foreach i [uplevel 1 "info vars $args"] { set tmp "" if { [catch "uplevel 1 array name $i" names] } { set tmp [uplevel 1 trace vinfo $i] if {![string match "" $tmp]} { puts "$i $tmp" } } else { foreach k $names { set tmp [uplevel 1 trace vinfo [set i]($k)] if {![string match "" $tmp]} { puts "[set i]($k) = $tmp" } } } } } # Trap a watchpoint for an array. # proc watcharray { array element op } { upvar [set array]($element) avar switch $op { "w" { puts "New value of [set array]($element) is $avar" } "r" { puts "[set array]($element) (= $avar) was just read" } "u" { puts "[set array]($element) (= $avar) was just unset" } } } proc watchvar { v ignored op } { upvar $v var switch $op { "w" { puts "New value of $v is $var" } "r" { puts "$v (=$var) was just read" } "u" { puts "$v (=$var) was just unset" } } } # Watch when a variable is written. # proc watchunset { arg } { if { [catch "uplevel 1 array name $arg" names ] } { if {![uplevel 1 info exists $arg]} { puts stderr "$arg does not exist" return } uplevel 1 trace variable $arg u watchvar } else { foreach k $names { if {![uplevel 1 info exists $arg]} { puts stderr "$arg does not exist" return } uplevel 1 trace variable [set arg]($k) u watcharray } } } # Watch when a variable is written. # proc watchwrite { arg } { if { [catch "uplevel 1 array name $arg" names ] } { if {![uplevel 1 info exists $arg]} { puts stderr "$arg does not exist" return } uplevel 1 trace variable $arg w watchvar } else { foreach k $names { if {![uplevel 1 info exists $arg]} { puts stderr "$arg does not exist" return } uplevel 1 trace variable [set arg]($k) w watcharray } } } # Watch when a variable is read. # proc watchread { arg } { if { [catch "uplevel 1 array name $arg" names ] } { if {![uplevel 1 info exists $arg]} { puts stderr "$arg does not exist" return } uplevel 1 trace variable $arg r watchvar } else { foreach k $names { if {![uplevel 1 info exists $arg]} { puts stderr "$arg does not exist" return } uplevel 1 trace variable [set arg]($k) r watcharray } } } # Delete a watchpoint. # proc watchdel { args } { foreach i [uplevel 1 "info vars $args"] { set tmp "" if { [catch "uplevel 1 array name $i" names] } { catch "uplevel 1 trace vdelete $i w watchvar" catch "uplevel 1 trace vdelete $i r watchvar" catch "uplevel 1 trace vdelete $i u watchvar" } else { foreach k $names { catch "uplevel 1 trace vdelete [set i]($k) w watcharray" catch "uplevel 1 trace vdelete [set i]($k) r watcharray" catch "uplevel 1 trace vdelete [set i]($k) u watcharray" } } } } # This file creates GDB style commands for the Tcl debugger # proc print { var } { puts "$var" } proc quit { } { log_and_exit } proc bt { } { # The w command is provided by the Tcl debugger. puts "[w]" } # Create some stub procedures since we can't alias the command names. # proc dp { args } { uplevel 1 dumprocs $args } proc dv { args } { uplevel 1 dumpvars $args } proc dl { args } { uplevel 1 dumplocals $args } proc dw { args } { uplevel 1 dumpwatch $args } proc q { } { quit } proc p { args } { uplevel 1 print $args } proc wu { args } { uplevel 1 watchunset $args } proc ww { args } { uplevel 1 watchwrite $args } proc wr { args } { uplevel 1 watchread $args } proc wd { args } { uplevel 1 watchdel $args } dejagnu-1.5.3/lib/tip.exp0000644000175000017500000001044112320744410012133 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # Connect to HOSTNAME using tip(1). Sets the board's fileid field # with the spawn_id on success and returns the spawn id, otherwise # returns -1. # proc tip_open { hostname } { global verbose global spawn_id set tries 0 set result -1 if {[board_info $hostname exists name]} { set hostname [board_info ${hostname} name] } set port [board_info ${hostname} tipname] if {[board_info ${hostname} exists shell_prompt]} { set shell_prompt [board_info ${hostname} shell_prompt] } else { # Pick something reasonably generic. set shell_prompt ".*> " } if {[board_info ${hostname} exists fileid]} { unset board_info(${hostname},fileid) } spawn tip -v $port if { $spawn_id < 0 } { perror "invalid spawn id from tip" return -1 } expect { -re ".*connected.*$" { send "\r\n" expect { -re ".*$shell_prompt.*$" { verbose "Got prompt\n" set result 0 incr tries } timeout { warning "Never got prompt." set result -1 incr tries if $tries<=2 { exp_continue } } } } -re "all ports busy.*$" { set result -1 perror "All ports busy." incr tries if { $tries <= 2 } { exp_continue } } -re "Connection Closed.*$" { perror "Never connected." set result -1 incr tries if { $tries <= 2 } { exp_continue } } -re ".*: Permission denied.*link down.*$" { perror "Link down." set result -1 incr tries } timeout { perror "Timed out trying to connect." set result -1 incr tries if { $tries <= 2 } { exp_continue } } eof { perror "Got unexpected EOF from tip." set result -1 incr tries } } send "\n~s" expect { "~\[set\]*" { verbose "Setting verbose mode" 1 send "verbose\n\n\n" } } if { $result < 0 } { perror "Couldn't connect after $tries tries." return -1 } else { set board_info($hostname,fileid) $spawn_id return $spawn_id } } # Download FILE to DEST using the ~put command in tip(1). # Returns -1 if an error occurred, otherwise returns 0. # proc tip_download { dest file args } { global verbose global decimal global expect_out if {[board_info $dest exists shell_prompt]} { set shell_prompt [board_info $dest shell_prompt] } else { set shell_prompt ".*>" } set result "" if {![board_info $dest exists fileid]} { perror "tip_download: no connection to $dest." return $result } set shell_id [board_info $dest fileid] if {![file exists $file]} { perror "$file doesn't exist." return $result } send -i $shell_id "\n~p" expect { -i $shell_id "~\[put\]*" { verbose "Downloading $file, please wait" 1 send -i $shell_id "$file\n" set timeout 50 expect { -i $shell_id -re ".*$file.*$" { exp_continue } -i $shell_id -re ".*lines transferred in.*minute.*seconds.*$shell_prompt.*$" { verbose "Download $file successfully" 1 set result $file } -i $shell_id -re ".*Invalid command.*$shell_prompt$" { warning "Got an invalid command to the remote shell." } -i $shell_id -re ".*$decimal\r" { if {[info exists expect_out(buffer)]} { verbose "$expect_out(buffer)" exp_continue } } -i $shell_id timeout { perror "Timed out trying to download." } } } timeout { perror "Timed out waiting for response to put command." } } set timeout 10 return $result } dejagnu-1.5.3/lib/libgloss.exp0000644000175000017500000005665012320744410013171 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file was written by Rob Savoye . # this contains a list of gcc options and their respective directories. # Find the pieces of libgloss for testing the GNU development tools # needed to link a set of object files into an executable. # This usually means setting the -L and -B paths correctly. # proc libgloss_link_flags { args } { global target_cpu global srcdir # libgloss doesn't work native if {[isnative]} { return "" } # if we're on a remote host, we can't search for the file, so we can only # use an installed compiler, so we don't add any paths here. if {[is_remote host]} { return "" } set gccpath "[get_multilibs]" # map the target_cpu to the proper libgloss directory. unfortunately, these # directory names are hardcoded into libgloss. switch -glob -- $target_cpu { "sparc86x" { set cpu sparc } "sparclite" { set cpu sparc } "sparclet" { set cpu sparc } "sparc64*" { set cpu sparc } "hppa*" { set cpu pa } "mips*" { set cpu mips } "powerpc*" { set cpu rs6000 } "d10v*" { set cpu libnosys } "xscale*" { set cpu arm } default { set cpu $target_cpu } } set gloss_srcdir "" # look for the libgloss srcdir sp we can find the linker scripts set gloss_srcdir [lookfor_file ${srcdir} libgloss/$cpu] # set the proper paths for gcc if the target subdir exists, else assume we # have no libgloss support for this target. if { $gloss_srcdir == "" } { return "" } if {[file exists [file join $gccpath libgloss $cpu]]} { verbose "Libgloss path is $gccpath/libgloss/$cpu" 2 return "-B$gccpath/libgloss/$cpu/ -L$gccpath/libgloss/$cpu -L$gloss_srcdir" } else { verbose -log "No libgloss support for this target." 2 return "" } } # There aren't any, but we'll be orthogonal here. # proc libgloss_include_flags { args } { return "" } # Find the newlib libraries in the current source tree. # proc newlib_link_flags { args } { global tool_root_dir # libgloss doesn't work native if {[isnative]} { return "" } # if we're on a remote host, we can't search for the file, so we can only # use an installed compiler, so we don't add any paths here. if {[is_remote host]} { return "" } set ld_script_path [lookfor_file ${tool_root_dir} "ld/ldscripts"] if { $ld_script_path != "" } { set result "-L[file dirname $ld_script_path]" } else { set result "" } set gccpath "[get_multilibs]" verbose "Looking for $gccpath/newlib" if {[file exists [file join $gccpath newlib]]} { verbose "Newlib path is $gccpath/newlib" return "$result -B$gccpath/newlib/ -L$gccpath/newlib" } else { verbose "No newlib support for this target" return "$result" } } proc newlib_include_flags { args } { global srcdir if {[isnative]} { return "" } if {[is_remote host]} { return "" } set gccpath "[get_multilibs]" if {[file exists [file join $gccpath newlib]]} { verbose "Newlib path is $gccpath/newlib" set newlib_dir [lookfor_file ${srcdir} newlib/libc/include/assert.h] if { ${newlib_dir} != "" } { set newlib_dir [file dirname ${newlib_dir}] } # Note - we use -isystem rather than -I because newlib contains # system header files. This is especially important for the # limits.h header which makes use of the #include_next directive. # #include_next will generate error messages from GCC if compiling # in strict ANSI mode or if another limits.h header cannot be found. # When it is included via -isystem these things do not happen. return " -isystem $gccpath/newlib/targ-include -isystem ${newlib_dir}" } else { verbose "No newlib support for this target" } } proc libio_include_flags { args } { global srcdir global tool_root_dir if {[is_remote host]} { return "" } set gccpath "[get_multilibs]" if { $gccpath == "" } { set gccpath "$tool_root_dir" } set libio_bin_dir [lookfor_file ${gccpath} libio/_G_config.h] # linux doesn't build _G_config.h and the test above fails, so # we search for iostream.list too. if { $libio_bin_dir == "" } { set libio_bin_dir [lookfor_file ${gccpath} libio/iostream.list] } set libio_src_dir [lookfor_file ${srcdir} libio/Makefile.in] if { $libio_bin_dir != "" && $libio_src_dir != "" } { set libio_src_dir [file dirname ${libio_src_dir}] set libio_bin_dir [file dirname ${libio_bin_dir}] # Note - unlike the newlib_include_flags proc above we use the -I # switch to specify the include paths. This is because these headers # are not system headers, and if -isystem were to be used GCC would # generate an implicit extern "C" { ... } surrounding them. This # will break targets which do not define NO_IMPLICIT_EXTERN_C. return " -I${libio_src_dir} -I${libio_bin_dir}" } else { return "" } } proc libio_link_flags { args } { if {[is_remote host]} { return "" } set gccpath "[get_multilibs]" set libio_dir [lookfor_file ${gccpath} libio/libio.a] if { $libio_dir != "" } { return "-L[file dirname ${libio_dir}]" } else { return "" } } proc g++_include_flags { args } { global srcdir global target_alias if {[is_remote host]} { return "" } set gccpath [get_multilibs] set libio_dir "" set flags "" set dir [lookfor_file ${srcdir} libg++] if { ${dir} != "" } { # See comment in libio_include_flags about using -I. append flags " -I${dir} -I${dir}/src" } set dir [lookfor_file ${srcdir} libstdc++-v3] if { ${dir} != "" } { append flags " -I${dir}/include -I${dir}/include/std -I${dir}/include/c_std -I${dir}/libsupc++" } set dir [lookfor_file ${gccpath} libstdc++-v3] if { ${dir} != "" } { append flags " -I${dir}/include -I${dir}/include/${target_alias}" } set dir [lookfor_file ${srcdir} libstdc++] if { ${dir} != "" } { append flags " -I${dir} -I${dir}/stl" } return "$flags" } proc g++_link_flags { args } { global srcdir global ld_library_path set gccpath [get_multilibs] set libio_dir "" set flags "" set ld_library_path "." if { $gccpath != "" } { if {[file exists [file join ${gccpath} lib libstdc++.a]]} { append ld_library_path ":${gccpath}/lib" } if {[file exists [file join ${gccpath} libg++ libg++.a]]} { append flags "-L${gccpath}/libg++ " append ld_library_path ":${gccpath}/libg++" } if {[file exists [file join ${gccpath} libstdc++ libstdc++.a]]} { append flags "-L${gccpath}/libstdc++ " append ld_library_path ":${gccpath}/libstdc++" } if {[file exists [file join ${gccpath} libstdc++-v3 src .libs libstdc++.a]]} { append flags "-L${gccpath}/libstdc++-v3/src/.libs " append ld_library_path ":${gccpath}/libstdc++-v3/src/.libs" } if {[file exists [file join ${gccpath} libiberty libiberty.a]]} { append flags "-L${gccpath}/libiberty " } if {[file exists [file join ${gccpath} librx librx.a]]} { append flags "-L${gccpath}/librx " } } else { global tool_root_dir set libgpp [lookfor_file ${tool_root_dir} libg++] if { $libgpp != "" } { append flags "-L${libgpp} " append ld_library_path ":${libgpp}" } set libstdcpp [lookfor_file ${tool_root_dir} libstdc++] if { $libstdcpp != "" } { append flags "-L${libstdcpp} " append ld_library_path ":${libstdcpp}" } set libiberty [lookfor_file ${tool_root_dir} libiberty] if { $libiberty != "" } { append flags "-L${libiberty} " } set librx [lookfor_file ${tool_root_dir} librx] if { $librx != "" } { append flags "-L${librx} " } } return "$flags" } proc libstdc++_include_flags { args } { global srcdir global target_alias if {[is_remote host]} { return "" } set gccpath [get_multilibs] set libio_dir "" set flags "" set dir [lookfor_file ${srcdir} libstdc++-v3] if { ${dir} != "" } { # See comment in libio_include_flags about using -I. append flags " -I${dir}/include -I${dir}/include/std -I${dir}/include/c_std -I${dir}/libsupc++" } set gccpath [get_multilibs] set dir [lookfor_file ${gccpath} libstdc++-v3] if { ${dir} != "" } { append flags " -I${dir}/include -I${dir}/include/${target_alias}" } set dir [lookfor_file ${srcdir} libstdc++] if { ${dir} != "" } { append flags " -I${dir} -I${dir}/stl" } return "$flags" } proc libstdc++_link_flags { args } { global srcdir global ld_library_path set gccpath [get_multilibs] set libio_dir "" set flags "" if { $gccpath != "" } { if {[file exists [file join ${gccpath} libstdc++ libstdc++.a]]} { append flags "-L${gccpath}/libstdc++ " append ld_library_path ":${gccpath}/libstdc++" } if {[file exists [file join ${gccpath} libiberty libiberty.a]]} { append flags "-L${gccpath}/libiberty " } if {[file exists [file join ${gccpath} librx librx.a]]} { append flags "-L${gccpath}/librx " } } else { global tool_root_dir set libstdcpp [lookfor_file ${tool_root_dir} libstdc++] if { $libstdcpp != "" } { append flags "-L${libstdcpp} " append ld_library_path ":${libstdcpp}" } set libiberty [lookfor_file ${tool_root_dir} libiberty] if { $libiberty != "" } { append flags "-L${libiberty} " } set librx [lookfor_file ${tool_root_dir} librx] if { $librx != "" } { append flags "-L${librx} " } } return "$flags" } # Get the list of directories and -m options for gcc. This is kinda bogus that # generic testing software needs support for gcc hardwired in, but to make # testing the GNU tools work right, there didn't seem to be any other way. # proc get_multilibs { args } { global target_alias global board global board_info # if we're on a remote host, we can't search for the file, so we can only # use an installed compiler, so we don't add any paths here. if {[is_remote host]} { return "" } if {[info exists board]} { set target_board $board } else { set target_board [target_info name] } if { [llength $args] == 0 } { if {[board_info $target_board exists multitop]} { return "[board_info $target_board multitop]" } set board_info($target_board,multitop) "" } if { [board_info $target_board exists compiler] } { set compiler [board_info $target_board compiler] } else { set compiler [find_gcc] } if { $compiler == "" } { return "" } foreach x "$compiler" { if {[regexp "^-B" "$x"]} { regsub "^-B" "$x" "" comp_base_dir set comp_base_dir [file dirname $comp_base_dir] break } } regexp "/.* " $compiler compiler set compiler [string trimright $compiler " "] verbose "compiler is $compiler" if { [which $compiler] == 0 } { return "" } if { [llength $args] > 0 } { set mopts [lindex $args 0] } else { if { [board_info $target_board exists multilib_flags] } { set mopts [board_info $target_board multilib_flags] } else { set mopts "" } } set default_multilib [exec $compiler --print-multi-lib] set default_multilib [lindex $default_multilib 0] set extra [string trimleft $default_multilib ".;@@"] # extract the options and their directory names as know by gcc foreach i "[exec $compiler --print-multi-lib]" { if {$extra != ""} { # string trimright would do the wrong thing if we included # the leading @@ in $extra set i [string trimright $i $extra] set i [string trimright $i "@@"] } set opts "" set dir "" regexp -- "\[a-z0-9=/\.-\]*;" $i dir set dir [string trimright $dir "\;@"] regexp -- "\;@*\[\@a-zA-Z0-9=/\.-\]*" $i opts set opts [split [string trimleft $opts "\;@@"] "@@"] lappend multilibs "$dir {$opts }" # If args contains arguments don't use the first one as # multilib option unless it qualifies as a multilib option. if { [llength $args] > 0 } { set override_opt [lindex $args 0] foreach j $opts { if {$j == $override_opt} { set mopts $override_opt } } } } regsub "^-" $mopts "" moptions regsub -all " -" $moptions " " dirty_moptions set moptions "" foreach x [split $dirty_moptions " "] { if { $x != "" && [lsearch -exact $moptions $x] < 0 } { lappend moptions $x } } if {![info exists comp_base_dir]} { set comp_base_dir [file dirname [file dirname [file dirname [file dirname [file dirname [exec $compiler --print-prog-name=cc1]]]]]] } # search for the top level multilib directory set multitop [lookfor_file "${comp_base_dir}" "${target_alias}"] if { $multitop == "" } { set multitop [lookfor_file "${comp_base_dir}" "libraries"] if { $multitop == "" } { set multitop "[lookfor_file ${comp_base_dir} gcc/xgcc]" if { $multitop != "" } { set multitop [file dirname [file dirname $multitop]] } else { return "" } } } set gccpath [eval exec "$compiler" --print-multi-directory $mopts] set gccpath [lindex $gccpath 0] if { $gccpath != "" } { verbose "GCC path is $gccpath" if { [llength $args] == 0 } { set board_info($target_board,multitop) "$multitop/$gccpath" } return "$multitop/$gccpath" } # extract the MULTILIB_MATCHES from dumpspecs set multimatches "" set lines [split [exec $compiler -dumpspecs] "\n"] for {set i 0} {$i <= [llength $lines] - 1} {incr i 1} { if {"*multilib_matches:" == "[lindex $lines $i]"} { set multimatches [lindex $lines [expr {$i + 1}]] break } } # if we find some if {$multimatches != ""} { # Split it into a list of pairs. If an moptions are the first # of a pair, then replace it with the second. If an moption # is not in multimatches, we assume it's not a multilib option set splitmatches [split $multimatches ";"] set multimatches "" foreach i $splitmatches { lappend multimatches [split $i " "] } verbose "multimatches: $multimatches" 3 verbose "options before multimatches: $moptions" 3 set toptions $moptions set moptions "" foreach i $toptions { foreach j $multimatches { verbose "comparing [lindex $j 0] == $i" 3 if {[lindex $j 0] == $i} { lappend moptions [lindex $j 1] } } } verbose "options after multimatches: $moptions" 3 } # make a list of -m options from the various compiler config variables set gccpath "" # compare the lists of gcc options with the list of support multilibs verbose "Supported multilibs are: $multilibs" 3 set best 0 foreach i "$multilibs" { set hits 0 set opts [lindex $i 1] if { [llength $opts] <= [llength $moptions] } { foreach j "$moptions" { # see if all the -m options match any of the multilibs verbose "Looking in $i for $j" 3 if { [lsearch -exact $opts $j] >= 0 } { incr hits } } if { $hits > $best } { verbose "[lindex $i 0] is better, using as gcc path" 2 set gccpath "[lindex $i 0]" set best $hits } } } if {![info exists multitop]} { return "" } verbose "gccpath is $gccpath" 3 if {[file exists [file join $multitop $gccpath]]} { verbose "GCC path is $multitop/$gccpath" 3 if { [llength $args] == 0 } { set board_info($target_board,multitop) "$multitop/$gccpath" } return "$multitop/$gccpath" } else { verbose "GCC path is $multitop" 3 if { [llength $args] == 0 } { set board_info($target_board,multitop) "$multitop" } return "$multitop" } } proc find_binutils_prog { name } { global tool_root_dir if {![is_remote host]} { set file [lookfor_file $tool_root_dir $name] if { $file == "" } { set file [lookfor_file $tool_root_dir ${name}-new] } if { $file == "" } { set file [lookfor_file $tool_root_dir binutils/$name] } if { $file == "" } { set file [lookfor_file $tool_root_dir binutils/${name}-new] } if { $file != "" } { set NAME "$file" } else { set NAME [transform $name] } } else { set NAME [transform $name] } return $NAME } proc find_gcc {} { global tool_root_dir if {![is_remote host]} { set file [lookfor_file $tool_root_dir xgcc] if { $file == "" } { set file [lookfor_file $tool_root_dir gcc/xgcc] } if { $file != "" } { set CC "$file -B[file dirname $file]/" } else { set CC [transform gcc] } } else { set CC [transform gcc] } return $CC } proc find_gcj {} { global tool_root_dir if {![is_remote host]} { set file [lookfor_file $tool_root_dir gcj] if { $file == "" } { set file [lookfor_file $tool_root_dir gcc/gcj] } if { $file != "" } { set CC "$file -B[file dirname $file]/" } else { set CC [transform gcj] } } else { set CC [transform gcj] } return $CC } proc find_g++ {} { global tool_root_dir if {![is_remote host]} { set file [lookfor_file $tool_root_dir g++] if { $file == "" } { set file [lookfor_file $tool_root_dir gcc/g++] } if { $file != "" } { set CC "$file -B[file dirname $file]/" } else { set CC [transform g++] } } else { set CC [transform g++] } return $CC } proc find_g77 {} { global tool_root_dir if {![is_remote host]} { set file [lookfor_file $tool_root_dir g77] if { $file == "" } { set file [lookfor_file $tool_root_dir gcc/g77] } if { $file != "" } { set CC "$file -B[file dirname $file]/" } else { set CC [transform g77] } } else { set CC [transform g77] } return $CC } proc find_gfortran {} { global tool_root_dir if {![is_remote host]} { set file [lookfor_file $tool_root_dir gfortran] if { $file == "" } { set file [lookfor_file $tool_root_dir gcc/gfortran] } if { $file != "" } { set CC "$file -B[file dirname $file]/" } else { set CC [transform gfortran] } } else { set CC [transform gfortran] } return $CC } proc find_gnatmake {} { global tool_root_dir if {![is_remote host]} { set file [lookfor_file $tool_root_dir gnatmake] if { $file == "" } { set file [lookfor_file $tool_root_dir gcc/gnatmake] } if { $file != "" } { set root [file dirname $file] set CC "$file -I$root/ada/rts --GCC=$root/xgcc --GNATBIND=$root/gnatbind --GNATLINK=$root/gnatlink -cargs -B$root -largs --GCC=$root/xgcc -B$root -margs" } else { set CC [transform gnatmake] } } else { set CC [transform gnatmake] } return $CC } proc find_nm {} { global tool_root_dir set NM "" if {![is_remote host]} { set NM [lookfor_file $tool_root_dir nm-new] if {$NM == ""} { set NM [lookfor_file $tool_root_dir binutils/nm-new] } } if { $NM == ""} { set NM [transform nm] } return $NM } proc process_multilib_options { args } { global board global board_variant_list global is_gdb_remote set is_gdb_remote 0 if {[board_info $board exists multilib_flags]} { return } eval add_multilib_option $args set multilib_flags "" foreach x $board_variant_list { regsub -all "^\[ \t\]*" "$x" "" x regsub -all "\[ \t\]*$" "$x" "" x if { $x == "" } { continue } switch -glob -- $x { "aout" { set_board_info obj_format "a.out" } "elf" { set_board_info obj_format "elf" } "pe" { set_board_info obj_format "pe" } "ecoff" { set_board_info obj_format "ecoff" } "stabs" { set_board_info debug_flags "-gstabs" } "dwarf2" { set_board_info debug_flags "-gdwarf2" } "gdb:*=*" { regsub "^gdb:\[^=\]*=(.*)$" "$x" "\\1" value regsub "^gdb:(\[^=\]*)=.*$" "$x" "\\1" variable set_board_info $variable "$value" } "gdb*remote" { set is_gdb_remote 1 } "little*endian" - "el" - "EL" { append multilib_flags " -EL" } "big*endian" - "eb" - "EB" { append multilib_flags " -EB" } "soft*float" { append multilib_flags " -msoft-float" } "-*" { append multilib_flags " $x" } default { append multilib_flags " -m$x" } } } set_board_info multilib_flags $multilib_flags } proc add_multilib_option { args } { global board_variant_list if {![info exists board_variant_list]} { set board_variant_list "" } set board_variant_list [concat $args $board_variant_list] } proc find_gas { } { global tool_root_dir set AS "" if {![is_remote host]} { set AS [lookfor_file $tool_root_dir as-new] if { $AS == "" } { set AS [lookfor_file $tool_root_dir gas/as-new] } } if { $AS == "" } { set AS [transform as] } return $AS } proc find_ld { } { global tool_root_dir set LD "" if {![is_remote host]} { set LD [lookfor_file $tool_root_dir ld-new] if { $LD == "" } { set LD [lookfor_file $tool_root_dir ld/ld-new] } } if { $LD == "" } { set LD [transform ld] } return $LD } proc build_wrapper { gluefile } { global libdir global tool if {[target_info exists wrap_m68k_aout]} { set flags "additional_flags=-DWRAP_M68K_AOUT" set result "" } elseif {[target_info exists uses_underscores]} { set flags "additional_flags=-DUNDERSCORES" set result "-Wl,-wrap,_exit -Wl,-wrap,__exit -Wl,-wrap,_main -Wl,-wrap,_abort" } else { set flags "" if {[target_info exists is_vxworks]} { set flags "additional_flags=-DVXWORKS" set result "-Wl,-wrap,exit -Wl,-wrap,_exit -Wl,-wrap,main -Wl,-wrap,abort" } else { set result "-Wl,-wrap,exit -Wl,-wrap,_exit -Wl,-wrap,main -Wl,-wrap,abort" } } if {[target_info exists wrap_compile_flags]} { lappend flags "additional_flags=[target_info wrap_compile_flags]" } if { [target_compile ${libdir}/testglue.c ${gluefile} object $flags] == "" } { set gluefile [remote_download host ${gluefile} ${tool}_tg.o] return [list $gluefile $result] } else { return "" } } proc winsup_include_flags { args } { global srcdir if {[isnative]} { return "" } if {[is_remote host]} { return "" } set gccpath "[get_multilibs]" if {[file exists [file join $gccpath winsup]]} { verbose "Winsup path is $gccpath/winsup" set winsup_dir [lookfor_file ${srcdir} winsup/include/windows.h] if { ${winsup_dir} != "" } { set winsup_dir [file dirname ${winsup_dir}] # See comment in libio_include_flags about using -I. return " -I${winsup_dir}" } } verbose "No winsup support for this target" } # Find the winsup libraries in the current source tree. # proc winsup_link_flags { args } { # libgloss doesn't work native if {[isnative]} { return "" } # if we're on a remote host, we can't search for the file, so we can only # use an installed compiler, so we don't add any paths here. if {[is_remote host]} { return "" } set gccpath "[get_multilibs]" verbose "Looking for $gccpath/winsup" if {[file exists [file join $gccpath winsup]]} { verbose "Winsup path is $gccpath/newlib" return "-B$gccpath/winsup/ -L$gccpath/winsup" } else { verbose "No winsup support for this target" return "" } } dejagnu-1.5.3/lib/standard.exp0000644000175000017500000000260412320744410013141 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # A set of standard functions for tools. Calls the target-specific # versions. proc ${tool}_load { program args } { if { [llength $args] > 0 } { set program_args [lindex $args 0] } else { set program_args "" } if { [llength $args] > 1 } { set input_file [lindex $args 1] } else { set input_file "" } return [remote_load target $program $program_args $input_file] } proc ${tool}_compile { srcfile destfile compile_type options } { target_compile $srcfile $destfile $compile_type $options } dejagnu-1.5.3/lib/target.exp0000644000175000017500000006341212473541167012650 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file was written by Rob Savoye and # extensively modified by Bob Manson . # A hairy pattern to recognize text. set text "\[- A-Za-z0-9\.\;\"\_\:\'\`\(\)\!\#\=\+\?\&\*]" # This is a collection of support procs for the target data # structures. We use a named array, since Tcl has no real data # structures. Here's the special index words for the array: # Required fields are: # 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. # Optional fields are: # ldflags - the flags required to produce a fully linked executable. # config - the target canonical for this target. This is a regexp # as passed to istarget or isnative. # cflags - the flags required to produce an object file from a # source file. # connect - the connectmode for this target. This is for both IP and # serial connections. # hostname - the hostname of the target. This is for TCP/IP based # connections, and is also used for versions of tip that # use /etc/remote. # serial - the serial port. This is typically /dev/tty? or com?:. # baud - the baud rate for a serial port connection. # netport - the IP port. # x10 - parameters for the x10 controller (used to reboot) # fileid - the fileid or spawn id of of the connection. # prompt - a regexp for matching the prompt. # ioport - the port for I/O on dual port systems. # # there are three main arrays, indexed in with "target", "build", and "host". # all other targets are indexed with a name usually based on the linker script # like "idp", or "ex93x.ld". # # Set the target connection. # proc push_target { name } { global target_abbrev pop_config target push_config target $name } # Set the host connnection. # proc push_host { name } { pop_config host push_config host $name } # Set the build connnection. # proc push_build { name } { pop_config build push_config build $name } # Set the config for the current host or target connection. # proc push_config { type name } { global target_info verbose "pushing config for $type, name is $name" if {[info exists target_info($type,name)]} { if { $target_info($type,name) == $name } { error "pushing config for $type, '$name' twice" } } set target_info($type,name) $name } # Set the current connection for target or host. # proc pop_config { type } { global target_info if {[info exists target_info(${type},name)]} { unset target_info(${type},name) } } # Unset the target connection. # proc pop_target { } { pop_config target } # Unset the host connection. # proc pop_host { } { pop_config host } # Remove extraneous warnings from TEXT. # # An example is: # ld.so: warning: /usr/lib/libc.so.1.8.1 has older revision than expected 9 # proc prune_warnings { text } { global host_triplet # remove the \r part of "\r\n" so we don't break all the patterns # we want to match. regsub -all -- "\r" $text "" text # This is from sun4's. Do it for all machines for now. # The "\\1" is to try to preserve a "\n" but only if necessary. if {[ishost "sparc-*-sunos*"]} { regsub -all "(^|\n)(ld.so: warning:\[^\n\]*\n?)+" $text "\\1" text } # See Brendan for the raison d'etre of this one. # http://en.wikipedia.org/wiki/Brendan_Kehoe if {[ishost "alpha*-*-*"]} { regsub -all "(^|\n)(/usr/(ucb|bin)/ld.*without exceptions was\[^\n\]+\n?)" $text "\\1" text } if {[ishost "hppa*-*-hpux*"]} { # Ignore the compiler's warnings about PA incompatibility. regsub -all "(^|\n)\[^\n\]*PA 2.0 object file \[^\n\]* was detected. The linked output may not run on a PA 1.x system." $text "" text regsub -all "(^|\n)\[^\n\]*PA 2.0 object file \[^\n\]* was detected. The linked output may not run on a PA 1.x system." $text "" text # And the linker's +vcompatwarnings verbage. regsub -all "(^|\n)\[^\n\]*Linker features were used that may not be supported\[^\n\]*.\[^\n\]*." $text "" text # Ignore these warnings, which the HP aCC compiler seems to # generate on HP-UX 10.30 and 11.0. (Something is probably # wrong with some system headers, but still...) # # This particular warning always is given with a line of warning # text, followed by a source line, followed by a line with "^^^" # underlining an offending symbol name. Here we slurp up the # warning text and the next two lines, assuming that they are # the source line and underline chars. # regsub -all "Warning .*The linkage directive is ignored for an object or function declared static..\[^\n\]*.\[^\n\]*." $text "" text # Ignore these warnings, which I often see from the ANSI C # compiler installed on HP-UX 11.0 machines. (Something is # probably wrong with an installation, or perhaps NLS isn't # quite healthy yet on 11.0. In either case, it's easier to # "fix" this nit here, than it is to track down & fix the # root cause.) # # This particular warning always is given with a line of warning # text, followed by line that says "Using internal messages". # regsub -all "Warning: Unable to open pxdb message catalog.*" $text "" text regsub -all ".* Using internal messages.*" $text "" text # Another form of the "unable to find message catalog" warning. # regsub -all "cpp: warning .*Possibly incorrect message catalog." $text "" text # Another odd warning on 11.0. # regsub -all "aCC .assigner.: Warning .*Could not find library for -l.*" $text "" text # Oh heck, just keep adding 'em here... # regsub -all "aCC .assigner.: Warning .*Could not satisfy instantiation request for \[^\n\]* contained in\[^\n\]*\n\t/lib/pa20_64/lib\[a-zA-Z0-9\]*.sl" $text "" text # Remove the lines that are output by the HP F77 compiler to # indicate the functions that are being compiled. upvar compiler_type compiler_type if { [info exists compiler_type] && $compiler_type == "f77" } { regsub -all "\[ \ta-zA-Z_0-9\./\]*:\[\r\n\]+" $text "" text } # Ignore the warnings about unknown options regsub -all ".*warning \[0-9\]+: Unknown option.*ignored.*" $text "" text } # Ignore these. regsub -all "(^|\n)\[^\n\]*linker input file unused since linking not done" $text "" text regsub -all "(^|\n)\[^\n\]*file path prefix \[^\n\]* never used" $text "" text # This is from sun4's. Do it for all machines for now. # The "\\1" is to try to preserve a "\n" but only if necessary. regsub -all "(^|\n)(ld.so: warning:\[^\n\]*\n?)+" $text "\\1" text # This happens when compiling on Alpha OSF/1 with cc -g -O. regsub -all "(^|\n)(\n*uopt: Warning: file not optimized; use -g3 if both optimization and debug wanted\n?)+" $text "\\1" text # This happens when compiling on Alpha OSF using gas. regsub -all "(^|\n)(/usr/.*/ld:\nWarning: Linking some objects which contain exception information sections\n\tand some which do not. This may cause fatal runtime exception handling\n\tproblems\[^\n\]*\n?)+" $text "\\1" text # This happens on SunOS with cc -g -O. regsub -all "(^|\n)(cc: Warning: -O conflicts with -g. -O turned off.\n?)+" $text "\\1" text # This happens when assembling code with the native HP assembler regsub -all "(^|\n)(as:\[^\n\]*err#13.\n .warning.\[^\n\]*\n?)+" $text "\\1" text # When using the HP assembler, -g isn't supported. regsub -all "(^|\n)(cc1: warning: -g is only supported when using GAS on this processor\[^\n\]*\ncc1: warning:\[^\n\]*\n?)+" $text "\\1" text regsub -all "(^|\n)(cc1plus: warning: -g is only supported when using GAS on this processor\[^\n\]*\ncc1plus: warning:\[^\n\]*\n?)+" $text "\\1" text # This happens when testing across NFS. regsub -all "(^|\n)((NFS|nfs) server \[^\n\]* not responding\[^\n\]*\n?)+" $text "\\1" text regsub -all "(^|\n)((NFS|nfs) server \[^\n\]* (ok|is alive again)\[^\n\]*\n?)+" $text "\\1" text # This happens when testing across NFS on osf4. regsub -all "(^|\n)(NFS3 server \[^\n\]* not responding still trying\[^\n\]*\n?)+" $text "\\1" text regsub -all "(^|\n)(NFS3 server \[^\n\]* ok\[^\n\]*\n?)+" $text "\\1" text # When using the IRIX 6 o32 assembler, -g isn't supported regsub -all "(^|\n)(cc1: warning: `-g' not supported by this configuration of GCC\[^\n\]*\n?)+" $text "\\1" text regsub -all "(^|\n)(cc1plus: warning: `-g' not supported by this configuration of GCC\[^\n\]*\n?)+" $text "\\1" text regsub -all "(^|\n)(cc1: warning: -mabi=32 does not support -g\[^\n\]*\n?)+" $text "\\1" text regsub -all "(^|\n)(cc1plus: warning: -mabi=32 does not support -g\[^\n\]*\n?)+" $text "\\1" text # This happens with the o32 assembler on IRIX 6. regsub -all "(^|\n)(as: Warning: -O3 is not supported for assembly compiles for ucode compilers; changing to -O2.\n?)+" $text "\\1" text # This happens when using g++ on a DWARF system. regsub -all "(^|\n)(cc1plus: warning: -g option not supported for C\\+\\+ on systems using the DWARF debugging format\n?)+" $text "\\1" text # This is from sun4's. Do it for all machines for now. # The "\\1" is to try to preserve a "\n" but only if necessary. regsub -all "(^|\n)(ld.so: warning:\[^\n\]*\n?)+" $text "\\1" text # See Brendan for the raison d'etre of this one. # http://en.wikipedia.org/wiki/Brendan_Kehoe if {[string match "alpha*-*-*" $host_triplet]} { regsub -all "(^|\n)(/usr/(ucb|bin)/ld.*without exceptions was\[^\n\]+\n?)" $text "\\1" text } # Don't pay attention to the AIX4 linker warnings. regsub -all "(^|\n)(ld:.*WARNING: Duplicate.*ld:.*Use the -bload\[^\n\]*\n?)" $text "\\1" text # Or the IRIX 6 ones. regsub -all "(^|\n)(ld(|32|64): WARNING \[^\n\]*\n?)+" $text "\\1" text regsub -all "(^|\n)(ld(|32|64): Giving up.*Use -wall\[^\n\]*\n?)+" $text "\\1" text # Or the NetBSD ones. regsub -all "(^|\n)(\[^\n\]*: In function\[^\n\]*\n\[^\n\]\[^\n\]*warning: this program uses \[^\n\]*)" $text "\\1" text regsub -all "(^|\n)(\[^\n\]*: In function\[^\n\]*\n\[^\n\]\[^\n\]*warning: reference to compatibility \[^\n\]*)" $text "\\1" text regsub -all "(^|\n)(\[^\n\]*:\[0-9\]+: warning: \[^\n\]* possibly used unsafely, use \[^\n\]*\n?)" $text "\\1" text regsub -all "(^|\n)(\[^\n\]*: warning: reference to compatibility glob\[^\n\]*\n?)" $text "\\1" text # Or the OpenBSD ones. regsub -all "(^|\n)(\[^\n\]*: In function\[^\n\]*\n\[^\n\]\[^\n\]*warning: \[^\n\]* is (often|almost always) misused, please use \[^\n\]*\n?)" $text "\\1" text regsub -all "(^|\n)(\[^\n\]*: warning: \[^\n\]* is (often|almost always) misused, please use \[^\n\]*\n?)" $text "\\1" text # GNU ld warns about functions marked as dangerous in GNU libc. regsub -all "(^|\n)\[^\n\]*: In function\[^\n\]*\n\[^\n\]\[^\n\]*is dangerous\[^\n\]*" $text "" text regsub -all "(^|\n)\[^\n\]*: In function\[^\n\]*\n\[^\n\]\[^\n\]*the use of \[^\n\]* is dangerous, better use \[^\n\]*" $text "" text regsub -all "(^|\n)\[^\n\]*is dangerous\[^\n\]*" $text "" text # Libgloss libnosys defines functions that warn when linked in regsub -all "(^|\n)\[^\n\]*: In function\[^\n\]*\n\[^\n\]\[^\n\]*is not implemented and will always fail\[^\n\]*" $text "" text regsub -all "(^|\n)\[^\n\]*is not implemented and will always fail\[^\n\]*" $text "" text # libstdc++-v3 tests can emit cpplib warnings due to duplicate -isystem / -I flags regsub -all "(^|\n)\[^\n\]*: warning: changing search order for system directory\[^\n\]*" $text "" text regsub -all "(^|\n)\[^\n\]*: warning: as it has already been specified\[^\n\]*" $text "" text # Cygwin cc1 warns about -fpic and -fPIC regsub -all "(^|\n)\[^\n\]*: warning: -f(pic|PIC) ignored for target \[^\n\]*" $text "" text # Ignore linker warning when searching 64bit libraries in /lib. regsub -all "(^|\n)\[^\n\]*: skipping incompatible \[^\n\]* when searching for \[^\n\]*" $text "" text # It might be tempting to get carried away and delete blank lines, etc. # Just delete *exactly* what we're ask to, and that's it. return $text } # Invoke the compiler. This gets interesting cause the compiler may # not be on the same machine we're running DejaGnu on. # proc target_compile {source destfile type options} { set target [target_info name] if { [info proc ${target}_compile] != "" } { return [${target}_compile $source $destfile $type $options] } else { return [default_target_compile $source $destfile $type $options] } } proc default_target_compile {source destfile type options} { global target_triplet global tool_root_dir global CFLAGS_FOR_TARGET global compiler_flags if { $destfile == "" && $type != "preprocess" && $type != "none" } { error "Must supply an output filename for the compile to default_target_compile" } set add_flags "" set libs "" set compiler_type "c" set compiler "" set ldflags "" set dest [target_info name] if {[info exists CFLAGS_FOR_TARGET]} { append add_flags " $CFLAGS_FOR_TARGET" } if {[info exists target_info(host,name)]} { set host [host_info name] } else { set host "unix" } foreach i $options { if { $i == "ada" } { set compiler_type "ada" if {[board_info $dest exists adaflags]} { append add_flags " [target_info adaflags]" } if {[board_info $dest exists gnatmake]} { set compiler [target_info gnatmake] } else { set compiler [find_gnatmake] } } if { $i == "c++" } { set compiler_type "c++" if {[board_info $dest exists cxxflags]} { append add_flags " [target_info cxxflags]" } append add_flags " [g++_include_flags]" if {[board_info $dest exists c++compiler]} { set compiler [target_info c++compiler] } else { set compiler [find_g++] } } if { $i == "f77" } { set compiler_type "f77" if {[board_info $dest exists f77flags]} { append add_flags " [target_info f77flags]" } if {[board_info $dest exists f77compiler]} { set compiler [target_info f77compiler] } else { set compiler [find_g77] } } if { $i == "f90" } { set compiler_type "f90" if {[board_info $dest exists f90flags]} { append add_flags " [target_info f90flags]" } if {[board_info $dest exists f90compiler]} { set compiler [target_info f90compiler] } else { set compiler [find_gfortran] } } if {[regexp "^dest=" $i]} { regsub "^dest=" $i "" tmp if {[board_info $tmp exists name]} { set dest [board_info $tmp name] } else { set dest $tmp } } if {[regexp "^compiler=" $i]} { regsub "^compiler=" $i "" tmp set compiler $tmp } if {[regexp "^additional_flags=" $i]} { regsub "^additional_flags=" $i "" tmp append add_flags " $tmp" } if {[regexp "^ldflags=" $i]} { regsub "^ldflags=" $i "" tmp append ldflags " $tmp" } if {[regexp "^libs=" $i]} { regsub "^libs=" $i "" tmp append libs " $tmp" } if {[regexp "^incdir=" $i]} { regsub "^incdir=" $i "-I" tmp append add_flags " $tmp" } if {[regexp "^libdir=" $i]} { regsub "^libdir=" $i "-L" tmp append add_flags " $tmp" } if {[regexp "^ldscript=" $i]} { regsub "^ldscript=" $i "" ldscript } if {[regexp "^redirect=" $i]} { regsub "^redirect=" $i "" redirect } if {[regexp "^optimize=" $i]} { regsub "^optimize=" $i "" optimize } if {[regexp "^timeout=" $i]} { regsub "^timeout=" $i "" timeout } } if {[board_info $host exists cflags_for_target]} { append add_flags " [board_info $host cflags_for_target]" } global CC_FOR_TARGET global CXX_FOR_TARGET global F77_FOR_TARGET global F90_FOR_TARGET global GNATMAKE_FOR_TARGET if {[info exists GNATMAKE_FOR_TARGET]} { if { $compiler_type == "ada" } { set compiler $GNATMAKE_FOR_TARGET } } if {[info exists CC_FOR_TARGET]} { if { $compiler == "" } { set compiler $CC_FOR_TARGET } } if {[info exists CXX_FOR_TARGET]} { if { $compiler_type == "c++" } { set compiler $CXX_FOR_TARGET } } if {[info exists F77_FOR_TARGET]} { if { $compiler_type == "f77" } { set compiler $F77_FOR_TARGET } } if {[info exists F90_FOR_TARGET]} { if { $compiler_type == "f90" } { set compiler $F90_FOR_TARGET } } if { $compiler == "" } { set compiler [board_info $dest compiler] if { $compiler == "" } { return "default_target_compile: No compiler to compile with" } } if {![is_remote host]} { if { [which $compiler] == 0 } { return "default_target_compile: Can't find $compiler." } } if {$type == "object"} { append add_flags " -c" } if { $type == "preprocess" } { append add_flags " -E" } if { $type == "assembly" } { append add_flags " -S" } if {[board_info $dest exists cflags]} { append add_flags " [board_info $dest cflags]" } if { $type == "executable" } { if {[board_info $dest exists ldflags]} { append add_flags " [board_info $dest ldflags]" } if { $compiler_type == "c++" } { append add_flags " [g++_link_flags]" } if {[isnative]} { # This is a lose. catch "glob -nocomplain $tool_root_dir/libstdc++/libstdc++.so* $tool_root_dir/libstdc++/libstdc++.sl" tmp if { ${tmp} != "" } { if {[regexp ".*solaris2.*" $target_triplet]} { # Solaris 2 append add_flags " -R$tool_root_dir/libstdc++" } elseif {[regexp ".*(osf|irix5|linux).*" $target_triplet]} { # OSF/1 or IRIX 5 append add_flags " -Wl,-rpath,$tool_root_dir/libstdc++" } elseif {[regexp ".*hppa.*" $target_triplet]} { # HP-UX append add_flags " -Wl,-a,shared_archive" } } } } if {![info exists ldscript]} { set ldscript [board_info $dest ldscript] } foreach i $options { if { $i == "debug" } { if {[board_info $dest exists debug_flags]} { append add_flags " [board_info $dest debug_flags]" } else { append add_flags " -g" } } } if {[info exists optimize]} { append add_flags " $optimize" } if { $type == "executable" } { append add_flags " $ldflags" foreach x $libs { if {[file exists $x]} { append source " $x" } else { append add_flags " $x" } } if {[board_info $dest exists libs]} { append add_flags " [board_info $dest libs]" } # This probably isn't such a good idea, but it avoids nasty # hackiness in the testsuites. # The math library must be linked in before the C library. The C # library is linked in by the linker script, so this must be before # the linker script. if {[board_info $dest exists mathlib]} { append add_flags " [board_info $dest mathlib]" } else { append add_flags " -lm" } # This must be added here. append add_flags " $ldscript" if {[board_info $dest exists remote_link]} { # Relink option. append add_flags " -Wl,-r" } if {[board_info $dest exists output_format]} { append add_flags " -Wl,-oformat,[board_info $dest output_format]" } } if {[board_info $dest exists multilib_flags]} { set add_flags "[board_info $dest multilib_flags] $add_flags" } verbose "doing compile" set sources "" if {[is_remote host]} { foreach x $source { set file [remote_download host $x] if { $file == "" } { warning "Unable to download $x to host." return "Unable to download $x to host." } else { append sources " $file" } } } else { set sources $source } if {[is_remote host]} { append add_flags " -o a.out" remote_file host delete a.out } else { if { $destfile != "" } { append add_flags " -o $destfile" } } # This is obscure: we put SOURCES at the end when building an # object, because otherwise, in some situations, libtool will # become confused about the name of the actual source file. if {$type == "object"} { set opts "$add_flags $sources" } else { set opts "$sources $add_flags" } if {[is_remote host]} { if {[host_info exists use_at]} { set fid [open "atfile" "w"] puts $fid "$opts" close $fid set opts "@[remote_download host atfile]" remote_file build delete atfile } } verbose "Invoking the compiler as $compiler $opts" 2 if {[info exists redirect]} { verbose "Redirecting output to $redirect" 2 set status [remote_exec host "$compiler $opts" "" "" $redirect] } else { if {[info exists timeout]} { verbose "Setting timeout to $timeout" 2 set status [remote_exec host "$compiler $opts" "" "" "" $timeout] } else { set status [remote_exec host "$compiler $opts"] } } set compiler_flags $opts if {[is_remote host]} { remote_upload host a.out $destfile remote_file host delete a.out } set comp_output [prune_warnings [lindex $status 1]] regsub "^\[\r\n\]+" $comp_output "" comp_output if { [lindex $status 0] != 0 } { verbose -log "compiler exited with status [lindex $status 0]" } if { [lindex $status 1] != "" } { verbose -log "output is:\n[lindex $status 1]" 2 } if { [lindex $status 0] != 0 && "${comp_output}" == "" } { set comp_output "exit status is [lindex $status 0]" } return ${comp_output} } proc reboot_target { } { set result [remote_reboot target] puts "REBOOT_TARGET: \"$result\"" return ${result} } # Invoke this if you really want as to be called directly, rather than # calling the compiler. FLAGS are any additional flags to pass to the # assembler. # proc target_assemble { source destfile flags } { return [default_target_assemble $source $destfile $flags] } proc default_target_assemble { source destfile flags } { global AS_FOR_TARGET global ASFLAGS_FOR_TARGET if {[info exists AS_FOR_TARGET]} { set AS "$AS_FOR_TARGET" } else { if {![board_info target exists assembler]} { set AS [find_gas] } else { set AS [board_info target assembler] } } if {[info exists ASFLAGS_FOR_TARGET]} { append flags " $ASFLAGS_FOR_TARGET" } if {[is_remote host]} { set source [remote_download host $source] set dest "a.out" } else { set dest $destfile } set status [remote_exec host "$AS $source $flags -o $dest"] if {[is_remote host]} { remote_upload host $dest $destfile } set comp_output [prune_warnings [lindex $status 1]] if { [lindex $status 0] != 0 } { verbose -log "assembler exited with status [lindex $status 0]" } if { [lindex $status 1] != "" } { verbose -log "assembler output is:\n[lindex $status 1]" 2 } return ${comp_output} } # Invoke this if you really want ld to be called directly, rather than # calling the compiler. FLAGS are any additional flags to pass to the # linker. # proc target_link { objects destfile flags } { return [default_link target "$objects" "$destfile" $flags] } proc default_link { board objects destfile flags } { global LD_FOR_TARGET global LDFLAGS_FOR_TARGET # return -L's in ldflags proc only--Ls { ldflags } { set result "" set ldflags [split $ldflags] set len [llength $ldflags] for { set i 0 } { $i < $len } { incr i } { # ??? We ignore the situation where a -L is actually the argument # to an option. set arg [lindex $ldflags $i] regsub "^-Wl," $arg "" arg if {[regexp "^-L" $arg]} { # Is the directory in the next arg, or part of this one? if { "$arg" == "-L" } { if { $i + 1 < $len } { append result " -L [lindex $ldflags $i+1]" incr i } } else { append result " $arg" } } } return $result } if {[info exists LD_FOR_TARGET]} { set LD "$LD_FOR_TARGET" } else { if {![board_info target exists linker]} { set LD [find_ld] } else { set LD [board_info target linker] } } if {[info exists LDFLAGS_FOR_TARGET]} { append flags " $LDFLAGS_FOR_TARGET" } # `ldflags' consists of arguments to gcc (that are then # passed to ld), not arguments to ld directly. # We need the -L's. if {[board_info $board exists ldflags]} { set ldflags [board_info $board ldflags] set ldflags [only--Ls $ldflags] append flags " $ldflags" } if {[board_info $board exists ldscript]} { # strip leading -Wl, if present set ldscript [board_info $board ldscript] regsub "^-Wl," $ldscript "" ldscript append flags " $ldscript" } if {[is_remote host]} { set nobjects "" foreach x $objects { set nobjects "$nobjects [remote_download host $x]" } set objects "$nobjects" set dest "a.out" } else { set dest $destfile } set status [remote_exec host "$LD $objects $flags -o $dest"] if {[is_remote host]} { remote_upload host $dest $destfile } set comp_output [prune_warnings [lindex $status 1]] if { [lindex $status 0] != 0 } { verbose -log "linker exited with status [lindex $status 0]" } if { [lindex $status 1] != "" } { verbose -log "linker output is:\n[lindex $status 1]" 2 } return ${comp_output} } dejagnu-1.5.3/lib/utils.exp0000644000175000017500000002342012320744410012500 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file was written by Rob Savoye. (rob@welcomehome.org) # Most of the procedures found here mimic their UNIX counterpart. # This file is sourced by runtest.exp, so they are usable by any test # script. # Gets the directories in a directory, or in a directory tree. # args: the first is the dir to look in, the next # is the pattern to match. It # defaults to *. Patterns are csh style # globbing rules # options: -all search the tree recursively # returns: a list of dirs or NULL; the root directory is not returned. # proc getdirs { args } { if { [lindex $args 0] == "-all" } { set alldirs 1 set args [lrange $args 1 end] } else { set alldirs 0 } set path [lindex $args 0] if { [llength $args] > 1} { set pattern [lindex $args 1] } else { set pattern "*" } verbose "Looking in ${path} for directories that match \"${pattern}\"" 3 catch "glob ${path}/${pattern}" tmp if { ${tmp} != "" } { foreach i ${tmp} { if {[file isdirectory $i]} { switch -- "[file tail $i]" { "testsuite" - "config" - "lib" - "CVS" - "RCS" - "SCCS" { verbose "Ignoring directory [file tail $i]" 3 continue } default { if {[file readable $i]} { verbose "Found directory [file tail $i]" 3 lappend dirs $i if { $alldirs } { eval lappend dirs [getdirs -all $i $pattern] } } } } } } } else { perror "$tmp" return "" } if {![info exists dirs]} { return "" } else { return $dirs } } # Finds paths of all non-directory files, recursively, whose names match # a pattern. Certain directory name are not searched (see proc getdirs). # rootdir - search in this directory and its subdirectories, recursively. # pattern - specified with Tcl string match "globbing" rules. # returns: a possibly empty list of pathnames. # proc find { rootdir pattern } { set files [list] if { [string length $rootdir] == 0 || [string length $pattern] == 0 } { return $files } # find all the directories set dirs [concat [getdirs -all $rootdir] $rootdir] # find all the files in the directories that match the pattern foreach i $dirs { verbose "Looking in $i" 3 foreach match [glob -nocomplain $i/$pattern] { if {![file isdirectory $match]} { lappend files $match verbose "Adding $match to file list" 3 } } } return $files } # Search the path for a file. This is basically a version of the BSD # Unix which(1) utility. This procedure depends on the shell # environment variable $PATH. It returns 0 if $PATH does not exist or # the binary is not in the path. If the binary is in the path, it # returns the full path to the binary. # proc which { file } { global env # strip off any extraneous arguments (like flags to the compiler) set file [lindex $file 0] # if it exists then the path must be OK # ??? What if $file has no path and "." isn't in $PATH? if {[file exists $file]} { return $file } if {[info exists env(PATH)]} { set path [split $env(PATH) ":"] } else { return 0 } foreach i $path { verbose "Checking against $i" 3 if {[file exists [file join $i $file]]} { if {[file executable [file join $i $file]]} { return [file join $i $file] } else { warning "[file join $i $file] exists but is not an executable" } } } # not in path return 0 } # Looks for occurrences of a string in a file. # return:list of lines that matched or NULL if none match. # args: first arg is the filename, # second is the pattern, # third are any options. # Options: line - puts line numbers of match in list # proc grep { args } { set file [lindex $args 0] set pattern [lindex $args 1] verbose "Grepping $file for the pattern \"$pattern\"" 3 set argc [llength $args] if { $argc > 2 } { for { set i 2 } { $i < $argc } { incr i } { append options [lindex $args $i] append options " " } } else { set options "" } set i 0 set fd [open $file r] while { [gets $fd cur_line]>=0 } { incr i if {[regexp -- "$pattern" $cur_line match]} { if {![string match "" $options]} { foreach opt $options { switch $opt { "line" { lappend grep_out [concat $i $match] } } } } else { lappend grep_out $match } } } close $fd unset fd unset i if {![info exists grep_out]} { set grep_out "" } return $grep_out } # # Remove elements based on patterns. elements are delimited by spaces. # pattern is the pattern to look for using glob style matching # list is the list to check against # returns the new list # proc prune { list pattern } { set tmp {} foreach i $list { verbose "Checking pattern \"$pattern\" against $i" 3 if {![string match $pattern $i]} { lappend tmp $i } else { verbose "Removing element $i from list" 3 } } return $tmp } # # Attempt to kill a process that you started on the local machine. # proc slay { name } { set in [open [concat "|ps"] r] while {[gets $in line]>-1} { if {![string match "*expect*slay*" $line]} { if {[string match "*$name*" $line]} { set pid [lindex $line 0] catch "exec kill -9 $pid" verbose "Killing $name, pid = $pid\n" } } } close $in } # # Convert a relative path to an absolute one on the local machine. # proc absolute { path } { if {[string match "." $path]} { return [pwd] } set basedir [pwd] cd $path set path [pwd] cd $basedir return $path } # # Source a file and trap any real errors. This ignores extraneous # output. returns a 1 if there was an error, otherwise it returns 0. # proc psource { file } { global errorInfo global errorCode unset errorInfo if {[file exists $file]} { catch "source $file" if {[info exists errorInfo]} { send_error "ERROR: errors in $file\n" send_error "$errorInfo" return 1 } } return 0 } # # Check if a testcase should be run or not # # RUNTESTS is a copy of global `runtests'. # # This proc hides the details of global `runtests' from the test scripts, and # implements uniform handling of "script arguments" where those arguments are # file names (ie: the "foo" in make check RUNTESTFLAGS="bar.exp=foo"). # "glob" style expressions are supported as well as multiple files (with # spaces between them). # Eg: RUNTESTFLAGS="bar.exp=foo1.c foo2.c foo3*.c bar/baz*.c" # proc runtest_file_p { runtests testcase } { if {[string length [lindex $runtests 1]]} { foreach ptn [lindex $runtests 1] { if {[string match "*/$ptn" $testcase]} { return 1 } if {[string match $ptn $testcase]} { return 1 } } return 0 } return 1 } # # Delete various system verbosities from TEXT on SYSTEM # # An example is: # ld.so: warning: /usr/lib/libc.so.1.8.1 has older revision than expected 9 # # SYSTEM is typical $target_triplet or $host_triplet. # # # Compares two files line-by-line # returns 1 it the files match, # returns 0 if there was a file error, # returns -1 if they didn't match. # proc diff { file_1 file_2 } { set eof -1 set differences 0 if {[file exists ${file_1}]} { set file_a [open ${file_1} r] fconfigure $file_a -encoding binary } else { warning "${file_1} doesn't exist" return 0 } if {[file exists ${file_2}]} { set file_b [open ${file_2} r] fconfigure $file_b -encoding binary } else { warning "${file_2} doesn't exist" return 0 } verbose "# Diff'ing: ${file_1} ${file_2}\n" 1 set list_a "" while { [gets ${file_a} line] != ${eof} } { if {[regexp "^#.*$" ${line}]} { continue } else { lappend list_a ${line} } } close ${file_a} set list_b "" while { [gets ${file_b} line] != ${eof} } { if {[regexp "^#.*$" ${line}]} { continue } else { lappend list_b ${line} } } close ${file_b} for { set i 0 } { $i < [llength $list_a] } { incr i } { set line_a [lindex ${list_a} ${i}] set line_b [lindex ${list_b} ${i}] # verbose "\t${file_1}: ${i}: ${line_a}\n" 3 # verbose "\t${file_2}: ${i}: ${line_b}\n" 3 if {[string compare ${line_a} ${line_b}]} { verbose "line #${i}\n" 2 verbose "\< ${line_a}\n" 2 verbose "\> ${line_b}\n" 2 send_log "line #${i}\n" send_log "\< ${line_a}\n" send_log "\> ${line_b}\n" set differences -1 } } if { $differences == -1 || [llength ${list_a}] != [llength ${list_b}] } { verbose "Files not the same" 2 set differences -1 } else { verbose "Files are the same" 2 set differences 1 } return ${differences} } # # Set an environment variable # proc setenv { var val } { global env set env($var) $val } # # Unset an environment variable # proc unsetenv { var } { global env unset env($var) } # # Get a value from an environment variable # proc getenv { var } { global env if {[info exists env($var)]} { return $env($var) } else { return "" } } dejagnu-1.5.3/lib/kermit.exp0000644000175000017500000001100112320744410012623 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # Connect to DEST using Kermit. Note that we're just using Kermit as a # simple serial or network connect program; we don't actually use Kermit # protocol to do downloads. # # Returns -1 if it failed, otherwise it returns the spawn_id. # proc kermit_open {dest args} { global spawn_id global board_info if {[board_info $dest exists name]} { set dest [board_info $dest name] } if {[board_info ${dest} exists serial]} { set port [board_info ${dest} serial] set device "-l [board_info ${dest} serial]" if {[board_info ${dest} exists baud]} { append device " -b [board_info ${dest} baud]" } } else { set port [board_info ${dest} netport] set device "-j [board_info ${dest} netport]" } set tries 0 set result -1 verbose "kermit $device" eval spawn kermit $device if {$spawn_id < 0} { perror "invalid spawn id from Kermit" return -1 } expect { -re ".*ermit.*>.*$" { send "c\n" expect { -re "Connecting to.*$port.*Type the escape character followed by C to.*options.*\[\r\n\]$" { verbose "Got prompt\n" set result 0 incr tries } timeout { warning "Never got prompt from Kermit." set result -1 incr tries if {$tries <= 2} { exp_continue } } } } -re "Connection Closed.*$" { perror "Never connected." set result -1 incr tries if {$tries <= 2} { exp_continue } } timeout { warning "Timed out trying to connect." set result -1 incr tries if {$tries <= 2} { exp_continue } } } if {$result < 0} { perror "Couldn't connect after $tries tries." if {[info exists board_info($dest,fileid)]} { unset board_info($dest,fileid) } return -1 } else { verbose "Kermit connection established with spawn_id $spawn_id." set board_info($dest,fileid) $spawn_id kermit_command $dest "set file type binary" "set transfer display none" if {[board_info $dest exists transmit_pause]} { kermit_command $dest "set transmit pause [board_info $dest transmit_pause]" } return $spawn_id } } # Send a list of commands to the Kermit session connected to DEST. # proc kermit_command {dest args} { if {[board_info $dest exists name]} { set dest [board_info $dest name] } set shell_id [board_info $dest fileid] # Sometimes we have to send multiple ^\c sequences. Don't know # why. set timeout 2 for {set i 1} {$i <= 5} {incr i} { send -i $shell_id "c" expect { -i $shell_id -re ".*Back at.*ermit.*>.*$" {set i 10} -i $shell_id timeout { if {$i > 2} { warning "Unable to get prompt from kermit." } } } } foreach command $args { set timeout 120 send -i $shell_id "${command}\r" expect { -i $shell_id -re ".*ermit.*>.*$" { } -i $shell_id timeout { perror "Response failed from Kermit." return -1 } } } send -i $shell_id "c\r" expect { -i $shell_id -re ".*other options.\[\r\n\]+" { } -i $shell_id timeout { perror "Unable to resume Kermit connection." return -1 } } return 0 } # Send STRING to DEST. # proc kermit_send {dest string args} { if {[board_info $dest exists transmit_pause]} { set f [open "/tmp/fff" "w"] puts -nonewline $f "$string" close $f set result [remote_transmit $dest /tmp/fff] remote_file build delete "/tmp/fff" return "$result" } else { return [standard_send $dest $string] } } # Transmit FILE directly to DEST as raw data. # No translation is performed. # proc kermit_transmit {dest file args} { if {[board_info $dest exists transmit_pause]} { kermit_command $dest "transmit $file" return "" } else { return [standard_transmit $dest $file] } } dejagnu-1.5.3/lib/remote.exp0000644000175000017500000010762212320744410012642 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file was written by Rob Savoye . # Load various protocol support modules. load_lib "telnet.exp" load_lib "rlogin.exp" load_lib "kermit.exp" load_lib "tip.exp" load_lib "rsh.exp" load_lib "ftp.exp" # Open a connection to a remote host or target. This requires the target_info # array be filled in with the proper info to work. # # type is either "build", "host", "target", or the name of a board loaded # into the board_info array. The default is target if no name is supplied. # It returns the spawn id of the process that is the connection. # proc remote_open { args } { global reboot if { [llength $args] == 0 } { set type "target" } else { set type $args } # Shudder... if { $reboot && $type == "target" } { reboot_target } return [call_remote "" open $type] } proc remote_raw_open { args } { return [eval call_remote raw open $args] } # Run the specified COMMANDLINE on the local machine, redirecting input # to file INP (if non-empty), redirecting output to file OUTP (if non-empty), # and waiting TIMEOUT seconds for the command to complete before killing # it. A two-member list is returned; the first member is the exit status # of the command, the second is any output produced from the command # (if output is redirected, this may or may not be empty). If output is # redirected, both stdout and stderr will appear in the specified file. # # Caveats: A pipeline is used if input or output is redirected. There # will be problems with killing the program if a pipeline is used. Either # the "tee" command or the "cat" command is used in the pipeline if input # or output is redirected. If the program needs to be killed, /bin/sh and # the kill command will be invoked. # proc local_exec { commandline inp outp timeout } { # Tcl's exec is a pile of crap. It does two very inappropriate things # firstly, it has no business returning an error if the program being # executed happens to write to stderr. Secondly, it appends its own # error messages to the output of the command if the process exits with # non-zero status. # # So, ok, we do this funny stuff with using spawn sometimes and # open others because of spawn's inability to invoke commands with # redirected I/O. We also hope that nobody passes in a command that's # a pipeline, because spawn can't handle it. # # We want to use spawn in most cases, because tcl's pipe mechanism # doesn't assign process groups correctly and we can't reliably kill # programs that bear children. We can't use tcl's exec because it has # no way to timeout programs that hang. *sigh* # # The expect command will close the connection when it sees # EOF. Closing the connection may send SIGHUP to the child and # cause it to exit before it can exit normally. The child should # ignore SIGHUP. global errorInfo if { "$inp" == "" && "$outp" == "" } { set id -1 set result [catch "eval spawn -ignore SIGHUP \{${commandline}\}" pid] if { $result == 0 } { set result2 0 } else { set pid 0 set result2 5 } } else { # Can you say "uuuuuugly"? I knew you could! # All in the name of non-infinite hangs. if { $inp != "" } { set inp "< $inp" set mode "r" } else { set mode "w" } set use_tee 0 # We add |& cat so that Tcl exec doesn't freak out if the # program writes to stderr. if { $outp == "" } { set outp "|& cat" } else { set outpf "$outp" set outp "> $outp" if { $inp != "" } { set use_tee 1 } } # Why do we use tee? Because open can't redirect both input and output. if { $use_tee } { set result [catch {open "| ${commandline} $inp |& tee $outpf" RDONLY} id] } else { set result [catch {open "| ${commandline} $inp $outp" $mode} id] } if { $result != 0 } { return [list -1 "open of $commandline $inp $outp failed: $errorInfo"] } set pid [pid $id] set result [catch "spawn -ignore SIGHUP -leaveopen $id" result2] } # Prepend "-" to each pid, to generate the "process group IDs" needed by # kill. set pgid "-[join $pid { -}]" verbose "pid is $pid $pgid" if { $result != 0 || $result2 != 0 } { # This shouldn't happen. if {[info exists errorInfo]} { set foo $errorInfo } else { set foo "" } verbose "spawn -open $id failed, $result $result2, $foo" catch "close $id" return [list -1 "spawn failed"] } set got_eof 0 set output "" # Wait for either $timeout seconds to elapse, or for the program to # exit. expect { -i $spawn_id -timeout $timeout -re ".+" { append output $expect_out(buffer) if { [string length $output] < 512000 } { exp_continue -continue_timer } } timeout { warning "program timed out." } eof { set got_eof 1 } } # Uuuuuuugh. Now I'm getting really sick. # If we didn't get an EOF, we have to kill the poor defenseless program. # However, Tcl has no kill primitive, so we have to execute an external # command in order to execute the execution. (English. Gotta love it.) if { ! $got_eof } { verbose "killing $pid $pgid" # This is very, very nasty. SH, instead of EXPECT, is used to # run this in the background since, on older CYGWINs, a # strange file I/O error occures. exec sh -c "exec > /dev/null 2>&1 && (kill -2 $pgid || kill -2 $pid) && sleep 5 && (kill -15 $pgid || kill $pid) && sleep 5 && (kill -9 $pgid || kill -9 $pid) &" } # This will hang if the kill doesn't work. Nothin' to do, and it's not ok. catch "close -i $spawn_id" set r2 [catch "wait -i $spawn_id" wres] if { $id > 0 } { set r2 [catch "close $id" res] } else { verbose "waitres is $wres" 2 if { $r2 == 0 } { set r2 [lindex $wres 3] if { [llength $wres] > 4 } { if { [lindex $wres 4] == "CHILDKILLED" } { set r2 1 } } if { $r2 != 0 } { set res "$wres" } else { set res "" } } else { set res "wait failed" } } if { $r2 != 0 || $res != "" || ! $got_eof } { verbose "close result is $res" set status 1 } else { set status 0 } verbose "output is $output status $status" if { $outp == "" || $outp == "|& cat" } { return [list $status $output] } else { return [list $status ""] } } # # Execute the supplied program on HOSTNAME. There are four optional arguments # the first is a set of arguments to pass to PROGRAM, the second is an # input file to feed to stdin of PROGRAM, the third is the name of an # output file where the output from PROGRAM should be written, and # the fourth is a timeout value (we give up after the specified # of seconds # has elapsed). # # A two-element list is returned. The first value is the exit status of the # program (-1 if the exec failed). The second is any output produced by # the program (which may or may not be empty if output from the program was # redirected). # proc remote_exec { hostname program args } { 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 "" } # 300 is probably a lame default. if { [llength $args] > 3 } { set timeout "[lindex $args 3]" } else { set timeout 300 } verbose -log "Executing on $hostname: $program $pargs $inp $outp (timeout = $timeout)" 2 # Run it locally if appropriate. if { ![is_remote $hostname] } { return [local_exec "$program $pargs" $inp $outp $timeout] } else { return [call_remote "" exec $hostname $program $pargs $inp $outp] } } proc standard_exec { hostname args } { return [eval rsh_exec \"$hostname\" $args] } # Close the remote connection. # arg - This is the name of the machine whose connection we're closing, # or target, host or build. # proc remote_close { host } { while { 1 } { set result [call_remote "" close "$host"] if { [remote_pop_conn $host] != "pass" } { break } } return $result } proc remote_raw_close { host } { return [call_remote raw close "$host"] } proc standard_close { host } { global board_info if {[board_info ${host} exists fileid]} { set shell_id [board_info ${host} fileid] set pid -1 verbose "Closing the remote shell $shell_id" 2 if {[board_info ${host} exists fileid_origid]} { set oid [board_info ${host} fileid_origid] set pid [pid $oid] unset board_info(${host},fileid_origid) } else { set result [catch "exp_pid -i $shell_id" pid] if { $result != 0 || $pid <= 0 } { set result [catch "pid $shell_id" pid] if { $result != 0 } { set pid -1 } } } if { $pid > 0 } { verbose "doing kill, pid is $pid" # This is very, very nasty. SH, instead of EXPECT, is used # to run this in the background since, on older CYGWINs, a # strange file I/O error occures. set pgid "-[join $pid { -}]" exec sh -c "exec > /dev/null 2>&1 && (kill -2 $pgid || kill -2 $pid) && sleep 5 && (kill $pgid || kill $pid) && sleep 5 && (kill -9 $pgid || kill -9 $pid) &" } verbose "pid is $pid" catch "close -i $shell_id" if {[info exists oid]} { catch "close $oid" } catch "wait -i $shell_id" unset board_info(${host},fileid) verbose "Shell closed." } return 0 } # Set the connection into "binary" mode, a.k.a. no processing of input # characters. # proc remote_binary { host } { return [call_remote "" binary "$host"] } proc remote_raw_binary { host } { return [call_remote raw binary "$host"] } # Return value of this function depends on actual implementation of reboot that # will be used, in practice it is expected that remote_reboot returns 1 on # success and 0 on failure. # proc remote_reboot { host } { clone_output "\nRebooting ${host}\n" # FIXME: don't close the host connection, or all the remote # procedures will fail. # remote_close $host set status [call_remote "" reboot "$host"] if {[board_info $host exists name]} { set host [board_info $host name] } if { [info proc ${host}_init] != "" } { ${host}_init $host } return $status } # It looks like that this proc is never called, instead ${board}_reboot defined # in base-config.exp will be used because it has higher priority and # base-config.exp is always imported by runtest. # proc standard_reboot { host } { return 1 } # # Download file FILE to DEST. If the optional DESTFILE is specified, # that file will be used on the destination board. It returns either # "" (indicating that the download failed), or the name of the file on # the destination machine. # proc remote_download { dest file args } { if { [llength $args] > 0 } { set destfile [lindex $args 0] } else { set destfile [file tail $file] } if { ![is_remote $dest] } { if { $destfile == "" || $destfile == $file } { return $file } else { set result [catch "exec cp -p $file $destfile" output] if {[regexp "same file|are identical" $output]} { set result 0 set output "" } else { # try to make sure we can read it # and write it (in case we copy onto it again) catch {exec chmod u+rw $destfile} } if { $result != 0 || $output != "" } { perror "remote_download to $dest of $file to $destfile: $output" return "" } else { return $destfile } } } return [call_remote "" download $dest $file $destfile] } # The default download procedure. Uses rcp to download to $dest. # proc standard_download {dest file destfile} { set orig_destfile $destfile if {[board_info $dest exists nfsdir]} { set destdir [board_info $dest nfsdir] if {[board_info $dest exists nfsroot_server]} { set dest [board_info $dest nfsroot_server] } else { set dest "" } set destfile "$destdir/$destfile" } if { "$dest" != "" } { set result [rsh_download $dest $file $destfile] if { $result == $destfile } { return $orig_destfile } else { return $result } } set result [catch "exec cp -p $file $destfile" output] if {[regexp "same file|are identical" $output]} { set result 0 set output "" } else { # try to make sure we can read it # and write it (in case we copy onto it again) catch {exec chmod u+rw $destfile} } if { $result != 0 || $output != "" } { perror "remote_download to $dest of $file to $destfile: $output" return "" } else { return $orig_destfile } } proc remote_upload {dest srcfile args} { if { [llength $args] > 0 } { set destfile [lindex $args 0] } else { set destfile [file tail $srcfile] } if { ![is_remote $dest] } { if { $destfile == "" || $srcfile == $destfile } { return $srcfile } set result [catch "exec cp -p $srcfile $destfile" output] return $destfile } return [call_remote "" upload $dest $srcfile $destfile] } proc standard_upload { dest srcfile destfile } { set orig_srcfile $srcfile if {[board_info $dest exists nfsdir]} { set destdir [board_info $dest nfsdir] if {[board_info $dest exists nfsroot_server]} { set dest [board_info $dest nfsroot_server] } else { set dest "" } set srcfile "$destdir/$srcfile" } if { "$dest" != "" } { return [rsh_upload $dest $srcfile $destfile] } set result [catch "exec cp -p $srcfile $destfile" output] if {[regexp "same file|are identical" $output]} { set result 0 set output "" } else { # try to make sure we can read it # and write it (in case we copy onto it again) catch {exec chmod u+rw $destfile} } if { $result != 0 || $output != "" } { perror "remote_upload to $dest of $srcfile to $destfile: $output" return "" } else { return $destfile } return [rsh_upload $dest $srcfile $destfile] } # A standard procedure to call the appropriate function. It first looks # for a board-specific version, then a version specific to the protocol, # and then finally it will call standard_$proc. # proc call_remote { type proc dest args } { if {[board_info $dest exists name]} { set dest [board_info $dest name] } if { $proc == "reboot" } { regsub {/.*} "$dest" "" dest verbose "Changed dest to $dest" } if { $dest != "host" && $dest != "build" && $dest != "target" } { if { ![board_info $dest exists name] } { global board if {[info exists board]} { error "board exists" } load_board_description $dest if { $proc == "reboot" } { regsub {/.*} "$dest" "" dest verbose "Changed dest to $dest" } } } set high_prot "" if { $type != "raw" } { if {[board_info $dest exists protocol]} { set high_prot "${dest} [board_info $dest protocol]" } else { set high_prot "${dest} [board_info $dest generic_name]" } } verbose "call_remote $type $proc $dest $args " 3 # Close has to be handled specially. if { $proc == "close" || $proc == "open" } { foreach try "$high_prot [board_info $dest connect] telnet standard" { if { $try != "" } { if { [info proc "${try}_${proc}"] != "" } { verbose "call_remote calling ${try}_${proc}" 3 set result [eval ${try}_${proc} \"$dest\" $args] break } } } set ft "[board_info $dest file_transfer]" if { [info proc "${ft}_${proc}"] != "" } { verbose "calling ${ft}_${proc} $dest $args" 3 set result2 [eval ${ft}_${proc} \"$dest\" $args] } if {![info exists result]} { if {[info exists result2]} { set result $result2 } else { set result "" } } return $result } foreach try "${high_prot} [board_info $dest file_transfer] [board_info $dest connect] telnet standard" { verbose "looking for ${try}_${proc}" 4 if { $try != "" } { if { [info proc "${try}_${proc}"] != "" } { verbose "call_remote calling ${try}_${proc}" 3 return [eval ${try}_${proc} \"$dest\" $args] } } } if { $proc == "close" } { return "" } error "No procedure for '$proc' in call_remote" return -1 } # Send FILE through the existing session established to DEST. # proc remote_transmit { dest file } { return [call_remote "" transmit "$dest" "$file"] } proc remote_raw_transmit { dest file } { return [call_remote raw transmit "$dest" "$file"] } # The default transmit procedure if no other exists. This feeds the # supplied file directly into the connection. # proc standard_transmit {dest file} { if {[board_info ${dest} exists name]} { set dest [board_info ${dest} name] } if {[board_info ${dest} exists baud]} { set baud [board_info ${dest} baud] } else { set baud 9600 } set shell_id [board_info ${dest} fileid] set lines 0 set chars 0 set fd [open $file r] while { [gets $fd cur_line] >= 0 } { set errmess "" catch "send -i $shell_id \"$cur_line\r\"" errmess if {[string match "write\(spawn_id=\[0-9\]+\):" $errmess]} { perror "sent \"$cur_line\" got expect error \"$errmess\"" catch "close $fd" return -1 } set chars [expr {$chars + ([string length $cur_line] * 10)}] if { $chars > $baud } { sleep 1 set chars 0 } verbose "." 3 verbose "Sent $cur_line" 4 incr lines } verbose "$lines lines transmitted" 2 close $fd return 0 } proc remote_send { dest string } { return [call_remote "" send "$dest" "$string"] } proc remote_raw_send { dest string } { return [call_remote raw send "$dest" "$string"] } proc standard_send { dest string } { if {![board_info $dest exists fileid]} { perror "no fileid for $dest" return "no fileid for $dest" } else { set shell_id [board_info $dest fileid] verbose "shell_id in standard_send is $shell_id" 3 verbose "send -i [board_info $dest fileid] -- $string" 3 if {[catch "send -i [board_info $dest fileid] -- \$string" errorInfo]} { return "$errorInfo" } else { return "" } } } proc file_on_host { op file args } { return [eval remote_file host \"$op\" \"$file\" $args] } proc file_on_build { op file args } { return [eval remote_file build \"$op\" \"$file\" $args] } proc remote_file { dest args } { return [eval call_remote \"\" file \"$dest\" $args] } proc remote_raw_file { dest args } { return [eval call_remote raw file \"$dest\" $args] } # Perform the specified file op on a remote Unix board. # proc standard_file { dest op args } { set file [lindex $args 0] verbose "dest in proc standard_file is $dest" 3 if { ![is_remote $dest] } { switch $op { cmp { set otherfile [lindex $args 1] if { [file exists $file] && [file exists $otherfile] && [file size $file] == [file size $otherfile] } { set r [remote_exec build cmp "$file $otherfile"] if { [lindex $r 0] == 0 } { return 0 } } return 1 } tail { return [file tail $file] } dirname { if { [file pathtype $file] == "relative" } { set file [remote_file $dest absolute $file] } set result [file dirname $file] if { $result == "" } { return "/" } return $result } join { return [file join [lindex $args 0] [lindex $args 1]] } absolute { return [unix_clean_filename $dest $file] } exists { return [file exists $file] } delete { foreach x $args { if { [file exists $x] && [file isfile $x] } { file delete -force -- $x } } return } } } switch $op { exists { # mmmm, quotes. set status [remote_exec $dest "sh -c 'exit `\[ -f $file \]`'"] return [lindex $status 0] } delete { set file "" # Allow multiple files to be deleted at once. foreach x $args { append file " $x" } verbose "remote_file deleting $file" set status [remote_exec $dest "rm -f $file"] return [lindex $status 0] } } } # Return an absolute version of the filename in $file, with . and .. # removed. # proc unix_clean_filename { dest file } { if { [file pathtype $file] == "relative" } { set file [remote_file $dest join [pwd] $file] } set result "" foreach x [split $file "/"] { if { $x == "." || $x == "" } { continue } if { $x == ".." } { set rlen [expr {[llength $result] - 2}] if { $rlen >= 0 } { set result [lrange $result 0 $rlen] } else { set result "" } continue } lappend result $x } return "/[join $result /]" } # # Start COMMANDLINE running on DEST. By default it is not possible to # redirect I/O. If the optional keyword "readonly" is specified, input # to the command may be redirected. If the optional keyword # "writeonly" is specified, output from the command may be redirected. # # If the command is successfully started, a positive "spawn id" is returned. # If the spawn fails, a negative value will be returned. # # Once the command is spawned, you can interact with it via the remote_expect # and remote_wait functions. # proc remote_spawn { dest commandline args } { global board_info if {![is_remote $dest]} { if {[info exists board_info($dest,fileid)]} { unset board_info($dest,fileid) } verbose "remote_spawn is local" 3 if {[board_info $dest exists name]} { set dest [board_info $dest name] } verbose "spawning command $commandline" if { [llength $args] > 0 } { if { [lindex $args 0] == "readonly" } { set result [catch { open "| ${commandline} |& cat" "r" } id] if { $result != 0 } { return -1 } } else { set result [catch {open "| ${commandline}" "w"} id] if { $result != 0 } { return -1 } } set result [catch "spawn -leaveopen $id" result2] if { $result == 0 && $result2 == 0} { verbose "setting board_info($dest,fileid) to $spawn_id" 3 set board_info($dest,fileid) $spawn_id set board_info($dest,fileid_origid) $id return $spawn_id } else { # This shouldn't happen. global errorInfo if {[info exists errorInfo]} { set foo $errorInfo } else { set foo "" } verbose "spawn -open $id failed, $result $result2, $foo" catch "close $id" return -1 } } else { set result [catch "spawn $commandline" pid] if { $result == 0 } { verbose "setting board_info($dest,fileid) to $spawn_id" 3 set board_info($dest,fileid) $spawn_id return $spawn_id } else { verbose -log "spawn of $commandline failed" return -1 } } } # Seems to me there should be a cleaner way to do this. if { "$args" == "" } { return [call_remote "" spawn "$dest" "$commandline"] } else { return [call_remote "" spawn "$dest" "$commandline" $args] } } proc remote_raw_spawn { dest commandline } { return [call_remote raw spawn "$dest" "$commandline"] } # The default spawn procedure. Uses rsh to connect to $dest. # proc standard_spawn { dest commandline } { global board_info if {![board_info $dest exists rsh_prog]} { if { [which remsh] != 0 } { set RSH remsh } else { set RSH rsh } } else { set RSH [board_info $dest rsh_prog] } if {[board_info $dest exists hostname]} { set remote [board_info $dest hostname] } else { set remote $dest } if {![board_info $dest exists username]} { spawn $RSH $remote $commandline } else { spawn $RSH -l [board_info $dest username] $remote $commandline } set board_info($dest,fileid) $spawn_id return $spawn_id } # Run PROG on DEST, with optional arguments, input and output files. # It returns a list of two items. The first is ether "pass" if the # program loaded, ran and exited with a zero exit status, or "fail" # otherwise. The second argument is any output produced by the # program while it was running. # proc remote_load { dest prog args } { global tool set dname [board_info $dest name] set cache "[getenv REMOTELOAD_CACHE]/$tool/$dname/[file tail $prog]" set empty [is_remote $dest] if { [board_info $dest exists is_simulator] || [getenv REMOTELOAD_CACHE] == "" } { set empty 0 } else { for { set x 0 } {$x < [llength $args] } {incr x} { if { [lindex $args $x] != "" } { set empty 0 break } } } if {$empty} { global sum_program if {[info exists sum_program]} { if {![target_info exists objcopy]} { set_currtarget_info objcopy [find_binutils_prog objcopy] } if {[is_remote host]} { set dprog [remote_download host $prog "a.out"] } else { set dprog $prog } set status [remote_exec host "[target_info objcopy]" "-O srec $dprog ${dprog}.sum"] if {[is_remote host]} { remote_file upload ${dprog}.sum ${prog}.sum } if { [lindex $status 0] == 0 } { set sumout [remote_exec build "$sum_program" "${prog}.sum"] set sum [lindex $sumout 1] regsub "\[\r\n \t\]+$" "$sum" "" sum } else { set sumout [remote_exec build "$sum_program" "${prog}"] set sum [lindex $sumout 1] regsub "\[\r\n \t\]+$" "$sum" "" sum } remote_file build delete ${prog}.sum } if {[file exists $cache]} { set same 0 if {[info exists sum_program]} { set id [open $cache "r"] set oldsum [read $id] close $id if { $oldsum == $sum } { set same 1 } } else { if { [remote_file build cmp $prog $cache] == 0 } { set same 1 } } if { $same } { set fd [open "${cache}.res" "r"] gets $fd l1 set result [list $l1 [read $fd]] close $fd } } } if {![info exists result]} { set result [eval call_remote \"\" load \"$dname\" \"$prog\" $args] # Not quite happy about the "pass" condition, but it makes sense if # you think about it for a while-- *why* did the test not pass? if { $empty && [lindex $result 0] == "pass" } { if { [getenv LOAD_REMOTECACHE] != "" } { set dir "[getenv REMOTELOAD_CACHE]/$tool/$dname" if {![file exists $dir]} { file mkdir $dir } if {[file exists $dir]} { if {[info exists sum_program]} { set id [open $cache "w"] puts -nonewline $id "$sum" close $id } else { remote_exec build cp "$prog $cache" } set id [open "${cache}.res" "w"] puts $id [lindex $result 0] puts -nonewline $id [lindex $result 1] close $id } } } } return $result } proc remote_raw_load { dest prog args } { return [eval call_remote raw load \"$dest\" \"$prog\" $args ] } # The default load procedure if no other exists for $dest. It uses # remote_download and remote_exec to load and execute the program. # proc standard_load { dest prog args } { 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 {![file exists $prog]} then { # We call both here because this should never happen. perror "$prog does not exist in standard_load." verbose -log "$prog does not exist." 3 return "untested" } if {[is_remote $dest]} { 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 "unresolved" } if {[board_info $dest exists remote_link]} { if {[[board_info $dest remote_link] $remotefile]} { verbose -log "Couldn't do remote link" remote_file target delete $remotefile return "unresolved" } } set status [remote_exec $dest $remotefile $pargs $inp] remote_file $dest delete $remotefile } else { set status [remote_exec $dest $prog $pargs $inp] } if { [lindex $status 0] < 0 } { verbose -log "Couldn't execute $prog, [lindex $status 1]" 3 return "unresolved" } set output [lindex $status 1] set status [lindex $status 0] verbose -log "Executed $prog, status $status" 2 if {![string match "" $output]} { verbose -log -- "$output" 2 } if { $status == 0 } { return [list "pass" $output] } else { return [list "fail" $output] } } # Loads PROG into DEST. # proc remote_ld { dest prog } { return [eval call_remote \"\" ld \"$dest\" \"$prog\"] } proc remote_raw_ld { dest prog } { return [eval call_remote raw ld \"$dest\" \"$prog\"] } # Wait up to TIMEOUT seconds for the last spawned command on DEST to # complete. A list of two values is returned; the first is the exit # status (-1 if the program timed out), and the second is any output # produced by the command. # proc remote_wait { dest timeout } { return [eval call_remote \"\" wait \"$dest\" $timeout] } proc remote_raw_wait { dest timeout } { return [eval call_remote raw wait \"$dest\" $timeout] } # The standard wait procedure, used for commands spawned on the local # machine. # proc standard_wait { dest timeout } { set output "" set status -1 if {[info exists exp_close_result]} { unset exp_close_result } remote_expect $dest $timeout { -re ".+" { append output $expect_out(buffer) if { [string length $output] > 512000 } { remote_close $dest set status 1 } else { exp_continue -continue_timer } } timeout { warning "program timed out." } eof { if {[board_info $dest exists fileid_origid]} { global board_info set id [board_info $dest fileid] set oid [board_info $dest fileid_origid] verbose "$id $oid" unset board_info($dest,fileid) unset board_info($dest,fileid_origid) catch "close -i $id" # I don't believe this. You HAVE to do a wait, even tho # it won't work! stupid ()*$%*)(% expect... catch "wait -i $id" set r2 [catch "close $oid" res] if { $r2 != 0 } { verbose "close result is $res" set status 1 } else { set status 0 } } else { set s [wait -i [board_info $dest fileid]] if { [lindex $s 0] != 0 && [lindex $s 2] == 0 } { set status [lindex $s 3] if { [llength $s] > 4 } { if { [lindex $s 4] == "CHILDKILLED" } { set status 1 } } } } } } remote_close $dest return [list $status $output] } # This checks the value cotained in the variable named "variable" in # the calling procedure for output from the status wrapper and returns # a non-negative value if it exists; otherwise, it returns -1. The # output from the wrapper is removed from the variable. # proc check_for_board_status { variable } { upvar $variable output # If all programs of this board have a wrapper that always outputs a # status message, then the absence of it means that the program # crashed, regardless of status found elsewhere (e.g. simulator exit # code). if { [target_info needs_status_wrapper] != "" } then { set nomatch_return 2 } else { set nomatch_return -1 } if {[regexp "(^|\[\r\n\])\\*\\*\\* EXIT code" $output]} { regsub "^.*\\*\\*\\* EXIT code " $output "" result regsub "\[\r\n\].*$" $result "" result regsub -all "(^|\[\r\n\]|\r\n)\\*\\*\\* EXIT code \[^\r\n\]*(\[\r\n\]\[\r\n\]?|$)" $output "" output regsub "^\[^0-9\]*" $result "" result regsub "\[^0-9\]*$" $result "" result verbose "got board status $result" 3 verbose "output is $output" 3 if { $result == "" } { return $nomatch_return } else { return [expr {$result}] } } else { return $nomatch_return } } # remote_expect works basically the same as standard expect, but it # also takes care of getting the file descriptor from the specified # host and also calling the timeout/eof/default section if there is an # error on the expect call. # proc remote_expect { board timeout args } { global errorInfo errorCode global remote_suppress_flag set spawn_id [board_info $board fileid] if { [llength $args] == 1 } { set args "[lindex $args 0]" } set res {} set got_re 0 set need_append 1 set orig "$args" set error_sect "" set save_next 0 if { $spawn_id == "" } { # This should be an invalid spawn id. set spawn_id 1000 } for { set i 0 } { $i < [llength $args] } { incr i } { if { $need_append } { append res "\n-i $spawn_id " set need_append 0 } set x "[lrange $args $i $i]" regsub "^\n*\[ \]*" "$x" "" x if { $x == "-i" || $x == "-timeout" || $x == "-ex" } { append res "$x " set next [expr {$i + 1}] append res "[lrange $args $next $next]" incr i continue } if { $x == "-n" || $x == "-notransfer" || $x == "-nocase" || $x == "-indices" } { append res "${x} " continue } if { $x == "-re" } { append res "${x} " set next [expr {$i + 1}] set y [lrange $args $next $next] append res "${y} " set got_re 1 incr i continue } if { $got_re } { set need_append 0 append res "$x " set got_re 0 if { $save_next } { set save_next 0 set error_sect [lindex $args $i] } } else { if { ${x} == "eof" } { set save_next 1 } elseif { ${x} == "default" || ${x} == "timeout" } { if { $error_sect == "" } { set save_next 1 } } append res "${x} " set got_re 1 } } if {[info exists remote_suppress_flag]} { if { $remote_suppress_flag } { set code 1 } } if {![info exists code]} { set res "\n-timeout $timeout $res" set body "expect \{\n-i $spawn_id -timeout $timeout $orig\}" set code [catch {uplevel $body} string] } if {$code == 1} { if {[info exists string]} {send_user "ERROR OCCURED: $errorInfo $errorCode $string"} if { $error_sect != "" } { set code [catch {uplevel $error_sect} string] } else { warning "remote_expect statement without a default case?!" return } } if {$code == 1} { return -code error -errorinfo $errorInfo -errorcode $errorCode $string } else { return -code $code $string } } # Push the current connection to HOST onto a stack. # proc remote_push_conn { host } { global board_info set name [board_info $host name] if { $name == "" } { return "fail" } if {![board_info $host exists fileid]} { return "fail" } set fileid [board_info $host fileid] set conninfo [board_info $host conninfo] if {![info exists board_info($name,fileid_stack)]} { set board_info($name,fileid_stack) {} } set board_info($name,fileid_stack) [list $fileid $conninfo $board_info($name,fileid_stack)] unset board_info($name,fileid) if {[info exists board_info($name,conninfo)]} { unset board_info($name,conninfo) } return "pass" } # Pop a previously-pushed connection from a stack. You should have closed the # current connection before doing this. # proc remote_pop_conn { host } { global board_info set name [board_info $host name] if { $name == "" } { return "fail" } if {![info exists board_info($name,fileid_stack)]} { return "fail" } set stack $board_info($name,fileid_stack) if { [llength $stack] < 3 } { return "fail" } set board_info($name,fileid) [lindex $stack 0] set board_info($name,conninfo) [lindex $stack 1] set board_info($name,fileid_stack) [lindex $stack 2] return "pass" } # Swap the current connection with the topmost one on the stack. # proc remote_swap_conn { host } { global board_info set name [board_info $host name] if {![info exists board_info($name,fileid)]} { return "fail" } set fileid $board_info($name,fileid) if {[info exists board_info($name,conninfo)]} { set conninfo $board_info($name,conninfo) } else { set conninfo {} } if { [remote_pop_conn $host] != "pass" } { set board_info($name,fileid) $fileid set board_info($name,conninfo) $conninfo return "fail" } set newfileid $board_info($name,fileid) set newconninfo $board_info($name,conninfo) set board_info($name,fileid) $fileid set board_info($name,conninfo) $conninfo remote_push_conn $host set board_info($name,fileid) $newfileid set board_info($name,conninfo) $newconninfo return "pass" } set sum_program "testcsum" dejagnu-1.5.3/lib/dg.exp0000644000175000017500000007105612320744410011742 00000000000000# `dg' general purpose testcase driver. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file was written by Doug Evans (dje@cygnus.com). # This file is based on old-dejagnu.exp. It is intended to be more extensible # without incurring the overhead that old-dejagnu.exp can. All test framework # commands appear in the testcase as "{ dg-xxx args ... }". We pull them out # with one grep, and then run the function(s) named by "dg-xxx". When running # dg-xxx, the line number that it occurs on is always passed as the first # argument. We also support different kinds of tools via callbacks. # # The currently supported options are: # # dg-prms-id N # set prms_id to N # # dg-options "options ..." [{ target selector }] # specify special options to pass to the tool (eg: compiler) # # dg-do do-what-keyword [{ target/xfail selector }] # `do-what-keyword' is tool specific and is passed unchanged to # ${tool}-dg-test. An example is gcc where `keyword' can be any of: # preprocess|compile|assemble|link|run # and will do one of: produce a .i, produce a .s, produce a .o, # produce an a.out, or produce an a.out and run it (the default is # compile). # # dg-error regexp comment [{ target/xfail selector } [{.|0|linenum}]] # indicate an error message is expected on this line # (the test fails if it doesn't occur) # Linenum=0 for general tool messages (eg: -V arg missing). # "." means the current line. # # dg-warning regexp comment [{ target/xfail selector } [{.|0|linenum}]] # indicate a warning message is expected on this line # (the test fails if it doesn't occur) # # dg-bogus regexp comment [{ target/xfail selector } [{.|0|linenum}]] # indicate a bogus error message used to occur here # (the test fails if it does occur) # # dg-build regexp comment [{ target/xfail selector }] # indicate the build use to fail for some reason # (errors covered here include bad assembler generated, tool crashes, # and link failures) # (the test fails if it does occur) # # dg-excess-errors comment [{ target/xfail selector }] # indicate excess errors are expected (any line) # (this should only be used sparingly and temporarily) # # dg-output regexp [{ target selector }] # indicate the expected output of the program is # (there may be multiple occurrences of this, they are concatenated) # # dg-final { tcl code } # add some tcl code to be run at the end # (there may be multiple occurrences of this, they are concatenated) # (unbalanced braces must be \-escaped) # # "{ target selector }" is a list of expressions that determine whether the # test succeeds or fails for a particular target, or in some cases whether the # option applies for a particular target. If the case of `dg-do' it specifies # whether the testcase is even attempted on the specified target. # # The target selector is always optional. The format is one of: # # { xfail *-*-* ... } - the test is expected to fail for the given targets # { target *-*-* ... } - the option only applies to the given targets # # At least one target must be specified, use *-*-* for "all targets". # At present it is not possible to specify both `xfail' and `target'. # "native" may be used in place of "*-*-*". # # Example: # # [ ... some complicated code ... ] # return a; /* { dg-build "fatal" "ran out of spill regs" { xfail i386-*-* } } */ # # In this example, the compiler use to crash on the "return a;" for some # target and that it still does crash on i386-*-*. Admittedly, this is a # contrived example. # # ??? It might be possible to add additional optional arguments by having # something like: { dg-error ".*syntax.*" "syntax error" { { foo 1 } ... } } # # Callbacks # # ${tool}-dg-test testfile do-what-keyword extra-flags # # Run the test, be it compiler, assembler, or whatever. # # ${tool}-dg-prune target_triplet text # # Optional callback to delete output from the tool that can occur # even in successful ("pass") situations and interfere with output # pattern matching. This also gives the tool an opportunity to review # the output and check for any conditions which indicate an "untested" # or "unresolved" state. An example is if a testcase is too big and # fills all available ram (which can happen for 16 bit cpus). The # result is either the pruned text or # "::untested|unresolved|unsupported::message" # (eg: "::unsupported::memory full"). # # Notes: # 1) All runnable testcases must return 0 from main() for success. # You can't rely on getting any return code from target boards, and the # `exec' command says a program fails if it returns non-zero. # # Language independence is (theoretically) achieved by: # # 1) Using global $tool to indicate the language (eg: gcc, g++, gas, etc.). # This should only be used to look up other objects. We don't want to # have to add code for each new language that is supported. If this is # done right, no code needs to be added here for each new language. # # 2) Passing tool options in as arguments. # # Earlier versions of ${tool}_start (eg: gcc_start) would only take the name # of the file to compile as an argument. Newer versions accept a list of # one or two elements, the second being a string of *all* options to pass # to the tool. We require this facility. # # 3) Callbacks. # # Try not to do anything else that makes life difficult. # # The normal way to write a testsuite is to have a .exp file containing: # # load_lib ${tool}-dg.exp # dg-init # dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/foo*]] ... # dg-finish # Global state variables. # The defaults are for GCC. # The default do-what keyword. set dg-do-what-default compile # When dg-interpreter-batch-mode is 1, no execution test or excess error # tests are performed. set dg-interpreter-batch-mode 0 # Line number format. This is how line numbers appear in program output. set dg-linenum-format ":%d:" proc dg-format-linenum { linenum } { global dg-linenum-format return [format ${dg-linenum-format} $linenum] } # Useful subroutines. # dg-get-options -- pick out the dg-xxx options in a testcase # # PROG is the file name of the testcase. # The result is a list of options found. # # Example: For the following testcase: # # /* { dg-prms-id 1234 } */ # int foo { return 0; } /* { dg-build fatal "some comment" } */ # # we return: # # { dg-prms-id 1 1234 } { dg-build 2 fatal "some comment" } proc dg-get-options { prog } { set result "" set tmp [grep $prog "{\[ \t\]\+dg-\[-a-z\]\+\[ \t\]\+.*\[ \t\]\+}" line] if {![string match "" $tmp]} { foreach i $tmp { #send_user "Found: $i\n" # FIXME: When to use "+" and "\+" isn't clear. # Seems to me it took awhile to get this to work. regexp "(\[0-9\]\+)\[ \t\]\+{\[ \t\]+(dg-\[-a-z\]+)\[ \t\]\+(.*)\[ \t\]+}\[^\}\]*(\n|$)" $i i line cmd args #send_user "Found: $cmd $line $args\n" append result " { $cmd $line $args }" } } #send_user "Returning: $result\n" return $result } # # Process optional xfail/target arguments # # SELECTOR is "xfail target-triplet-1 ..." or "target target-triplet-1 ..." # `target-triplet' may be "native". # For xfail, the result is "F" (expected to Fail) if the current target is # affected, otherwise "P" (expected to Pass). # For target, the result is "S" (target is Selected) if the target is selected, # otherwise "N" (target is Not selected). # proc dg-process-target { selector } { global target_triplet set isnative [isnative] set triplet_match 0 #send_user "dg-process-target: $selector\n" set selector [string trim $selector] if {[regexp "^xfail " $selector]} { set what xfail } elseif {[regexp "^target " $selector]} { set what target } else { # The use of error here and in other dg-xxx utilities is intentional. # dg-test will catch them and do the right thing. error "syntax error in target selector \"$selector\"" } # ??? This should work but it doesn't. tcl bug? #if [regexp "^${what}(( \[^ \]+-\[^ \]+-\[^ \]+)|( native))+$" $selector tmp selector] if {[regexp "^${what}( \[^ \]+-\[^ \]+-\[^ \]+| native)+$" $selector]} { regsub "^${what} " $selector "" selector #send_user "selector: $selector\n" foreach triplet $selector { if {[string match $triplet $target_triplet]} { set triplet_match 1 } elseif { $isnative && $triplet == "native" } { set triplet_match 1 } } } else { error "syntax error in target selector \"$selector\"" } if { $triplet_match } { return [expr { $what == "xfail" ? "F" : "S" }] } else { return [expr { $what == "xfail" ? "P" : "N" }] } } # Predefined user option handlers. # The line number is always the first element. # Note that each of these are varargs procs (they have an `args' argument). # Tests for optional arguments are coded with ">=" to simplify adding new ones. # proc dg-prms-id { args } { global prms_id ;# this is a testing framework variable if { [llength $args] > 2 } { error "[lindex $args 0]: too many arguments" return } set prms_id [lindex $args 1] } # Set tool options # # Different options can be used for different targets by having multiple # instances, selecting a different target each time. Since options are # processed in order, put the default value first. Subsequent occurrences # will override previous ones. # proc dg-options { args } { upvar dg-extra-tool-flags extra-tool-flags if { [llength $args] > 3 } { error "[lindex $args 0]: too many arguments" return } if { [llength $args] >= 3 } { switch [dg-process-target [lindex $args 2]] { "S" { set extra-tool-flags [lindex $args 1] } "N" { } "F" { error "[lindex $args 0]: `xfail' not allowed here" } "P" { error "[lindex $args 0]: `xfail' not allowed here" } } } else { set extra-tool-flags [lindex $args 1] } } # Record what to do (compile/run/etc.) # # Multiple instances are supported (since we don't support target and xfail # selectors on one line), though it doesn't make much sense to change the # compile/assemble/link/run field. Nor does it make any sense to have # multiple lines of target selectors (use one line). # proc dg-do { args } { upvar dg-do-what do-what if { [llength $args] > 3 } { error "[lindex $args 0]: too many arguments" return } set selected [lindex ${do-what} 1] ;# selected? (""/S/N) set expected [lindex ${do-what} 2] ;# expected to pass/fail (P/F) if { [llength $args] >= 3 } { switch [dg-process-target [lindex $args 2]] { "S" { set selected "S" } "N" { # Don't deselect a target if it's been explicitly selected, # but indicate a specific target has been selected (so don't # do this testcase if it's not appropriate for this target). # The user really shouldn't have multiple lines of target # selectors, but try to do the intuitive thing (multiple lines # are OR'd together). if { $selected != "S" } { set selected "N" } } "F" { set expected "F" } "P" { # There's nothing to do for "P". We don't want to clobber a # previous xfail for this target. } } } else { # Note: A previous occurrence of `dg-do' with target/xfail selectors # is a user mistake. We clobber previous values here. set selected S set expected P } switch [lindex $args 1] { "preprocess" { } "compile" { } "assemble" { } "link" { } "run" { } default { error "[lindex $args 0]: syntax error" } } set do-what [list [lindex $args 1] $selected $expected] } proc dg-error { args } { upvar dg-messages messages if { [llength $args] > 5 } { error "[lindex $args 0]: too many arguments" return } set xfail "" if { [llength $args] >= 4 } { switch [dg-process-target [lindex $args 3]] { "F" { set xfail "X" } "P" { set xfail "" } "N" { # If we get "N", this error doesn't apply to us so ignore it. return } } } if { [llength $args] >= 5 } { switch [lindex $args 4] { "." { set line [dg-format-linenum [lindex $args 0]] } "0" { set line "" } "default" { set line [dg-format-linenum [lindex $args 4]] } } } else { set line [dg-format-linenum [lindex $args 0]] } lappend messages [list $line "${xfail}ERROR" [lindex $args 1] [lindex $args 2]] } proc dg-warning { args } { upvar dg-messages messages if { [llength $args] > 5 } { error "[lindex $args 0]: too many arguments" return } set xfail "" if { [llength $args] >= 4 } { switch [dg-process-target [lindex $args 3]] { "F" { set xfail "X" } "P" { set xfail "" } "N" { # If we get "N", this warning doesn't apply to us so ignore it. return } } } if { [llength $args] >= 5 } { switch [lindex $args 4] { "." { set line [dg-format-linenum [lindex $args 0]] } "0" { set line "" } "default" { set line [dg-format-linenum [lindex $args 4]] } } } else { set line [dg-format-linenum [lindex $args 0]] } lappend messages [list $line "${xfail}WARNING" [lindex $args 1] [lindex $args 2]] } proc dg-bogus { args } { upvar dg-messages messages if { [llength $args] > 5 } { error "[lindex $args 0]: too many arguments" return } set xfail "" if { [llength $args] >= 4 } { switch [dg-process-target [lindex $args 3]] { "F" { set xfail "X" } "P" { set xfail "" } "N" { # If we get "N", this message doesn't apply to us so ignore it. return } } } if { [llength $args] >= 5 } { switch [lindex $args 4] { "." { set line [dg-format-linenum [lindex $args 0]] } "0" { set line "" } "default" { set line [dg-format-linenum [lindex $args 4]] } } } else { set line [dg-format-linenum [lindex $args 0]] } lappend messages [list $line "${xfail}BOGUS" [lindex $args 1] [lindex $args 2]] } proc dg-build { args } { upvar dg-messages messages if { [llength $args] > 4 } { error "[lindex $args 0]: too many arguments" return } set xfail "" if { [ llength $args] >= 4 } { switch [dg-process-target [lindex $args 3]] { "F" { set xfail "X" } "P" { set xfail "" } "N" { # If we get "N", this lossage doesn't apply to us so ignore it. return } } } lappend messages [list [lindex $args 0] "${xfail}BUILD" [lindex $args 1] [lindex $args 2]] } proc dg-excess-errors { args } { upvar dg-excess-errors-flag excess-errors-flag if { [llength $args] > 3 } { error "[lindex $args 0]: too many arguments" return } if { [llength $args] >= 3 } { switch [dg-process-target [lindex $args 2]] { "F" { set excess-errors-flag 1 } "S" { set excess-errors-flag 1 } } } else { set excess-errors-flag 1 } } # Indicate expected program output. # # We support multiple occurrences, but we do not implicitly insert newlines # between them. # # Note that target boards don't all support this kind of thing so it's a good # idea to specify the target all the time. If one or more targets are # explicitly selected, the test won't be performed if we're not one of them # (as long as we were never mentioned). # # If you have target dependent output and want to set an xfail for one or more # of them, use { dg-output "" { xfail a-b-c ... } }. The "" won't contribute # to the expected output. # proc dg-output { args } { upvar dg-output-text output-text if { [llength $args] > 3 } { error "[lindex $args 0]: too many arguments" return } # Allow target dependent output. set expected [lindex ${output-text} 0] if { [llength $args] >= 3 } { switch [dg-process-target [lindex $args 2]] { "N" { return } "S" { } "F" { set expected "F" } # Don't override a previous xfail. "P" { } } } if { [llength ${output-text}] == 1 } { # First occurrence. set output-text [list $expected [lindex $args 1]] } else { set output-text [list $expected "[lindex ${output-text} 1][lindex $args 1]"] } } proc dg-final { args } { upvar dg-final-code final-code if { [llength $args] > 2 } { error "[lindex $args 0]: too many arguments" return } #send_user "dg-final: $args\n" append final-code "[lindex $args 1]\n" } # Set up our environment # # There currently isn't much to do, but always calling it allows us to add # enhancements without having to update our callers. # It must be run before calling `dg-test'. # proc dg-init { } { } # dg-runtest -- simple main loop useful to most testsuites # # FLAGS is a set of options to always pass. # DEFAULT_EXTRA_FLAGS is a set of options to pass if the testcase doesn't # specify any (with dg-option). # ??? We're flipping between "flag" and "option" here. proc dg-runtest { testcases flags default-extra-flags } { global runtests foreach testcase $testcases { # If we're only testing specific files and this isn't one of them, skip it. if {![runtest_file_p $runtests $testcase]} { continue } verbose "Testing [file tail [file dirname $testcase]]/[file tail $testcase]" dg-test $testcase $flags ${default-extra-flags} } } # dg-trim-dirname -- rip DIR_NAME out of FILE_NAME # # Syntax: dg-trim-dirname dir_name file_name # We need to go through this contorsion in order to properly support # directory-names which might have embedded regexp special characters. # proc dg-trim-dirname { dir_name file_name } { set special_character "\[\?\+\-\.\(\)\$\|\]" regsub -all $special_character $dir_name "\\\\&" dir_name regsub "^$dir_name/?" $file_name "" file_name return $file_name } # dg-test -- runs a new style DejaGnu test # # Syntax: dg-test [-keep-output] prog tool_flags default_extra_tool_flags # # PROG is the full path name of the file to pass to the tool (eg: compiler). # TOOL_FLAGS is a set of options to always pass. # DEFAULT_EXTRA_TOOL_FLAGS are additional options if the testcase has none. #proc dg-test { prog tool_flags default_extra_tool_flags } { proc dg-test { args } { global dg-do-what-default dg-interpreter-batch-mode dg-linenum-format global errorCode errorInfo global tool global srcdir ;# eg: /calvin/dje/build/gcc/./testsuite/ global host_triplet target_triplet set keep 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] == "-keep-output" } { set keep 1 } elseif { [string index [lindex $args $i] 0] == "-" } { clone_output "ERROR: dg-test: illegal argument: [lindex $args $i]" return } else { break } } } if { $i + 3 != [llength $args] } { clone_output "ERROR: dg-test: missing arguments in call" return } set prog [lindex $args $i] set tool_flags [lindex $args [expr {$i + 1}]] set default_extra_tool_flags [lindex $args [expr {$i + 2}]] set text "\[- A-Za-z0-9\.\;\"\_\:\'\`\(\)\!\#\=\+\?\&\*]*" set name [dg-trim-dirname $srcdir $prog] # If we couldn't rip $srcdir out of `prog' then just do the best we can. # The point is to reduce the unnecessary noise in the logs. Don't strip # out too much because different testcases with the same name can confuse # `test-tool'. if {[string match "/*" $name]} { set name "[file tail [file dirname $prog]]/[file tail $prog]" } # We append the compilation flags, if any, to ensure that the test case # names are unique. if { "$tool_flags" != "" } { set name "$name $tool_flags" } # Process any embedded dg options in the testcase. # Use "" for the second element of dg-do-what so we can tell if it's been # explicitly set to "S". set dg-do-what [list ${dg-do-what-default} "" P] set dg-excess-errors-flag 0 set dg-messages "" set dg-extra-tool-flags $default_extra_tool_flags set dg-final-code "" # `dg-output-text' is a list of two elements: pass/fail and text. # Leave second element off for now (indicates "don't perform test") set dg-output-text "P" # Define our own "special function" `unknown' so we catch spelling errors. # But first rename the existing one so we can restore it afterwards. if { [info procs dg-save-unknown] == [list] } { rename unknown dg-save-unknown proc unknown { args } { return -code error "unknown dg option: $args" } } set tmp [dg-get-options $prog] foreach op $tmp { verbose "Processing option: $op" 3 set status [catch "$op" errmsg] if { $status != 0 } { if { 0 && [info exists errorInfo] } { # This also prints a backtrace which will just confuse # testcase writers, so it's disabled. perror "$name: $errorInfo\n" } else { perror "$name: $errmsg for \"$op\"\n" } # ??? The call to unresolved here is necessary to clear `errcnt'. # What we really need is a proc like perror that doesn't set errcnt. # It should also set exit_status to 1. unresolved "$name: $errmsg for \"$op\"" return } } # Restore normal error handling. if { [info procs dg-save-unknown] != [list] } { rename unknown "" rename dg-save-unknown unknown } # If we're not supposed to try this test on this target, we're done. if { [lindex ${dg-do-what} 1] == "N" } { unsupported "$name" verbose "$name not supported on this target, skipping it" 3 return } # Run the tool and analyze the results. # The result of ${tool}-dg-test is in a bit of flux. # Currently it is the name of the output file (or "" if none). # If we need more than this it will grow into a list of things. # No intention is made (at this point) to preserve upward compatibility # (though at some point we'll have to). set results [${tool}-dg-test $prog [lindex ${dg-do-what} 0] "$tool_flags ${dg-extra-tool-flags}"] set comp_output [lindex $results 0] set output_file [lindex $results 1] #send_user "\nold_dejagnu.exp: comp_output1 = :$comp_output:\n\n" #send_user "\nold_dejagnu.exp: message = :$message:\n\n" #send_user "\nold_dejagnu.exp: message length = [llength $message]\n\n" foreach i ${dg-messages} { verbose "Scanning for message: $i" 4 # Remove all error messages for the line [lindex $i 0] # in the source file. If we find any, success! set line [lindex $i 0] set pattern [lindex $i 2] set comment [lindex $i 3] #send_user "Before:\n$comp_output\n" if {[regsub -all "(^|\n)(\[^\n\]+$line\[^\n\]*($pattern)\[^\n\]*\n?)+" $comp_output "\n" comp_output]} { set comp_output [string trimleft $comp_output] set ok pass set uhoh fail } else { set ok fail set uhoh pass } #send_user "After:\n$comp_output\n" # $line will either be a formatted line number or a number all by # itself. Delete the formatting. scan $line ${dg-linenum-format} line switch [lindex $i 1] { "ERROR" { $ok "$name $comment (test for errors, line $line)" } "XERROR" { x$ok "$name $comment (test for errors, line $line)" } "WARNING" { $ok "$name $comment (test for warnings, line $line)" } "XWARNING" { x$ok "$name $comment (test for warnings, line $line)" } "BOGUS" { $uhoh "$name $comment (test for bogus messages, line $line)" } "XBOGUS" { x$uhoh "$name $comment (test for bogus messages, line $line)" } "BUILD" { $uhoh "$name $comment (test for build failure, line $line)" } "XBUILD" { x$uhoh "$name $comment (test for build failure, line $line)" } "EXEC" { } "XEXEC" { } } #send_user "\nold_dejagnu.exp: comp_output2= :$comp_output:\n\n" } #send_user "\nold_dejagnu.exp: comp_output3 = :$comp_output:\n\n" # Remove messages from the tool that we can ignore. #send_user "comp_output: $comp_output\n" set comp_output [prune_warnings $comp_output] if { [info proc ${tool}-dg-prune] != "" } { set comp_output [${tool}-dg-prune $target_triplet $comp_output] switch -glob $comp_output { "::untested::*" { regsub "::untested::" $comp_output "" message untested "$name: $message" return } "::unresolved::*" { regsub "::unresolved::" $comp_output "" message unresolved "$name: $message" return } "::unsupported::*" { regsub "::unsupported::" $comp_output "" message unsupported "$name: $message" return } } } # See if someone forgot to delete the extra lines. regsub -all "\n+" $comp_output "\n" comp_output regsub "^\n+" $comp_output "" comp_output #send_user "comp_output: $comp_output\n" # Don't do this if we're testing an interpreter. # FIXME: why? if { ${dg-interpreter-batch-mode} == 0 } { # Catch excess errors (new bugs or incomplete testcases). if {${dg-excess-errors-flag}} { setup_xfail "*-*-*" } if {![string match "" $comp_output]} { fail "$name (test for excess errors)" send_log "Excess errors:\n$comp_output\n" } else { pass "$name (test for excess errors)" } } # Run the executable image if asked to do so. # FIXME: This is the only place where we assume a standard meaning to # the `keyword' argument of dg-do. This could be cleaned up. if { [lindex ${dg-do-what} 0] == "run" } { if {![file exists $output_file]} { unresolved "$name compilation failed to produce executable" } else { set status -1 set result [${tool}_load $output_file] set status [lindex $result 0] set output [lindex $result 1] #send_user "After exec, status: $status\n" if { [lindex ${dg-do-what} 2] == "F" } { setup_xfail "*-*-*" } if { "$status" == "pass" } { pass "$name execution test" verbose "Exec succeeded." 3 if { [llength ${dg-output-text}] > 1 } { #send_user "${dg-output-text}\n" if { [lindex ${dg-output-text} 0] == "F" } { setup_xfail "*-*-*" } set texttmp [lindex ${dg-output-text} 1] if { ![regexp $texttmp ${output}] } { fail "$name output pattern test" send_log "Output was:\n${output}\nShould match:\n$texttmp\n" verbose "Failed test for output pattern $texttmp" 3 } else { pass "$name output pattern test" verbose "Passed test for output pattern $texttmp" 3 } unset texttmp } } elseif { "$status" == "fail" } { # It would be nice to get some info out of errorCode. if {[info exists errorCode]} { verbose "Exec failed, errorCode: $errorCode" 3 } else { verbose "Exec failed, errorCode not defined!" 3 } fail "$name execution test" } else { $status "$name execution test" } } } # Are there any further tests to perform? # Note that if the program has special run-time requirements, running # of the program can be delayed until here. Ditto for other situations. # It would be a bit cumbersome though. if {![string match ${dg-final-code} ""]} { regsub -all "\\\\(\[{}\])" ${dg-final-code} "\\1" dg-final-code # Note that the use of `args' here makes this a varargs proc. proc dg-final-proc { args } ${dg-final-code} verbose "Running dg-final tests." 3 verbose "dg-final-proc:\n[info body dg-final-proc]" 4 if {[catch "dg-final-proc $prog" errmsg]} { perror "$name: error executing dg-final: $errmsg" # ??? The call to unresolved here is necessary to clear `errcnt'. # What we really need is a proc like perror that doesn't set errcnt. # It should also set exit_status to 1. unresolved "$name: error executing dg-final: $errmsg" } } # Do some final clean up. # When testing an interpreter, we don't compile something and leave an # output file. if { ! ${keep} && ${dg-interpreter-batch-mode} == 0 } { catch "file delete -force -- $output_file" } } # Do any necessary cleanups. # This is called at the end to undo anything dg-init did (that needs undoing). # proc dg-finish { } { # Reset this in case caller wonders whether s/he should. global prms_id set prms_id 0 # The framework doesn't like to see any error remnants, so remove them. global errorInfo if {[info exists errorInfo]} { unset errorInfo } # If the tool has a "finish" routine, call it. # There may be a bit of duplication (eg: resetting prms_id), leave it. # Let's keep these procs robust. global tool if {![string match "" [info procs ${tool}_finish]]} { ${tool}_finish } } dejagnu-1.5.3/lib/targetdb.exp0000644000175000017500000000563512361214734013152 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # Searches in the appropriate place (the board_info array) for the specified # information. # proc board_info { machine op args } { global target_info global board_info verbose "board_info $machine $op $args" 3 if {[info exists target_info($machine,name)]} { set machine $target_info($machine,name) } if { $op == "exists" } { if { [llength $args] == 0 } { if {[info exists board_info($machine,name)]} { return 1 } else { return 0 } } else { if {[info exists "board_info($machine,[lindex $args 0])"]} { return 1 } else { return 0 } } } if { [llength $args] == 0 } { verbose "getting $machine $op" 3 if {[info exists board_info($machine,$op)]} { return $board_info($machine,$op) } else { return "" } } return "" } proc target_info { op args } { return [eval "board_info target \"$op\" $args"] } proc host_info { op args } { return [eval "board_info host \"$op\" $args"] } # Fill in ENTRY with VALUE for the current board being defined. # proc set_board_info { entry value } { global board_info board if {![info exists board_info($board,$entry)]} { set board_info($board,$entry) $value } } # # Add VALUE to ENTRY for the current board being defined. # proc add_board_info { entry value } { global board_info board lappend board_info($board,$entry) $value } # Fill in ENTRY with VALUE for the current target. # proc set_currtarget_info { entry value } { global board_info set board [target_info name] if {![info exists board_info($board,$entry)]} { set board_info($board,$entry) $value } } # Unset ENTRY for the current board being defined. # proc unset_board_info { entry } { global board_info board if {[info exists board_info($board,$entry)]} { unset board_info($board,$entry) } } # Unset ENTRY for the current board being defined. # proc unset_currtarget_info { entry } { global board_info set board [target_info name] if {[info exists board_info($board,$entry)]} { unset board_info($board,$entry) } } dejagnu-1.5.3/MAINTAINERS0000644000175000017500000000014112320744410011544 00000000000000The maintainers of DejaGnu are: Rob Savoye Ben Elliston dejagnu-1.5.3/contrib/0000775000175000017500000000000012506237416011606 500000000000000dejagnu-1.5.3/contrib/compare_tests0000755000175000017500000000506312320744410014315 00000000000000#!/bin/sh # This script automatically test the given tool with the tool's test cases, # reporting anything of interest. # exits with 0 if there is nothing of interest # exits with 1 if there is something interesting # exits with 2 if an error occurred # Give two .sum files to compare them # Written by Mike Stump tool=gxx tmp1=/tmp/$tool-testing.$$a tmp2=/tmp/$tool-testing.$$b now_s=/tmp/$tool-testing.$$d before_s=/tmp/$tool-testing.$$e if [ "$2" = "" ]; then echo "Usage: $0 previous current" >&2 exit 2 fi sed 's/^XFAIL/FAIL/; s/^XPASS/PASS/' < "$1" | awk '/^Running target / {target = $3} { if (target != "unix") { sub(/: /, "&"target": " ); }; print $0; }' >$tmp1 sed 's/^XFAIL/FAIL/; s/^XPASS/PASS/' < "$2" | awk '/^Running target / {target = $3} { if (target != "unix") { sub(/: /, "&"target": " ); }; print $0; }' >$tmp2 before=$tmp1 now=$tmp2 exit_status=0 trap "rm -f $tmp1 $tmp2 $now_s $before_s" 0 1 2 3 5 9 13 15 sort -t ':' +1 "$now" > "$now_s" 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 fail, but worked before:" echo cat $tmp2 echo exit_status=1 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 '^[PF]A[SI][SL]' "$before_s" | sed 's/^[^:]*:[ ]//' | comm -23 $tmp1 - >$tmp2 grep -s . $tmp2 >/dev/null if [ $? = 0 ]; then echo "New tests that FAIL:" echo cat $tmp2 echo exit_status=1 fi grep '^PASS' "$now_s" | sed 's/^[^:]*:[ ]//' >$tmp1 grep '^[PF]A[SI][SL]' "$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 '^[PF]A[SI][SL]' "$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 '^[PF]A[SI][SL]' "$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 exit $exit_status dejagnu-1.5.3/config.guess0000775000175000017500000012367212470770006012416 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-01-01' # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # 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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) 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 case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # 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. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; 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 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; 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 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; 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 ;; 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 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /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 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # 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 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ 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 -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${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 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????: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 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi 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 ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #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 (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build 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 -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; 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 i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # 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. echo i386-sequent-sysv4 exit ;; 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 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; 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|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; 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 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*: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; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' 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; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *: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 ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; 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 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: dejagnu-1.5.3/depcomp0000755000175000017500000005601612344212703011441 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 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, 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, see . # 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. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: dejagnu-1.5.3/config/0000775000175000017500000000000012506237416011413 500000000000000dejagnu-1.5.3/config/m32r-stub.exp0000644000175000017500000000162212320744410013575 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. load_generic_config "gdb_stub" dejagnu-1.5.3/config/m68k-emc.exp0000644000175000017500000000405612320744410013372 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 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 { } } } dejagnu-1.5.3/config/powerpc-bug.exp0000644000175000017500000000162212320744410014271 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. load_generic_config "gdb-comm" dejagnu-1.5.3/config/proelf.exp0000644000175000017500000000241412320744410013326 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 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\]+.*$" dejagnu-1.5.3/config/sh.exp0000644000175000017500000000162212320744410012451 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. load_generic_config "gdb-comm" dejagnu-1.5.3/config/sparclet.exp0000644000175000017500000000211112320744410013646 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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\\)" dejagnu-1.5.3/config/arc.exp0000644000175000017500000000162212320744410012604 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. load_generic_config "gdb-comm" dejagnu-1.5.3/config/cygmon.exp0000644000175000017500000000166412320744410013341 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. load_generic_config "gdb-comm" set_board_info send_initial_cr 1 dejagnu-1.5.3/config/tic80.exp0000644000175000017500000000547412320744410012777 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # # 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 dejagnu-1.5.3/config/cfdbug.exp0000644000175000017500000000244312320744410013273 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/config/m68hc11.exp0000644000175000017500000000162212320744410013126 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. load_generic_config "gdb-comm" dejagnu-1.5.3/config/base68k.exp0000644000175000017500000002057412320744410013311 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/config/dve.exp0000644000175000017500000000172512320744410012621 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # For Densan MIPS boards we use gdb to load and execute programs. load_generic_config "gdb-comm" dejagnu-1.5.3/config/gdb_stub.exp0000644000175000017500000003626612320744410013644 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" dejagnu-1.5.3/config/default.exp0000644000175000017500000000235412320744410013466 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file was written by Rob Savoye . proc ${tool}_version { } { verbose "WARNING: Using the default proc for tool_version" 2 } proc ${tool}_exit {} { verbose "WARNING: Using the default proc for tool_exit" 2 } proc ${tool}_start { } { global spawn_id verbose "WARNING: Using the default proc for tool_start" 2 return $spawn_id } dejagnu-1.5.3/config/base-config.exp0000644000175000017500000000300012320744410014204 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # # 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] } dejagnu-1.5.3/config/arm-ice.exp0000644000175000017500000000162212320744410013354 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. load_generic_config "gdb-comm" dejagnu-1.5.3/config/vr5000.exp0000644000175000017500000000173712320744410013002 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # We're using a ddb monitor, but we want to use the ethernet to load files. load_generic_config "ddb-ether" dejagnu-1.5.3/config/h8300.exp0000644000175000017500000000162212320744410012601 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. load_generic_config "gdb-comm" dejagnu-1.5.3/config/vxworks.exp0000644000175000017500000003071512320744410013567 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file was originally written by Rob Savoye # and modified by Bob Manson . # # 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] } { file delete -force -- $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 dejagnu-1.5.3/config/sim.exp0000644000175000017500000001017112320744410012626 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # # 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 "" if { [board_info target sim,protocol] == "sid" } { set cmd "-e \"set cpu-loader file [list $prog]\"" } elseif { [board_info target sim,protocol] == "rawsid" } { set cmd "--load=$prog" } else { set cmd $prog } # 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 "${cmd} < $inpfile" "readonly"] } else { set res [remote_spawn target "${cmd}"] } 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] } proc sim_download { dest file args } { return [remote_download host $file $args] } proc sim_upload { dest srcfile args } { return [remote_upload host $srcfile $args] } proc sim_exec { dest srcfile args } { perror "Remote execution for simulators not implemented." verbose -log "Remote execution for simulators not implemented." return -1 } proc sim_file { board args } { return [eval [list remote_file host] $args] } 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 dejagnu-1.5.3/config/i960.exp0000644000175000017500000001253212320744410012530 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # # 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] set status -1 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 dejagnu-1.5.3/config/gdb-comm.exp0000644000175000017500000003762512320744410013540 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" } -re ".*Make breakpoint pending.*\\\? \\(y or \\\[n\\\]\\) $" { remote_send host "y\n" return "maybe" } 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" { } } } 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] } } # 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 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" dejagnu-1.5.3/config/ddb-ether.exp0000644000175000017500000001072412320744410013700 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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> " dejagnu-1.5.3/config/m32r.exp0000644000175000017500000000162212320744410012622 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. load_generic_config "gdb-comm" dejagnu-1.5.3/config/sid.exp0000644000175000017500000000526312320744410012623 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # Routines for loading and running programs on a SID simulator. # Written by Ben Elliston . # See default.exp for explanation of arguments and results. load_generic_config "sim" # Treat sid as a remote board set_board_info use_gdb_stub 1 # 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 signals and can't return results. set_board_info gdb,nosignals 1 set_board_info gdb,noresults 1 # Don't expect interrupts to work in gdb testsuite proc set_host_info { entry value } { global target_info board_info verbose "set_host_info $entry $value" 3 set machine host if {[info exists target_info($machine,name)]} { set machine $target_info($machine,name) } set board_info($machine,$entry) $value } set_host_info gdb,nointerrupts 1 # Cannot pass command line arguments set_board_info noargs 1 # Configure TCP/IP connection to sid set_board_info connect telnet set_board_info netport localhost:[expr {3000 + [clock clicks] % 2000}] set_board_info gdb,big_rx_buffers 1 set_board_info gdb_protocol "remote" # ... or "async" or "extended-remote" or "extended-async" # 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 "" # Used by a few gdb tests. SID doesn't allow hardware watchpoints. set_board_info gdb,no_hardware_watchpoints 1 # Additional sid options # eg: # # set_board_info sim,options "--mksid" dejagnu-1.5.3/config/i386-bozo.exp0000644000175000017500000000302712320744410013500 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 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 } dejagnu-1.5.3/config/unix.exp0000644000175000017500000001033412320744410013022 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file was written by Rob Savoye . 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 "" set orig_ld_library_path "" 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]} { set ld_library_path "" } set orig_ld_library_path "[getenv LD_LIBRARY_PATH]" setenv LD_LIBRARY_PATH "$ld_library_path:$orig_ld_library_path" setenv SHLIB_PATH "$ld_library_path:$orig_ld_library_path" verbose -log "Setting LD_LIBRARY_PATH to $ld_library_path:$orig_ld_library_path" 2 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]} { setenv LD_LIBRARY_PATH $orig_ld_library_path setenv SHLIB_PATH $orig_ld_library_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] } setenv LD_LIBRARY_PATH $orig_ld_library_path setenv SHLIB_PATH $orig_ld_library_path 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" dejagnu-1.5.3/config/bug.exp0000644000175000017500000000227312320744410012617 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" dejagnu-1.5.3/config/adb.exp0000644000175000017500000001205312320744410012565 00000000000000# Copyright (C) 2013 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu 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. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # Get serial number in case of multiple devices # proc adb_serial {} { # If the user has ADB_SERIAL set, use that, otherwise default to the # only device. set serial "[getenv ADB_SERIAL]" if { $serial == "" } { set status [catch "exec adb devices |& wc -l" output] if { $output > 3 } { perror "Set ADB_SERIAL in your environment to specify the correct target device!" } return "" } else { return "-s $serial" } } # # Connect to hostname using adb # proc adb_open { hostname } { global spawn_id set tries 0 set result -1 if [board_info ${hostname} exists shell_prompt] { set shell_prompt [board_info ${hostname} shell_prompt] } else { set shell_prompt "root@android:/ # " } if [board_info $hostname exists fileid] { unset board_info($hostname,fileid) } set serial [adb_serial] if { $serial != "" } { spawn adb [adb_serial] shell } else { spawn adb shell } if { $spawn_id < 0 } { perror "invalid spawn id from adb" return -1 } send "\r\n" while { $tries <= 3 } { expect { -re ".*$shell_prompt.*$" { verbose "Got prompt\n" set result 0 break } timeout { warning "adb shell: timed out trying to connect." } eof { perror "adb shell: got EOF while trying to connect." break } } incr tries } if { $result < 0 } { # perror "adb shell: couldn't connect after $tries tries." catch "close -i $spawn_id" set spawn_id -1 } else { set board_info($hostname,fileid) $spawn_id } return $spawn_id } # # Download $srcfile to $destfile on $desthost. # proc adb_download {desthost srcfile destfile} { set serial [adb_serial] verbose "Removing old executable: adb $serial shell rm $destfile" 3 set status [catch "exec adb $serial shell rm $destfile |& cat" output] verbose "Downloading: adb $serial shell push $srcfile $destfile" 3 set status [catch "exec adb $serial push $srcfile $destfile |& cat" output] if { $status == 0 } { verbose "Copied $srcfile to $destfile" 2 return $destfile } else { verbose "Download to target failed, $output." return "" } } proc adb_file {dest op args} { set file [lindex $args 0] verbose "Executing command: $op $args" 2 switch $op { exists { set status [catch "exec adb [adb_serial] shell ls |& cat" out] } delete { set status [catch "exec adb [adb_serial] shell rm $file |& cat" rmout] } } return [eval remote_raw_file \"$dest\" \"$op\" $args] } proc adb_upload {desthost srcfile destfile} { set status [catch "exec adb [adb_serial] pull $srcfile $destfile |& cat" output] if { $status == 0 } { verbose "Copied $srcfile to $destfile" 2 return $destfile } else { verbose "Upload from $desthost failed, $output." return "" } } # # Execute "$cmd $args[0]" on $boardname. # proc adb_exec { boardname cmd args } { global remove_test if { [llength $args] > 0 } { set pargs [lindex $args 0] if { [llength $args] > 1 } { set inp [lindex $args 1] } else { set inp "" } } else { set pargs "" set inp "" } # If CMD sends any output to stderr, exec will think it failed. More often # than not that will be true, but it doesn't catch the case where there is # no output but the exit code is non-zero. if { $inp == "" } { set inp "/dev/null" } verbose "Executing $boardname:$cmd $pargs < $inp " # Execute commands only from temporary folder, therefore do "cd" first global android_tmp_dir set status [catch "exec cat $inp | adb [adb_serial] shell cd $android_tmp_dir \&\& \( $cmd $pargs \) \\; echo XYZ\\\$\\\{\?\\\}ZYX |& cat" output] # `status' doesn't mean much here other than adb worked ok. # What we want is whether $cmd ran ok. if { $status != 0 } { regsub "XYZ(\[0-9\]*)ZYX\n?" $output "" output return [list -1 "adb to $boardname failed for $cmd, $output"] } regexp "XYZ(\[0-9\]*)ZYX" $output junk status verbose "adb_exec: status:$status text:$output" 4 if { $status == "" } { return [list -1 "Couldn't parse adb output, $output."] } regsub "XYZ(\[0-9\]*)ZYX\n?" $output "" output # Delete one trailing \n because that is what `exec' will do and we want # to behave identical to it. regsub "\n$" $output "" output return [list [expr $status != 0] $output] } dejagnu-1.5.3/config/mips-idt.exp0000644000175000017500000000200612320744410013562 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" dejagnu-1.5.3/config/ddb.exp0000644000175000017500000000526512320744410012577 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" { incr 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 } dejagnu-1.5.3/config/dos.exp0000644000175000017500000003016112320744410012624 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 global board_info if {![info exists destbat_num]} { set destbat_num [pid] } if { [board_info $dest conninfo] == "" } { 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" } 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 [file join ${comp} winsup new-cygwin1.dll]]} { set dll "${comp}/winsup/new-cygwin1.dll" set dll_name "cygwin1.dll" } elseif {[file exists [file join ${comp} winsup new-cygwin.dll]]} { set dll "${comp}/winsup/new-cygwin.dll" set dll_name "cygwin.dll" } elseif {[file exists [file join ${comp} lib cygwin1.dll]]} { set dll "${comp}/lib/cygwin1.dll" set dll_name "cygwin1.dll" } elseif {[file exists [file join ${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 [file join [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 dejagnu-1.5.3/config/vr4300.exp0000644000175000017500000000165212320744410013000 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # We're using a ddb monitor. load_generic_config "ddb" dejagnu-1.5.3/config/d10v.exp0000644000175000017500000000162212320744410012611 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. load_generic_config "gdb-comm" dejagnu-1.5.3/config/slite.exp0000644000175000017500000000162212320744410013157 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. load_generic_config "gdb_stub" dejagnu-1.5.3/config/mn10200-eval.exp0000644000175000017500000000173412320744410013765 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # For MN10200 evaluation boards we use gdb to load and execute programs. load_generic_config "gdb-comm" dejagnu-1.5.3/config/mn10300-eval.exp0000644000175000017500000000173412320744410013766 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # For MN10300 evaluation boards we use gdb to load and execute programs. load_generic_config "gdb-comm" dejagnu-1.5.3/config/netware.exp0000644000175000017500000001264612320744410013514 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 # FIXME: rootme is undefined. 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. # # FIXME: tmpdir is undefined. 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 [file delete -force -- $lnk $nlm] if { $ret == 0 } { return "pass" } else { return "fail" } } # # ${tool}_exit -- shutdown the connection # proc ${board}_exit {} { remote_close target } dejagnu-1.5.3/config/README0000644000175000017500000000235612320744410012206 00000000000000The 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. dejagnu-1.5.3/config/rom68k.exp0000644000175000017500000000267512320744410013176 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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).*$" dejagnu-1.5.3/config/vr4100.exp0000644000175000017500000000165212320744410012776 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # We're using a ddb monitor. load_generic_config "ddb" dejagnu-1.5.3/testsuite/0000775000175000017500000000000012506237416012177 500000000000000dejagnu-1.5.3/testsuite/libdejagnu/0000775000175000017500000000000012506237416014303 500000000000000dejagnu-1.5.3/testsuite/libdejagnu/unit.cc0000644000175000017500000000747212320744410015510 00000000000000// unit.cc -- This is a test case for the dejagnu.h classes. // Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, // 2010 Free Software Foundation, Inc. // This file is part of DejaGnu. // DejaGnu is free software; you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, // Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. #include #include #include #include #include #include #include #include using namespace std; TestState runtest; TestState test; class TestClass1 { public: string tname; unsigned int tnum; }; TestClass1 testClass1, testClass2, testClass3; TestClass1 *testClassPtr; // We have to do this silly crap with renaming the output string, so // the generic Tcl code that looks for the output state gets confused, // and records random duplicate messages. const char *os1[] = { "FAI: ", "PAS: ", "UNT: ", "UNR: " }; const char *os2[] = { "FAILED: ", "PASSED: ", "UNTESTED: ", "UNRESOLVED: " }; int main (int argc, char *argv[]) { regex_t regex_pat; outstate = os1; stringstream strbuf; streambuf *pbuf; // Replace the output buffer for cout, so we can examine it to see // what was displayed. Otherwise, there is no way we can test the // logging functions completely. pbuf = cout.rdbuf (); testClass1.tname = "testType1"; testClass1.tnum = 1; testClass2.tname = "testType2"; testClass2.tnum = 2; testClass3.tname = "testType3"; testClass3.tnum = 3; // Test the pass message. cout.rdbuf (strbuf.rdbuf ()); strbuf.str (""); test.pass ("bogus pass message for testing"); outstate = os2; cout.rdbuf (pbuf); if (strncmp (strbuf.str().c_str(), "\tPAS: bogus pass message", 22) == 0) runtest.pass ("Pass message"); else runtest.fail ("Pass message"); // Test the fail message. cout.rdbuf (strbuf.rdbuf ()); strbuf.str (""); outstate = os1; test.fail ("bogus fail message for testing"); cout.rdbuf (pbuf); outstate = os2; if (strncmp (strbuf.str().c_str(), "\tFAI: bogus fail message", 22) == 0) runtest.pass ("Fail message"); else runtest.fail ("Fail message"); // Test the untested message. cout.rdbuf (strbuf.rdbuf ()); strbuf.str (""); outstate = os1; test.untested ("bogus untested message for testing"); cout.rdbuf (pbuf); outstate = os2; if (strncmp (strbuf.str().c_str(), "\tUNT: bogus untested message", 21) == 0) { runtest.pass ("Untested message"); } else { runtest.fail ("Untested message"); } // Test the unresolved message. cout.rdbuf (strbuf.rdbuf ()); strbuf.str (""); outstate = os1; test.unresolved ("bogus unresolved message for testing"); cout.rdbuf (pbuf); outstate = os2; if (strncmp (strbuf.str().c_str(), "\tUNR: bogus unresolved message", 21) == 0) runtest.pass ("Unresolved message"); else runtest.fail ("Unresolved message"); // Make sure we got everything in the totals. cout.rdbuf (strbuf.rdbuf ()); strbuf.str (""); regcomp (®ex_pat, "\t#passed.*#real failed.*#untested.*#unresolved", REG_NOSUB); test.totals (); cout.rdbuf (pbuf); if (regexec (®ex_pat, strbuf.str().c_str(), 0, (regmatch_t *) 0, 0) == 0) runtest.pass ("Totals message"); else runtest.fail ("Totals message"); return 0; } dejagnu-1.5.3/testsuite/libdejagnu/tunit.exp0000644000175000017500000000335312320744410016075 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, # 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. load_lib "dejagnu.exp" # Uncomment these for debugging help #strace $tracelevel # exp_internal -f dbg.log 1 # Get the size of the module being tested. set sizes [exe_size "unit"] if {[lindex $sizes 0] == "-1"} { perror "Couldn't get the object file size" 0 } # Extract the text section size set textsize [lindex $sizes 0] # Extract the data section size set datasize [lindex $sizes 1] # FIXME: This ultimately needs to be recorded in the testing database, # which doesn't exist yet. Till then it's kinda bogus, but I figured # it would be useful having working code to get this data. So we print # it out, just for the demo aspects. verbose "Text section size of proctor is 0x$textsize" verbose "Data section size of proctor is 0x$datasize" # Execute the test case, and analyse the output if { [host_execute "unit"] != "" } { perror "unit had an execution error" 0 } dejagnu-1.5.3/testsuite/lib/0000775000175000017500000000000012506237416012745 500000000000000dejagnu-1.5.3/testsuite/lib/util-defs.exp0000644000175000017500000000524012320744410015265 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, # 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file was written by Rob Savoye . # # Run a utility and test the result. # # Parameters: # First one is the command # Second one is command arguments # Third one is the file name # Fourth one is the regexp style pattern to match for a PASS # # Returns: # 1 if the test failed, # 0 if the test passes, # -1 if there was an internal error. # proc util_test { args } { global verbose # get the parameters set cmd [lindex $args 0] verbose "Utility to execute is $cmd" 2 set cmd_arg [lindex $args 1] verbose "Command line arguments are $cmd_arg" 2 set file [lindex $args 2] verbose "The file name to use is $file" 2 set pattern [lindex $args 3] verbose "The pattern to match is \"$pattern\"" 2 if [info exists file] { if ![string match "" $file] { if ![file exists $file] { perror "$file doesn't exist" return -1 } } } # Run the utility to be tested and analyze the results. set comp_output [util_start $cmd $cmd_arg $file] verbose "Output is \"$comp_output\"" 2 verbose "Pattern is \"$pattern\"" 2 if [regexp "$pattern" $comp_output] { verbose "Pattern matches." 2 return 0 } verbose "Pattern does not match." 2 return 1 } # # Run the utility # # Return NULL or the output. # proc util_start { args } { global verbose set cmd [lindex $args 0] set cmd_arg [lindex $args 1] set file [lindex $args 2] if {[which $cmd] == 0} { perror "Can't find $cmd" return "" } if { $verbose > 0 } { verbose "Spawning \"$cmd $cmd_arg $file\"" } else { send_log "Spawning \"$cmd $cmd_arg $file\"\n" } catch "exec $cmd $cmd_arg $file" comp_output if ![string match "" $comp_output] { send_log "$comp_output\n" } return $comp_output } dejagnu-1.5.3/testsuite/lib/libsup.exp0000644000175000017500000001205112320744410014665 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, # 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # Setup an environment so we can execute library procs without DejaGnu. # # Create a default environment and start expect. # proc make_defaults_file { defs } { global srcdir global objdir global subdir global build_triplet global host_triplet global target_triplet global target_os global target_cpu # We need to setup default values and a few default procs so we # can execute library code without DejaGnu set fd [open $defs w] puts ${fd} "set tool foobar" puts ${fd} "set srcdir ${srcdir}" puts ${fd} "set objdir ${objdir}" puts ${fd} "set subdir ${subdir}" puts ${fd} "set build_triplet ${build_triplet}" puts ${fd} "set host_triplet ${host_triplet}" puts ${fd} "set target_triplet ${target_triplet}" puts ${fd} "set target_os ${target_os}" puts ${fd} "set target_cpu ${target_cpu}" puts ${fd} "set testcnt 0" puts ${fd} "set warncnt 0" puts ${fd} "set errcnt 0" puts ${fd} "set passcnt 0" puts ${fd} "set xpasscnt 0" puts ${fd} "set kpasscnt 0" puts ${fd} "set failcnt 0" puts ${fd} "set xfailcnt 0" puts ${fd} "set kfailcnt 0" puts ${fd} "set prms_id 0" puts ${fd} "set bug_id 0" puts ${fd} "set exit_status 0" puts ${fd} "set untestedcnt 0" puts ${fd} "set unresolvedcnt 0" puts ${fd} "set unsupportedcnt 0" puts ${fd} "set xfail_flag 0" puts ${fd} "set xfail_prms 0" puts ${fd} "set kfail_flag 0" puts ${fd} "set kfail_prms 0" puts ${fd} "set mail_logs 0" puts ${fd} "set multipass_name 0" catch "close $fd" } proc start_expect { } { global spawn_id global base_dir # We need to setup default values and a few default procs so we # can execute library code without DejaGnu set defaults_file setval.tmp make_defaults_file $defaults_file set fd [open ${defaults_file} w] # look for expect if ![info exists EXPECT] { set EXPECT [findfile $base_dir/../../expect/expect "$base_dir/../../expect/expect" expect] verbose "EXPECT defaulting to $EXPECT" 2 } # catch close # catch wait # Start expect runing spawn "$EXPECT" expect { -re "expect.*> " { verbose "Started the child expect shell" 2 } timeout { perror "Timed out starting the child expect shell." return -1 } } # Load the defaults file exp_send "source ${defaults_file}\n" expect { "expect*> " { verbose "Loaded testing defaults file." 2 return 1 } timeout { perror "Couldn't load the testing defaults file." return -1 } } } # # Stop the runing expect process # proc stop_expect { } { global spawn_id # make expect exit exp_send "exit\n" catch "close -i $spawn_id" catch "wait -i $spawn_id" } # # Load the library to test # proc load_test_lib { lib } { global spawn_id exp_send "source ${lib}\n" expect { "expect*> " { verbose "Testing ${lib}" 2 } timeout { perror "Couldn't load the libraries to test" return -1 } } } # # test a library proc that emits patterns # proc exp_test { cmd pattern msg } { global spawn_id exp_send "puts ACK ; $cmd ; puts NAK\r\n" expect { "puts ACK*puts NAK" { verbose "Got command echo" 3 } timeout { warning "Never got command echo" } } expect { "ACK" { exp_continue } -re "\r\n1\r\n" { warning "$msg, 1 was returned" exp_continue } -re "\r\n0\r\n" { warning "$msg, 0 was returned" exp_continue } "$pattern" { pass "$msg" } timeout { fail "$msg" } } } # test a config proc that only returns a code # ex... config_test "isbuild $build_triplet" "pass" "fail" "isbuild, native" # args are: command, true condition, false condition, message to print proc config_test { cmd true false msg } { global spawn_id set timeout 20 exp_send "puts ACK ; puts \[$cmd\] ; puts NAK\r\n" expect { "puts ACK*$cmd*puts NAK" { verbose "Got command echo" 3 } timeout { warning "Never got command echo" } } expect { -re "Checking pattern*with*\[\r\n\]" { exp_continue } -re "\r\n1\r\n" { $true "$msg" } -re "\r\n0\r\n" { $false "$msg" } timeout { perror "$msg (timed out)" } } } dejagnu-1.5.3/testsuite/runtest.all/0000775000175000017500000000000012506237416014452 500000000000000dejagnu-1.5.3/testsuite/runtest.all/config.test0000644000175000017500000000553312320744410016533 00000000000000# test clone_output set srcdir [lindex $argv 0] set subdir [lindex $argv 1] set objdir [lindex $argv 2] if [ file exists $objdir/setval.tmp ] { source $objdir/setval.tmp } else { puts "ERROR: $objdir/setval.tmp doesn't exist" } if [ file exists $srcdir/$subdir/default_procs.tcl ] { source "$srcdir/$subdir/default_procs.tcl" } else { puts "ERROR: $srcdir/$subdir/default_procs.tcl doesn't exist" } if [ file exists $srcdir/../lib/framework.exp] { source $srcdir/../lib/framework.exp } else { puts "ERROR: $srcdir/../lib/framework.exp doesn't exist" } set all_flag 1 set host_triplet i586-unknown-linux set target_triplet i586-unknown-linux set target_cpu i586 set target_os linux set build_triplet i586-unknown-linux # FIXME: should use run_tests here, but due to Tcl's weird scoping rules, I get # problems. # # Tests for a native configuration # if [isbuild $build_triplet] { puts "PASSED: isbuild, native" } else { puts "FAILED: isbuild, native" } if [isbuild $target_cpu-*-$target_os ] { puts "PASSED: isbuild, native regexp" } else { puts "FAILED: isbuild, native regexp" } if [isbuild hppa-ibm-macos ] { puts "FAILED: isbuild, native bogus config string" } else { puts "PASSED: isbuild, native bogus config string" } # ishost tests if [ishost $host_triplet] { puts "PASSED: ishost, native" } else { puts "FAILED: ishost, native" } if [ishost $target_cpu-*-$target_os] { puts "PASSED: ishost, native regexp" } else { puts "FAILED: ishost, native regexp" } if [ishost hppa-ibm-macos] { puts "FAILED: ishost, native bogus config string" } else { puts "PASSED: ishost, native bogus config string" } # istarget tests if [istarget $target_triplet] { puts "PASSED: istarget, native" } else { puts "FAILED: istarget, native" } if [istarget $target_cpu-*-$target_os] { puts "PASSED: istarget, native regexp" } else { puts "FAILED: istarget, native regexp" } if [istarget hppa-ibm-macos] { puts "FAILED: istarget, native bogus config string" } else { puts "PASSED: istarget, native bogus config string" } # native tests if [isnative] { puts "PASSED: isnative, native" } else { puts "FAILED: isnative, native" } if [is3way] { puts "FAILED: is3way, native" } else { puts "PASSED: is3way, native" } # # Tests for a normal cross configuration # set target_triplet m68k-unknown-elf if [isnative] { puts "FAILED: isnative, cross" } else { puts "PASSED: isnative, cross" } if [is3way] { puts "FAILED: is3way, cross" } else { puts "PASSED: is3way, cross" } # # Tests for a canadian cross configuration # set host_triplet i386-unknown-winnt if [isnative] { puts "FAILED: isnative, canadian cross" } else { puts "PASSED: isnative, canadian cross" } if [is3way] { puts "PASSED: is3way, canadian cross" } else { puts "FAILED: is3way, canadian cross" } dejagnu-1.5.3/testsuite/runtest.all/load_lib.exp0000644000175000017500000000235412320744410016646 00000000000000# test load_lib # Verify that load_lib searches for a lib not only in it's default # search_dirs but also in the libdirs list of directories. # load_lib f exits with a failure if it does not find f. # Arrange for the testcase to handle this: rename exit saved_exit proc exit { args } { return [lindex $args 0] } # The test right below is supposed to fail. # Prettify default output by only printing the message in verbose mode. rename send_error saved_send_error proc send_error { args } { verbose [lindex $args 0] 2 } if { [ load_lib "subfile1" ] != 1} { fail "load_lib subfile1 found per default" } else { pass "load_lib subfile1 not found per default" } rename send_error "" rename saved_send_error send_error set extradir [file join $srcdir $subdir "topdir" "subdir1" ] global libdirs lappend libdirs $extradir verbose "now added libdirs: $libdirs" 2 # In this testcase, we did not exit 1 from load_lib as per above rename. # subfile1 thus is in the loaded_libs LUT and we won't walk the # search_dirs again. Use another file for testing the lappend worked. if { [load_lib "subfile2"] == ""} { pass "load_lib subfile2 loaded" } else { fail "load_lib subfile2 not found" } # cleanup after us rename exit "" rename saved_exit exit dejagnu-1.5.3/testsuite/runtest.all/options.exp0000644000175000017500000000665412320744410016603 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, # 20001, 2002, 2003 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file was written by Rob Savoye . load_lib util-defs.exp # move the site.exp file so we have no default to confuse us. #if [file exists $objdir/site.exp] { # catch "exec mv -f $objdir/site.exp $objdir/site.ignore" #} set fd [open site.exp w] puts ${fd} "set host_triplet $host_triplet" puts ${fd} "set srcdir $srcdir/.." puts ${fd} "set objdir $objdir/.." puts ${fd} "set tmpdir $objdir/../tmpdir" close $fd # # Set up the list. # 1st field is the command line option. # 2nd field is the pattern to match. # NOTE - No variable substitutions can be used. # 3rd field is an optional message to print with PASS/FAIL. # set tests { { "-v --tool xXx" "Found.*site\..*Loading.*utils\.exp" "Loading library files" } { "-v --tool xXx" "Expect binary is.*Using.*main test driver" "Loading basic packages" } { "--F --tool x" "Illegal Argument \"--F\"" "Bad argument" } { "--tool x" "Couldn't find tool init file" "Bad tool name" } { "--help" "USAGE:*" "Display help" } { "-v -v -v" "Verbose level is 3" "Verbose set correctly" } { "-V" "Expect version is.*Tcl version is.*Framework version is*" "--version" } { "-v --target m68k-vxworks" "Target is m68k-vxworks" "--target option" } { "-v --host sparc-sun-sunos4.1.9" "Native configuration is sparc-sun-sunos4.1.9" "--host option" } { "-v -a" "Print all test output to screen" "--all option" } { "-v --objdir xXx" "Using test binaries in xXx" "--objdir option" } { "-v --tool xXx" "Testing xXx" "--tool option" } { "-v --debug" "Expect Debugging is ON" "--debug option" } { "-v --D0" "Tcl debugger is ON" "--D0 option" } } # Commented out for now--this is failing because of a TCL8 strace interaction. # { "-v --strace 1" "Source Trace level is now 1.* 1 if" "--strace option" } # Old tests not used anymore # { "-v --build sparc-sun-sunos4.1.9" "Native configuration is sparc-sun-sunos4.1.9" "--build option" } # { "-v --srcdir xXx" "Using test sources in xXx" "--srcdir option" } foreach i $tests { if [util_test "$RUNTEST" "[lindex $i 0] -srcdir ${srcdir}/runtest.all" "" "[lindex $i 1]"] { fail "[lindex $i 2]" } else { pass "[lindex $i 2]" } } set fd [open site.exp w] puts ${fd} "set host_triplet $host_triplet" puts ${fd} "set srcdir $srcdir" puts ${fd} "set objdir $objdir" puts ${fd} "set tmpdir $objdir/tmpdir" close $fd # clean up log files left by the child runtest if [file exists $objdir/x.sum] { file delete [glob $objdir/x.*] } if [file exists $objdir/xXx.sum] { file delete [glob $objdir/xXx.*] } if [file exists dbg.log] { file delete dbg.log } dejagnu-1.5.3/testsuite/runtest.all/stats.exp0000644000175000017500000000337712320744410016245 00000000000000# Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 # Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file tests pass/fail/etc. # The way we do this is to recursively invoke ourselves on a small testsuite # and analyze the results. load_lib util-defs.exp if ![info exists tmpdir] { set tmpdir $objdir/tmpdir } if ![file isdirectory $tmpdir] { catch "file mkdir $tmpdir" } set tests { { pass "expected passes\[ \t\]+1\n" } { fail "unexpected failures\[ \t\]+1\n" } { xpass "unexpected successes\[ \t\]+1\n" } { xfail "expected failures\[ \t\]+1\n" } { kpass "unknown successes\[ \t\]+1\n" } { kfail "known failures\[ \t\]+1\n" } { untested "untested testcases\[ \t\]+1\n" } { unresolved "unresolved testcases\[ \t\]+1\n" } { unsupported "unsupported tests\[ \t\]+1\n" } } foreach t $tests { if [util_test "$RUNTEST" \ "--outdir $tmpdir STATS_TEST=[lindex $t 0] stats-sub.exp" \ "" \ [lindex $t 1]] { fail [lindex $t 0] } else { pass [lindex $t 0] } } file delete -force $tmpdir dejagnu-1.5.3/testsuite/runtest.all/target.test0000644000175000017500000001355012320744410016552 00000000000000set srcdir [lindex $argv 0] set subdir [lindex $argv 1] set objdir [lindex $argv 2] if [ file exists $objdir/setval.tmp ] { source $objdir/setval.tmp } else { puts "ERROR: $objdir/setval.tmp doesn't exist" } if [ file exists $srcdir/$subdir/default_procs.tcl ] { source "$srcdir/$subdir/default_procs.tcl" } else { puts "ERROR: $srcdir/$subdir/default_procs.tcl doesn't exist" } set file $srcdir/../lib/target.exp if [ file exists $file] { source $file } else { puts "ERROR: $file doesn't exist" } # we load framework so we can use stuff like is3way set file $srcdir/../lib/framework.exp if [ file exists $file] { source $file } else { puts "ERROR: $file doesn't exist" } # we load the remote stuff so we can test execute_anywhere set file $srcdir/../lib/remote.exp if [ file exists $file] { source $file } else { puts "ERROR: $file doesn't exist" } # # Create a false target config array # 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) "s12" set target_info(idp,serial) "tstty12" set target_info(idp,netport) "localhost:23" set target_info(idp,baud) "9600" # MVME target 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) "s12" set target_info(mvme,serial) "tstty8" set target_info(mvme,netport) "localhost:23" set target_info(mvme,baud) "9600" # Test remote open. We try not to use any of the support procs in # target.exp to for isolation testing. "target" is the name of the # default array setup by the procs in target.exp. set timeout 100 # test list_target if { [list_targets] == "idp mvme" } { puts "PASSED: list_targets" } else { puts "FAILED: list_targets" } push_config target idp set matches 0 if { $target_info(target,name) == "idp" } { incr matches } if { $target_info(target,ldflags) == "-Tidp.ld" } { incr matches } if { $target_info(target,config) == "m68k-unknown-aout" } { incr matches } if { $target_info(target,cflags) == "" } { incr matches } if { $target_info(target,connect) == "telnet" } { incr matches } if { $target_info(target,target) == "s12" } { incr matches } if { $target_info(target,serial) == "tstty12" } { incr matches } if { $target_info(target,netport) == "localhost:23" } { incr matches } if { $target_info(target,baud) == "9600" } { incr matches } if { $matches == 9 } { puts "PASSED: push_config target" } else { puts "FAILED: push_config target" } # test pop_config target pop_config target set matches 0 if { $target_info(target,name) == "" } { incr matches } if { $target_info(target,ldflags) == "" } { incr matches } if { $target_info(target,config) == "" } { incr matches } if { $target_info(target,cflags) == "" } { incr matches } if { $target_info(target,connect) == "" } { incr matches } if { $target_info(target,target) == "" } { incr matches } if { $target_info(target,serial) == "" } { incr matches } if { $target_info(target,netport) == "" } { incr matches } if { $target_info(target,baud) == "" } { incr matches } if { $matches == 9 } { puts "PASSED: pop_config target" } else { puts "FAILED: pop_config target" } push_config host idp set matches 0 if { $target_info(host,name) == "idp" } { incr matches } if { $target_info(host,ldflags) == "-Tidp.ld" } { incr matches } if { $target_info(host,config) == "m68k-unknown-aout" } { incr matches } if { $target_info(host,cflags) == "" } { incr matches } if { $target_info(host,connect) == "telnet" } { incr matches } if { $target_info(host,target) == "s12" } { incr matches } if { $target_info(host,serial) == "tstty12" } { incr matches } if { $target_info(host,netport) == "localhost:23" } { incr matches } if { $target_info(host,baud) == "9600" } { incr matches } if { $matches == 9 } { puts "PASSED: push_config target" } else { puts "FAILED: push_config target" } # test pop_config host pop_config host set matches 0 if { $target_info(host,name) == "" } { incr matches } if { $target_info(host,ldflags) == "" } { incr matches } if { $target_info(host,config) == "" } { incr matches } if { $target_info(host,cflags) == "" } { incr matches } if { $target_info(host,connect) == "" } { incr matches } if { $target_info(host,target) == "" } { incr matches } if { $target_info(host,serial) == "" } { incr matches } if { $target_info(host,netport) == "" } { incr matches } if { $target_info(host,baud) == "" } { incr matches } if { $matches == 9 } { puts "PASSED: pop_config host" } else { puts "FAILED: pop_config host" } # test execute_anywhere for a native environment set host_triplet i586-unknown-linux set target_triplet i586-unknown-linux set build_triplet i586-unknown-linux if { [string match "*setval.tmp*" [execute_anywhere "ls"]] } { puts "PASSED: execute_anywhere, native" } else { puts "FAILED: execute_anywhere, native" } # test execute_anywhere for a normal cross set target_triplet m68k-unknown-coff if { [string match "*testsuite" [execute_anywhere "pwd"]] } { puts "PASSED: execute_anywhere, normal cross" } else { puts "FAILED: execute_anywhere, normal cross" } # test execute_anywhere for a canadian cross set build_triplet m68k-test-test set target_info(host,connect) rlogin set target_info(host,netport) $target_info(idp,netport) set target_info(host,target) localhost if { [string match "*FooBar*" [execute_anywhere "echo FooBar"]] } { puts "PASSED: execute_anywhere, canadian cross" } else { puts "FAILED: execute_anywhere, canadian cross" } # compile arg # archive arg # ranlib arg # link_objects arg dejagnu-1.5.3/testsuite/runtest.all/topdir/0000775000175000017500000000000012506237416015753 500000000000000dejagnu-1.5.3/testsuite/runtest.all/topdir/subdir1/0000775000175000017500000000000012506237416017324 500000000000000dejagnu-1.5.3/testsuite/runtest.all/topdir/subdir1/subfile20000644000175000017500000000004012320744410020661 00000000000000# just so we don't look empty. dejagnu-1.5.3/testsuite/runtest.all/topdir/subdir1/subsubdir1/0000775000175000017500000000000012506237416021407 500000000000000dejagnu-1.5.3/testsuite/runtest.all/topdir/subdir1/subsubdir1/subsubfile10000644000175000017500000000004012320744410023455 00000000000000# just so we don't look empty. dejagnu-1.5.3/testsuite/runtest.all/topdir/subdir1/subfile10000644000175000017500000000003712320744410020666 00000000000000# just so we don't look empty. dejagnu-1.5.3/testsuite/runtest.all/topdir/subdir2/0000775000175000017500000000000012506237416017325 500000000000000dejagnu-1.5.3/testsuite/runtest.all/topdir/subdir2/subfile20000644000175000017500000000004012320744410020662 00000000000000# just so we don't look empty. dejagnu-1.5.3/testsuite/runtest.all/utils.test0000644000175000017500000000503012320744410016416 00000000000000# Test procedures in lib/utils.exp. set srcdir [lindex $argv 0] set subdir [lindex $argv 1] set objdir [lindex $argv 2] if [ file exists $objdir/setval.tmp ] { source $objdir/setval.tmp } else { puts "ERROR: $objdir/setval.tmp doesn't exist" } if [ file exists $srcdir/$subdir/default_procs.tcl ] { source "$srcdir/$subdir/default_procs.tcl" } else { puts "ERROR: $srcdir$subdir/default_procs.tcl doesn't exist" } set file $srcdir/../lib/utils.exp if [ file exists $file] { source $file } else { puts "ERROR: $file doesn't exist" } # Test getdirs: # if [lib_pat_test "getdirs" "${srcdir}/runtest.all" "runtest.all/topdir" ] { puts "FAILED: getdirs toplevel, no arguments" } else { puts "PASSED: getdirs toplevel, no arguments" } if [lib_pat_test "getdirs" "${srcdir}/runtest.all top*" "runtest.all/topdir" ] { puts "FAILED: getdirs toplevel, one subdir" } else { puts "PASSED: getdirs toplevel, one subdir" } if [lib_pat_test "getdirs" "${srcdir}/runtest.all/topdir" "subdir1*subdir2" ] { puts "FAILED: getdirs toplevel, two subdirs" } else { puts "PASSED: getdirs toplevel, two subdirs" } # Test find: # if [string match "*/subdir2/subfile2" "[find ${srcdir}/runtest.all/topdir/subdir2 sub*]"] { puts "PASSED: find, only one level deep" } else { puts "FAILED: find, only one level deep" } if [regexp ".*/subdir1/subsubdir1/subsubfile1( |$)" "[find ${srcdir}/runtest.all/topdir/subdir1 sub*]"] { puts "PASSED: find, two levels deep" } else { puts "FAILED: find, two levels deep" } # Environment varible utility tests. # if [info exists env(TESTRUN)] { unset env(TESTRUN) } # Test setenv: # setenv TESTRUN FooBar if [info exists env(TESTRUN)] { if { $env(TESTRUN) == "FooBar" } { pass "setenv, set an environment variable" } else { fail "setenv, set an environment variable } } else { fail "setenv, set an environment variable" } # Test getenv: # if [info exists env(TESTRUN)] { if { [getenv TESTRUN] == "FooBar" } { pass "getenv, get an environment variable" } else { fail "getenv, get an environment variable" } } else { untested "getenv, get an environment variable" } # Test unsetenv: # if [info exists env(TESTRUN)] { unsetenv TESTRUN if [info exists env(TESTRUN)] { fail "unsetenv, unset an environment variable" } else { pass "unsetenv, unset an environment variable" } } else { untested "unsetenv, unset an environment variable" } # which file # grep args # diff file_1 file_2 # runtest_file_p dejagnu-1.5.3/testsuite/runtest.all/default_procs.tcl0000644000175000017500000000354412320744410017723 00000000000000set sum_file [open .tmp w] set reboot 0 set errno "" # this tests a proc for a returned pattern proc lib_pat_test { cmd arg pattern } { catch "$cmd \"$arg\"" result puts "CMD(lib_pat_test) was: $cmd \"$arg\"" puts "RESULT(lib_pat_test) was: \"${result}\" for pattern \"$pattern\"." if [ regexp -- "with too many" $result ] { return -1 } if [ string match "$pattern" $result ] { return 1 } else { return 0 } } # this tests a proc for a returned value proc lib_ret_test { cmd arg val } { catch "$cmd \"$arg\"" result # catch "set result [$cmd $arg]" output # set result "$cmd [eval $arg] puts "CMD(lib_ret_test) was: $cmd $arg" puts "RESULT(lib_ret_test) was: $result" # puts "OUTPUT(lib_ret_test) was: $output" if { $result == $val } { return 1 } else { return 0 } } # # This runs a standard test for a proc. The list is set up as: # |test proc|proc being tested|args|pattern|message| # test proc is something like lib_pat_test or lib_ret_test. # proc run_tests { tests } { foreach i "$tests" { set result [ [lindex $i 0] "[lindex $i 1]" "[lindex $i 2]" "[lindex $i 3]" ] switch -- $result { "-1" { puts "ERRORED: [lindex $i 4]" } "1" { puts "PASSED: [lindex $i 4]" } "0" { puts "FAILED: [lindex $i 4]" } default { puts "BAD VALUE: [lindex $i 4]" } } } } proc send_log { args } { # this is just a stub for testing } proc pass { msg } { puts "PASSED: $msg" } proc fail { msg } { puts "FAILED: $msg" } proc perror { msg } { global errno puts "ERRORED: $msg" set errno "$msg" } proc warning { msg } { global errno puts "WARNED: $msg" set errno "$msg" } proc untested { msg } { puts "NOTTESTED: $msg" } proc unsupported { msg } { puts "NOTSUPPORTED: $msg" } proc verbose { args } { puts "[lindex $args 0]" } dejagnu-1.5.3/testsuite/runtest.all/clone_output.test0000644000175000017500000000460212320744410020002 00000000000000# test clone_output set srcdir [lindex $argv 0] set subdir [lindex $argv 1] set objdir [lindex $argv 2] if [ file exists $objdir/setval.tmp ] { source $objdir/setval.tmp } else { puts "ERROR: $objdir/setval.tmp doesn't exist" } if [ file exists $srcdir/$subdir/default_procs.tcl ] { source "$srcdir/$subdir/default_procs.tcl" } else { puts "ERROR: $srcdir/$subdir/default_procs.tcl doesn't exist" } if [ file exists $srcdir/../lib/framework.exp] { source $srcdir/../lib/framework.exp } else { puts "ERROR: $srcdir/../lib/framework.exp doesn't exist" } set all_flag 0 global all_flag set errno "" # stuff that shouldn't print anything without all_flag set set all_flag 0 set tests { { "lib_pat_test" "clone_output" "PASS: Foo" "" "clone_output(pass) without all_flag set" } { "lib_pat_test" "clone_output" "UNRESOLVED: Foo" "" "clone_output(unresolved) without all_flag set" } { "lib_pat_test" "clone_output" "UNSUPPORTED: Foo" "" "clone_output(unsupported) without all_flag set" } { "lib_pat_test" "clone_output" "UNTESTED: Foo" "" "clone_output(untested) without all_flag set" } { "lib_pat_test" "clone_output" "ERROR: Bar" "ERROR: Bar" "clone_output(error) without all_flag set" } { "lib_pat_test" "clone_output" "WARNING: Bar" "WARNING: Bar" "clone_output(warning) without all_flag set" } { "lib_pat_test" "clone_output" "NOTE: Bar" "NOTE: Bar" "clone_output(note) without all_flag set" } } run_tests $tests # tests for all_flag set to 1 set all_flag 1 set tests { { "lib_pat_test" "clone_output" "PASS: Foo" "PASS: Foo" "clone_output(pass) with all_flag set" } { "lib_pat_test" "clone_output" "XFAIL: Foo" "XFAIL: Foo" "clone_output(xfail) with all_flag set" } { "lib_pat_test" "clone_output" "UNRESOLVED: Foo" "UNRESOLVED: Foo" "clone_output(unresolved) with all_flag set" } { "lib_pat_test" "clone_output" "UNSUPPORTED: Foo" "UNSUPPORTED: Foo" "clone_output(unsupported) with all_flag set" } { "lib_pat_test" "clone_output" "UNTESTED: Foo" "UNTESTED: Foo" "clone_output(untested) with all_flag set" } { "lib_pat_test" "clone_output" "ERROR: Foo" "ERROR: Foo" "clone_output(error) with all_flag set" } { "lib_pat_test" "clone_output" "WARNING: Foo" "WARNING: Foo" "clone_output(warning) with all_flag set" } { "lib_pat_test" "clone_output" "NOTE: Foo" "NOTE: Foo" "clone_output(note) with all_flag set" } } run_tests $tests dejagnu-1.5.3/testsuite/runtest.all/stats-sub.exp0000644000175000017500000000244012320744410017022 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 # Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # Subordinate to stats.exp. # If not called by stats.exp, quit now. if { ![info exists STATS_TEST] } { return } switch $STATS_TEST { pass { pass "pass test" } fail { fail "fail test" } xpass { xpass "xpass test" } xfail { xfail "xfail test" } kpass { kpass "somebug" "kpass test" } kfail { kfail "somebug" "kfail test" } untested { untested "untested test" } unresolved { unresolved "unresolved test" } unsupported { unsupported "unsupported test" } } dejagnu-1.5.3/testsuite/runtest.all/libs.exp0000644000175000017500000000463012320744410016031 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 # Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. load_lib libsup.exp proc process_test { test } { global srcdir global subdir global objdir global EXPECT verbose "Executing test case $test" set text "\[- A-Za-z0-9\,\.\;\"\_\:\'\`\(\)\!\#\=\+\?\&\*]*" set timeout 150 if [file exists $test] { verbose "Processing test $test" 2 spawn -open [open "|$EXPECT $test $srcdir $subdir [pwd]" r] expect { "No such file or directory" { perror "$test wouldn't run" 0 } -re "\[\r\n\]*NOTSUPPORTED: $text\[\r\n\]*" { unsupported "[lrange $expect_out(0,string) 1 end]" exp_continue } -re "\[\r\n\]*NOTTESTED: $text\[\r\n\]*" { untested "[lrange $expect_out(0,string) 1 end]" exp_continue } -re "\[\r\n\]*PASSED: $text\[\r\n\]*" { pass "[lrange $expect_out(0,string) 1 end]" exp_continue } -re "\[\r\n\]*FAILED: $text\[\r\n\]*" { fail "[lrange $expect_out(0,string) 1 end]" exp_continue } -re "\[\r\n\]*WARNED: $text\[\r\n\]*" { verbose "$expect_out(0,string)" 2 exp_continue } -re "\[\r\n\]*ERRORED: $text\[\r\n\]*" { verbose "$expect_out(0,string)" 2 exp_continue } timeout { perror "$test timed out" 0 exp_continue } eof { verbose "All Done" 3 } } } else { perror "$test doesn't exist" 0 } } if ![info exists EXPECT] { set EXPECT [findfile $base_dir/../../expect/expect "$base_dir/../../expect/expect" expect] verbose "EXPECT defaulting to $EXPECT" 2 } make_defaults_file [pwd]/setval.tmp foreach i [glob $srcdir/$subdir/*.test] { process_test $i } # Clean up behind ourselves. file delete .tmp [pwd]/setval.tmp dejagnu-1.5.3/testsuite/runtest.all/remote.test0000644000175000017500000001150712320744410016557 00000000000000set srcdir [lindex $argv 0] set subdir [lindex $argv 1] set objdir [lindex $argv 2] if [ file exists $objdir/setval.tmp ] { source $objdir/setval.tmp } else { puts "ERROR: $objdir/setval.tmp doesn't exist" } if [ file exists $srcdir/$subdir/default_procs.tcl ] { source "$srcdir/$subdir/default_procs.tcl" } else { puts "ERROR: $srcdir/$subdir/default_procs.tcl doesn't exist" } set file $srcdir/../lib/remote.exp if [ file exists $file] { source $file } else { puts "ERROR: $file doesn't exist" } global errno "" # # Create a false target config array # 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) "s12" set target_info(idp,serial) "tstty12" set target_info(idp,netport) "localhost:23" set target_info(idp,baud) "9600" # MVME target 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) "s12" set target_info(mvme,serial) "tstty8" set target_info(mvme,netport) "localhost:23" set target_info(mvme,baud) "9600" # Test remote open. We try not to use any of the support procs in # target.exp to for isolation testing. "target" is the name of the # default array setup by the procs in target.exp. set timeout 100 set errno "" # # Force connection errors # # force an rlogin error if { [rlogin foobar.barfoo.com] < 0 } { puts "PASSED: rlogin bogus host" } else { puts "FAILED: rlogin bogus" } # force an rsh error if { [rsh foobar.barfoo.com] < 0 } { puts "PASSED: rsh bogus host" } else { puts "FAILED: rsh bogus" } # force a telnet error if { [telnet foobar.barfoo.com] < 0 } { puts "PASSED: telnet bogus host" } else { puts "FAILED: telnet bogus" } # # Connect to localhost # # localhost rlogin test if { [rlogin localhost] < 0 } { if [string match "*unencrypted connection" $errno] { NOTTESTED "rlogin localhost" } else { puts "FAILED: rlogin localhost" } } else { puts "PASSED: rlogin localhost" } catch "exp_send exit\n" catch "close -i $spawn_id" catch "wait -i $spawn_id" # localhost rsh test if { [rsh localhost] < 0 } { if [string match "*kinit" $errno] { puts "NOTTESTED: rsh localhost" } else { puts "FAILED: rsh localhost" } } else { puts "PASSED: rsh localhost" } catch "exp_send exit\n" catch "close -i $spawn_id" catch "wait -i $spawn_id" # localhost telnet test. In this case it will return # an error cause we get prompted for a password or login. For # now this is considered an error, as we usually only # telnet to a terminal server. if { [telnet localhost] < 0 } { if [string match "*password." $errno] { puts "NOTTESTED: telnet localhost" } else { puts "FAILED: telnet localhost" } } else { puts "PASSED: telnet localhost" } catch "exp_send exit\n" catch "close -i $spawn_id" catch "wait -i $spawn_id" # # Connect to the configured target # set target_info(target,netport) $target_info(idp,netport) set target_info(target,target) localhost set target_info(target,connect) rlogin if { [rlogin target] < 0 } { if [ string match "*kinit" $errno] { puts "NOTTESTED: rlogin target" } else { puts "FAILED: rlogin target" } } else { puts "PASSED: rlogin target" } catch "exp_send exit\n" catch "close -i $spawn_id" catch "wait -i $spawn_id" # test remote_open if { [rsh target] < 0 } { if [ string match "*kinit" $errno] { puts "NOTTESTED: rsh target" } else { puts "FAILED: rsh target" } } else { puts "PASSED: rsh target" } catch "exp_send exit\n" catch "close -i $spawn_id" catch "wait -i $spawn_id" # telnet to host # FIXME: This won't work till we figure out how to telnet and # not get a password prompt. # # Connect to the configured host # set target_info(host,connect) rlogin set target_info(host,netport) $target_info(idp,netport) set target_info(host,target) localhost # rlogin to host if { [rlogin host] < 0 } { if [ string match "*kinit*" $errno] { puts "NOTTESTED: rlogin host" } else { puts "FAILED: rlogin host" } } else { puts "PASSED: rlogin host" } catch "exp_send exit\n" catch "close -i $spawn_id" catch "wait -i $spawn_id" # rsh to host if { [rsh host] < 0 } { if [ string match "*kinit*" $errno] { puts "NOTTESTED: rsh host" } else { puts "FAILED: rsh host" } } else { puts "PASSED: rsh host" } catch "exp_send exit\n" catch "close -i $spawn_id" catch "wait -i $spawn_id" # telnet to host # FIXME: This won't work till we figure out how to telnet and # not get a password prompt. # tip port # remote_close args # rcp_download src dest # tip_download shell_id file # kermit args # download args dejagnu-1.5.3/testsuite/config/0000775000175000017500000000000012506237416013444 500000000000000dejagnu-1.5.3/testsuite/config/default.exp0000644000175000017500000000376412320744410015525 00000000000000# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, # 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file was written by Rob Savoye . global RUNTEST if ![info exists RUNTEST] then { set RUNTEST [transform runtest] } if ![info exists EXPECT] { set EXPECT [findfile $base_dir/../../expect/expect "$base_dir/../../expect/expect" expect] verbose "EXPECT defaulting to $EXPECT" 2 } global RUNTESTFLAGS if ![info exists RUNTESTFLAGS] then { set RUNTESTFLAGS "-v -v -a" } # # runtest_version -- extract and print the version number # proc runtest_version { } { global RUNTEST catch {exec $RUNTEST -V} tmp if [info exists tmp] then { clone_output "$tmp\n" } } # # runtest_load -- loads the program. For runtest, this is just a stub # proc runtest_load { arg } { } # # runtest_exit -- exit the test driver for expect # proc runtest_exit { } { close } # # runtest_start -- start everything # proc runtest_start { } { global verbose global spawn_id global subdir global srcdir global objdir global RUNTEST global RUNTESTFLAGS if {[which $RUNTEST] != 0} then { perror "Can't find $RUNTEST" } # return [open [concat "$RUNTEST $RUNTESTFLAGS"] r] } dejagnu-1.5.3/ChangeLog-19920000644000175000017500000064622212320744410012243 000000000000002003-02-19 Andrew Cagney * lib/remote.exp (local_exec, standard_close): Use shell background instead of Tcl background to background the kill processes. Work around problem found by Nick Duffek in older Cygwins. 2003-02-19 DJ Delorie * config/sim.exp: Support both sid and rawsid protocols. 2003-01-31 Kazu Hirata * dejagnu/baseboards/h8300-sim.exp: Don't set needs_status_wrapper. 2002-11-12 Hans-Peter Nilsson * lib/libgloss.exp (newlib_include_flags): Use -isystem, not -I. (libio_include_flags, g++_include_flags, libstdc++_include_flags, winsup_include_flags): Ditto. * doc/user.sgml (Local Config File): Use -isystem, not -I, in example. 2002-11-21 Matt Bemis * modified xml_output to handle null input and output 2002-10-21 Adam Nemet * libgloss.exp (get_multilibs): Don't use the first argument passed to this function as the multilib option unless it is in fact a multilib option. 2002-11-13 Matt Bemis * Fixed input/output to check for empty. 2002-11-12 Hans-Peter Nilsson * lib/libgloss.exp (newlib_include_flags): Use -isystem, not -I. (libio_include_flags, g++_include_flags, libstdc++_include_flags, winsup_include_flags): Ditto. * doc/user.sgml (Local Config File): Use -isystem, not -I, in example. 2002-10-29 Maciej W. Rozycki * Makefile.am: Add support for DESTDIR. * Makefile.in: Regenerated. 2002-10-21 Matt Bemis * added input/output to xml_output in lib/framework.exp * removed the log feature replaced by input/output_xml 2002-09-24 Richard Earnshaw * lib/libgloss.exp (build_wrapper): Use a tool-specific filename on the host for the testglue. 2002-09-04 Rob Savoye * Clean.tcl (cleanfiles): Add more patterns to remove. * Makefile.am: Fix tarball target to clean up the source tree better. 2002-09-03 Rob Savoye * Makefile.am: Add support to build Solaris and HPUX packages. * Makefile.in: Regenerated with automake 1.6. * aclocal.m4: Regenerated with aclocal 1.6. * example/hello/Makefile.in: Regenerated with automake 1.6. * example/calc/Makefile.in: Regenerated with automake 1.6. * missing: Update with the one from automake 1.6. 2002-08-30 Rob Savoye * configure.in: Add AC_NO_EXECUTABLES, so things configure without building C++ executables. * example/hello/hello.c: New C version of the example. * example/hello/Makefile.am: Build C based example. * example/hello/configure.in: Add AC_NO_EXECUTABLES, so things configure without building C++ executables. * configure: Regenerated. 2002-08-30 Nick Clifton * acinclude.m4: Provide alternative definition of AC_PROG_CXX which does not call AC_PROG_CXX_WORKS. This allows dejagnu to be configured and built without a working C++ compiler. 2002-08-29 Rob Savoye * debian/changelog: Update version number to 1.4.3. * redhat/dejagnu.spec: Update version number to 1.4.3. * dejagnu.h: Use __STDC_HOSTED__, rather than our own autoconf test to determine libstdc++ 2.x or 3.x. * testsuite/libdejagnu/unit.cc: Use __STDC_HOSTED__, rather than our own autoconf test to determine libstdc++ 2.x or 3.x. 2002-06-18 Dave Brolley From Catherine Moore, Michael Meissner, Mark Salter, Jim Blandy: * baseboards/frv-elf.exp: New board description. * baseboards/frv-sim.exp: New board description. * baseboards/frv-tiger.exp: New board description. * baseboards/frv-tomcat.exp: New board description. 2001-01-15 Ben Elliston * lib/framework.exp (record_test): Invoke a user-defined procedure if one is named in local_record_procs($type). 2002-08-28 Catherine Moore * baseboards/v850-sim.exp (target_install): Add v850e-elf. 2002-07-16 Rob Savoye * doc/user.sgml: Add new tutorial by Niklaus Giger as a new chapter. * doc/Makefile.am: Tweak rules for building output files. * doc/Makefile.in: Regenerated. 2002-07-14 Daniel Jacobowitz * lib/remote.exp: Fix standard_spawn{} to support SSH. Wed Jun 5 14:52:15 PDT 2002 Joey Ekstrom * dejagnu.h: Modified C functions to behave like printf(). * dejagnu.h: Added wait() to fix problem with host_execute() in dejagnu.exp where if skips failed, untested, etc. messages from the executable. 2002-05-01 Matt Bemis * added documentation on xml capabilities 2002-05-02 Fernando Nasser * runtest.exp: Add kfail_flag and kfail_prms variable initializations. * lib/framework.exp (setup_kfail): New proc. Like setup_xfail, but for known tool bugs already registered in a bug database. (kfail): New proc. Record that a test has failed due to a known bug. (kpass): New proc. Record that a test for a known bug has passed unexpectedly. (clear_kfail): Like clear_xfail, but for known bugs. (record_test): Handle KFAIL and KPASS. (pass, fail): Test for known failures. (clone_output): Add KFAIL to list of message types to be cloned. (log_summary): Add summary for KFAIL and KPASS. (unknown): Update comment. * doc/dejagnu.texi: Document the above. * lib/libsup.exp: Add counters for KFAIL and KPASS. * testsuite/runtest.all/stats-sub.exp: Test kfail and kpass. * testsuite/runtest.all/stats.exp: Ditto. 2002-04-30 Ben Elliston * doc/runtest.1: Fix formatting error for --ignore option. 2002-04-25 * lib/framework/exp: new procs check_xml{}, insertdtd{}, xml_output{}, plus a few hooks to xml_output in the other logging procs to produce XML output. * runtest.exp: Add support for the --x option for XML output. 2002-04-25 Nick Clifton * example/calc/configure.in (AM_MAINTAINER_MODE): Add invocation. * example/calc/aclocal.m4: Regenerate. * example/calc/configure: Regenerate. * example/calc/Makefile.in: Regenerate. 2002-03-22 Elena Zannoni * baseboards/powerpc-sim.exp: Don't disable inferior function calls. 2002-04-19 Nick Clifton * Import files from sourceware dejagnu repository: 2002-03-15 Chris Demetriou * baseboards/mips-sim-idt32.exp: New file. 2002-01-21 Ben Elliston * baseboards/sh-sid.exp: New file. 2001-11-26 Thomas Fitzsimmons * baseboards/i386-sid.exp: New file. 2001-10-10 Frank Ch. Eigler * config/sid.exp (set_host_info): New proc. Call it to set gdb,nointerrupt flag to work around framework problems. 2001-08-24 Frank Ch. Eigler * baseboards/basic-sid.exp (find_sid_conf): Tolerate not finding path to pregen configuration file. 2001-02-22 Ben Elliston * config/sid.exp: New file. * baseboards/basic-sid.exp: Likewise. * baseboards/arm-sid.exp: Likewise. * baseboards/m32r-sid.exp: Likewise. * baseboards/m68k-sid.exp: Likewise. 2002-03-31 Hans-Peter Nilsson * lib/remote.exp (check_for_board_status): Also strip a \r before a \n before the exit message. 2002-03-26 Hans-Peter Nilsson * lib/libgloss.exp (build_wrapper): Wrap _exit too, unless wrap_m68k_aout, uses_underscores or is_vxworks are defined in target_info. * testglue.c [!VXWORKS && !UNDERSCORES && !WRAP_M68K_AOUT] (REAL__EXIT): Define. [!UNDERSCORES && !WRAP_M68K_AOUT] (ORIG__EXIT): Define. [REAL__EXIT] (REAL__EXIT): Prototype. [ORIG__EXIT] (ORIG__EXIT): New function wrapper. (done_exit_message): New static variable. (ORIG_EXIT): Set done_exit_message. 2002-03-11 Chris Demetriou * baseboards/mips-sim-idt32.exp: New file. Wed Nov 21 18:02:49 PST 2001 Brendan Conoboy * lib/rsh.exp: Obey rsh_prog/rcp_prog, support username * lib/remote.exp: same. 2002-02-22 Bob Wilson * baseboards/xtensa-sim.exp: New file. 2001-11-02 Alexandre Oliva * lib/libgloss.exp [get_multilibs]: Compute multitop earlier, and use --print-multi-directory if available. 2002-02-05 Nick Clifton * lib/libgloss.exp (g++_include_flags): Add top level libstdc++-v3 build include path, remove duplicate src path. (libstdc++_include_flags): Add top level libstdc++-v3 build include path. 2001-11-10 Hans-Peter Nilsson * baseboards/mmixware-sim.exp: New file. * lib/remote.exp (check_for_board_status): Return 2 if the board uses a status wrapper and there was no match for the expected pattern. 2001-11-02 Philip A. Wilsey * lib/utils.exp: Need to pass -all to getdirs, so it descends through all the subdirectories. 2001-10-08 Gwenole Beauchesne * runtest.exp: Don't fail at processing Makefile style args in the second command line parsing pass. Actually, skip them in this pass since they are already processed in the first one for possible use by init scripts. 2001-10-02 Nick Clifton * lib/remote.exp (proc file_on_host): Fix typo in construction of file argument. 2001-09-12 Rob Savoye * Makefile.am: Add a clean-local target, and nuke example and testsuite from SUBDIRS, so they don't get built via "make all". * Makefile: All Makefiles regenerated. * debian/changelog: Update version for 1.4.2 release. * redhat/dejagnu.spec: Update version for 1.4.2 release. 2001-09-07 Will Cohen * lib/target.exp: Ignore ld's warning about alternative functions to use. Thu Aug 30 19:31:44 2001 J"orn Rennecke * baseboards/h8300-sim.exp: set_board_info uses_underscores 1 set_board_info gcc,text_size 60000 2001-07-30 Paul A. Houghton * dejagnu.h, testsuite/libdejagnu/unit.cc: Make the outstate array be a const to work with Sun's compiler. * runtest.exp: Move the command line variable instantiation to the first block of command line option tests, so command line variables can be used in tool init scripts. 2001-07-25 Will Cohen * runtest.exp: Removed puts statement. 2001-07-17 Jason Merrill * lib/utils.exp (runtest_file_p): An argument can match trailing directories as well as the basename. 2001-06-08 John Cotton * testglue.c: * lib/remote.exp: * lib/standard.exp: * lib/target.exp: * lib/utils.exp: * baseboards/mbx821_001.exp: * baseboards/mbx860_002.exp: * baseboards/mbx8xx.exp: * baseboards/mvme167.exp: Added support for automated testing of RTEMS targets, specifically the mbx821, mbx860 and mvme167. 2001-06-08 John Cotton */lib/libgloss.exp: fixed regexp bug. 2001-05-30 Jeffrey Oldham * doc/dejagnu.texi: Fix typographical errors. * doc/ref.sgml: Likewise. * doc/user.sgml: Likewise. 2001-05-30 Rob Savoye * dejagnu.h: Remove the iostream headers, so now we have no conditional compilation problems with libstdc++-v3 or v2. 2001-05-28 Rob Savoye * acinclude.m4(DJ_AC_STL): Also use AC_LANG_CPLUSPLUS so we build this test case with G++. * aclocal.m4, configure: Regenerated. * dejagnu.h: Don't use testout(), have each method print the array value directly, which is much simpler. 2001-05-27 Jeffrey Oldham * acinclude.m4(DJ_AC_STL): s/for for/for/. * dejagnu.h: Add conditional support for sstream. (testout): Likewise. Make return type `const'. 2001-05-25 Rob Savoye * acinclude.m4: Add DJ_AC_STL, which figures out if we're running libstdc++ version 2 or 3. * aclocal.m4: Regenerated. * configure.in: Add DJ_AC_STL. * configure: Regenerated. * dejagnu.h: Add the use of the std namespace, so we work with libstdc++ version 2 or 3. * testsuite/libdejagnu/unit.cc: Use setbuf() or pubsetbuff(), depending on the version. 2001-05-20 Stephane Carrez * baseboards/m68hc11-sim.exp: New file for 68HC11/68HC12 validation. * config/m68hc11.exp: New file. 2001-05-16 Rob Savoye * lib/target.exp: Reverse when add_flags gets set, so it actually links with the libraries being tested. From J. David Anglin . 2001-05-14 Rob Savoye * runtest.exp: Conditionally set the exit_status so we don't stomp on FAIL. Rearrange --status so it works correctly with --strace. 2001-05-13 Rob Savoye * lib/target.exp: Fix the regsub line where it prunes -fPIC warnings so the text variable is on the same line. 2001-05-09 Rob Savoye * runtest.exp: Add new command line option, --status (or -sta) to toggle whether Tcl script bugs in test drivers should be propogated as an error to the shell. 2001-05-08 Rob Savoye * lib/dejagnu.exp: Trim off test state part of the message, so we don't duplicate it. * runtest.exp: Set the exit status when their are Tcl script bugs, so make notices the errors. (contributed by Martin Muenstermann ) 2001-05-06 Rob Savoye * debian/rules: Install all the doc formats. * redhat/dejagnu.spec: Install all the doc formats. * Clean.tcl: Also nuke all Emacs backup files. * Makefile.am: Fix dependencies on tarball target. Add new target to build Debian packages. Add $(includedir) to install-data-local target so dejagnu.h gets installed in the right place. 2001-05-03 Rob Savoye * doc/Makefile.am: Make all paths absolute, cause some versions of the db2* tools are braindead. * doc/overview.sgml: Update version numbers and log. * doc/user.sgml: Add mention of dejagnu.h header file. * doc/ref.sgml: Add chapter on dejagnu.h header file for unit testing. * config/default.exp: New file for default config settings for simple native testsuites that don't need anything else. * lib/dejagnu.exp: Add $text\r\n to all strings, to make sure we only get one line at a time. * testsuite/libdejagnu: New directory for dejagnu library test cases. * testsuite/libdejagnu/unit.cc: Test case for dejagnu.h. * testsuite/libdejagnu/tunit.exp: Test driver for dejagnu.h. * testsuite/libdejagnu/Makefile.am: New makefile to build the test case. * testsuite/libdejagnu/Makefile.in: Generated. * testsuite/Makefile.am: Add libdejagnu to SUBDIRS. Replace the site.exp rule, cause we don't want the $tool setting, so we run all the test suites. Don't pass the tool name for "make check". * configure.in: Add testsuite/libdejagnu/Makefile to AC_OUTPUT. 2001-05-02 Rob Savoye * Makefile.am: Rename dist2 to tarball target. Fix the version number to have the minor release too. * doc/Makefile.am: Convert all paths from relative to absolute, cause not all verions of the db2* tools can work with a relative path. * redhat/dejagnu.spec: Update version number, and install dejagnu.h. * debian/changelog: Update version number. * debian/rules: and install dejagnu.h 2001-05-01 Matt Hiller * lib/libgloss.exp (get_multilibs): Correction to Catherine Moore's patch of 2000-06-09. 2001-04-11 Rob Savoye * Clean.tcl: Add -r to rm, so it gets rid of CVS directories. * .clean: Don't install the debian or redhat packaging directories. * Makefle.am: Install dejagnu.h. Fix dist2 target, so we build our own tarballs, instead of letting automake do it for us. * examples/calc/Makefile.am: Use noist_PROGRAMS, so calc doesn't get installed. * doc/Makefile.am: Install the man page for runtest. * configure.in: Make VERSION 1.4.0, not just 1.4, so distributions get built right. 2001-04-07 Rob Savoye * lib/dejagnu.exp: Test driver for embedded DejaGnu API. * dejagnu.h: Embedded DejaGnu API main header file. * config/default.exp: Default tool init file for simple test suites. 2001-04-06 Rob Savoye * Makefile.am: Add an empty check-DEJAGNU target, cause we only want to run the testsuite once. * example/Makefile.am: Don't run "calc" as part of check target, cause calc is just an example. * testsuite/Makefile.am: Use the runtest in the source tree, or refuse to run. 2001-04-03 David Billinghurst * baseboards/unix.exp: Don't link with -lm on cygwin. * lib/target.exp: Remove compiler warnings about -fpic or -fPIC on cygwin. 2001-02-21 Rob Savoye * debian/changelog: Add entry for new release. * debian/control: Fix problem with "no binary package" error. * debian/rules: Fix so things actually build a package. This was mostly installing the new html version of the doc, not an info page. * doc/Makefile.am: Build and install the rtf and ps versions of the manual. Remove all the created files and subdirectories. * doc/overview.sgml: Update the copyright message. * doc/ref.sgml: Update the copyright messages. Add section on obtaining DejaGnu releases. * doc/user.sgml: Update the copyright messages. Add blurb about the --mail option. * doc/overview: Regenerated. 2001-02-17 Rob Savoye * Most all files: Update copyright notices. * Makefile.am: Add support for making RPMs. Force different values for RUNTEST and RUNTESTFLAGS, so we can test ourselves. * testsuite/Makefile.am: Force a different value for RUNTESTFLAGS. * acinclude.m4, configure.in: Find Tclsh, and Docbook. * configure: Regenerated. * doc/Makefile.am: Use $DOCBOOK to find the filters. * doc/overview: Add the html version of the doc so one doesn't need docbook to read the manual. 2001-01-31 Rob Savoye * Merge in latest snapshot from Red Hat. * example/calc/Makefile.am: New automake support. * example/calc/Makefile.in: Generated. * example/Makefile.am: Recursion support for make. * example/calc/Makefile.in: Generated by automake. * example/calc/calc.h.in: Move constants to calc.c, so we can use autoheader. * example/calc/calc.c: Add constants from calc.h.in. * redhat/dejagnu.spec: New RPM packaging file. * debian/{changelog,conffiles,control,copyright,postinst,preinst, rules,site.exp}: New Debian packaging support. 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-18 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-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. dejagnu-1.5.3/compile0000755000175000017500000001624512344212703011442 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # Written by Tom Tromey . # # 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, 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, see . # 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. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: dejagnu-1.5.3/site.tmpl0000644000175000017500000000232412320744410011716 00000000000000# site.tmpl -- Sample template for a global config file. -*- Tcl -*- # Written by Bob Manson # # 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. # 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" } } dejagnu-1.5.3/Makefile.in0000664000175000017500000015166212506237377012154 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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. @SET_MAKE@ # Copyright (C) 1992-2015 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # Process this file with automake to generate Makefile.in VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : check_PROGRAMS = unit$(EXEEXT) subdir = . DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \ $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) depcomp \ texinfo.tex $(dist_man_MANS) $(include_HEADERS) COPYING TODO \ compile config.guess config.sub install-sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am_unit_OBJECTS = unit.$(OBJEXT) unit_OBJECTS = $(am_unit_OBJECTS) unit_LDADD = $(LDADD) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(djlibexecdir)" \ "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(baseboarddir)" "$(DESTDIR)$(configdir)" \ "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(includedir)" SCRIPTS = $(bin_SCRIPTS) $(djlibexec_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(unit_SOURCES) DIST_SOURCES = $(unit_SOURCES) AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) am__v_DVIPS_0 = @echo " DVIPS " $@; am__v_DVIPS_1 = AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; am__v_MAKEINFO_1 = AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) am__v_INFOHTML_0 = @echo " INFOHTML" $@; am__v_INFOHTML_1 = AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; am__v_TEXI2DVI_1 = AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; am__v_TEXI2PDF_1 = AM_V_texinfo = $(am__v_texinfo_@AM_V@) am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) am__v_texinfo_0 = -q am__v_texinfo_1 = AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) am__v_texidevnull_0 = > /dev/null am__v_texidevnull_1 = am__dirstamp = $(am__leading_dot)dirstamp INFO_DEPS = $(srcdir)/doc/dejagnu.info am__TEXINFO_TEX_DIR = $(srcdir) DVIS = doc/dejagnu.dvi PDFS = doc/dejagnu.pdf PSS = doc/dejagnu.ps HTMLS = doc/dejagnu.html TEXINFOS = doc/dejagnu.texi TEXI2DVI = texi2dvi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man_MANS) DATA = $(baseboard_DATA) $(config_DATA) $(pkgdata_DATA) HEADERS = $(include_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope AM_RECURSIVE_TARGETS = cscope DEJATOOL = $(PACKAGE) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEJAGNU = @DEJAGNU@ DEPDIR = @DEPDIR@ DOCBOOK2HTML = @DOCBOOK2HTML@ DOCBOOK2PDF = @DOCBOOK2PDF@ DOCBOOK2PS = @DOCBOOK2PS@ DOCBOOK2RTF = @DOCBOOK2RTF@ DOCBOOK2TEXI = @DOCBOOK2TEXI@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EXEEXT = @EXEEXT@ EXPECT = @EXPECT@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = dejagnu EXTRA_DIST = ChangeLog-1992 MAINTAINERS runtest site.tmpl \ $(pkgdata_DATA) $(config_DATA) $(baseboard_DATA) \ $(TESTSUITE_FILES) $(XML) $(CONTRIB) DISTCLEANFILES = xXx.log xXx.sum x.log x.sum testrun.log testrun.sum bin_SCRIPTS = runtest include_HEADERS = dejagnu.h pkgdata_DATA = \ stub-loader.c \ testglue.c \ runtest.exp \ lib/debugger.exp \ lib/dejagnu.exp \ lib/dg.exp \ lib/framework.exp \ lib/ftp.exp \ lib/kermit.exp \ lib/libgloss.exp \ lib/remote.exp \ lib/rlogin.exp \ lib/rsh.exp \ lib/standard.exp \ lib/target.exp \ lib/targetdb.exp \ lib/telnet.exp \ lib/tip.exp \ lib/utils.exp configdir = $(pkgdatadir)/config config_DATA = \ config/README \ config/adb.exp \ config/arc.exp \ config/arm-ice.exp \ config/base-config.exp \ config/base68k.exp \ config/bug.exp \ config/cfdbug.exp \ config/cygmon.exp \ config/d10v.exp \ config/ddb-ether.exp \ config/ddb.exp \ config/default.exp \ config/dos.exp \ config/dve.exp \ config/gdb-comm.exp \ config/gdb_stub.exp \ config/h8300.exp \ config/i386-bozo.exp \ config/i960.exp \ config/m32r-stub.exp \ config/m32r.exp \ config/m68hc11.exp \ config/m68k-emc.exp \ config/mips-idt.exp \ config/mn10200-eval.exp \ config/mn10300-eval.exp \ config/netware.exp \ config/powerpc-bug.exp \ config/proelf.exp \ config/rom68k.exp \ config/sh.exp \ config/sid.exp \ config/sim.exp \ config/slite.exp \ config/sparclet.exp \ config/tic80.exp \ config/unix.exp \ config/vr4100.exp \ config/vr4300.exp \ config/vr5000.exp \ config/vxworks.exp baseboarddir = $(pkgdatadir)/baseboards baseboard_DATA = \ baseboards/README \ baseboards/androideabi.exp \ baseboards/am33_2.0-libremote.exp \ baseboards/arc-sim.exp \ baseboards/arm-ice.exp \ baseboards/arm-sid.exp \ baseboards/arm-sim.exp \ baseboards/basic-sid.exp \ baseboards/basic-sim.exp \ baseboards/cf.exp \ baseboards/cris-sim.exp \ baseboards/cygmon.exp \ baseboards/cygwin.exp \ baseboards/d10v-sim.exp \ baseboards/d10v.exp \ baseboards/d30v-sim.exp \ baseboards/danlite-elf.exp \ baseboards/dos.exp \ baseboards/fr30-cygmon.exp \ baseboards/fr30-elf.exp \ baseboards/fr30-sim.exp \ baseboards/frv-elf.exp \ baseboards/frv-sim.exp \ baseboards/frv-tiger.exp \ baseboards/frv-tomcat.exp \ baseboards/gdbserver-sample.exp \ baseboards/h8300-sim.exp \ baseboards/h8300.exp \ baseboards/i386-bozo.exp \ baseboards/i386-sid.exp \ baseboards/i960-cyclone.exp \ baseboards/i960-sim.exp \ baseboards/iq2000-sim.exp \ baseboards/jmr3904-sim.exp \ baseboards/linux-gdbserver.exp \ baseboards/linux-libremote.exp \ baseboards/m32r-elf.exp \ baseboards/m32r-linux-sim.exp \ baseboards/m32r-sid.exp \ baseboards/m32r-sim.exp \ baseboards/m68hc11-sim.exp \ baseboards/m68k-emc.exp \ baseboards/m68k-sid.exp \ baseboards/mcore-elf.exp \ baseboards/mcore-moto-sim.exp \ baseboards/mcore-pe.exp \ baseboards/mcore-sim.exp \ baseboards/mips-idt.exp \ baseboards/mips-lnews-sim.exp \ baseboards/mips-lsi-sim.exp \ baseboards/mips-sim-idt32.exp \ baseboards/mips-sim-idt64.exp \ baseboards/mips-sim.exp \ baseboards/mips-sim-mti32.exp \ baseboards/mips-sim-mti64.exp \ baseboards/mips-sim-mti64_n32.exp \ baseboards/mips-sim-mti64_64.exp \ baseboards/mips-sim-sde32.exp \ baseboards/mips-sim-sde64.exp \ baseboards/mips64-sim.exp \ baseboards/mips64vr4100-sim.exp \ baseboards/mmixware-sim.exp \ baseboards/mn10200-cygmon.exp \ baseboards/mn10200-sim.exp \ baseboards/mn10300-cygmon.exp \ baseboards/mn10300-sim.exp \ baseboards/msparc-cygmon.exp \ baseboards/mt-sid.exp \ baseboards/multi-sim.exp \ baseboards/op50n.exp \ baseboards/powerpc-bug.exp \ baseboards/powerpc-bug1.exp \ baseboards/powerpc-sim.exp \ baseboards/powerpcle-sim.exp \ baseboards/rom68k-idp.exp \ baseboards/sh-hms.exp \ baseboards/sh-sid.exp \ baseboards/sh-sim.exp \ baseboards/sparc-sim.exp \ baseboards/sparc64-sim.exp \ baseboards/sparclet-aout.exp \ baseboards/sparclite-coff.exp \ baseboards/sparclite-cygmon.exp \ baseboards/sparclite-sim-le.exp \ baseboards/sparclite-sim.exp \ baseboards/strongarm-cygmon.exp \ baseboards/tic80-sim.exp \ baseboards/tx39-dve.exp \ baseboards/tx39-sim.exp \ baseboards/unix.exp \ baseboards/usparc-cygmon.exp \ baseboards/v850-sim.exp \ baseboards/visium-sim.exp \ baseboards/vr4100-ddb.exp \ baseboards/vr4100-sim.exp \ baseboards/vr4111-sim.exp \ baseboards/vr4300-ddb.exp \ baseboards/vr4300-sim.exp \ baseboards/vr4300.exp \ baseboards/vr5000-ddb.exp \ baseboards/vx4300.exp \ baseboards/vx68k.exp \ baseboards/vx960.exp \ baseboards/vxsparc.exp \ baseboards/x86-cygmon.exp \ baseboards/xscale-cygmon.exp \ baseboards/xtensa-sim.exp djlibexecdir = $(pkgdatadir)/libexec djlibexec_SCRIPTS = config.guess # Contributed scripts, etc. CONTRIB = contrib/compare_tests # Testsuite. TESTSUITE_FILES = \ testsuite/runtest.all/topdir/subdir1/subsubdir1/subsubfile1 \ testsuite/runtest.all/topdir/subdir1/subfile1 \ testsuite/runtest.all/topdir/subdir1/subfile2 \ testsuite/runtest.all/topdir/subdir2/subfile2 \ testsuite/runtest.all/libs.exp \ testsuite/runtest.all/options.exp \ testsuite/runtest.all/remote.test \ testsuite/runtest.all/stats-sub.exp \ testsuite/runtest.all/stats.exp \ testsuite/runtest.all/target.test \ testsuite/runtest.all/utils.test \ testsuite/runtest.all/clone_output.test \ testsuite/runtest.all/config.test \ testsuite/runtest.all/default_procs.tcl \ testsuite/runtest.all/load_lib.exp \ testsuite/config/default.exp \ testsuite/lib/libsup.exp \ testsuite/lib/util-defs.exp \ testsuite/libdejagnu/tunit.exp RUNTEST = ${top_srcdir}/runtest RUNTESTDEFAULTFLAGS = --srcdir $(srcdir)/testsuite RUNTEST=$(RUNTEST) AM_CXXFLAGS = -I$(top_srcdir) -g unit_SOURCES = testsuite/libdejagnu/unit.cc # Documentation. dist_man_MANS = doc/runtest.1 info_TEXINFOS = doc/dejagnu.texi XML = doc/dejagnu.xml doc/legal.xml doc/ref.xml doc/user.xml all: all-am .SUFFIXES: .SUFFIXES: .cc .dvi .o .obj .ps am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) unit$(EXEEXT): $(unit_OBJECTS) $(unit_DEPENDENCIES) $(EXTRA_unit_DEPENDENCIES) @rm -f unit$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(unit_OBJECTS) $(unit_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) install-djlibexecSCRIPTS: $(djlibexec_SCRIPTS) @$(NORMAL_INSTALL) @list='$(djlibexec_SCRIPTS)'; test -n "$(djlibexecdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(djlibexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(djlibexecdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(djlibexecdir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(djlibexecdir)$$dir" || exit $$?; \ } \ ; done uninstall-djlibexecSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(djlibexec_SCRIPTS)'; test -n "$(djlibexecdir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(djlibexecdir)'; $(am__uninstall_files_from_dir) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unit.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` unit.o: testsuite/libdejagnu/unit.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unit.o -MD -MP -MF $(DEPDIR)/unit.Tpo -c -o unit.o `test -f 'testsuite/libdejagnu/unit.cc' || echo '$(srcdir)/'`testsuite/libdejagnu/unit.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit.Tpo $(DEPDIR)/unit.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='testsuite/libdejagnu/unit.cc' object='unit.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unit.o `test -f 'testsuite/libdejagnu/unit.cc' || echo '$(srcdir)/'`testsuite/libdejagnu/unit.cc unit.obj: testsuite/libdejagnu/unit.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT unit.obj -MD -MP -MF $(DEPDIR)/unit.Tpo -c -o unit.obj `if test -f 'testsuite/libdejagnu/unit.cc'; then $(CYGPATH_W) 'testsuite/libdejagnu/unit.cc'; else $(CYGPATH_W) '$(srcdir)/testsuite/libdejagnu/unit.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/unit.Tpo $(DEPDIR)/unit.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='testsuite/libdejagnu/unit.cc' object='unit.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o unit.obj `if test -f 'testsuite/libdejagnu/unit.cc'; then $(CYGPATH_W) 'testsuite/libdejagnu/unit.cc'; else $(CYGPATH_W) '$(srcdir)/testsuite/libdejagnu/unit.cc'; fi` doc/$(am__dirstamp): @$(MKDIR_P) doc @: > doc/$(am__dirstamp) $(srcdir)/doc/dejagnu.info: doc/dejagnu.texi $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ done; \ else :; fi && \ cd "$$am__cwd"; \ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \ -o $@ $(srcdir)/doc/dejagnu.texi; \ then \ rc=0; \ $(am__cd) $(srcdir); \ else \ rc=$$?; \ $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc doc/dejagnu.dvi: doc/dejagnu.texi doc/$(am__dirstamp) $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ `test -f 'doc/dejagnu.texi' || echo '$(srcdir)/'`doc/dejagnu.texi doc/dejagnu.pdf: doc/dejagnu.texi doc/$(am__dirstamp) $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc' \ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ `test -f 'doc/dejagnu.texi' || echo '$(srcdir)/'`doc/dejagnu.texi doc/dejagnu.html: doc/dejagnu.texi doc/$(am__dirstamp) $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I doc -I $(srcdir)/doc \ -o $(@:.html=.htp) `test -f 'doc/dejagnu.texi' || echo '$(srcdir)/'`doc/dejagnu.texi; \ then \ rm -rf $@ && mv $(@:.html=.htp) $@; \ else \ rm -rf $(@:.html=.htp); exit 1; \ fi .dvi.ps: $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) $(AM_V_texinfo) -o $@ $< uninstall-dvi-am: @$(NORMAL_UNINSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done uninstall-info-am: @$(PRE_UNINSTALL) @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done uninstall-pdf-am: @$(NORMAL_UNINSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f "$(distdir)/$$relfile" || \ cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf doc/dejagnu.t2d doc/dejagnu.t2p clean-aminfo: -test -z "doc/dejagnu.dvi doc/dejagnu.pdf doc/dejagnu.ps doc/dejagnu.html" \ || rm -rf doc/dejagnu.dvi doc/dejagnu.pdf doc/dejagnu.ps doc/dejagnu.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done install-man1: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-baseboardDATA: $(baseboard_DATA) @$(NORMAL_INSTALL) @list='$(baseboard_DATA)'; test -n "$(baseboarddir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(baseboarddir)'"; \ $(MKDIR_P) "$(DESTDIR)$(baseboarddir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(baseboarddir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(baseboarddir)" || exit $$?; \ done uninstall-baseboardDATA: @$(NORMAL_UNINSTALL) @list='$(baseboard_DATA)'; test -n "$(baseboarddir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(baseboarddir)'; $(am__uninstall_files_from_dir) install-configDATA: $(config_DATA) @$(NORMAL_INSTALL) @list='$(config_DATA)'; test -n "$(configdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(configdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(configdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(configdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(configdir)" || exit $$?; \ done uninstall-configDATA: @$(NORMAL_UNINSTALL) @list='$(config_DATA)'; test -n "$(configdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(configdir)'; $(am__uninstall_files_from_dir) install-pkgdataDATA: $(pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files check-DEJAGNU: site.exp srcdir='$(srcdir)'; export srcdir; \ EXPECT=$(EXPECT); export EXPECT; \ if $(SHELL) -c "$(RUNTEST) --version" > /dev/null 2>&1; then \ exit_status=0; l='$(DEJATOOL)'; for tool in $$l; do \ if $(RUNTEST) $(AM_RUNTESTFLAGS) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS); \ then :; else exit_status=1; fi; \ done; \ else echo "WARNING: could not find '$(RUNTEST)'" 1>&2; :;\ fi; \ exit $$exit_status site.exp: Makefile $(EXTRA_DEJAGNU_SITE_CONFIG) @echo 'Making a new site.exp file ...' @echo '## these variables are automatically generated by make ##' >site.tmp @echo '# Do not edit here. If you wish to override these values' >>site.tmp @echo '# edit the last section' >>site.tmp @echo 'set srcdir "$(srcdir)"' >>site.tmp @echo "set objdir `pwd`" >>site.tmp @list='$(EXTRA_DEJAGNU_SITE_CONFIG)'; for f in $$list; do \ echo "## Begin content included from file $$f. Do not modify. ##" \ && cat `test -f "$$f" || echo '$(srcdir)/'`$$f \ && echo "## End content included from file $$f. ##" \ || exit 1; \ done >> site.tmp @echo "## End of auto-generated content; you can edit from here. ##" >> site.tmp @if test -f site.exp; then \ sed -e '1,/^## End of auto-generated content.*##/d' site.exp >> site.tmp; \ fi @-rm -f site.bak @test ! -f site.exp || mv site.exp site.bak @mv site.tmp site.exp distclean-DEJAGNU: -rm -f site.exp site.bak -l='$(DEJATOOL)'; for tool in $$l; do \ rm -f $$tool.sum $$tool.log; \ done distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_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 case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --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) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU check: check-am all-am: Makefile $(INFO_DEPS) $(SCRIPTS) $(MANS) $(DATA) $(HEADERS) \ all-local installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(djlibexecdir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(baseboarddir)" "$(DESTDIR)$(configdir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f doc/$(am__dirstamp) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-aminfo clean-checkPROGRAMS clean-generic \ mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-DEJAGNU distclean-compile \ distclean-generic distclean-tags dvi: dvi-am dvi-am: $(DVIS) html: html-am html-am: $(HTMLS) html-local info: info-am info-am: $(INFO_DEPS) install-data-am: install-baseboardDATA install-configDATA \ install-includeHEADERS install-info-am install-man \ install-pkgdataDATA install-dvi: install-dvi-am install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-binSCRIPTS install-djlibexecSCRIPTS install-html: install-html-am install-html-am: $(HTMLS) @$(NORMAL_INSTALL) @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__strip_dir) \ d2=$$d$$p; \ if test -d "$$d2"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ list2="$$list2 $$d2"; \ fi; \ done; \ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done; } install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ fi; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ echo "$$ifile"; \ else : ; fi; \ done; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-am install-ps-am: $(PSS) @$(NORMAL_INSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \ mostlyclean-generic pdf: pdf-am pdf-am: $(PDFS) ps: ps-am ps-am: $(PSS) uninstall-am: uninstall-baseboardDATA uninstall-binSCRIPTS \ uninstall-configDATA uninstall-djlibexecSCRIPTS \ uninstall-dvi-am uninstall-html-am uninstall-includeHEADERS \ uninstall-info-am uninstall-man uninstall-pdf-am \ uninstall-pkgdataDATA uninstall-ps-am uninstall-man: uninstall-man1 .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am all-local am--refresh check \ check-DEJAGNU check-am clean clean-aminfo clean-checkPROGRAMS \ clean-cscope clean-generic cscope cscopelist-am ctags ctags-am \ dist dist-all dist-bzip2 dist-gzip dist-info dist-lzip \ dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-DEJAGNU distclean-compile distclean-generic \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am html-local info info-am install install-am \ install-baseboardDATA install-binSCRIPTS install-configDATA \ install-data install-data-am install-djlibexecSCRIPTS \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-includeHEADERS \ install-info install-info-am install-man install-man1 \ install-pdf install-pdf-am install-pkgdataDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-aminfo \ maintainer-clean-generic mostlyclean mostlyclean-aminfo \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-baseboardDATA \ uninstall-binSCRIPTS uninstall-configDATA \ uninstall-djlibexecSCRIPTS uninstall-dvi-am uninstall-html-am \ uninstall-includeHEADERS uninstall-info-am uninstall-man \ uninstall-man1 uninstall-pdf-am uninstall-pkgdataDATA \ uninstall-ps-am export DEJAGNU # Give a reassuring message so that users know the "build" worked. all-local: @echo "Done. Now run 'make install'." dejagnu.pdf: $(XML) $(DOCBOOK2PDF) $(srcdir)/doc/dejagnu.xml dejagnu.ps: $(XML) $(DOCBOOK2PS) $(srcdir)/doc/dejagnu.xml dejagnu.rtf: $(XML) $(DOCBOOK2RTF) $(srcdir)/doc/dejagnu.xml html-local: $(DOCBOOK2HTML) -o html $(srcdir)/doc/dejagnu.xml @MAINTAINER_MODE_TRUE@doc/dejagnu.texi: $(XML) @MAINTAINER_MODE_TRUE@ $(DOCBOOK2TEXI) --string-param directory-description="The GNU testing framework." --string-param directory-category="Programming" $(srcdir)/doc/dejagnu.xml @MAINTAINER_MODE_TRUE@ mv dejagnu.texi $(srcdir)/doc # 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: dejagnu-1.5.3/configure0000775000175000017500000051260412506237377012013 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for GNU DejaGnu 1.5.3. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: bug-dejagnu@gnu.org about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU DejaGnu' PACKAGE_TARNAME='dejagnu' PACKAGE_VERSION='1.5.3' PACKAGE_STRING='GNU DejaGnu 1.5.3' PACKAGE_BUGREPORT='bug-dejagnu@gnu.org' PACKAGE_URL='http://www.gnu.org/software/dejagnu/' enable_option_checking=no ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS subdirs DEJAGNU EXPECT DOCBOOK2TEXI DOCBOOK2PS DOCBOOK2PDF DOCBOOK2RTF DOCBOOK2HTML am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode enable_dependency_tracking ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CXX CXXFLAGS CCC' ac_subdirs_all='example/calc example/mathhelper' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= 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=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -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_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$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 ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$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 | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$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 ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) 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 | -n) 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 ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$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_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=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 ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # 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 the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` 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 test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # 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 <<_ACEOF \`configure' configures GNU DejaGnu 1.5.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/dejagnu] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --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 _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of GNU DejaGnu 1.5.3:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . GNU DejaGnu home page: . General help using GNU software: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF GNU DejaGnu configure 1.5.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by GNU DejaGnu $as_me 1.5.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.14' 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 elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # 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 # AmigaOS /C/install, which installs bootblocks on floppy discs # 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" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /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 for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir 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. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&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}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # 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 ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $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". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file 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" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='dejagnu' VERSION='1.5.3' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_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 $# != 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 ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi # Extract the first word of "docbook2html", so it can be a program name with args. set dummy docbook2html; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_DOCBOOK2HTML+:} false; then : $as_echo_n "(cached) " >&6 else case $DOCBOOK2HTML in [\\/]* | ?:[\\/]*) ac_cv_path_DOCBOOK2HTML="$DOCBOOK2HTML" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_DOCBOOK2HTML="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_DOCBOOK2HTML" && ac_cv_path_DOCBOOK2HTML="false" ;; esac fi DOCBOOK2HTML=$ac_cv_path_DOCBOOK2HTML if test -n "$DOCBOOK2HTML"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCBOOK2HTML" >&5 $as_echo "$DOCBOOK2HTML" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "docbook2rtf", so it can be a program name with args. set dummy docbook2rtf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_DOCBOOK2RTF+:} false; then : $as_echo_n "(cached) " >&6 else case $DOCBOOK2RTF in [\\/]* | ?:[\\/]*) ac_cv_path_DOCBOOK2RTF="$DOCBOOK2RTF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_DOCBOOK2RTF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_DOCBOOK2RTF" && ac_cv_path_DOCBOOK2RTF="false" ;; esac fi DOCBOOK2RTF=$ac_cv_path_DOCBOOK2RTF if test -n "$DOCBOOK2RTF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCBOOK2RTF" >&5 $as_echo "$DOCBOOK2RTF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "docbook2pdf", so it can be a program name with args. set dummy docbook2pdf; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_DOCBOOK2PDF+:} false; then : $as_echo_n "(cached) " >&6 else case $DOCBOOK2PDF in [\\/]* | ?:[\\/]*) ac_cv_path_DOCBOOK2PDF="$DOCBOOK2PDF" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_DOCBOOK2PDF="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_DOCBOOK2PDF" && ac_cv_path_DOCBOOK2PDF="false" ;; esac fi DOCBOOK2PDF=$ac_cv_path_DOCBOOK2PDF if test -n "$DOCBOOK2PDF"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCBOOK2PDF" >&5 $as_echo "$DOCBOOK2PDF" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "docbook2ps", so it can be a program name with args. set dummy docbook2ps; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_DOCBOOK2PS+:} false; then : $as_echo_n "(cached) " >&6 else case $DOCBOOK2PS in [\\/]* | ?:[\\/]*) ac_cv_path_DOCBOOK2PS="$DOCBOOK2PS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_DOCBOOK2PS="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_DOCBOOK2PS" && ac_cv_path_DOCBOOK2PS="false" ;; esac fi DOCBOOK2PS=$ac_cv_path_DOCBOOK2PS if test -n "$DOCBOOK2PS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCBOOK2PS" >&5 $as_echo "$DOCBOOK2PS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "docbook2x-texi", so it can be a program name with args. set dummy docbook2x-texi; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_DOCBOOK2TEXI+:} false; then : $as_echo_n "(cached) " >&6 else case $DOCBOOK2TEXI in [\\/]* | ?:[\\/]*) ac_cv_path_DOCBOOK2TEXI="$DOCBOOK2TEXI" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_DOCBOOK2TEXI="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_DOCBOOK2TEXI" && ac_cv_path_DOCBOOK2TEXI="false" ;; esac fi DOCBOOK2TEXI=$ac_cv_path_DOCBOOK2TEXI if test -n "$DOCBOOK2TEXI"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOCBOOK2TEXI" >&5 $as_echo "$DOCBOOK2TEXI" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "expect", so it can be a program name with args. set dummy expect; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_EXPECT+:} false; then : $as_echo_n "(cached) " >&6 else case $EXPECT in [\\/]* | ?:[\\/]*) ac_cv_path_EXPECT="$EXPECT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_EXPECT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi EXPECT=$ac_cv_path_EXPECT if test -n "$EXPECT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPECT" >&5 $as_echo "$EXPECT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z $ac_cv_path_EXPECT ; then as_fn_error $? "unable to locate expect" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking Tcl version 8.3 or greater" >&5 $as_echo_n "checking Tcl version 8.3 or greater... " >&6; } if ${ac_cv_dg_tcl_modern+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_dg_tcl_modern=`$EXPECT << EOF if [ expr \\${tcl_version} >= 8.3 ] then { puts yes } else { puts no } EOF` fi if test x${ac_cv_dg_tcl_modern} = xyes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_cv_dg_tcl_modern}" >&5 $as_echo "${ac_cv_dg_tcl_modern}" >&6; } else as_fn_error $? "Tcl 8.3 or greater is required" "$LINENO" 5 fi if test x"$DEJAGNU" = x then DEJAGNU="/dev/null" fi subdirs="$subdirs example/calc example/mathhelper" ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # 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, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # 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. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by GNU DejaGnu $as_me 1.5.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Configuration commands: $config_commands Report bugs to . GNU DejaGnu home page: . General help using GNU software: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ GNU DejaGnu config.status 1.5.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi # # CONFIG_SUBDIRS section. # if test "$no_recursion" != yes; then # Remove --cache-file, --srcdir, and --disable-option-checking arguments # so they do not pile up. ac_sub_configure_args= ac_prev= eval "set x $ac_configure_args" shift for ac_arg 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=*) ;; --config-cache | -C) ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) ;; --disable-option-checking) ;; *) case $ac_arg in *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_sub_configure_args " '$ac_arg'" ;; esac done # Always prepend --prefix to ensure using the same prefix # in subdir configurations. ac_arg="--prefix=$prefix" case $ac_arg in *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" # Pass --silent if test "$silent" = yes; then ac_sub_configure_args="--silent $ac_sub_configure_args" fi # Always prepend --disable-option-checking to silence warnings, since # different subdirs can have different --enable and --with options. ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" ac_popdir=`pwd` for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue # Do not complain, so a configure script can configure whichever # parts of a large source tree are present. test -d "$srcdir/$ac_dir" || continue ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 $as_echo "$ac_msg" >&6 as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" # Check for guested configure; otherwise get Cygnus style configure. if test -f "$ac_srcdir/configure.gnu"; then ac_sub_configure=$ac_srcdir/configure.gnu elif test -f "$ac_srcdir/configure"; then ac_sub_configure=$ac_srcdir/configure elif test -f "$ac_srcdir/configure.in"; then # This should be Cygnus configure. ac_sub_configure=$ac_aux_dir/configure else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&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 name. ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 $as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} # The eval makes quoting arguments work. eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 fi cd "$ac_popdir" done fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi dejagnu-1.5.3/AUTHORS0000644000175000017500000000024112320744410011120 00000000000000The creator of DejaGnu is Rob Savoye. rob@welcomehome.org www.welcomehome.org/rob.html The current maintainers of DejaGnu are listed in the MAINTAINERS file. dejagnu-1.5.3/TODO0000644000175000017500000000314712320744410010550 00000000000000Last updated $Date: 2004/02/08 14:02:07 $ Bigger items ============ * Internationali[sz]ation. * Use a throw-away slave interpreter for running each test case. * Transfer timeouts should be dependent on file size and link speed. * Add more support for target boards and RTOSes. * Use the new expect terminal support for an "escape codes" API. * Use expectk and write a GUI testing API, complete with record/playback. Documentation ============= * Add a "testing methodologies" section to the manual. From: mec.gnu@mindspring.com (Michael Elizabeth Chastain) Subject: my dejagnu wish list Newsgroups: gmane.comp.sysutils.dejagnu.general Date: Sat, 31 Jan 2004 21:02:21 -0500 (EST) My wish list for dejagnu: . clean up the exit status value. The current situation is: 1 a FAIL, XPASS, KPASS, or UNRESOLVED result occurred 1 an unknown TCL procedure was called 1 --status option and a TCL error happened 0 all other cases I would like to see something like: 0 all tests are okay 1 at least one test is not okay (FAIL, XPASS, KPASS, UNRESOLVED) 2 a TCL error occured 130 user hit ^C (SIGINT) 131 user hit ^\ (SIGQUIT) The important part is that I want to detect whether dejagnu ran to completion or whether the user interrupted it with ^C or ^\. . When the compiler produces error messages, default_target_compile calls "verbose -log ...". There is no need for "-log", because runtest.exp already turned on "expect" logging with "log_file -a $outdir/$tool.log", so there is already a copy of the compiler output in the log file. Just "verbose ..." or nothing at all. dejagnu-1.5.3/testglue.c0000644000175000017500000000660712320744410012064 00000000000000#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. On non-UNDERSCORE targets, we wrap _exit separately; it's actually a different function. */ #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 #ifndef VXWORKS #define REAL__EXIT __real__exit #endif #define REAL_MAIN __real_main #define REAL_ABORT __real_abort #define ORIG_EXIT __wrap_exit #define ORIG__EXIT __wrap__exit #define ORIG_ABORT __wrap_abort #define ORIG_MAIN __wrap_main #endif extern void abort (void); extern void exit (int); #endif #ifdef REAL_MAIN extern void REAL_EXIT (); extern void REAL_ABORT (); extern int REAL_MAIN (int argc, char **argv, char **envp); #endif #ifdef REAL__EXIT extern void REAL__EXIT (); #endif static int done_exit_message = 0; 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); done_exit_message = 1; REAL_EXIT (code); while (___constval); } #ifdef ORIG__EXIT void ORIG__EXIT (code) int code; { char buf[30]; char *ptr; /* Since exit may call _exit, we need to avoid a second message. */ if (! done_exit_message) { strcpy (buf, "\n*** EXIT code "); ptr = write_int (code, buf + strlen(buf)); *(ptr++) = '\n'; write (1, buf, ptr-buf); } REAL__EXIT (code); while (___constval); } #endif 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 dejagnu-1.5.3/baseboards/0000775000175000017500000000000012506237416012253 500000000000000dejagnu-1.5.3/baseboards/arm-sid.exp0000644000175000017500000000241012320744410014227 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {arm-elf thumb-elf} set_board_info sim "arm-elf-sid" # SID does not emulate the FPU process_multilib_options "-msoft-float" set_board_info sim,defaultendian "-EL" # 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 "sid" dejagnu-1.5.3/baseboards/m68k-emc.exp0000644000175000017500000000366012320744410014232 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/powerpc-bug.exp0000644000175000017500000000343312320744410015133 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 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" dejagnu-1.5.3/baseboards/mcore-moto-sim.exp0000644000175000017500000001100012320744410015535 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/basic-sid.exp0000644000175000017500000000472512320744410014544 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # find_sid -- find a usable SID simulator. # This proc is local to this file and is used to locate a SID to use. # Search the build tree, then $PATH. # # Written by Ben Elliston (bje@redhat.com). proc find_sid { target_alias } { global env global tool_root_dir set try [lookfor_file ${tool_root_dir} sid/bsp/${target_alias}-sid] if { $try != "" } { set sid_build [lookfor_file ${tool_root_dir} sid/main/dynamic/sid] if { $sid_build != "" } { set env(SID) $sid_build } return $try } # In this case, the bsp script must be available on the PATH. # Just hope for the best! return ${target_alias}-sid } # find_sid_conf -- find a usable pre-generated SID config file. proc find_sid_conf { config } { global env global srcdir set try [lookfor_file ${srcdir} sid/bsp/pregen/${config}.conf] if { $try == "" } then { return ${config}.conf } else { return $try } } # find_rawsid -- find a usable SID simulator. # This proc is local to this file and is used to locate a SID to use. # Search the build tree, then $PATH. proc find_rawsid { } { global env global tool_root_dir global srcdir set try [lookfor_file ${tool_root_dir} sid/main/dynamic/sid] if { $try == "" } { set try "sid" } else { # testing build tree set env(SID_LIBRARY_PATH) [join [glob "${tool_root_dir}/sid/component/*" "$srcdir/sid/component/*"] ":"] # srcdir=/..../sid/component/testsuite set tcl_library "$srcdir/tcl/library" global host_os switch -glob $host_os { {cygwin*} { set tcl_library [exec cygpath -w $tcl_library] } } set env(TCL_LIBRARY) $tcl_library } return $try } dejagnu-1.5.3/baseboards/jmr3904-sim.exp0000644000175000017500000000243012320744410014573 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" dejagnu-1.5.3/baseboards/v850-sim.exp0000644000175000017500000000366012320744410014173 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {v850-elf v850e-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 dejagnu-1.5.3/baseboards/h8300-sim.exp0000644000175000017500000000434412320744410014233 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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]" set_board_info uses_underscores 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 set_board_info gcc,text_size 60000 # 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 dejagnu-1.5.3/baseboards/vr4111-sim.exp0000644000175000017500000000227012320744410014423 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # DDB linker script. if { [board_info $board obj_format] == "ecoff" } { set_board_info ldscript "-Tddbecoff.ld" } else { set_board_info ldscript "-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" dejagnu-1.5.3/baseboards/mt-sid.exp0000644000175000017500000000404012320744410014071 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {mt-elf} # Load a baseboard description for SID simulators. load_base_board_description "basic-sid" set_board_info ldflags "-msim [libgloss_link_flags] [newlib_link_flags]" verbose "Using simulator [board_info $board sim]\n" set_board_info sim [find_rawsid] if { ${tool} == "gdb" } { set_board_info sim,options "-f [find_sid_conf mt-gdb]" } else { set_board_info sim,options "-f [find_sid_conf mt-gloss]" } # 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 # Not needed by SID anymore, but needed to suppress warning in # gdb/testsuite/config/sid.exp. set_board_info sim,defaultendian "-EB" # 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 "sid" # Tells the test harness to use pre-generated sid configurations. set_board_info sim,protocol "sid" # This is the name of our entry point symbol. set_board_info gdb,start_symbol _start dejagnu-1.5.3/baseboards/vr4100-sim.exp0000644000175000017500000000227012320744410014421 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # DDB linker script. if { [board_info $board obj_format] == "ecoff" } { set_board_info ldscript "-Tddbecoff.ld" } else { set_board_info ldscript "-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" dejagnu-1.5.3/baseboards/strongarm-cygmon.exp0000644000175000017500000000445512320744410016214 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/cygmon.exp0000644000175000017500000000346412320744410014201 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/m68hc11-sim.exp0000644000175000017500000000703012320744410014553 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {m6811-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 "m68hc11". setup_sim m68hc11 # 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 "[libgloss_include_flags] [newlib_include_flags]" # The GCC testsuite programs create quite large executables for the 68HC11. # We have to give enough room for the text section and we must make sure # that the data section does not overlay the 68HC11 IO registers. We could # relocate the IO registers but this would add some complexity to the crt0. set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags] -Wl,-Ttext,0x2000 -Wl,-Tdata,0x1100" # No linker script needed. set_board_info ldscript "-Wl,--script,sim-valid.x" # 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 set_board_info gdb,skip_float_tests 1 set_board_info gdb,nomalloc 1 set_board_info gdb,nointerrupts 1 # Don't do inferiorio #set_board_info gdb,noinferiorio 1 # Data section is not installed by loading the program. The data # section is installed at run time by the crt0 (copied from text/ROM # to RAM). set_board_info gdb,noloaddata 1 # printf does not support %f, don't execute gdb tests that rely on this. set_board_info gdb,skip_float_tests 1 # Disable the 68HC11 EEPROM to avoid problems with GCC testsuite # programs and map them in 0x8000..0xffff. set_board_info sim,options "--cpu-config=0xe" # Used by a few gcc.c-torture testcases to delimit how large the stack can # be. set_board_info gcc,stack_size 1024 # Used by a few gcc.c-torture testcases when varargs are used (stdarg is ok). set_board_info gcc,no_varargs 1 # Torture test gcc.c-torture/execute/920501-6.c takes about 300 seconds on a # 700 Mhz Pentium, so up the time limit. set board_info($board,sim_time_limit) 400 set_board_info mathlib "" # The first -lbcc is here to get the small implementation of printf. # The second -lbcc provides the system calls (write, read) used in -lc. # The last -lc defines the __errno used in -lbcc. set_board_info libs "-lbcc -lc -lgcc -lc -lbcc" # sizeof int != sizeof long. set_board_info gdb,short_int 1 dejagnu-1.5.3/baseboards/fr30-sim.exp0000644000175000017500000000407712320744410014246 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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. 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 dejagnu-1.5.3/baseboards/m32r-sid.exp0000644000175000017500000000222112320744410014233 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {m32r-elf} set_board_info sim "m32r-elf-sid" # 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 "sid" dejagnu-1.5.3/baseboards/mcore-pe.exp0000644000175000017500000000401312320744410014403 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/vr4300-sim.exp0000644000175000017500000000227012320744410014423 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # DDB linker script. if { [board_info $board obj_format] == "ecoff" } { set_board_info ldscript "-Tddbecoff.ld" } else { set_board_info ldscript "-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" dejagnu-1.5.3/baseboards/arm-sim.exp0000644000175000017500000000474712320744410014257 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/frv-tomcat.exp0000644000175000017500000000356112320744410014765 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {frv-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" # -mcpu=tomcat is needed for the board. process_multilib_options "-mcpu=tomcat" 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=tomcat.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 gdb,do_reload_on_run 1 dejagnu-1.5.3/baseboards/mips64-sim.exp0000644000175000017500000000354112320744410014611 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 "-Tpmon.ld" # And, it can't do arguments or signals in GDB. set_board_info noargs 1 set_board_info gdb,nosignals 1 dejagnu-1.5.3/baseboards/powerpcle-sim.exp0000644000175000017500000000345512320744410015473 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/mn10300-sim.exp0000644000175000017500000000440712320744410014467 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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. 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 "" # 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 0 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 dejagnu-1.5.3/baseboards/sh-sid.exp0000644000175000017500000000317612320744410014074 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {sh-elf} # Load a baseboard description for SID simulators. load_base_board_description "basic-sid" process_multilib_options "" verbose "Using simulator [board_info $board sim]\n" set_board_info sim [find_rawsid] if { ${tool} == "gdb" } { set_board_info sim,options "-f [find_sid_conf sh-gdb]" } else { set_board_info sim,options "-f [find_sid_conf sh-gloss]" } # 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 "sid" # default endian: big # set_board_info sim,defaultendian "-EB" # Tells the test harness to use pre-generated sid configurations. set_board_info sim,protocol "sid" dejagnu-1.5.3/baseboards/frv-elf.exp0000644000175000017500000000414412320744410014242 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {frv-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 "frv-stub" } else { load_generic_config "frv" } # 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 "-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 "frv" } else { set_board_info gdb_protocol "frv" set_board_info use_gdb_stub 1 set_board_info gdb_stub_ldscript "-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 dejagnu-1.5.3/baseboards/mips-lsi-sim.exp0000644000175000017500000000206712320744410015226 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # We need mips16. add_multilib_option "-mips16" # And we use the lsi linker script. set_board_info ldscript "-Tlsi.ld" # Otherwise we're the same as the standard MIPS simulator. load_base_board_description "mips-sim" dejagnu-1.5.3/baseboards/m32r-sim.exp0000644000175000017500000000407712320744410014257 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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. 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 dejagnu-1.5.3/baseboards/vr5000-ddb.exp0000644000175000017500000000436512320744410014371 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 "-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" dejagnu-1.5.3/baseboards/mips-sim-sde64.exp0000644000175000017500000000371512320744410015365 00000000000000# Copyright (C) 2012 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 needs_status_wrapper 1 set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]" set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]" # Use the sde64.ld linker script from libgloss for the o32 ABI and the # mips64 architecture on the gnu/gdb simulator. set_board_info ldscript "-Tsde64.ld" # And, it can't do arguments, and doesn't have real signals. set_board_info noargs 1 set_board_info gdb,nosignals 1 # Tell gdb to assume no fpu for -msoft-float compilation if {[string match "*soft-float*" $current_target_name]} { set_board_info gdb_init_command "set mipsfpu none" } dejagnu-1.5.3/baseboards/i960-sim.exp0000644000175000017500000000353112320744410014155 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 "-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 dejagnu-1.5.3/baseboards/vx4300.exp0000644000175000017500000000323012320744410013640 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 # 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" dejagnu-1.5.3/baseboards/usparc-cygmon.exp0000644000175000017500000000351112320744410015465 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 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] } } } } dejagnu-1.5.3/baseboards/cf.exp0000644000175000017500000000611012320744410013264 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 "-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 dejagnu-1.5.3/baseboards/mips-sim-mti32.exp0000644000175000017500000000371512320744410015376 00000000000000# Copyright (C) 2012 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 needs_status_wrapper 1 set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]" set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]" # Use the mti32.ld linker script from libgloss for the o32 ABI and the # mips32 architecture on the gnu/gdb simulator. set_board_info ldscript "-Tmti32.ld" # And, it can't do arguments, and doesn't have real signals. set_board_info noargs 1 set_board_info gdb,nosignals 1 # Tell gdb to assume no fpu for -msoft-float compilation if {[string match "*soft-float*" $current_target_name]} { set_board_info gdb_init_command "set mipsfpu none" } dejagnu-1.5.3/baseboards/sparclet-aout.exp0000644000175000017500000000507712320744410015472 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/d10v-sim.exp0000644000175000017500000000472012320744410014241 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/mips-sim-mti64_n32.exp0000644000175000017500000000372512320744410016066 00000000000000# Copyright (C) 2012 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 needs_status_wrapper 1 set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]" set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]" # Use the mti64_n32.ld linker script from libgloss for the n32 ABI and the # mips64 architecture on the gnu/gdb simulator. set_board_info ldscript "-Tmti64_n32.ld" # And, it can't do arguments, and doesn't have real signals. set_board_info noargs 1 set_board_info gdb,nosignals 1 # Tell gdb to assume no fpu for -msoft-float compilation if {[string match "*soft-float*" $current_target_name]} { set_board_info gdb_init_command "set mipsfpu none" } dejagnu-1.5.3/baseboards/mips-sim-mti64.exp0000644000175000017500000000371512320744410015403 00000000000000# Copyright (C) 2012 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 needs_status_wrapper 1 set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]" set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]" # Use the mti64.ld linker script from libgloss for the o32 ABI and the # mips64 architecture on the gnu/gdb simulator. set_board_info ldscript "-Tmti64.ld" # And, it can't do arguments, and doesn't have real signals. set_board_info noargs 1 set_board_info gdb,nosignals 1 # Tell gdb to assume no fpu for -msoft-float compilation if {[string match "*soft-float*" $current_target_name]} { set_board_info gdb_init_command "set mipsfpu none" } dejagnu-1.5.3/baseboards/mn10200-cygmon.exp0000644000175000017500000000350112320744410015164 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/powerpc-sim.exp0000644000175000017500000000345512320744410015152 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/sparclite-coff.exp0000644000175000017500000000436212320744410015604 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/sh-hms.exp0000644000175000017500000000463312320744410014103 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 "-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" dejagnu-1.5.3/baseboards/arm-ice.exp0000644000175000017500000000453212320744410014217 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/vr4100-ddb.exp0000644000175000017500000000401412320744410014360 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 "-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 dejagnu-1.5.3/baseboards/h8300.exp0000644000175000017500000000531412320744410013443 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 switch -- $x { "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 "-T${prefix_dir}/h8300-hms/${linker_script}" unset linker_script dejagnu-1.5.3/baseboards/i386-sid.exp0000644000175000017500000000330412320744410014144 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {i386-elf} # Load a baseboard description for SID simulators. load_base_board_description "basic-sid" set_board_info sim [find_rawsid] set_board_info sim,protocol "sid" set_board_info ldflags "-nostdlib [libgloss_link_flags] [newlib_link_flags]" set_board_info ldscript "-Tcygmon.ld" set_board_info gdb,start_symbol "__start" if { ${tool} == "gdb" } { set_board_info sim,options "-f [find_sid_conf i386-gdb]" } else { set_board_info sim,options "-f [find_sid_conf i386-gloss]" } # Used by a few gcc.c-torture testcases to delimit how large the # stack can be. set_board_info gcc,stack_size 16384 # 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 "sid" dejagnu-1.5.3/baseboards/vr4300-ddb.exp0000644000175000017500000000264212320744410014367 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 "-Tddbecoff.ld" } else { set_board_info ldscript "-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" dejagnu-1.5.3/baseboards/mips-sim-idt64.exp0000644000175000017500000000403712320744410015370 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 needs_status_wrapper 1 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 "-Tidtecoff.ld" } else { set_board_info ldscript "-Tidt64.ld" } # And, it can't do arguments, and doesn't have real signals. set_board_info noargs 1 set_board_info gdb,nosignals 1 # Tell gdb to assume no fpu for -msoft-float compilation if {[string match "*soft-float*" $current_target_name]} { set_board_info gdb_init_command "set mipsfpu none" } dejagnu-1.5.3/baseboards/fr30-elf.exp0000644000175000017500000000415112320744410014215 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 "-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 "-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 dejagnu-1.5.3/baseboards/mips-sim-mti64_64.exp0000644000175000017500000000372312320744410015713 00000000000000# Copyright (C) 2012 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 needs_status_wrapper 1 set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]" set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]" # Use the mti64_64.ld linker script from libgloss for the n64 ABI and the # mips64 architecture on the gnu/gdb simulator. set_board_info ldscript "-Tmti64_64.ld" # And, it can't do arguments, and doesn't have real signals. set_board_info noargs 1 set_board_info gdb,nosignals 1 # Tell gdb to assume no fpu for -msoft-float compilation if {[string match "*soft-float*" $current_target_name]} { set_board_info gdb_init_command "set mipsfpu none" } dejagnu-1.5.3/baseboards/xscale-cygmon.exp0000644000175000017500000000404512320744410015452 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software # 2004, 2005, 2006, 2007, 2008, 2009, 2010 Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/mips-sim-idt32.exp0000644000175000017500000000403712320744410015363 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 needs_status_wrapper 1 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 "-Tidtecoff.ld" } else { set_board_info ldscript "-Tidt32.ld" } # And, it can't do arguments, and doesn't have real signals. set_board_info noargs 1 set_board_info gdb,nosignals 1 # Tell gdb to assume no fpu for -msoft-float compilation if {[string match "*soft-float*" $current_target_name]} { set_board_info gdb_init_command "set mipsfpu none" } dejagnu-1.5.3/baseboards/gdbserver-sample.exp0000644000175000017500000000424112320744410016141 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # gdbserver running over ssh. load_generic_config "gdbserver" process_multilib_options "" # The default compiler for this target. set_board_info compiler "[find_gcc]" #set_board_info compiler "/opt/src/gcc/install-30/bin/gcc" #set_board_info c++compiler "/opt/src/gcc/install-30/bin/g++" set_board_info rsh_prog /usr/bin/ssh set_board_info rcp_prog /usr/bin/scp set_board_info protocol standard set_board_info hostname voltaire.debian.org set_board_info username dan set_board_info gdb_server_prog /home/dan/gdb/mv/obj/gdb/gdbserver/gdbserver # 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 "voltaire:" # 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 dejagnu-1.5.3/baseboards/sh-sim.exp0000644000175000017500000000440312320744410014077 00000000000000# Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, # 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {sh-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 simulator. load_base_board_description "basic-sim" # "sh" is the name of the sim subdir. setup_sim sh # 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 "" verbose "Using simulator [board_info $board sim]\n" # Prints to stdout OK. # Returns exit status OK (does not need status wrapper). # Passes argc, argv OK. # Calls functions OK. # No 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 # Need to pass -mieee in order to for the compiler to be IEEE-fp compliant. set_board_info ieee_multilib_flags "-mieee" # Small memory, can't do gdb's "huge.exp" test. set_board_info gdb,skip_huge_test 1 # Nor are interrupts really working. set_board_info gdb,nointerrupts 1 dejagnu-1.5.3/baseboards/m32r-linux-sim.exp0000644000175000017500000000375712320744410015420 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {m32r-linux} # 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. 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 "" set_board_info ldflags "-static" # 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 dejagnu-1.5.3/baseboards/mips-lnews-sim.exp0000644000175000017500000000177312320744410015572 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # lnews linker script. set_board_info ldscript "-Tlnews.ld" # Otherwise, it's the same as the standard mips simulator. load_base_board_description "mips-sim" dejagnu-1.5.3/baseboards/visium-sim.exp0000664000175000017500000000317712457711423015023 00000000000000# Copyright (C) 2013-2015 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {visium-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 simulator. load_base_board_description "basic-sim" # The name of the simulator is "visium". setup_sim visium # No multilib flags needed by default. process_multilib_options "" 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 # Used by a few gcc.c-torture testcases to delimit how large the stack can be. set_board_info gcc,stack_size 65536 dejagnu-1.5.3/baseboards/vx960.exp0000644000175000017500000000344712320744410013602 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 # 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" dejagnu-1.5.3/baseboards/tx39-sim.exp0000644000175000017500000000175212320744410014300 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" dejagnu-1.5.3/baseboards/fr30-cygmon.exp0000644000175000017500000000350012320744410014740 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/sparc64-sim.exp0000644000175000017500000000372312320744410014753 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/vxsparc.exp0000644000175000017500000000324712320744410014372 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 # 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" dejagnu-1.5.3/baseboards/cygwin.exp0000644000175000017500000000212412320744410014175 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" dejagnu-1.5.3/baseboards/i960-cyclone.exp0000644000175000017500000000464712320744410015032 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 "-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 dejagnu-1.5.3/baseboards/linux-libremote.exp0000644000175000017500000000347412320744410016025 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/multi-sim.exp0000644000175000017500000001272412320744410014624 00000000000000# Copyright (C) 2013 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # Contributed by Steve Ellcey . # With the generic-sim.exp baseboard I would test GCC with something # like: # export DEJAGNU_SIM_LINK_FLAGS="-Wl,--dynamic-linker=/local/home/sellcey/nightly/install-mips-mti-linux-gnu/sysroot-mips-mti-linux-gnu/usr/lib/ld-2.17.90.so -Wl,-rpath=/local/home/sellcey/nightly/install-mips-mti-linux-gnu/sysroot-mips-mti-linux-gnu/usr/lib:/local/home/sellcey/nightly/install-mips-mti-linux-gnu/mips-mti-linux-gnu/lib" # make check RUNTESTFLAGS="--target_board=generic-sim" # # With multi-sim.exp I can skip the export and just do: # make check RUNTESTFLAGS="--target_board=multi-sim" # # And I can also do this now: # make check RUNTESTFLAGS="--target_board=multi-sim\{-EB,-EL\}\{-mhard-float,-msoft-float\}" # Use env to check env. variables and modify the simulator. global env global SIM # 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" proc dynamic_linker_flag { args } { global board set compiler "[board_info $board compiler]" set mflags "[board_info $board multilib_flags]" set result [remote_exec host "$compiler $mflags --print-sysroot"] set output [lindex $result 1] set toutput [string trimright $output] set dynlinkerdir "$toutput/usr/lib" set dynlinker [glob -directory $dynlinkerdir ld-*.so] verbose "dynamic_linker_flag: -Wl,--dynamic-linker=$dynlinker" return "-Wl,--dynamic-linker=$dynlinker" } proc rpath_flags { args } { global board set compiler "[board_info $board compiler]" set mflags "[board_info $board multilib_flags] [libgloss_include_flags] [newlib_include_flags] [libgloss_link_flags] [libgloss_link_flags]" set rpathflags "" set gccpath [get_multilibs] foreach i {libgcc_s.so libstdc++.so libgfortran.so libatomic.so libc.so} { set result [remote_exec host "$compiler $mflags --print-file-name=$i"] set output [lindex $result 1] set rpathdir [file dirname $output] # If testing an installed compiler, --print-file-name will find the # libraries, if testing a built but not installed compiler it will not # find libraries like libstdc++.so or libgfortran.so so we add the # extra hack/search so it can work. if [string match "." $rpathdir] { if [string match $i "libstdc++.so"] { if [file exists "$gccpath/libstdc++-v3/src/.libs/libstdc++.so"] { set rpathflags "$rpathflags -Wl,-rpath=$gccpath/libstdc++-v3/src/.libs" } } if [string match $i "libgfortran.so"] { if [file exists "$gccpath/libgfortran/.libs/libgfortran.so"] { set rpathflags "$rpathflags -Wl,-rpath=$gccpath/libgfortran/.libs" } } if [string match $i "libatomic.so"] { if [file exists "$gccpath/libatomic/.libs/libatomic.so"] { set rpathflags "$rpathflags -Wl,-rpath=$gccpath/libatomic/.libs" } } } else { set rpathflags "$rpathflags -Wl,-rpath=$rpathdir" } } verbose "rpath_flags: $rpathflags" return $rpathflags } # The TCL SIM variable takes precedence over the DEJAGNU_SIM env. variable if {[info exists env(DEJAGNU_SIM)] && ![info exists SIM]} { set SIM $env(DEJAGNU_SIM) } # This tells it which directory to look in for the simulator. setup_sim sim # No multilib flags are set by default. if {[info exists env(DEJAGNU_SIM_MULTILIB_OPTIONS)]} { process_multilib_options "$env(DEJAGNU_SIM_MULTILIB_OPTIONS)" } else { 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. if {[info exists env(DEJAGNU_SIM_GCC)]} { set_board_info compiler "$env(DEJAGNU_SIM_GCC)" } else { set_board_info compiler "[find_gcc]" } if {[info exists env(DEJAGNU_SIM_INCLUDE_FLAGS)]} { set_board_info cflags "[libgloss_include_flags] [newlib_include_flags] $env(DEJAGNU_SIM_INCLUDE_FLAGS)" } else { set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]" } if {[info exists env(DEJAGNU_SIM_LINK_FLAGS)]} { set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags] [dynamic_linker_flag] [rpath_flags] $env(DEJAGNU_SIM_LINK_FLAGS)" } else { set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags] [dynamic_linker_flag] [rpath_flags]" } if {[info exists env(DEJAGNU_SIM_LDSCRIPT)]} { set_board_info ldscript "$env(DEJAGNU_SIM_LDSCRIPT)" } if {[info exists env(DEJAGNU_SIM_OPTIONS)]} { set_board_info sim,options "$env(DEJAGNU_SIM_OPTIONS)" } if {[info exists env(DEJAGNU_SIM_BOARD_INFO)]} { foreach e $env(DEJAGNU_SIM_BOARD_INFO) { set_board_info [lindex $e 0] [lindex $e 1] } } dejagnu-1.5.3/baseboards/x86-cygmon.exp0000644000175000017500000000222312320744410014614 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 # 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 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" } dejagnu-1.5.3/baseboards/mips64vr4100-sim.exp0000644000175000017500000000412312320744410015463 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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) "-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 dejagnu-1.5.3/baseboards/mcore-elf.exp0000644000175000017500000000401412320744410014546 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/msparc-cygmon.exp0000644000175000017500000000160112320744410015453 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. load_base_board_description "cygmon" dejagnu-1.5.3/baseboards/i386-bozo.exp0000644000175000017500000000501512320744410014337 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" dejagnu-1.5.3/baseboards/mips-sim.exp0000644000175000017500000000351112320744410014434 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 "-Tidtecoff.ld" } else { set_board_info ldscript "-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 dejagnu-1.5.3/baseboards/m68k-sid.exp0000644000175000017500000000222112320744410014235 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {m68k-elf} set_board_info sim "m68k-elf-sid" # 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 "sid" dejagnu-1.5.3/baseboards/rom68k-idp.exp0000644000175000017500000000562612320744410014607 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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, with special console output routine for GDB. set_board_info ldscript "-Tidpgdb.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 # 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 dejagnu-1.5.3/baseboards/unix.exp0000644000175000017500000000256112320744410013665 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 # Do not use -lm on Cygwin if { [istarget "*-*-cygwin*"] } { set_board_info mathlib "" } # For the alpha, force use ieee if { [istarget "alpha*-*"] } { set_board_info ieee_multilib_flags "-mieee" } # Hardware breakpoints are not supported in sparc64 on GNU/Linux if { [istarget "sparc64-*-linux-gnu"] } { set_board_info gdb,no_hardware_watchpoints 1 } dejagnu-1.5.3/baseboards/am33_2.0-libremote.exp0000644000175000017500000000336212320744410016004 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file is useful for gdb testing with libremote on an embedded linux # board. In this case a Matsushita ASB2305 AM33 v2.0 board. load_generic_config "libremote_server" process_multilib_options "" # The default compiler for this target. #set_board_info compiler "[find_gcc]" set_board_info compiler "am33_2.0-linux-gnu-gcc" # We will be using the standard GDB remote protocol set_board_info gdb_protocol "remote" # Use techniques appropriate to a stub set_board_info use_gdb_stub 1 set_board_info gdb,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 # New set_board_info gdb,nosignals 1 dejagnu-1.5.3/baseboards/powerpc-bug1.exp0000644000175000017500000000201012320744410015202 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" dejagnu-1.5.3/baseboards/mips-idt.exp0000644000175000017500000000357312320744410014434 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 "-Tidtecoff.ld" } else { set_board_info ldscript "-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 dejagnu-1.5.3/baseboards/tx39-dve.exp0000644000175000017500000000466312320744410014272 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 "-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" dejagnu-1.5.3/baseboards/tic80-sim.exp0000644000175000017500000000351412320744410014416 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/mmixware-sim.exp0000644000175000017500000000606012320744410015317 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {mmix-knuth-mmixware} # Load the generic configuration for this board. This will define any # routines needed to communicate with the board. load_generic_config "sim" # Unset the slow_simulator flag; this simulator isn't slow. (I haven't # found documentation as to what constitutes a "slow" simulator and # there's no reference to that variable in the GCC test-suite, but all # tests I've found work.) unset_board_info slow_simulator # We don't use basic-sim.exp and setup_sim because the simulator, called # "mmix", is external to the build tree. If nobody set the simulator # name, we set it to "mmix", so the rest of the framework works. Let $SIM # override. if {![board_info $board exists sim]} { if {[info exists SIM]} { set_board_info sim $SIM } else { # Has to exist in the users path. set_board_info sim mmix } } # No default multilib options are needed for this board. process_multilib_options "" set_board_info is_simulator 1 # It isn't visible in the target triple, so we set it explicitly. The # *linked* format is currently mmo, but those cases where this matters we # can deal with separately. set_board_info obj_format "elf" # 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]" # We put the stack in the code segment, so trampolines work; the mmix # simulator does not allow code to be executed in the "normal" documented # data and stack segments. Use a somewhat magic number, so stack addresses # are easily recognized when debugging. set_board_info ldflags "[newlib_link_flags] -Wl,--defsym,__Stack_start=0x1680a00000000000" # No linker script needed - the simulator is the main environment for this # target. set_board_info ldscript "" # Return codes aren't supported by the simulator. set_board_info needs_status_wrapper 1 # FIXME: Some gdb board variables are usually here. I currently have # no clue what to set them to, so I won't. dejagnu-1.5.3/baseboards/xtensa-sim.exp0000644000175000017500000000327712320744410014777 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2007 # 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {xtensa-elf} # Load the generic configuration for this board. This will define any # routines needed to communicate with the board. load_generic_config "sim" # We don't use basic-sim.exp and setup_sim because the simulator, called # "xt-run", is external to the build tree. set_board_info sim xt-run set_board_info sim,options "--turbo --exit_with_target_code" set_board_info is_simulator 1 # No default multilib options are needed for this board. process_multilib_options "" 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 "" # No support for signals on this target. set_board_info gdb,nosignals 1 dejagnu-1.5.3/baseboards/dos.exp0000644000175000017500000000344112320744410013465 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 "" set_board_info needs_status_wrapper 1 set_board_info gdb_opts "--command gdbinit" set_board_info gdb,nointerrupts 1 dejagnu-1.5.3/baseboards/vr4300.exp0000644000175000017500000000447612320744410013647 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 "-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" dejagnu-1.5.3/baseboards/sparc-sim.exp0000644000175000017500000000405112320744410014574 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {sparc-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" dejagnu-1.5.3/baseboards/d10v.exp0000644000175000017500000000562712320744410013462 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" dejagnu-1.5.3/baseboards/frv-tiger.exp0000644000175000017500000000354412320744410014611 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {frv-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" # -mcpu=tomcat is needed for the board. 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=tiger.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 gdb,do_reload_on_run 1 dejagnu-1.5.3/baseboards/d30v-sim.exp0000644000175000017500000000420612320744410014242 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/m32r-elf.exp0000644000175000017500000000415112320744410014226 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 "-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 "-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 dejagnu-1.5.3/baseboards/iq2000-sim.exp0000644000175000017500000000417112320744410014402 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {iq2000-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" # "iq2000" is the name of the sim subdir in devo/sim. setup_sim iq2000 # 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]" # Special linker script needed to run C programs. set_board_info ldscript "-Tsim.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 needs_status_wrapper 1 # Doesn't pass arguments or handle signals, # Can return results. # Does do inferiorio. set_board_info noargs 1 set_board_info gcc,no_trampolines 1 set_board_info gcc,no_label_values 1 set_board_info gdb,nosignals 1 dejagnu-1.5.3/baseboards/mips-sim-sde32.exp0000644000175000017500000000371512320744410015360 00000000000000# Copyright (C) 2012 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 needs_status_wrapper 1 set_board_info cflags "[libgloss_include_flags] [newlib_include_flags]" set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags]" # Use the sde32.ld linker script from libgloss for the o32 ABI and the # mips32 architecture on the gnu/gdb simulator. set_board_info ldscript "-Tsde32.ld" # And, it can't do arguments, and doesn't have real signals. set_board_info noargs 1 set_board_info gdb,nosignals 1 # Tell gdb to assume no fpu for -msoft-float compilation if {[string match "*soft-float*" $current_target_name]} { set_board_info gdb_init_command "set mipsfpu none" } dejagnu-1.5.3/baseboards/sparclite-sim.exp0000644000175000017500000000405312320744410015454 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" dejagnu-1.5.3/baseboards/vx68k.exp0000644000175000017500000000324512320744410013670 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003 # 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" dejagnu-1.5.3/baseboards/mn10300-cygmon.exp0000644000175000017500000000407412320744410015173 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" if {[string compare [board_info $board boardtype] "asb2303"] == 0} { set_board_info ldflags "[libgloss_link_flags] [newlib_link_flags] [board_info $board addl_link_flags] -mno-crt0 -mam33-2" set_board_info ldscript "-mam33-2 -Tasb2303.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 dejagnu-1.5.3/baseboards/basic-sim.exp0000644000175000017500000000431212320744410014545 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 # Most simulators need the image reloaded and reinitialized to rerun. set_board_info gdb,do_reload_on_run 1 dejagnu-1.5.3/baseboards/danlite-elf.exp0000644000175000017500000000434012320744410015063 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/op50n.exp0000644000175000017500000000406412320744410013643 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 "-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 dejagnu-1.5.3/baseboards/sparclite-cygmon.exp0000644000175000017500000000202012320744410016150 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 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" dejagnu-1.5.3/baseboards/linux-gdbserver.exp0000644000175000017500000000345212320744410016022 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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 dejagnu-1.5.3/baseboards/frv-sim.exp0000644000175000017500000000410112320744410014255 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {frv-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" # "frv" is the name of the sim subdirectory. setup_sim frv # 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 "" # 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 # More time is needed set_board_info gcc,timeout 800 set_board_info gdb,timeout 60 # Used by a few gcc.c-torture testcases to delimit how large the stack can # be. set_board_info gcc,stack_size 5000 dejagnu-1.5.3/baseboards/mcore-sim.exp0000644000175000017500000000420212320744410014567 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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. 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 dejagnu-1.5.3/baseboards/androideabi.exp0000644000175000017500000000674612320744410015154 00000000000000# Copyright (C) 2013 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. process_multilib_options "" load_generic_config "adb" # We need this for find_gcc and *_include_flags/*_link_flags. load_base_board_description "adb" set_board_info compiler "[find_gcc]" # We may need -mandroid. set_board_info cflags "-mandroid" set_board_info ldflags "-mandroid" # # load PROG to DEST and run it with ARGS using adb # proc adb_load { dest prog args } { # Default directory uses tmpfs, so it is the best place to run # tests to avoid excessive wear of flash. global android_tmp_dir if { $android_tmp_dir != "" } { verbose -log "android temporary directory is set to $android_tmp_dir" 3 } else { set android_tmp_dir "/mnt/sdcard/.android_secure" verbose -log "android temporary directory will be used by default $android_tmp_dir" 3 } 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 ![file exists $prog] then { # We call both here because this should never happen. perror "$prog does not exist in standard_load." verbose -log "$prog does not exist." 3 return "untested" } if [is_remote $dest] { set localfile "./[file tail $prog].[pid]" set remotefile "$android_tmp_dir/[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 "unresolved" } set retval [remote_exec $dest "test -x $remotefile"] if { $retval != "0 {}" } { # Android doesn't support symbolic input for chmod, therefore set executable permission by number set retval [remote_exec $dest "chmod 755 $remotefile"] if { $retval != "0 {}" } { verbose -log "Setting executable permissions of $prog on [board_info $dest name] failed." 3 return "unresolved" } } if [board_info $dest exists remote_link] { if [[board_info $dest remote_link] $remotefile] { verbose -log "Couldn't do remote link" # Can't use remote_file delete since /system/bin/rm does not # support -f on Android. remote_exec $dest rm $remotefile return "unresolved" } } set status [remote_exec $dest $localfile $pargs $inp] remote_exec $dest rm $remotefile } else { set status [remote_exec $dest $prog $pargs $inp] } if { [lindex $status 0] < 0 } { verbose -log "Couldn't execute $prog, [lindex $status 1]" 3 return "unresolved" } set output [lindex $status 1] set status [lindex $status 0] verbose -log "Executed $prog, status $status" 2 if ![string match "" $output] { verbose -log -- "$output" 2 } if { $status == 0 } { return [list "pass" $output] } else { return [list "fail" $output] } } dejagnu-1.5.3/baseboards/README0000644000175000017500000000135312320744410013042 00000000000000The 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. dejagnu-1.5.3/baseboards/cris-sim.exp0000644000175000017500000000556212320744410014434 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This is a list of toolchains that are supported on this board. set_board_info target_install {cris-elf crisv32-elf cris-aout cris-linux-gnu crisv32-linux-gnu} # 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 sim subdir in src/sim. setup_sim cris # This simulator isn't slow. set_board_info slow_simulator 0 # No multilib options needed by default. process_multilib_options "" set cris_ldopt "-sim3" set cris_simopt "" if {[istarget *-*-linux*]} { set cris_ldopt "-static" } # Support different multilibs and targets. foreach x $board_variant_list { regsub -all "^\[ \t\]*" "$x" "" x regsub -all "\[ \t\]*$" "$x" "" x switch -- $x { # We force the arch to either pre-v32 (i.e. v10) or v32 for the # "common" compatible subset, by letting the otherwise # functionally equivalent gcc options "-march=..." and # "-mcpu=..." control that. (We don't have to force the # architecture, but it's easier to make sure we can check that # the "common" subset doesn't lose the compatibility.) # Mnemonic: "a" is 10. "arch=common_v10_v32" - "-march=common_v10_v32" { set cris_simopt "--architecture cris" } # Mnemonic: "c" is... eh... comes after 10! "cpu=common_v10_v32" - "-mcpu=common_v10_v32" { set cris_simopt "--architecture crisv32" } } } if { ![board_info $board exists sim,options] && $cris_simopt != "" } { set_board_info sim,options $cris_simopt } # Other than an already-installed glibc, 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] $cris_ldopt" # No linker script needed. set_board_info ldscript "" dejagnu-1.5.3/baseboards/arc-sim.exp0000644000175000017500000000422512320744410014234 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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. 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 dejagnu-1.5.3/baseboards/mn10200-sim.exp0000644000175000017500000000461212320744410014464 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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. 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 dejagnu-1.5.3/baseboards/sparclite-sim-le.exp0000644000175000017500000000456212320744410016057 00000000000000# Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # 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" dejagnu-1.5.3/INSTALL0000644000175000017500000002203012320744410011101 00000000000000Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. 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, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) 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 you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' 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. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. 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 support 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' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS 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 machine type. If you are _building_ compiler tools for cross-compiling, you should use the `--target=TYPE' option to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. 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. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc will cause the specified gcc to be used as the C compiler (unless it is overridden in the site shell script). `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--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. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. dejagnu-1.5.3/runtest.exp0000664000175000017500000014543712506237371012326 00000000000000# runtest.exp -- Test framework driver # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, # 2001, 2002, 2003, 2012 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # This file was written by Rob Savoye . set frame_version 1.5.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 "\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 ;# indicates that a failure is expected set xfail_prms 0 ;# GNATS prms id number for this expected failure set kfail_flag 0 ;# indicates that it is a known failure set kfail_prms 0 ;# bug id for the description of the known failure set sum_file "" ;# name of the file that contains the summary log set base_dir "" ;# the current working directory set xml_file_name "" ;# name of the xml output if requested set xml_file "" ;# handle on the xml file if requested set xml 0 ;# flag for requesting xml 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 ""; ;# set exit_error 0 ;# Toggle for whether to set the exit status ;# on Tcl bugs in test case drivers. # # 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 { [lindex $args $i] == "-x" } { set xml 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 } { # 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}" 2 if {[file exists [file join ${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 triplet of the build machine\n" send_user "\t--host \[string\]\t\tThe canonical triplet of the host machine\n" send_user "\t--host_board \[name\]\tThe host board to use\n" send_user "\t--target \[string\]\tThe canonical triplet of the target board\n" send_user "\t--status (-sta)\t\tSet the exit status to fail on Tcl errors\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--xml\[=name\] (-x)\tTurn on XML output generation\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*" - "--str*" - "--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 continue } "--v" - "--verb*" { # (--verbose) verbose output incr verbose 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 } } } 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/$x/$name" 2 if {[file exists [file join $dir $name]]} { return [file join $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 libdirs srcdir base_dir execpath tool global loaded_libs if {[info exists loaded_libs($file)]} { return } set loaded_libs($file) "" set search_dirs [list ../lib $libdir $libdir/lib [file dirname [file dirname $srcdir]]/dejagnu/lib $srcdir/lib $execpath/lib . [file dirname [file dirname [file dirname $srcdir]]]/dejagnu/lib] if {[info exists libdirs]} { lappend search_dirs $libdirs } if { [search_and_load_file "library file" $file $search_dirs ] == 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 [file join $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) } # list of extra search directories used by load_lib to look for libs set libdirs {} 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/libexec $libdir/.. $execpath $srcdir $srcdir/.. $srcdir/../.." { verbose "Looking for ${dir}/config.guess" 2 if {[file exists [file join ${dir} config.guess]]} { set config_guess [file join ${dir} config.guess] verbose "Found [file join ${dir} config.guess]" break } } # get the canonical triplet if {![info exists config_guess]} { send_error "ERROR: Couldn't find config.guess program.\n" exit 1 } catch "exec $config_guess" build_triplet switch $build_triplet { "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 [file join ${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*" - "--str*" - "--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 [file delete -force -- 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 } "--str*" { # (--strace) expect trace level set tracelevel $optarg strace $tracelevel verbose "Source Trace level is now $tracelevel" continue } "--sta*" { # (--status) exit status flag set exit_error 1 verbose "Tcl errors will set an ERROR exit status" 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 } "--x*" { set xml_file_name $optarg set xml 1 verbose "XML logging turned on" continue } "--he*" { # (--help) help text usage exit 0 } "[A-Z0-9_-.]*=*" { # skip makefile style args like CC=gcc, etc... (processed in first pass) continue } 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 libdir srcdir set found [load_config "${name}.exp" "${target_os}.exp" "default.exp" "unknown.exp"] if { $found == 0 } { send_error "WARNING: Couldn't find tool config file for $name, using default.\n" # If we can't load the tool init file, this must be a simple natively hosted # test suite, so we use the default procs for Unix. if { [search_and_load_file "library file" default.exp [list $libdir $libdir/config [file dirname [file dirname $srcdir]]/dejagnu/config $srcdir/config . [file dirname [file dirname [file dirname $srcdir]]]/dejagnu/config]] == 0 } { send_error "ERROR: Couldn't find default tool init file.\n" exit 1 } } } # # 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 } { # If we have a Tcl error, propogate the exit status do make # notices the error. global exit_status exit_error # exit error is set by a command line option if { $exit_status == 0 } { set exit_status $exit_error } # 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}}" { 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 dejagnu-1.5.3/Makefile.am0000644000175000017500000001671412457711423012131 00000000000000# Copyright (C) 1992-2015 Free Software Foundation, Inc. # # This file is part of DejaGnu. # # DejaGnu is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. # Process this file with automake to generate Makefile.in AUTOMAKE_OPTIONS = dejagnu export DEJAGNU EXTRA_DIST = ChangeLog-1992 MAINTAINERS runtest site.tmpl \ $(pkgdata_DATA) $(config_DATA) $(baseboard_DATA) \ $(TESTSUITE_FILES) $(XML) $(CONTRIB) DISTCLEANFILES = xXx.log xXx.sum x.log x.sum testrun.log testrun.sum # Give a reassuring message so that users know the "build" worked. all-local: @echo "Done. Now run 'make install'." bin_SCRIPTS = runtest include_HEADERS = dejagnu.h pkgdata_DATA = \ stub-loader.c \ testglue.c \ runtest.exp \ lib/debugger.exp \ lib/dejagnu.exp \ lib/dg.exp \ lib/framework.exp \ lib/ftp.exp \ lib/kermit.exp \ lib/libgloss.exp \ lib/remote.exp \ lib/rlogin.exp \ lib/rsh.exp \ lib/standard.exp \ lib/target.exp \ lib/targetdb.exp \ lib/telnet.exp \ lib/tip.exp \ lib/utils.exp configdir = $(pkgdatadir)/config config_DATA = \ config/README \ config/adb.exp \ config/arc.exp \ config/arm-ice.exp \ config/base-config.exp \ config/base68k.exp \ config/bug.exp \ config/cfdbug.exp \ config/cygmon.exp \ config/d10v.exp \ config/ddb-ether.exp \ config/ddb.exp \ config/default.exp \ config/dos.exp \ config/dve.exp \ config/gdb-comm.exp \ config/gdb_stub.exp \ config/h8300.exp \ config/i386-bozo.exp \ config/i960.exp \ config/m32r-stub.exp \ config/m32r.exp \ config/m68hc11.exp \ config/m68k-emc.exp \ config/mips-idt.exp \ config/mn10200-eval.exp \ config/mn10300-eval.exp \ config/netware.exp \ config/powerpc-bug.exp \ config/proelf.exp \ config/rom68k.exp \ config/sh.exp \ config/sid.exp \ config/sim.exp \ config/slite.exp \ config/sparclet.exp \ config/tic80.exp \ config/unix.exp \ config/vr4100.exp \ config/vr4300.exp \ config/vr5000.exp \ config/vxworks.exp baseboarddir = $(pkgdatadir)/baseboards baseboard_DATA = \ baseboards/README \ baseboards/androideabi.exp \ baseboards/am33_2.0-libremote.exp \ baseboards/arc-sim.exp \ baseboards/arm-ice.exp \ baseboards/arm-sid.exp \ baseboards/arm-sim.exp \ baseboards/basic-sid.exp \ baseboards/basic-sim.exp \ baseboards/cf.exp \ baseboards/cris-sim.exp \ baseboards/cygmon.exp \ baseboards/cygwin.exp \ baseboards/d10v-sim.exp \ baseboards/d10v.exp \ baseboards/d30v-sim.exp \ baseboards/danlite-elf.exp \ baseboards/dos.exp \ baseboards/fr30-cygmon.exp \ baseboards/fr30-elf.exp \ baseboards/fr30-sim.exp \ baseboards/frv-elf.exp \ baseboards/frv-sim.exp \ baseboards/frv-tiger.exp \ baseboards/frv-tomcat.exp \ baseboards/gdbserver-sample.exp \ baseboards/h8300-sim.exp \ baseboards/h8300.exp \ baseboards/i386-bozo.exp \ baseboards/i386-sid.exp \ baseboards/i960-cyclone.exp \ baseboards/i960-sim.exp \ baseboards/iq2000-sim.exp \ baseboards/jmr3904-sim.exp \ baseboards/linux-gdbserver.exp \ baseboards/linux-libremote.exp \ baseboards/m32r-elf.exp \ baseboards/m32r-linux-sim.exp \ baseboards/m32r-sid.exp \ baseboards/m32r-sim.exp \ baseboards/m68hc11-sim.exp \ baseboards/m68k-emc.exp \ baseboards/m68k-sid.exp \ baseboards/mcore-elf.exp \ baseboards/mcore-moto-sim.exp \ baseboards/mcore-pe.exp \ baseboards/mcore-sim.exp \ baseboards/mips-idt.exp \ baseboards/mips-lnews-sim.exp \ baseboards/mips-lsi-sim.exp \ baseboards/mips-sim-idt32.exp \ baseboards/mips-sim-idt64.exp \ baseboards/mips-sim.exp \ baseboards/mips-sim-mti32.exp \ baseboards/mips-sim-mti64.exp \ baseboards/mips-sim-mti64_n32.exp \ baseboards/mips-sim-mti64_64.exp \ baseboards/mips-sim-sde32.exp \ baseboards/mips-sim-sde64.exp \ baseboards/mips64-sim.exp \ baseboards/mips64vr4100-sim.exp \ baseboards/mmixware-sim.exp \ baseboards/mn10200-cygmon.exp \ baseboards/mn10200-sim.exp \ baseboards/mn10300-cygmon.exp \ baseboards/mn10300-sim.exp \ baseboards/msparc-cygmon.exp \ baseboards/mt-sid.exp \ baseboards/multi-sim.exp \ baseboards/op50n.exp \ baseboards/powerpc-bug.exp \ baseboards/powerpc-bug1.exp \ baseboards/powerpc-sim.exp \ baseboards/powerpcle-sim.exp \ baseboards/rom68k-idp.exp \ baseboards/sh-hms.exp \ baseboards/sh-sid.exp \ baseboards/sh-sim.exp \ baseboards/sparc-sim.exp \ baseboards/sparc64-sim.exp \ baseboards/sparclet-aout.exp \ baseboards/sparclite-coff.exp \ baseboards/sparclite-cygmon.exp \ baseboards/sparclite-sim-le.exp \ baseboards/sparclite-sim.exp \ baseboards/strongarm-cygmon.exp \ baseboards/tic80-sim.exp \ baseboards/tx39-dve.exp \ baseboards/tx39-sim.exp \ baseboards/unix.exp \ baseboards/usparc-cygmon.exp \ baseboards/v850-sim.exp \ baseboards/visium-sim.exp \ baseboards/vr4100-ddb.exp \ baseboards/vr4100-sim.exp \ baseboards/vr4111-sim.exp \ baseboards/vr4300-ddb.exp \ baseboards/vr4300-sim.exp \ baseboards/vr4300.exp \ baseboards/vr5000-ddb.exp \ baseboards/vx4300.exp \ baseboards/vx68k.exp \ baseboards/vx960.exp \ baseboards/vxsparc.exp \ baseboards/x86-cygmon.exp \ baseboards/xscale-cygmon.exp \ baseboards/xtensa-sim.exp djlibexecdir = $(pkgdatadir)/libexec djlibexec_SCRIPTS = config.guess # Contributed scripts, etc. CONTRIB = contrib/compare_tests # Testsuite. TESTSUITE_FILES = \ testsuite/runtest.all/topdir/subdir1/subsubdir1/subsubfile1 \ testsuite/runtest.all/topdir/subdir1/subfile1 \ testsuite/runtest.all/topdir/subdir1/subfile2 \ testsuite/runtest.all/topdir/subdir2/subfile2 \ testsuite/runtest.all/libs.exp \ testsuite/runtest.all/options.exp \ testsuite/runtest.all/remote.test \ testsuite/runtest.all/stats-sub.exp \ testsuite/runtest.all/stats.exp \ testsuite/runtest.all/target.test \ testsuite/runtest.all/utils.test \ testsuite/runtest.all/clone_output.test \ testsuite/runtest.all/config.test \ testsuite/runtest.all/default_procs.tcl \ testsuite/runtest.all/load_lib.exp \ testsuite/config/default.exp \ testsuite/lib/libsup.exp \ testsuite/lib/util-defs.exp \ testsuite/libdejagnu/tunit.exp RUNTEST = ${top_srcdir}/runtest RUNTESTDEFAULTFLAGS = --srcdir $(srcdir)/testsuite RUNTEST=$(RUNTEST) AM_CXXFLAGS = -I$(top_srcdir) -g check_PROGRAMS = unit unit_SOURCES = testsuite/libdejagnu/unit.cc # Documentation. dist_man_MANS = doc/runtest.1 info_TEXINFOS = doc/dejagnu.texi DOCBOOK2PDF = @DOCBOOK2PDF@ DOCBOOK2RTF = @DOCBOOK2RTF@ DOCBOOK2PS = @DOCBOOK2PS@ DOCBOOK2HTML = @DOCBOOK2HTML@ DOCBOOK2TEXI = @DOCBOOK2TEXI@ XML = doc/dejagnu.xml doc/legal.xml doc/ref.xml doc/user.xml dejagnu.pdf: $(XML) $(DOCBOOK2PDF) $(srcdir)/doc/dejagnu.xml dejagnu.ps: $(XML) $(DOCBOOK2PS) $(srcdir)/doc/dejagnu.xml dejagnu.rtf: $(XML) $(DOCBOOK2RTF) $(srcdir)/doc/dejagnu.xml html-local: $(DOCBOOK2HTML) -o html $(srcdir)/doc/dejagnu.xml if MAINTAINER_MODE doc/dejagnu.texi: $(XML) $(DOCBOOK2TEXI) --string-param directory-description="The GNU testing framework." --string-param directory-category="Programming" $(srcdir)/doc/dejagnu.xml mv dejagnu.texi $(srcdir)/doc endif dejagnu-1.5.3/dejagnu.h0000664000175000017500000001424112423572314011653 00000000000000/* DejaGnu unit testing header. Copyright (C) 2000, 2001, 2002, 2004, 2006 Free Software Foundation, Inc. This file is part of DejaGnu. DejaGnu is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. DejaGnu 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 DejaGnu; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef __DEJAGNU_H__ #define __DEJAGNU_H__ #include #include #include /* If you have problems with DejaGnu dropping failed, untested, or * unresolved messages generated by a unit testcase, then: */ /* #define _DEJAGNU_WAIT_ */ #ifdef _DEJAGNU_WAIT_ #include #include #include #endif static int passed; static int failed; static int untest; static int unresolve; static int xfailed; static int xpassed; static char buffer[512]; void wait (void) { #ifdef _DEJAGNU_WAIT_ fd_set rfds; struct timeval tv; FD_ZERO (&rfds); tv.tv_sec = 0; tv.tv_usec = 1; select (0, &rfds, NULL, NULL, &tv); #endif } static inline void pass (const char* fmt, ...) { va_list ap; passed++; va_start (ap, fmt); vsnprintf (buffer, sizeof (buffer), fmt, ap); va_end (ap); printf ("\tPASSED: %s\n", buffer); wait (); } static inline void xpass (const char* fmt, ...) { va_list ap; passed++; va_start (ap, fmt); vsnprintf (buffer, sizeof (buffer), fmt, ap); va_end (ap); printf ("\tXPASSED: %s\n", buffer); wait (); } static inline void fail (const char* fmt, ...) { va_list ap; failed++; va_start (ap, fmt); vsnprintf (buffer, sizeof (buffer), fmt, ap); va_end (ap); printf ("\tFAILED: %s\n", buffer); wait (); } static inline void xfail (const char* fmt, ...) { va_list ap; failed++; va_start (ap, fmt); vsnprintf (buffer, sizeof (buffer), fmt, ap); va_end (ap); printf ("\tXFAILED: %s\n", buffer); wait (); } static inline void untested (const char* fmt, ...) { va_list ap; untest++; va_start (ap, fmt); vsnprintf (buffer, sizeof (buffer), fmt, ap); va_end (ap); printf ("\tUNTESTED: %s\n", buffer); wait (); } static inline void unresolved (const char* fmt, ...) { va_list ap; unresolve++; va_start (ap, fmt); vsnprintf (buffer, sizeof (buffer), fmt, ap); va_end (ap); printf ("\tUNRESOLVED: %s\n", buffer); wait (); } static inline void note (const char* fmt, ...) { va_list ap; va_start (ap, fmt); vsnprintf (buffer, sizeof (buffer), fmt, ap); va_end (ap); printf ("\tNOTE: %s\n", buffer); wait (); } static inline void totals (void) { printf ("\nTotals:\n"); printf ("\t#passed:\t\t%d\n", passed); printf ("\t#real failed:\t\t%d\n", failed); if (xfailed) printf ("\t#expected failures:\t\t%d\n", xfailed); if (untest) printf ("\t#untested:\t\t%d\n", untest); if (unresolve) printf ("\t#unresolved:\t\t%d\n", unresolve); } #ifdef __cplusplus #include #include #include #include const char *outstate_list[] = { "FAILED: ", "PASSED: ", "UNTESTED: ", "UNRESOLVED: ", "XFAILED: ", "XPASSED: " }; const char ** outstate = outstate_list; enum teststate { FAILED, PASSED, UNTESTED, UNRESOLVED, XFAILED, XPASSED} laststate; class TestState { private: teststate laststate; std::string lastmsg; public: TestState (void) { passed = 0; failed = 0; untest = 0; xpassed = 0; xfailed = 0; unresolve = 0; } ~TestState (void) { totals(); } void testrun (bool b, std::string s) { if (b) pass (s); else fail (s); } void pass (std::string s) { passed++; laststate = PASSED; lastmsg = s; std::cout << "\t" << outstate[PASSED] << s << std::endl; } void pass (const char *c) { std::string s = c; pass (s); } void xpass (std::string s) { xpassed++; laststate = PASSED; lastmsg = s; std::cout << "\t" << outstate[XPASSED] << s << std::endl; } void xpass (const char *c) { std::string s = c; xpass (s); } void fail (std::string s) { failed++; laststate = FAILED; lastmsg = s; std::cout << "\t" << outstate[FAILED] << s << std::endl; } void fail (const char *c) { std::string s = c; fail (s); } void xfail (std::string s) { xfailed++; laststate = XFAILED; lastmsg = s; std::cout << "\t" << outstate[XFAILED] << s << std::endl; } void xfail (const char *c) { std::string s = c; xfail (s); } void untested (std::string s) { untest++; laststate = UNTESTED; lastmsg = s; std::cout << "\t" << outstate[UNTESTED] << s << std::endl; } void untested (const char *c) { std::string s = c; untested (s); } void unresolved (std::string s) { unresolve++; laststate = UNRESOLVED; lastmsg = s; std::cout << "\t" << outstate[UNRESOLVED] << s << std::endl; } void unresolved (const char *c) { std::string s = c; unresolved (s); } void totals (void) { std::cout << "\t#passed:\t\t" << passed << std::endl; std::cout << "\t#real failed:\t\t" << failed << std::endl; if (xfailed) std::cout << "\t#expected failures:\t\t" << xfailed << std::endl; if (xpassed) std::cout << "\t#unexpected passes:\t\t" << xpassed << std::endl; if (untest) std::cout << "\t#untested:\t\t" << untest << std::endl; if (unresolve) std::cout << "\t#unresolved:\t\t" << unresolve << std::endl; } // This is so this class can be printed in an ostream. friend std::ostream & operator << (std::ostream &os, TestState& t) { return os << "\t" << outstate[t.laststate] << t.lastmsg ; } int GetState (void) { return laststate; } std::string GetMsg (void) { return lastmsg; } }; #endif /* __cplusplus */ #endif /* _DEJAGNU_H_ */ dejagnu-1.5.3/COPYING0000644000175000017500000010451312320744410011112 00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. 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 them 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 prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. 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 state 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) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program 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, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU 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 Lesser General Public License instead of this License. But first, please read . dejagnu-1.5.3/config.sub0000775000175000017500000010623212470770006012052 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-01-01' # 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # 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. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: dejagnu-1.5.3/NEWS0000644000175000017500000000576312320744410010565 00000000000000-* text -*- Changes since 1.5: Changes since 1.4.4: 1. The runtest.1 man page has been brought up to date. 2. The Docbook/SGML documentation files were removed in favour of the Docbook/XML documentation. The Texinfo source for the Info pages is now automatically generated from the Docbook source. 3. The Makefile structure has been substantially simplified. There is now a single top-level Makefile.am. The use of recursive make has been eliminated. 4. lib/mondfe.exp and lib/xsh.exp have been removed. Users requiring these communication modes can still use the DejaGnu 1.4 branch or can contact dejagnu@gnu.org to discuss reinstating these files. 5. The configure script now ensures that Expect is installed and that it is linked against Tcl 8.3 or greater. 6. The runtest program now gracefully handles the possibility of the expect binary vanishing after DejaGnu has been installed (for example, by the user altering their PATH). 7. The user-visible utility procedures `absolute', `prune', `psource' and `slay' are deprecated and will be removed in the next release. If a testsuite uses any of these procedures, a copy of the procedure should be made and placed in the lib directory of the testsuite. Changes since 1.4.2: 1. New XML output option, so test results can be loaded into a database. 2. Support for the KFAIL/KPASS (known failures). 3. New "Hello World" example. 4. New tutorial chapter. 5. Test cases build with either GCC 2.x or 3.x. 6. BlueGnu has been removed from the contrib directory. 7. The contrib/test* scipts were bitrotten and have been removed. If you still want copies of these, they can be found in the previous DejaGnu release. 8. i960glue.c has been removed. Changes since 1.4.1: 1. Various patches for bugs reported from net users. 2. Test case builds with either libstdc++-v3 (as used by GCC 3.0.x) or the older v2 (as used by GCC 2.95.x). Changes since 1.4.0: 1. There is new support for a simple unit testing API, that is also useful for embedded testing. Changes since 1.3: 1. 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. 2. NT support has also been added. 3. DejaGnu now uses Automake. Changes since 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 since 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 since 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. dejagnu-1.5.3/ChangeLog0000664000175000017500000015323312506237371011647 000000000000002015-03-30 Ben Elliston * DejaGnu 1.5.3 released. 2015-03-30 Ben Elliston * runtest.exp (frame_version): Set to 1.5.3. * configure.ac (AC_INIT): Set version to 1.5.3. * configure: Regenerate. * doc/dejagnu.xml (appversion, version): Set to 1.5.3. * doc/dejagnu.texi: Regenerate. 2015-03-30 Ben Elliston Revert the following change which causes breakage reported here: https://lists.gnu.org/archive/html/dejagnu/2015-03/msg00003.html 2011-03-14 Jan Kratochvil * runtest.exp (runtest): Call reset_vars at initialisation so that perror does not affect test results in other test scripts. 2015-02-26 H.J. Lu * lib/target.exp (default_target_compile): Prepend multilib_flags, instead of appending it. 2015-02-18 Ben Elliston * lib/framework.exp (log_and_exit): Set tool to "testrun" if unset. 2015-02-05 Ben Elliston * doc/runtest.1: Fix a spelling error. 2015-02-04 Ben Elliston * config.guess: Update to version 2015-01-01. * config.sub: Likewise. 2015-01-22 Eric Botcazou * Makefile.am (baseboard_DATA): Add baseboards/visium-sim.exp. * Makefile.in: Regenerate. * baseboards/visium-sim.exp: New file. 2014-11-25 Ben Elliston * lib/dejagnu.exp (host_execute): Remove stray leading hyphen. Reported by David Malcolm. 2014-10-28 Ben Elliston * Makefile.in: Regenerate. 2014-10-28 Ben Elliston * example: Remove stale examples. 2014-10-24 Steve Ellcey * dejagnu.h (pass): Make function static as well as inline. (xpass): Ditto. (fail): Ditto. (xfail): Ditto. (untested): Ditto. (unresolved): Ditto. (note): Ditto. (totals): Ditto. 2014-10-14 Ben Elliston * runtest.exp: Only match $directory, not *${directory}* when the user passes the --directory option. Reported by Sergey Alyoshin. 2014-10-14 Ben Elliston * lib/dejagnu.exp (host_execute): Remove buffer_full check. This is not the right command keyword -- it is full_buffer. Reported by David Malcolm. 2014-07-15 Maciej W. Rozycki Maciej W. Rozycki * lib/targetdb.exp (add_board_info): New procedure. * doc/ref.xml (Add_board_info Procedure): New section. (Set_board_info Procedure): Add description. (Unset_board_info Procedure): Likewise. * doc/user.xml (Board Config File Values): Add `add_board_info' reference. Reorder `gdb_init_command' table rows and remove a duplicate entry, reusing it for `gdb_init_commands'. 2014-06-25 Rob Savoye * runtest.exp: (lookfor-file): Fix bug were none of the relative paths were actually being used for file lookup. 2014-06-06 Ben Elliston * depcomp, install-sh, missing: Update to latest versions. * mkinstalldirs: Remove. * Makefile.in: Regenerate. 2014-06-04 Ben Elliston * Makefile.in: Regenerate with Automake 1.14.1. * compile: Add missing file. 2014-06-04 Ben Elliston * config.guess: Update to version 2014-03-23. * config.sub: Likewise. 2014-06-04 Ben Elliston * aclocal.m4: Regenerate with Automake 1.14.1. * configure: Regenerate with Autoconf 2.69. 2014-03-15 Steve Ellcey * baseboards/multi-sim.exp (rpath_flags): Add libatomic.so check. 2014-02-23 Steve Ellcey Richard Sandiford * config/sim.exp (sim_exec): New. (sim_file): New. 2013-12-08 Richard Sandiford * lib/dg.exp (dg-test): Don't put the expected and actual output of a pattern test in the test name; send it to the log instead. 2013-11-01 Steve Ellcey * Makefile.am (baseboard_SCRIPTS): Add multi-sim.exp baseboard. * Makefile.in: Regenerate. * baseboards/multi-sim.exp: New. 2013-10-31 Anton Kolesov * lib/remote.exp (standard_reboot): Return 1 instead of an empty string. (remote_reboot): Add comment explaining return value of this procedure. * doc/ref.xml (remote_reboot, standard_reboot): Document procedures. * doc/dejagnu.texi: Regenerate. 2013-10-15 Alexander Ivchenko * baseboards/androideabi.exp (process_multilib_options): Add option. * config/adb.exp: Remove hardcoded -static option. (adb_load): Add the possibility to change the temp directory. Also handle permission potential problems. (adb_exec): Do cd to android_tmp_dir first. 2013-10-05 Jose E. Marchesi * baseboards/unix.exp: Add gdb settings to not use hardware watchpoints in sparc64 running GNU/Linux. 2013-06-17 Bernhard Reutner-Fischer * runtest.exp (libdirs): New global variable. (load_lib): Append libdirs to search_and_load_files directories. * doc/ref.xml (load_lib): Document global variable libdirs. * doc/dejagnu.texi: Regenerate. * testsuite/runtest.all/load_lib.exp: New testcase. * Makefile.am (TESTSUITE_FILES): Add new testcase. * Makefile.in: Regenerate. 2013-06-15 Ben Elliston * configure.ac: If DEJAGNU is unset, set it to /dev/null. * Makefile.am: Export DEJAGNU. * configure: Likewise. * Makefile.in: Regenerate. 2013-06-15 Bernhard Reutner-Fischer * doc/user.xml: Fix typos. * doc/ref.xml: Likewise. * doc/dejagnu.texi: Regenerate. 2013-06-15 Bernhard Reutner-Fischer * doc/user.xml: Fix number of columns in table. * doc/dejagnu.texi: Regenerate. 2013-06-15 Bernhard Reutner-Fischer * doc/user.xml: Fix rendering errors around programlisting. * doc/ref.xml: Likewise. * doc/dejagnu.texi: Regenerate. 2013-06-15 Bernhard Reutner-Fischer * doc/user.xml: Fix spacing before productname. * doc/dejagnu.texi: Regenerate. 2013-06-12 Bernhard Reutner-Fischer * testsuite/runtest.all/default_procs.tcl (send_log): Use the magic "args" parameter name, as expect send_log proc accepts -- as a leading option. 2013-06-08 Makoto Fujiwara * Makefile.am (pkgdata_DATA): Rename from pkgdata_SCRIPTS. (config_DATA): Likewise for config_SCRIPTS. (baseboard_DATA): Likewise for baseboard_SCRIPTS. (EXTRA_DIST): Remove pkgdata_SCRIPTS, config_SCRIPTS and baseboard_SCRIPTS. * Makefile.in: Regenerate. 2013-06-08 Ben Elliston * configure: Regenerate with autoconf 2.69. * aclocal.m4: Regenerate. 2013-03-31 Ben Elliston * Makefile.am (html-local): Rename target from html. * Makefile.in: Regenerate with automake 1.12.6. * aclocal.m4: Likewise. * configure: Regenerate. 2013-03-28 Gilles Espinasse * TODO: Remove todo item about warncnt and errcnt. 2013-03-28 Gilles Espinasse * testsuite/lib/libsup.exp (make_defaults_file): Only set $tool once. 2013-03-26 Ben Elliston * config.guess: Update to version 2013-02-12. * config.sub: Likewise. 2013-02-16 Rob Savoye * config/adb.exp: Add adb_file so we can remotely delete test cases to save on limited disk space. Don't remove the file after executing it, leave that for the test driver instead. 2013-02-15 Rob Savoye * config/adb.exp: Remove the test case after executing it. Otherwise we can fill up all the diskspace on a small target pretty fast. 2013-02-11 Rob Savoye * baseboards/androideabi.exp: Board support for Android using ADB. * config/adb.exp: Config support for Android using ADB. * Makefile.am (dist): Add new config and board files. * aclocal.m4, Makefile.in, configure, example/calc/configure, example/mathhelper/configure: Regenerated with newer autotools. 2012-12-05 Ben Elliston * example/hello: Remove. * configure.ac: Likewise. * configure: Regenerate. 2012-10-04 Steve Ellcey * Makefile.am (baseboard_SCRIPTS): Add new baseboards. * Makefile.in: Regenerate. * baseboards/mips-sim-mti32.exp: New. * baseboards/mips-sim-mti64.exp: New. * baseboards/mips-sim-mti64_n32.exp: New. * baseboards/mips-sim-mti64_64.exp: New. * baseboards/mips-sim-sde32.exp: New. * baseboards/mips-sim-sde64.exp: New. 2012-10-04 Ben Elliston * aclocal.m4: Regenerate with automake 1.11.3. * Makefile.in: Likewise. * configure: Regenerate with autoconf 2.68. 2012-08-22 Steve Ellcey * baseboards/generic-sim.exp: New baseboard definition. 2012-06-15 Andreas Schwab * lib/framework.exp (clone_output): Protect from leading dash in $message. * runtest.exp (verbose): Likewise. 2012-06-11 Tom Tromey * doc/runtest.1: Update. * runtest.exp (xml_file_name): New global. (usage): Update. Handle optional argument to --xml. * lib/framework.exp (open_logs): Respect xml_file_name. 2012-03-24 Bernhard Reutner-Fischer * runtest.exp (load_tool_init): Fix typo in -de option handling. 2012-03-24 Bernhard Reutner-Fischer * doc/runtest.1: Correct name of debug file. 2012-02-25 Ben Elliston * runtest: Search /usr/share/dejagnu and /usr/local/share/dejagnu for runtest.exp as a last resort (for usrmove environments, where /bin is a link to /usr/bin). From Honza Horak . 2011-12-30 Ben Elliston * doc/user.xml: Various spelling and consistency fixes. * doc/ref.xml: Likewise. (exit_remote_shell): Remove, as this procedure is defunct. * doc/dejagnu.texi: Regenerate. 2011-12-30 Ben Elliston * config.guess: Update to version 2011-12-29. * config.sub: Update to version 2011-11-11. 2011-06-30 Tom Tromey * doc/ref.xml: Document find_gfortran. * doc/dejagnu.texi: Regenerate. * lib/target.exp (default_target_compile): Handle f90. (default_target_compile): Likewise. * lib/libgloss.exp (find_gfortran): New proc. 2011-06-30 Ben Elliston * Makefile.am (all-local): New rule. * Makefile.in: Regenerate. 2011-04-12 Ben Elliston * config/vxworks.exp (vxworks_file): Use "file delete", not "exec rm", for better portability. * config/netware.exp (${board}_load): Likewise. * lib/dg.exp (dg-test): Likewise. * lib/framework.exp (open_logs): Likewise. * lib/remote.exp (standard_file): Likewise. * runtest.exp: Likewise. * testsuite/runtest.all/options.exp: Likewise. 2011-03-15 Ben Elliston * runtest.exp: Whitespace cleanups. * lib/dejagnu.exp, lib/dg.exp, lib/framework.exp, lib/libgloss.exp, lib/remote.exp, lib/rsh.exp, lib/target.exp, lib/telnet.exp, lib/tip.exp, lib/utils.exp: Likewise. 2011-03-15 Ben Elliston * runtest: Remove trailing semicolons. * lib/rsh.exp: Likewise. 2011-03-15 H.J. Lu * lib/remote.exp (local_exec): Ignore SIGHUP. 2011-03-14 Ben Elliston * runtest.exp (frame_version): Set to 1.5.1. * configure.ac (AC_INIT): Set version to 1.5.1. * configure: Regenerate. * doc/dejagnu.xml (appversion, version): Set to 1.5.1. * doc/dejagnu.texi: Regenerate. 2011-03-14 Ben Elliston * dejagnu.h: Whitespace cleanups. 2011-03-14 Ben Elliston * baseboards/cris-sim.exp: Remove trailing semicolon(s). * baseboards/mt-sid.exp: Likewise. * baseboards/tx39-sim.exp: Likewise. * lib/target.exp (default_target_compile): Likewise. 2011-03-14 Ben Elliston Reported by Flash Sheridan : * doc/user.xml (Testing "Hello world" locally): Improve the example test script and make it robust to failures. Tidy some formatting errors. * doc/dejagnu.texi: Regenerate. 2011-03-14 Jan Kratochvil * runtest.exp (runtest): Call reset_vars at initialisation so that perror does not affect test results in other test scripts. 2011-03-09 Ben Elliston * NEWS: Start a new section for post-1.5 changes. 2011-03-09 Ben Elliston * DejaGnu 1.5 released. 2011-03-09 Ben Elliston * Makefile.am (DISTCLEANFILES): Define. * Makefile.in: Regenerate. * testsuite/runtest.all/libs.exp: Clean up temp files on exit. * testsuite/runtest.all/options.exp: Likewise for dbg.log. * testsuite/runtest.all/stats.exp: Likewise for tmpdir. Use "file mkdir" instead of exec'ing mkdir(1). 2011-03-07 Ben Elliston * Makefile.am (doc/dejagnu.texi): Conditional on MAINTAINER_MODE. * Makefile.in: Regenerate. 2011-03-06 Ben Elliston * configure.ac (AC_INIT): Set version to 1.5. * configure: Regenerate. * runtest.exp (frame_version): Set to 1.5. * doc/dejagnu.texi: Regenerate. 2011-03-04 Ben Elliston * texinfo.tex: Import latest version from ftp://tug.org/tex. 2011-03-04 Ben Elliston * Makefile.am (EXTRA_DIST): Correct name of historical ChangeLog. * Makefile.in: Regenerate. 2011-03-03 Ben Elliston * Makefile.am: Bump to GPL version 3. * configure.ac: Likewise. * Makefile.in: Regenerate. * aclocal.m4: Likewise. * configure: Likewise. 2011-03-03 Ben Elliston * config.guess: Update to most recent version. * config.sub: Likewise. 2011-03-03 Ben Elliston * lib/framework.exp (unknown): Rename the native Tcl ::unknown proc to ::tcl_unknown. If ::tcl_unknown returns a failure result, then fall back to the conventional DejaGnu handling. Report from David Byron . 2011-03-03 Maciej W. Rozycki * lib/remote.exp (remote_expect): Pass all exception conditions up to the caller. 2011-03-01 Rainer Orth * lib/dg.exp (dg-test): Support nested calls. 2010-04-13 Ben Elliston * testglue.c: Remove duplicated prototypes for abort and exit. 2010-03-26 Rainer Orth * doc/user.xml (Tcl Variables For Command Line Options): Correct column count. 2010-01-21 Jie Zhang * config/gdb-comm.exp (gdb_comm_load): Set breakpoints after load. 2010-01-15 Anthony Green * baseboards/moxie-sim.exp: New baseboard. 2009-12-10 DJ Delorie * baseboards/rx-sim.exp: New baseboard. 2009-10-15 Ben Elliston * MAINTAINERS: Remove refererence to Tom Tromey's Tcl style guide. This web page has disappeared. 2009-07-06 Ben Elliston * doc/dejagnu.xml, doc/ref.xml, doc/user.xml: Mark up options with