X-Loop: help-debbugs@HIDDEN Subject: bug#20986: tap-driver.sh replacement Resent-From: "Arthur Schwarz" <aschwarz1309@HIDDEN> Original-Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> Resent-CC: bug-automake@HIDDEN Resent-Date: Sun, 05 Jul 2015 21:10:05 +0000 Resent-Message-ID: <handler.20986.B.143613057215285 <at> debbugs.gnu.org> Resent-Sender: help-debbugs@HIDDEN X-GNU-PR-Message: report 20986 X-GNU-PR-Package: automake X-GNU-PR-Keywords: To: 20986 <at> debbugs.gnu.org X-Debbugs-Original-To: <bug-automake@HIDDEN> Received: via spool by submit <at> debbugs.gnu.org id=B.143613057215285 (code B ref -1); Sun, 05 Jul 2015 21:10:05 +0000 Received: (at submit) by debbugs.gnu.org; 5 Jul 2015 21:09:32 +0000 Received: from localhost ([127.0.0.1]:41143 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1ZBrAJ-0003yT-J1 for submit <at> debbugs.gnu.org; Sun, 05 Jul 2015 17:09:31 -0400 Received: from eggs.gnu.org ([208.118.235.92]:42484) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from <aschwarz1309@HIDDEN>) id 1ZBrAH-0003yE-IT for submit <at> debbugs.gnu.org; Sun, 05 Jul 2015 17:09:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from <aschwarz1309@HIDDEN>) id 1ZBrAB-0008VT-Bd for submit <at> debbugs.gnu.org; Sun, 05 Jul 2015 17:09:24 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: ** X-Spam-Status: No, score=2.8 required=5.0 tests=BAYES_50, FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,T_DKIM_INVALID,URIBL_BLACK autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:53926) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <aschwarz1309@HIDDEN>) id 1ZBrAB-0008V5-65 for submit <at> debbugs.gnu.org; Sun, 05 Jul 2015 17:09:23 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55982) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from <aschwarz1309@HIDDEN>) id 1ZBrA9-0003V3-Qs for bug-automake@HIDDEN; Sun, 05 Jul 2015 17:09:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from <aschwarz1309@HIDDEN>) id 1ZBrA4-0008RO-Mv for bug-automake@HIDDEN; Sun, 05 Jul 2015 17:09:21 -0400 Received: from nm18-vm9.access.bullet.mail.gq1.yahoo.com ([216.39.62.65]:40174) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <aschwarz1309@HIDDEN>) id 1ZBrA3-0008Qx-Sm for bug-automake@HIDDEN; Sun, 05 Jul 2015 17:09:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=att.net; s=s1024; t=1436130554; bh=1mtPbfL0XUv4JdwN1mL8RxmG7VSPAi1tc4UAQLEG34s=; h=From:To:Subject:Date:From:Subject; b=Hkmko7Dl3cac2pcedI1Fc/dqLQjxMIliZCJ0uZ1sN3kSHwjxFbLtz9d7fbuzTKwbNJH3wP83UTGBhw2SWTs/MERKXMSAxEjZM5ektkB8et/Nfb15VtbAWiVHHfBpy7XgV08PFcJP2Q6qBOGRCXxylTnvaUmp3FOaUuTZiHAipus= Received: from [216.39.60.170] by nm18.access.bullet.mail.gq1.yahoo.com with NNFMP; 05 Jul 2015 21:09:14 -0000 Received: from [98.138.104.98] by tm6.access.bullet.mail.gq1.yahoo.com with NNFMP; 05 Jul 2015 21:09:13 -0000 Received: from [127.0.0.1] by smtp118.sbc.mail.ne1.yahoo.com with NNFMP; 05 Jul 2015 21:09:13 -0000 X-Yahoo-Newman-Id: 788010.78100.bm@HIDDEN X-Yahoo-Newman-Property: ymail-3 X-YMail-OSG: PYXxducVM1nGhxq_adP0jkcjLtIsVJUGUTa2uv..UrOjUIK K7YyFM40WFOmioudjmzhpDmcvDG90NrbOUtxKCUJ_97IUaYpDxictihAoNUx Rub54H3T5NrnMORLsP0BPqJQAur81x_eEfz76UBrbYgHBuLAJ8cpcWSS_wZ4 jkq6UE3zva080MM8XWRhgaywBJBtf1N4vsxF0PPxO0kyH3eRumbuNp_icaYj d9O49zhAQFm5jOq3UkBl.q94Ic.19qxS0xRGJ8YIQw9XZfbCrSQ2GQip0Xrt 7LO5SjR6wfnHBUgwyEYX09oxjwwcG3JkSC0mCpID8AyT2hnE8wmLryMnTDwG xZpXGbwlxh3Zyu09TqGGmtgC_qX3HbIqeGkde4ZtvfS6Ga3hSJJXXxX3Ht9z 2Xy6WtJ_zsl4_ieYyZgXR5445tZJsVFQm_Y0fXc08hAkD__o7rpW3L0lzvHv 9iLmU9LzJLJdS5a6Y7DGVtEQH2oJN71rQirQ1hc95._.LrYra_iYQw1.zIXZ 5haSQyzP3EQKoK2GHXl7FoI9io35XBKXUhYW2qR7QtxUcQfx4N_zYfwtI X-Yahoo-SMTP: 0z5TJLmswBDohOc2QznCIeoaEiEalQiTSMLFNdKdTt4t From: "Arthur Schwarz" <aschwarz1309@HIDDEN> Date: Sun, 5 Jul 2015 14:09:03 -0700 Message-ID: <51D3686C77104D96961C51250512DF6F@2600kPC> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0015_01D0B72C.26DD8480" X-Mailer: Microsoft Office Outlook 11 Thread-Index: AdC3ZtIN3TV2Hc8AT1aERIOkgHj5ww== X-MimeOLE: Produced By Microsoft MimeOLE V6.1.7601.17609 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2001:4830:134:3::11 X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> This is a multi-part message in MIME format. ------=_NextPart_000_0015_01D0B72C.26DD8480 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit The existing tap-driver.sh has flaws in detecting TAP input. The replacement file removes all flaws, accepts the complete TAP Standard, and 1: Has extensive diagnostic messaging, 2: Is resilient to errors, 3: Modular design, 4: Is documented, 5: Executes a suite of tests successfully, 6: etc. I have previously assigned a copyright of stuff to the FSF, hopefully it applies to this submission as well. tap_setup.tar.xz has: configure.ac Autoconf configure file used Makefile.am root directory Makefile buildscript.sh The script I use to build and execute the tests src/Makefile.am TAP and a suite of 14 tests tap_driver-0.5.tar.xz distribution tarball The replacement version has one strong variance with the existing version. The '--ignore-exit' option is ignored. I've looked at the implementation and there is no rationale given stating its requirement or what issue is resolved with it being present. At issue is that the implementation is affected by its inclusion. So, it aint there. The current implementation suffers from some issues. I believe all outstanding issues are resolved with the new version. Documentation for the test section, including complete documentation for TAP, is included in another message (Replacing "15 Support for test suites"). The document sent is some 100K and I realize is presents an issue. Maintenance turns design into chaos ------=_NextPart_000_0015_01D0B72C.26DD8480 Content-Type: application/octet-stream; name="tap_setup.tar.xz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="tap_setup.tar.xz" /Td6WFoAAATm1rRGAgAhARYAAAB0L+Wj4Rf/NDhdADGbyhiH//jXtCbMHXY3gKSX5K2dXFsPa+Qw 1MqXOtr9sjPGD/UPGcHyZfLBzZ77ChGNm70SSmkAWb3j1g/GsOEoup5HDS7uGv8eKbdbuXkD4QvH EmsCdZq75T+Wfv8xCf1WtXcwJnAolXk8PLg3vsqkp8rQF1cp6SyfZ82x1misi/zErleZW/0w3ZPQ Lt99GZ0fcVB4CMdlMjE0YMnR06uzXj117as8DC3kAszATwBb0gCh2xjOIm7s2uRyzxkclvsgi0X/ cHniDJ+/TBJLKrzPb2ptmkJzl09rDcDKiaLSJAdESx4axgMy9X+HOQIfEulLax8sMJLKkoudXA1r yXsCG0rDoXkghPoZ8f3W4S39P4FSM2otvqCe3TIm4yqufgD3wcc6qtBnhtLe7f86WyvrwnLW+Ifs Pki9IvKVsfD5qrowTIhe0wwZwHf4x6agT0DcdG5GUF4nXA6lSN1XqeSnWOfiq0DNlIAdlXwaTiNi w8M6OcnvGRA7OmEWthvjMZ9smK+OrusNRFF35dICnPJLqaLE7MGYQ9IFXBG4ALAr35Gi4y16kdsO zymBy9L80jpsgWnK/QharUwQdZttiB+ivJhy3bdCtYJ72mGtig7V74A6sayiBUciiVidhlDRzugP RLUMmV3740bQ26egGmxpEVu7xn/V4gmg45gvNEv/AfC56AJgfAbd09ZIegYxusLq9PJvcAeo35K4 8AaZ0irzaWfxOFmno6gzYMjYw4wiyobRLx7aTTlUH1VPY4muqILhmFg160+X/CPj52/2fgiurpe4 TtMJ+exLWl/WUxKdYE91WvJ71zveu8Jrgvm+5/MaQ5ZVp3y7X5GeLcRTTrxYfjx3iv9U+JiJgxim ZVyNu/G0czjF6YOYvIYlwnyGGIY1wHnNW313IFYd+QyjEcpytm9U0qqk2VOyhqHZrTHVfJvTRme1 9c7SBIvb6+tl3Ef1soAxQjKrBOmb37akR4CAEFQHgTAgQTBvBX7u+ZwgPDWpWJ58jqralJX6ifw9 q3SocQ53r9FCMUKGfCEk01VugVpOM6TOEMp3IARwrzJm5Q7EotG6ztThI0OGvBYvS+FZtY6jQGiG 3yioqetHHvnOBvcNiBxCu3VheflhDgivZVgYqyJ7SmEVWBFuehTlrPjIQcLRG/le6azopt+mUQf4 MMLfHTePy6rqzhxe7un1Mf4FRc2VHFF9ogKCWX0LdYm871ZlOqJhJuPZh/UtSwwPu7TGI2cVNsNS KXfOXucV5K02SrOrSGj+9gvF2Q5BNapMzzFXp9fdeDA3Qay4jt1dOoVn1fkenHhe0Cjnvu2Socvq cGxqrzolQRWgjlzd+y7UpCv97FweklQQAvj3/78k9DSufAiZxwV7Cfte6hAO3e6ClxYnOAfl3uZK wsdqs36tMWkmejrPv4Qu+zsdQFPKwexPD8rc1YauZowMIEfFtcZcLKQt1HaK6b6mH1eZ67F2uL6F zLCjxWGCGSzabmM12w+32bYrJfPAwIjIJD4Jm3EtDfmiDLzSdgYvmVFelTeg/gFSdmOGeot9XKXG 75E85PQJXBlKvVLmOlAId4p/kkfYgQboacgbJlcbJkfrZdSpZ1WC2etGn97F3QSl3C5IwtqdTEGM ZsCJ/QudA9H/WpOu1x4xi+3iMkfrTqp+otPd56RFQLG9X0JLBgsDULcnCSKX6Wy/gdgvhtbm0xRM nf9GU/hCEHG2y+JWqSSmBeGz0VhJp/LfEbcHQGzbyZbqakuw4kn2P9NbLoSY81wnQLPM3kyR3EXd kdeXMkSBqYPzFzwT2E2NC9myxt2BOtVaOuUJXKRg4o/mIDrcvKTLSDNosc4CBLna8KcAQTQj6kNf iwhXAPYbRcB7EXVwP5JzDQu7olmqlTP42eXk05r9yXLbusSaa0jukQu6A1xmZuVzbR2dghF3gWQX GcgPFTVy6b+PHO+TfY8ysv+zoHjw7cId0ZLmoax8NfQ3FXBaaBm6RkIWVCNpVIvdci9pJRGzDd1S Oihgq0+TsbMf2IIKIu+x3LLdHrpsDMt+t+53vvFZzaLW27GlQnGHf4GAiX9vKJstBRMMmXUI48EC 90yo8I16ctg0ujZk2WAs0lh6EAt+fs5ORqk8U62U3aUTmx81oZHSSuq6Q0cpqidya9WtpaFFoLsa nJhEsbVvTjBnChqGydTz5s3AX5N3oC3By4YNO0Vo8wY2EK2z+trcPf2bf6IailXpKDES5UK9oKV/ pqzV3PQavIeWyIRc6AMJaO6xYqKKGyBsGSqvUIgDeoX5y4xras3+qKK8n5T1awdpp3jvRYDmhJPx JnDCQWvm7Q3TaNcNQd4pofOv80zebdDuSaRum8Wm0PZLjoq15+od4xvyQVxu7MUynPNaKetEtAaE pSz0Rbuko1SJ09hELU3+60JrAPeC9B+049vFJj9apGQj1beBgtEcsob0o0lY5sV2uIBm30MTA645 yVQJ2wmcSfSWHpPIjo74rAZ6Io8xEy3mz25GZeUF3pfwVN3Gli1nWaYFPZQnAbhLBZsep1oO1Ny6 ZSqKY69GK5BH3VGFVQ1bFBetQ1R3rDFgUyTIDsUDQvWKrD6Vu5H1faFNQ6//lg6BsP4rxfGyiCvp BObIJNVYakfAKibIRbR4vd/uZRL60xCfhcWPXXP9qqc6isVYh5ig9RI1rlKIAYSSE2R7V782jSp5 RAO4BkUkYfjKqPR/FjSIpfeor4PhFkexhG3ZL0sVk8qbIpMKj0SOgbcZyMembBWkwbqIZwW67qRl U8I5S+vnSkkCRNl36f2Z/WB78QKlWUZmd3G3JRwEYEegNkyjQvB7yol24UGe+fDpitkFlTcY/sKt 0gk1McNgKB1iVL/o9AABvFPiX837zVCW0GawtdafPgRsopdNzU3xnbzCpc9OLJ+Jv+hFHsXAGlLc mRHrGtOPwC+GLF6YTo5Viu3AxtOvDEP0wqEifXmlYsKRZqJ6nRiihSsBgSxCnboaZFj2CdAi2iUN iHV4OGWFSWxZVio9QFeb2VrlguzQadL60bz3NBeP83ACMuE/RbxRgk2H8emWihaJebE8Q0kXqwYZ lGH0ijcHo8rd+f9tXzUutbPTjBdOeiJO0Fk9HTUPgluHsnTHpCM2v9/a2AplcCjcaoqctmiLtinX Tvr58VeKRI/xhK4SPT3/2Si1BnU6Adg6u+lNQydIYoNQuEhLViip1fEA9SE88/BlESp9gCwZyzJM SAZHtLBIAc8jT0/MCj6ylZt1oMKV/xV5AIubgofv6wYn9TJjB++FsrveKpM7DojIEjm8j2IyCgoP bmKokTyJvjctTK3Pz2JihlNaSsodx26b6FirpT16h19vKQlrB9KvR01jlXbAxt/lCJ+arr0R5gyz JJurtNHzie/JnlX9O8kyfrmNK5x5VShz7RDk4CWfwKfFfDL789HgxWo4D1d6RXoO3qv/NmE98wDC oRyq8CPHERVZLMDJp1FbKaPSBGThW/7jvVyp6D+2EpXaqKQJ3+QJouXPBPsJXCjiVY52PE7H+60g OWzMODiYngKouj/eBT/Tix5Oa9IZisZPl2ctevsSD26aoldwiu9d3g5cxgP1IVo742FZT5RXr+k3 YTukWOckW6Z63dn013P1FQHDVlj6Q0TjEkTx0r2YwrC5XUQKpABIGW8HixdRkBuoK7ZxaM7u41HD ZLBe85VKHhv+jPleJun6Rg2YM4drHR2fK1nYqIUX+p32wXHL01Zzf642xSNathbmREiVcqQIRmcf dtr8rURGOiFIN+8fYPGClL2X7FtFbvl2aHZKInm2xHP4+v+zAmqEyLSOGtneVgrqBsoKYnaLB3yw UZgnz2w734oBmnv5a9L5Bs+gzooS2pNpMtSXO2wEgvYJtY8eflWS3OtweLoaTlLnAsg/KN56KtsQ 8WRNOvziSqaOfrga0TcKLbRtflZ8zQ4e3QZRYOOU9wzzKL4VBofhJqhjAqRVVmZoCF9RrKsRAzxS K1vZ+Qm6Ou2EU04Uf0FhAj+DaeEAwZ0ffj22ruyrWPAGxY5rMvZKRKfRxzwxZT/6BuXJco6KHgR/ 2TKqKLyke3kghwo5vwf4Kc/EokRhUl+qWT2ABl9qIyP+wSSHR1o/auqt0fOg20ZLWOE4B0kEenC6 Wsg3G/aIgCX2VZ/PAZ17nDkc08nR/ycsZbPgN4tPKFobcg2HAOsv5mkxsxuNL0l7am3HtghfdxgM HdRFlyo02F4Pls7+MZ1zl9fy8nAPdE3+sBx9Vmqf4okBxGIa8zteTOvNLP3btEUxzl0LOUnK2NUJ nGlCy67u2ICFEPk5R7gpWyHS0Ha8MoNqukaSAuReNPrjfRLtK1/sPKjLHiAh29Q84ZZTug9cd02G 3Ytu3UhB9cLBQ4oOLSrcpkcVK2jQhzEpplKFUHS1wo8/U0ooWkcvMxHnrdbWUqQEWR0iUDIQh611 BQz77Jn2Si1DN6Ppky7v6/yx9Mes32lCYocMuEF1oz0CNDO0KBvWM6VEihleXY59Z3VdeENq2ip+ 3XK7ho/gmp4457dHdbvCOB3ILM+8Eskk+r5L4GsgUGMhSO4zehcewRWopFmvHHF0zrAhmpc6mYzi Vvg+Px/65KvD276ch5XdX70fF5zlzwcFNdniSMHa94PrNk0SDoxSBQT4XCxQ5h+OoOULbAugnZdw Xbbdtz9EpdHKCBfkvSgJiFQex3bRI1e3G9szlMDguwRuldOszIvY1KpPZD4zV8wvCNrXvOzphjDW SB5LVDGzWglowmsLwTKiWZr5OpfQ9AsmEqgQz4jEaZEUJ60QM7y6axCdlJtRsn4ta+td+8LHRVmM Bwrjwlkbr35gp6gCXwg3lg74kvEdYbshZo4/ek12X0fujcM89O0ZiKaDn3IHPUL4MbVhFYWBvDuw JCCytzmc+XQEqQEpOJD37UcFoyQ0hNn4/CgSu2+FCZ3Yj6psxKweC/FEuhCssIuMCLZ2i6gzaJdQ ic9/SX2JUaAvx3fxBhdQij3AMpTlNECB4cc0459i2VWAdkF8aQ4W7gQMuYKTSsRMEde8C+X3bZpD tfAz1Kjk5UcEI9u+0SgYeXyJzNijqCUAGaW1XI8+jc7l9zEVV2yYQQxjGD/U4r2BgX8quFTTk26y uLGZJLHcarY8jQ1h49vmXXKqJ7IMBqzASMU2tA7HAcyV5DFLz5hWe9x3zstLDog6AkPvCTPqhUcj ljcojeNxkW972R7I8O5wuEFkgdf+4eDcYLgTh2p25DPo1itPtoi0262ufUBBJgu44l+MITS24S0s 7OfeJbSblqAhWpGOps1svWM9M+yKQ0fxjI3xYuG63cIjFw+FnfGhDyf12boNxPDG+dt2uCKsSR66 swYwk0pMSOqSldsHznan94UaVNCRkijVExsxwAbQiVF173rmKiiQwYdTFwruZJ98PZbXLquBdYTI EahoMLBP+THdr09C7mrFxKzC/cxWXrLaEFpDeSenCguaPSOIcYKMqEQPz/nNdRm84sPUjDvAGTR+ BQzG5bd9eClHgRwQvi/7PdgIliEOYsKoOE/Teg6NHWR0y4CL146PSNmuCux0bva15EEnTAixDU3g FUtcr0hHy6sy3hKMcGEFENmcJWyYRGIzd04b9qjgvr6jSdvoXrXyDX9/joXOQQ1oyai4SX/1mCrU RQM9QfxxyAQFuSqsMxYQt701uDE43L0018DmPQmfBiZaPzVGcPls1PTrgHWaZ94uHqHzATM9AurJ TA7z7oazPKiuOHbsSj1fEN9T9CarzEC5sXLIvLO5mUUmO49B+VjxhMrxvbdyL9cPYIAOIJ89iTz3 PNZMIWzN+SuNbxw4+D17/n0Dc5kGFxPmGrKlctOeJUPSR0vfycocKhKyXwjGEmwL6/XyQVYpQZrF U4gVfslWm7mS8Ia9kJdxSko3+wnRD0KW9DXEE0KInYqlKif0S3e2yMCnb8IzpEuGSk8q5Qhi2Ztk ZmWB/m129lDkFu+mTWsPLEukSAgRW6x6TBNUcjB27DOOfXL8io4Vc0eBD7bPznoo3VXY20A3VzFK adgPVtqf11BkVh+X+uYd1IIJTCCLgcUkTR2gYH60KDcd/H7BKDGqqlxWVyO4uTSsgKgZH8PrRwb/ Y+D9Af/2I1yxC6gioGgso347H+z22RbCyT5pR2fFdpNDfPLMqFnbh/JutSFChcraryqkgVoB6kYT m3/Kh7lcfS+xtZTNDG1zH8cwpa8hVKedQywJxZqYJVzx7Rqv5DttFn+TFvnWs+cPkfYjb/TcSENN iRMzdum+luTaH8HXR5OlUf2x4FyzbBUz7rJudcFFbUvXoF17pGhxN5Ttcfg+UnbZ+7VoebTY+KRx ZQGOVhx1webMeLZflVCnzUT7ZsVDGriKt42+LurgBys3Bo8P1buBlGpS4txqh+czCHmLmfUtXe6m BH2Ie/VAPSYR4kK5fM4CvqeGddU1MgDlZxyfTGStrm9BZ3Zg5k36TeFap+++5QEYhc3XiZcUvXgf F/siOlo+oglnSr+x7wTIpuDDCuE6YgBDJVqCIO01XficPkPx+VcABK5JW1UFFH3JWEDZO/IDt7Ot +r0t8IWF4aA8x4Bb9sVrGbOZ5A7Mln/nUJTeQwM3NDHTMt2Lnr0YzBhR3X5+nk37td3tl9ZGa2YB AcBfed0zz8Na5c8v64vrdv6l3N9BLm8lhTcG4HDEtjBd7jl7kivuz6aP8gVmmNH30sffxVKVlyH0 9W0BGbvfIJxYvEOxCMGuXtY9JJonEhQ9u5SgQrDNpWOGiedtZEQhShye9lsWo/ZC7MlzwmZG6Edu 7hRFJnpL6f00g5RPNwTjEP9vgmtFMW08zIxUE8qUgCzJ1LmTe1yFPmvjavGul0QkcUWAexjQXT76 3/o8k4y5HoxOhS2qd0KNeBxFu1Y4OgfnLWzRlA8m/RdeZXMk256UpodSaALEaPFA7i5OICnoy5K4 VxmFQrq/6CeVkaFEJBqQ4CFxtW+Zs5ulVIAvA4Utnff1pw1e4ZdO4XSwGOfd1d8oFtj+J/wFDmdy GTLogO82v89jHAjpJpWVSZaZ58kaLaKeZ/7WKmKjw0D9/pQMxSJsV9mQ8Q8WahRxMSwP4FErgatL JPiTFli+OsLjbee+94H+5wDK8hYVumjmLtL+hE8IVDuSsw0OZB0NtvohYSoiZX6LhKjeMZ+JAo4+ dU6reXW+GqdStEs+bXfj15WtNO3gjDezEJ0WIHhAMKJES+C8OI9eO1wJ9AF+CZZ2akhYC8iEnkft gomnWQY89fuOaQHU6sFfMMBCWFdlDfiurVRJyj3MXsJBnO79D0nUeJGx0t2gxGGdkJ/MvvofUrlZ iLWqS/sDMcGgvvP1MeHfNXv00vOpfWxlE2OUoGpDeNIwtgqT1K8lYsNVOnFvGEr9In9RFA1opk9C /F/uhuwsvWwIFiu7Xup3fdWRxPaFqJFI2Qwe5IlN4KFKMzOc26wYwz5KR6PYqhCOp7OWa/YiNstK zj6vDkVB+VgCwELeKujPCHDHqAystKE/Wks0HI2wqzA+5pvKraC/wnwixO2H61TITTuALcdGxHK/ +S/MdhF9TngA2S+xjrx8HMkdf4J576Brk2UYpv6U4P0Cn/iNehA8xp5sMQ3wIq4yfrWpiZ+IWlPJ sC2PZBFUvY+msdqbzXI9jbkCjSEQ0/n3NzKfySOzmO2Sm5v9G6w3x2Vrr3mkUyEPU7Gp/vqhuF5L nCEKZXhjBedSaWT9BTakYv41A16SIHkEKA0fkP55jLFF/FG0e6O7EF3hVxf0AjTrJyav6R7OnDa1 kvi2zOvo7jr2FNiJTqpkRVKAlpx1Vtd+eClnJMrXlsJi9QDJx89Ko21OANeHmUHfNMOYGwKOl+6X UTcWTOyDxCluvFybK+Dv3ehGi70jDXcCkKXwwvaoPjsRlUmq4cA/OIDNi/e8CY6UqWH0qgk4MUmu pJfgRzhv1XOvNr1gt7pQ/XhDwgWsheITBn2g6CYz5wF3hshzv5XI7GrQ+fBArUMVngAw6iZDMD6Q YVZya89x63rdo4fdt69IL9Obv5E8AT1DpaYlMu5mgc8Lpn/NYjQPfG7/u4ZwYAyLlDo39td9VEuS wJOK0eQjQEZ4hq/MiABNhPZ2C0m0LlxlzyoR4XanrSrguwSylzMYcMGzgPjqUzvq0OotcLjvUKOv V2OQtD0/JmPZa0ixtqB4QBfVBW1aZ+pwGZRbUX8vZ2g6VeEbhcR0OaEqnaHG3QsRkilv5yAuq1AK ZWrw0m9PyWf2dGud3h7Hw6jnH9U0mv12D8x/kcTvPZ0aMy198lc9qdeeRvK2yA7EKuuEw6weUa38 lZp15FCQL5I1lBFtIY6vNwYgT6YHTJc3jWa7Zx9aHFQFPJ0a3c6wRCSXp8d8X8JZVuSCYGajh0sI lmqOGxSCo2hyuFjahdxbLqa4A8zSGJuVznYkhpStvj//wSSWjD/wm4yVD/HfhstDNGHtV7Lwc8WQ LVGWvyXce1i1SkpeB/lHbV2mYKi2A3CYU5GyyvigjWu8smt7EUrcWWTyE3II13U95RDtF16/pPv2 QuuyKgWQW/ZxeaTPI/2koLksYjhc2DnL8LktM6WVDfj4Nz/SFXC5SyaiwBQJ/PJOM/SWzG2Br4E3 3GGJ/m0Ehv7zk2qHsyZwlhaHaCGznwm0z+o6Jif6D1dMeit7KMpJS+NJwRDyfrzSsTYM7RaO/wPr fOTMIQroRH1Un/xR9ozA1pNrAOWuhuBn77WzSc/gLFxu8fROkCB+CdNAhew37qO6zXLO6eRKn/zb +NpBZXkwT2GyBEavKa/ukexBvB50D/9/NAZBR+cUOTJLPHk+GOgQ/rA21oJ6s0m2zbrAWj9+Z4MT rJy+CeuJCP+cLBLJKlgrokRHWbWybzn+ddikfzOwRzhxn3tzIzXrZi87l1OF47PGW0auGwn3zg8a QmeT0Kw/Op14dSJNIfDyO75u63eP63T/UuuRbSB3vOSFjpUylthlJC5WruX4KLyFzAFW9lcXtnOT 7oU8wTxZsbSjxhfV1HC3X7b/wYz4nABWKhZtvPBtXpgd4jqE8COdjMJE/b40Akj6K4maZwk0jXoQ NtbAPEnPj23z4he8oKZ3ZFfu9gX4dHH+kGAdTY1uAIK/KXKswE+3fBX0OKNdYRzn7IL8vxR9Qews sXV37rHGnTdTH/DzH6sOIOkBNrPnZOwkpuUKvNxi2twwB1d7HGkVNFO58xxiNkpKtG+w5iSYTb98 L3QQdSjtLQJvTO8t6WQ67Yirf8bk3GcY20ipGAherAJtaBTVwGVJmriZY+ZxERdg+AzBKoncoMCr bqRdbRoCNYkLcpz1hrU4C5ty13TQ7w6UNjFRFuHKQP8z3Iuq68V9Elgw0yxYuBv8tL0b0q6992PX H9X+2n4Y73q3F4j/dGhm4cX9Vqpx9BP4OvqCmyJyxLcNxwjUnLHfh6vdwxLEUvoHXAg3dL7yIRZB EozXfcFUHk498vpN/IUQ8l7HOic7EaLp3LDXZua51CzRWookXYBBxaK0ztwqXTWzfruuoJmJoi1P rgsOA4L56g2l4V63K54UGfH9oU3gepVSuFCO1311KrzZ9ASIYOqufIranvMAA2Y8RyWjC4HymQw8 f0C2lPiNaCc7msWkON7E/6azPOH3iI78v10EPtfl6Ju2Z+ymWTwJsif+UF3wcDFho+WlD1p0FcxW aTArJZP8yk0+6fA6ZbxM9TKV89AGstHh+VJexksxw5Q1dX0nEi0b4aYXdEuXbpMncRba7B+dHC8E Y//Ey9Fei5WKsXKJn93age5i2C6jSycAl3s2qrotjke/HjMcriLE9ROkTPGhV1+IqQm4W1WOoHGa r0zXI2POHezeAlilqFw9xJzujUYamnCEWiIBYTkXdSNf5NGElQW+oCDirpRed83xN053yAUlj9Z6 7m7vbc+VMJwt6w5RqIPXx6SF80KzfVg4kpie5wInSNPNhEXKTtDmjxq7dYF4esrRXVKOfm/UQBXc lRmS6IVXKZzpFs8Izd16LkbkZG5E+0nV6iEw42OjpEMLFtUf+ZojNsqqrl30vH8jfEbsaIlfC2lX +vtNrSwxkwlPgls2gzbWUmMsUYZ6i+B9s4Zc/ChPIgp9Jq8r86td1h8FaIsCkbPuXIiDtfv5yxRw Nij0uJPmlHqHm049Zz9uDGBR4PB71LfXOFIFP1rxj2k3A1cxLqPbaHXfKZgDH47ShEfnKEknQn+H 99bDev5qcQY/AdVsqc3I7ca/c4TuFzCr1RyICUuYAwU3kqDpRV0okSM/RXJNjkVRnNxPeKgtGoWA tzmZUN2DtgQbg6xQ/oVS5+yqy3soBXm1oD4L+rP4UaHvk2fUWpXtxmiKjrFDLPwvmMYu0c/mr6+o V5TFfFeE2+b0HhrfnjEAo/3GihScn1ZWJqUYeOh1FONsacVe7Y+ANDNYtP/26hxgWOmBrXShrTRS 1ofs9GDt//SxTtP56mxHdrJRv87j1Icm/11Fe//aYzmfWDfJeVcL50pW8mcddcnsPHlksGpMasgu /gsxiKtFYWQsY+U3qqtJv6BZxwipfMcGExHeiOZkqkl90fgoNcrG3cTj2oeTTtkXEWw76KZKIYTM JdSHShLGr6fsoaqqWghzxUi8aBNFOl0cDA2WiJi2n8DNdmAolbQxynXD5odcpADoK16YFobd00sT 0603r3guABYGqnNhHWb8up3JgFtDj7WqXSTpV7NP5F0r/MYGPUnT/F0z1igvOJYVYOT/1GmCU0jY f8P4QhNWXS2G7VI5tjpOB0ryXExADiYFgFzeYncBWU0TRvA69CHgZIaPcihGp7jfhQ6715TNDrlv I1oYoFCy2ZB6Wi3q5czGmfkAzixEyKQhj6ioKFOz8+IiYH4ZhYhWtycDVMesUfabDtj2YALK+y8B FW9/JQIHM6/lRzGaoi2KcRGdFxQZt9IhxeM3dz6ewu5lUO0HRzzocvmmg6ymvTc70R8WvOo+eul3 Cdh8luLKEYeUuai8o0cB1gl81EqDNqeEmKLDAIOW/6oO2I5c+p+DnamseWlah81Cw3ojJyg6vKjf NhB+HcZhRMAE76Ivaf0myJ4pnCDwCQl4+eC0sma66HWQwxoknv0lguKGkeA1AMgua7+G9cKufd5d ygHhXDd3Z708WcSvf+4ihNWtbnMvv+EloPZwl60c4H+EVAXdn+AFQbzCln0SMeJaG7jjArje+osA bvqJozAsz2mKhTTiS5LOfDxo1GWkoMF4qChmspgeDTcpkn0r/4lKEq42UwWyRGhk6RMs2oVUKiUe YXOiRQQCfORcsGrfag+UjdAuhcGS+SZLjDfx3RtBn0W3T1u8vPQTy1aBKI0G7cbYmCKDs43Rzayd IbVKQ5Pmh8Y1hMGsoAZAKDalqwVop1pViNcR35dFQXEYVXVGf3aydpoeW9D9sEMiPrtQVQkt5wXO 2HP+IvQ7Df1Jx5hrT+mDyRygXRE61JAch8PvdFysTILPrGF2C90A3TVuxObuAsiAQNBDngnexeLf gOP3PwWGnCAa8xxIbn5JeJISSwbSGdDeJqG0Oex+ca7ivIVtvRPj6kuzgA1hG88w4tzHXmZ9pxMw UL5AiiRKYRwvTJapsuGKYAOyWrdG25Q2bU5t4IR+phRmqAURx+ZtpVMGFejWYqFFTNwJavQK53hI 4j1ssVbejwJP4S2aaVY1Z+6lkHDFXmeNvBEipZFA/tz9cFBmVSziyczrZjQXA5cvzB7ySJcSZTiK B5DeLJYlf716ssd359kTrwGshskAO/Rq0xb4+BQIaS0/qbjgT8pXqHb9NBwCouJo0AMfLrjvgiDg oyIxlIQx4EgeIAY+BCRuui3/jKXJnGk2VWwx7P7GKRG/wfwDfoeQP5FVlfsgwZd7DmuoXyr6x85h 2IlwMHf5+9qWfbwSP+LhMOkJj89a0U33FjNkPQAbDzoepVv5Hqgdxlz65ozVoA4WR0ddDkXgbZqa peUMt3bQ8O2AqF3KIpxahNdU0ZeRTrgwPAjxPgczusWybP+awSKD+JGznlh8m/UJy1snhu44Iiet +UcwJ5tyQ5b555sjOfqDZYo7WFDaQIkT0TII0EfCdUMjoXw0xtyr2PWDXlRixAGPW06vzOQ167jn H7YLsyVwrfIpjscONXDlPWXz3OzVKTR5LuI5nI9Ela/ST8t2AJZ1Yf3ceg9JBpz7yqFUnbh4PEKR szpRxlA/fqMkOANGpqZHv1NxqF6zwdxF61cfmFSSFG3CRIofBd6rAwkpgA9ukTo+8ieLAIAVJPLm jEmCEfnw7QzhOpfnEqi+zmwZgMUTr7oPlGyoavyk9pCYKO2+xnwccS07apXVbf9/LGlcAjabrTvF Sro1LU176PJ06qpG9LXcXLo1si5muT6hByWpCjihC7PHH7j0hwOWTP9xbbLwtCFaPZVwJQork3AW VcGj7LFhNmsh8lgZYhtrWJCnWozsi1nTdCHSwd3j90OeoFAhEP03ro0FKci9iuspN2qNUliNdG23 HpC9eTjqPYV/eniDtFpsJ4+S8QBsiKw111EKFzEEBUuIbCkphvqbqr+B9QeoAbmnlpG9vWof8Z6Q IioVZrF77RBlOySsuysTWPHt79F90WXoJbcPUtE1FudpDyWptJulK4F+IXFi4qi7LLpA/SfZnFw4 6HecoUmJca43M3Q1AnGymc5zETThpfxOBj8qiyLRRCkrDcaY1VuQb20VHGYCa5dA+iBBkCHeDxkU hXAwRs/l/V+yAOIgSAx5MjfR+keSFCLghBND++NUXO+7ItmXthFLCdYagw/oqlHdpzlfEYGHTjEY 8Gnclj9xYWGLawMJXnQ1FAQctVgmbNt6QaK8DSMAemhe7VHCmnqZzULID+wxU8laytz+g28Z1eed TU8KX5kt6oic7aZZ6WrXtJJOBzw3rOD4vYLqLQzKg4BXF3dMbg8z4KitRywvBy7r6up1+cuyArqM A4RhZeww3RuD/pyry8Nh3fu4cdls7WPk7SO5HSfEpWQjweLARhwTb8FrEeTcVCHcHtdIXIj0FRQx NbopiyaF+4IlcCqjsIv7lyT+8BL4b/ZRvvlAWxmCnPb/+6bwh66QX8hMkfC+boeuoxfwDU7OQmUp ARbNauY+vkVxq2CLh4Rt0I0EbpiPFYsUOsolBCLORgsL0UIAzGuhHp5j25PoYnkQ30R5t336dwHv sIOztgBat8QNpSZM2J5pBXCmF9VwfE5ohvUPbXF0Eg6o+7A9PRoEhj9YypTfdiw8b2HCCxGTV1Hp imC6zvUGx7BEXdvYwznhJKahOtPoXaELd4/HRFwGbY10ZR1JgnOQXw41+hmK+yfWfIlCsTHCbDmz IzAh7qbRvb2eB4ef8mhZFIOdvhP1ptdkjgmeBTl55RaqsoFkp2H045B8mAd7zOFtZ6fajkNdWMlM QlCZUxDzRa5xgGgkslIE6kdBPSiqHcmk9z2VNq/tKqwI/Me7coZsu6/h1RO5Go9l57Rx/QNRKiXQ 1J3zr4pIWIHBfm4JeOkySQKbFgjqoSeUQyumEPrv9G2yYrUvvsIg9ciQZiJyZMtJxotX76CqZozP CAGd/Qk9gcBb8kPBZpKyRkL+1H8QJBJSfIZYHlaGoTRAFv8nWCnT3lxHhu5e8oL4+5srlsZAVvwh bIkpqPUdrbl7CRViLVrGBVacwsEo/s4Tu6j/ORPhadXYtWa6PlVoAx7n62uLpAmoq12f2kCaWx8F HrHK7bvvkHVQrJgeBSdAv/g5YdFTUemKAiKO5VBdrHT/AXUYFPZQUga4yI/h+HFTCsGkmkdnxqeE x+1UzEHG0sAXsAXq7kfUYI449WFQf4ZhF7bynxQK/H/yn8MeRNazlP1v0T9UOFDiNpLIHsurl6al iBRgPucoeLTWx7Tj1mY6EnP17/vBiJGmX66ICUVZhJ5fFFOFCyV+xngJ5wdER/MHERAGZMBuqZbE 967tnlaB/Av3CVwVpostL0cJCwhuAPAUPlnfnQnSkyJ4FNAgvz25NEeibzZK26lPnO+w/+p+qYgM 7EP+yOSTb9wHp+O+MEQz5gfv0t6XYbI034HlHE0KAVSnqHvCSE3Ril5LxWYT2sVHKFK699V7VLDs 2fbHJM4g7x5BJBBG16fnzBYC4EvXYfo5PO6qOzS87yutCt+jZ9qROKEibI6xHOJ8TT7Kr0I3IZR+ aBUvG8DHuCZjWn1anlDEz2BSlWTho5tTrok2UP5iohXTvLaeG2nltK1IJE+xT+L/Gk1lBPHhIXO9 zcM8OxGJDGLbXpwU+yjvX1BOPLhloStt5z2iO3+lrvY4/h8CnbAuaw4otiCQq8ob2MppDSjcjTrN /MZJd+GGkKUGAvamBbFncQ28a6BMzaF0/FxtxIMSwipJGIozKM/S99D3aTYYUWXPdwH4E0tdxDR9 XohL6vQwxPXm4dNItLjJdq+x9iBxs1w1PW5ahRHeiK6egLhZvVjUaS8TwCBMAY/UXwl/oivHWwex fR45IlrBuveQClj1RqBKVtrniGg+Fk8mF2b06eMOAjBnnAxitrXYwpdYgawduptxfhANsLgnaTzP 8oPJ6wKyX8rE7QBM3RZZ5eauf6Nv1j6/W4wO/MZR3GZPZ8Y5SJNlwaxQLNbKTEsT/Ryr/suQMD1J F84nrXP3uAH/keVuvilxSs6eX4JuLUpauUab5K8e0ZvAqZI9Ipl+pAEpi682ejL/ngYdYQlsWaw0 wl4oYtbwgngl1Ewq35ec+3tXgxkZJrLMOU1PNoMrOb8TYb9nDt7N6XKzGhTM1xmhXcX5O6YF/NBu bSKXVFTPKozjgfIRowTNs+pVeDn3zVtelfe57Edt2rZBIx1tS9xJSRghfrILmxcnaT4CZY8Zjuod lIdKTcYOCA/rp5BgjZPKJ1t9gWOiK6L3NRVbHpI92tNKUTE/Eki2gQYrcu9gI/N8qfqty2xNqPVN UFvIDmPUDW5XOiYomz8h+r5izgZpmi4M91of2gEUXD0mKUdnoKbEAJ9Xe0/hRrwyggJzbIH59tjl ohfrHBFXEmIGvoDcQps99U8yXLUJmzm/S2qp3WAvR6q0fKLkebtJEQSHvWXBPfiXNXklOv5GhAcB i6atAKdz377a5apLQSDh0o2XVK7zxekuxkCTDUprEqf6UNmVR2QUSAF3chlZtASllz9If3SQCh19 PVScou9bo8X5LJlP1ZlsJQcypdwC7lG2ErfY2vWQHh0R5BWn//080Od67DHISYBT+HQ6neaLR8et UryRQuJaeSB4RXWQ+CkoWMDTbupVxtC0DySO2da5kev9VsNy9g2pDs6DJWbuAwK266y5+WkpuHKp d+J9/TDHCvhEoywVoX7YHB9ONiFHmRKxxEPLkCwju/iWDG8CGG7F7RYV7wPzwwZwOJpkYaJ3tV/X BtBLRZfdf6HP9kwrrp7KG8eoKJ6tKEwV7sIMGR6brzm+xqqrcwbdizSwQdXXTG2OFGlHAbkeqbmX 2ywlDY97LKlmljN1l1TMmYrWd7r3/vPHrndr24lWAi2MDPTEGCuwyU16BVHfPCcqDqB2+5IFzOCn HNvrc+jjXVqeSWZxh/GaiEHzUBm/SKwyzuGCBDy/BQwbq51TkLCEHeKJLLYUrxefFjtKhsJvjAZ5 HiwLpVhIc4aSFy5IN5fYBNg6aQtm59XiiQ30alVKMie/mlWGg1AhOL6aGVo4B4gYaKv2ZzGup5bt /Wg/8wIDbEHQguYD1MWBS+sktMpMe4XQBHXwnNudCzODcrypzWMhC9ARzhH/CBpALgDuw6wIn44T 1MZ1hEOvsFZ3nCKypUaznbDSE9SPCnVtTucEwxdxoA4ayzkCJkjuK0kU/nBt7FS8IdDx6BaYns/3 14QZgDmPOSd9GQljmv0F2T1DlCJtu4LzQK7+4/raSmTsYLqiJ94tbOoq1hM/J8+5sCws9Z0FBlwD tEw796qlnRPjvYgBH5axGM/wFscmDCfehdKTBWP20rm1RcyxtuVqXLIIJzyHu0WenjnCpSapqEF9 j8uXXlaqab4GSHhEi5Kyzytoc8FShtEOIK59wZFWUS72nWeBzDcCGcdx9q5/Ixz5i3lcfXlbM+IE Pu2Xf0a6hJCKgEufnN4OsBGaTlvrk37ldut+hgZvlkpGrL84ERkxtJjeQ0xdz23UnYHpP9FJVdq5 U7VSyaY0il8Lsq346HtSBjox33iWoFZANcIScyALS+X4zyCYbIOv9l7U2g2ksMDwfIlKAs7a3AUj Fh7xNXDrTpwUMp4LS/kO5w5rkkQwKPt72NhLEP32APFpWbJgWZPv1ZoLzzfGtXddM/EQh59Wto6Z 6f7PQ4WuXuX3cg3KU/LL7hL0H3HW1AVWqHA3AKwyb8rSD5ifhrxgRFc0oE02I7cpFyxHWV05A11C BC4mHb6pDchErHae4CCMFzMKsKpRkUPLeGchXGQNMrOELZ+YZqC7Eiav0a1FiJv5Rt4q00qYTY2V PYfrzY1TE5AAdK7lylj3JLVJWhMlZoBtHzp3rUzZe1UkUuCf1SqLeRojdV1uxWGSFkKIMP/z3Azv yM41jpTdgPZUyCjUryD5h7anyiWaIGzPGzgOc7mysPmg5l9BFls1yLBRjDQnM/SYDttgi8orDsJ/ yHScRMHSlWdv5FlDKSjR6ktQhSknSZIKIODPk/1W32xPnpmSwo5CEucuZF1d0CcNrzz9vrPNvcJw APqPskAb47iRJLY+KuV+OMCs0Ik3PR1hgUhryXWu03cZUZEG2BN365H2daFWoF46+KwQX1PQvUqq 4pTmvyukHnsnh0QrDoeMRmknxjnklcRbimnAqSIkb4jV94v0nFntxMfcu2NZjOXlKOm9TiApVPZg T2JTQyALfSMTBXBsGp37CvvviHLK/lCP79hwxAfzJHBDJhUIttdlAjfwWH3kQrtlsT/Qos+fAlD5 PMNjsy2C/DEJgfR45WlH+dyZHuQfpyBoQX6tjGNkTjfOo6aYxMezy81pcGiv9n+brRrAzWHLyzuv 9n1g31YdwRG39Vjcfmoq5kYnYux1aHcnIP0dSG2iSdoxTlp6flEwM9o4gqzTJMMsU4/jZ7I4s/DD WvShOJXsJ+FnkkzQC5HkCV1HBao7zLuU3iq2HMFthGIfsTbSy9H/53ZVbRUgl5NzHqLUXmgZHOEe gMtFTNpF7aRS8pp6ui12ETkTbrFEkYy5tVphb3ciMHnq6+OH6xr14wLW+6jabUdReXeAjxk8TksN lSlOGgSxkZqU4nDhJzbKmwNW9k1JDg115MXsvPEAOiR/p0a0lkFnaxIb4tK7Ji8ISwjP+V7hT5o9 Ax8ua2z7U9N8tuBOj1CZ1Ccb242ACtuyKj2bt3HcX24ObfQXSgYoiildfloN4P/aOA1ntsOsDZg0 LxHKluigzI2m5LyJYNcS9SIioUemxBhkFH8r6yCH2PR0B53EcXAQODe7X53In2KknAySkTUcO9zp bT4qdb5PSQB4d89S25HdmFK29SPxe2wxWtPOKZrFgx0qhWoCy9dxkLV7ABfRp/ZnnlxYpiqEmv1Q at1h10rReP/BCobkGAaxxkF9+qurOANTnS9wVX5laHw1ldSLkL3KFCZUfsaQz5p5ql9GzFcvjdiJ t7Nc8cac7b3+YL+vMLsClea3CFJO4HGZLUD/8am/EFeUX1+PMybAcYnzpx6zeuQn8pAX225zUIFP 3nTN0AZwUhzODuCUF+aeSCiAZBGPSbGc1Vb8IGcZyBl1d5XCum5rNVLbCeozcqCZP4nntXkjVxRQ nvhs/bB521PuOVj7qYcuLx4Afp4rlW2xECkPnVJdjI//6pnx7YP7HfT3cNz4e03Ii6c/Vxx36BQh sbGdAADjhEyl/P8b1wAB1GiAsAQARzvTr7HEZ/sCAAAAAARZWg== ------=_NextPart_000_0015_01D0B72C.26DD8480 Content-Type: application/octet-stream; name="tap_driver-0.5.tar.xz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="tap_driver-0.5.tar.xz" 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 ------=_NextPart_000_0015_01D0B72C.26DD8480 Content-Type: application/octet-stream; name="tap-driver.sh.new" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="tap-driver.sh.new" #! /bin/sh=0A= # Copyright (C) 2011-2013 Free Software Foundation, Inc.=0A= #=0A= # This program is free software; you can redistribute it and/or modify=0A= # it under the terms of the GNU General Public License as published by=0A= # the Free Software Foundation; either version 2, or (at your option)=0A= # any later version.=0A= #=0A= # This program is distributed in the hope that it will be useful,=0A= # but WITHOUT ANY WARRANTY; without even the implied warranty of=0A= # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the=0A= # GNU General Public License for more details.=0A= #=0A= # You should have received a copy of the GNU General Public License=0A= # along with this program. If not, see <http://www.gnu.org/licenses/>.=0A= =0A= # As a special exception to the GNU General Public License, if you=0A= # distribute this file as part of a program that contains a=0A= # configuration script generated by Autoconf, you may include it under=0A= # the same distribution terms that you use for the rest of that program.=0A= =0A= # This file is maintained in Automake, please report=0A= # bugs to <bug-automake@HIDDEN> or send patches to=0A= # <automake-patches@HIDDEN>.=0A= =0A= scriptversion=3D2013-12-23.17; # UTC=0A= =0A= # Make unconditional expansion of undefined variables an error. This=0A= # helps a lot in preventing typo-related bugs.=0A= set -u=0A= =0A= me=3Dtap-driver.sh=0A= =0A= fatal ()=0A= {=0A= echo "$me: fatal: $*" >&2=0A= exit 1=0A= }=0A= =0A= usage_error ()=0A= {=0A= echo "$me: $*" >&2=0A= print_usage >&2=0A= exit 2=0A= }=0A= =0A= print_usage ()=0A= {=0A= cat <<END=0A= Usage:=0A= tap-driver.sh --test-name=3DNAME --log-file=3DPATH --trs-file=3DPATH=0A= [--expect-failure=3D{yes|no}] [--color-tests=3D{yes|no}]=0A= [--enable-hard-errors=3D{yes|no}] [--ignore-exit]=0A= [--diagnostic-string=3DSTRING] [--merge|--no-merge]=0A= [--comments|--no-comments] [--] TEST-COMMAND=0A= The '--test-name', '-log-file' and '--trs-file' options are mandatory.=0A= END=0A= }=0A= =0A= # TODO: better error handling in option parsing (in particular, ensure=0A= # TODO: $log_file, $trs_file and $test_name are defined).=0A= test_name=3D # Used for reporting.=0A= log_file=3D # Where to save the result and output of the test script.=0A= trs_file=3D # Where to save the metadata of the test run.=0A= expect_failure=3D0=0A= color_tests=3D0=0A= merge=3D0=0A= ignore_exit=3D0=0A= comments=3D0=0A= diag_string=3D'#'=0A= =0A= while test $# -gt 0; do=0A= case $1 in=0A= --help) print_usage; exit $?;;=0A= --version) echo "$me $scriptversion"; exit $?;;=0A= --test-name) test_name=3D$2; shift;;=0A= --log-file) log_file=3D$2; shift;;=0A= --trs-file) trs_file=3D$2; shift;;=0A= --color-tests) color_tests=3D$2; shift;;=0A= --expect-failure) expect_failure=3D$2; shift;;=0A= --enable-hard-errors) shift;; # No-op.=0A= --merge) merge=3D1;;=0A= --no-merge) merge=3D0;;=0A= --ignore-exit) ignore_exit=3D1;;=0A= --comments) comments=3D1;;=0A= --no-comments) comments=3D0;;=0A= --diagnostic-string) diag_string=3D$2; shift;;=0A= --) shift; break;;=0A= -*) usage_error "invalid option: '$1'";;=0A= esac=0A= shift=0A= done=0A= =0A= test $# -gt 0 || usage_error "missing test argument"=0A= =0A= =0A= case $expect_failure in=0A= yes) expect_failure=3D1;;=0A= *) expect_failure=3D0;;=0A= esac=0A= =0A= init_colors=3D''=0A= if test $color_tests =3D yes; then=0A= init_colors=3D'=0A= color_map["red"]=3D"=1B[0;31m" # Red.=0A= color_map["grn"]=3D"=1B[0;32m" # Green.=0A= color_map["lgn"]=3D"=1B[1;32m" # Light green.=0A= color_map["blu"]=3D"=1B[1;34m" # Blue.=0A= color_map["mgn"]=3D"=1B[0;35m" # Magenta.=0A= color_map["std"]=3D"=1B[m" # No color.=0A= color_for_result["ERROR"] =3D "mgn"=0A= color_for_result["PASS"] =3D "grn"=0A= color_for_result["XPASS"] =3D "red"=0A= color_for_result["FAIL"] =3D "red"=0A= color_for_result["XFAIL"] =3D "lgn"=0A= color_for_result["SKIP"] =3D "blu"'=0A= fi=0A= =0A= # :; is there to work around a bug in bash 3.2 (and earlier) which=0A= # does not always set '$?' properly on redirection failure.=0A= # See the Autoconf manual for more details.=0A= :;{=0A= (=0A= # Ignore common signals (in this subshell only!), to avoid potential=0A= # problems with Korn shells. Some Korn shells are known to propagate=0A= # to themselves signals that have killed a child process they were=0A= # waiting for; this is done at least for SIGINT (and usually only for=0A= # it, in truth). Without the `trap' below, such a behaviour could=0A= # cause a premature exit in the current subshell, e.g., in case the=0A= # test command it runs gets terminated by a SIGINT. Thus, the awk=0A= # script we are piping into would never see the exit status it=0A= # expects on its last input line (which is displayed below by the=0A= # last `echo $?' statement), and would thus die reporting an internal=0A= # error.=0A= # For more information, see the Autoconf manual and the threads:=0A= # = <http://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00004.html>=0A= # = <http://mail.opensolaris.org/pipermail/ksh93-integration-discuss/2009-Feb= ruary/004121.html>=0A= trap : 1 3 2 13 15=0A= if test $merge -gt 0; then=0A= exec 2>&1=0A= else=0A= exec 2>&3=0A= fi=0A= =0A= # Execute the test in tap-driver.sh [options] test=0A= "$@"=0A= # echo $?=0A= ) | LC_ALL=3DC ${AM_TAP_AWK-awk} \=0A= -v me=3D"$me" \=0A= -v test_script_name=3D"$test_name" \=0A= -v log_file=3D"$log_file" \=0A= -v trs_file=3D"$trs_file" \=0A= -v expect_failure=3D"$expect_failure" \=0A= -v merge=3D"$merge" \=0A= -v ignore_exit=3D"$ignore_exit" \=0A= -v comments=3D"$comments" \=0A= -v diag_string=3D"$diag_string" \=0A= '=0A= # TODO: the usages of "cat >&3" below could be optimized when using=0A= # GNU awk, and/on on systems that supports /dev/fd/.=0A= =0A= # NOTES:=0A= # There are two gawk issues which affect the way that arguments are = used=0A= # and the passage of information from a function back to its caller. =0A= # 1: gawk promotes the specification of local variables to the function=0A= # parameter list. Any parameter not specifically passed by the = caller=0A= # is considered a local variable. =0A= # =0A= # Parameters and local variables are specified in the function = statement=0A= # by separating the local variables by 3 spaces from the = parameters, as =0A= # in:=0A= # =0A= # function fnc(P1, P2, V1, V2) or=0A= # function fnc( V1, V2)=0A= # =0A= # where the parameters are P1 and P2, and the local variables are = V1 and =0A= # V2.=0A= # =0A= # In each use the caller must use all of the parameters. In = descriptions=0A= # of the function, only the parameters will be listed. This means = that=0A= # the caller will always use:=0A= # =0A= # fnc(P1, P2) and descriptions will use=0A= # fnc(P1, P2) without exception.=0A= # =0A= # 2: Parameters are always IN and never INOUT or OUT. Passage of date = from=0A= # a function to the caller is either by return value or by a global = or=0A= # both. All globals are consumed by a caller before reuse. Each = function=0A= # passing back data will have a side affect of altering a global. = This=0A= # will be indicated in the function preamble with the annotation:=0A= # =0A= # sideeffect[OUT] or=0A= # sideeffect[INOUT]=0A= #=0A= =0A= # -------------- function listing --------------=0A= # function decorate_result(result)=0A= # function handle_bail_out(line)=0A= # function handle_diagnostics()=0A= # function handle_not_ok(line)=0A= # function handle_ok(line)=0A= # function handle_test_plan(line)=0A= # function handle_yaml()=0A= # function input_check(st)=0A= # function parse_test_line(line)=0A= # function post_processing() {=0A= # function preamble()=0A= # function write_error(msg)=0A= # function write_fail_test_results()=0A= # function write_fatal_test_results()=0A= # function write_log(str)=0A= # function write_log_summary()=0A= # function write_options()=0A= # function write_pass_test_results()=0A= # function write_skip_test_results()=0A= # function write_result(result, str)=0A= # ----------------------------------------------=0A= =0A= ## ----------- ##=0A= ## FUNCTIONS ##=0A= ## ----------- ##=0A= =0A= #=0A= # @fn decorate_result(result)=0A= # @brief Determine a message color to use for console output.=0A= # <p>Console output can be colorized. This function determines=0A= # what color to use for the given message type.</p>=0A= # <p>The associatION of color to message type is done on script=0A= # entry in the shell script, not in awk.</p>=0A= # <p>The result values are:</p>=0A= # <ul>=0A= # <li>"ERROR" A parsing or I/O error was found</li>=0A= # <li>"PASS" TAP ok</li>=0A= # <li>"XPASS" TAP ok with expect_failure =3D yes</li>=0A= # <li>"FAIL" TAP not ok</li>=0A= # <li>"XFAIL" TAP not ok with expect_failure =3D yes</li>=0A= # <li>"SKIP" TAP ok # SKIP</li>=0A= # </ul>=0A= # <p>If the output is not to be colorized then the input=0A= # result is returned.</p>=0A= #=0A= # side effects: none=0A= #=0A= # @param[in] result one of the message types=0A= # @return either a colorized result or a non-colorized result=0A= #=0A= function decorate_result(result)=0A= {=0A= color_name =3D color_for_result[result]=0A= if (color_name)=0A= return color_map[color_name] "" result "" color_map["std"]=0A= =0A= # If we are not using colorized output, or if we do not know how=0A= # to colorize the given result, we should return it unchanged.=0A= return result=0A= }=0A= =0A= #=0A= # @fn handle_bail_out(line)=0A= # @brief Process Bail Out!.=0A= # <p>Bail Out! is a fatal error. The assumed test case intent is=0A= # to terminate all processing because of some unexpected and=0A= # fatal condition. As an Automake extension Diagnostics and=0A= # comments following a Bail Out! are accepted. The first test=0A= # line is flagged as an error (one error per test case) and=0A= # all test lines are processed to determine if there are any=0A= # TAP syntax errors. The test results is discarded and the=0A= # output .trs file will not contain .trs metadata to represent=0A= # these test lines.</p>=0A= # <p>If this is not the first Bail Out! seen post a message.</p>=0A= # <p>There are two phases to the processing:</p>=0A= # <ul>=0A= # <li>Phase I: This is the first time that a Bail Out! message=0A= # has been seen. Issue a message and then continue stripping=0A= # out all Diagnostics and YAML.</li>=0A= # <ul>=0A= # <li>If a test line, test plan is found, issue a one=0A= # time message and return to the main parsing loop.</li>=0A= # <li>If a Bail Out! is seend issue a message and=0A= # return to the main parsing loop.</li>=0A= # <li>Process all Diagnostics.</li>=0A= # <li>Process all YAML comments.</li>=0A= # <li>If Bail Out! is seen, issue a diagnostic message=0A= # and return to the main parsing loop.=0A= # </ul>=0A= # <li>Phase II: Issue a diagnostic message and return to the=0A= # main parsing loop.</li>=0A= # </ul>=0A= # <p>The read loop assumes that a line has been input. This=0A= # assumption affects the main parsing loop. When a return=0A= # from this function is made, the next line of input has=0A= # already been input. Therefore, the st =3D getline statement=0A= # in the main parsing loop has to be bypassed. This is =0A= # all to say that this jewel of a code fragment is sneaky =0A= # pete code.</p>=0A= #=0A= # sideeffect[inout] bailed_out value changed to 1 + testno=0A= # sideeffect[OUT] testno +1 if test line command found=0A= #=0A= # @param[inout] line input line - destroyed during processing=0A= # @return st status of I/O on input pipe=0A= # =0A= function handle_bail_out(line, bailout_message, st)=0A= {=0A= if (DEBUG) print "handle_bail_out(\"" line "\")" > log_file=0A= =0A= if (bailed_out) =0A= {=0A= write_error("Multiple Bail Out!")=0A= }=0A= else =0A= {=0A= bailed_out =3D 1 + testno=0A= # Strip leading and trailing whitespace.=0A= sub("^[ \t]*Bail out!", "", line); # leading whitespace=0A= sub("[ \t]*$", "", line); # trailing whitespace=0A= =0A= # Format the error message =0A= bailout_message =3D "Bail out! " line=0A= write_result("ERROR", bailout_message)=0A= =0A= st =3D getline=0A= while(st > 0) =0A= { =0A= write_log($0)=0A= if ($0 ~ /^not ok/) =0A= {=0A= testno++=0A= handle_not_ok($0)=0A= write_error("Illegal test line after Bail Out!")=0A= }=0A= # TAP test line ok.=0A= else if ($0 ~ /^ok/) =0A= {=0A= testno++=0A= handle_ok($0)=0A= write_error("Illegal test line after Bail Out!")=0A= }=0A= # TAP test plan 1..N=0A= else if ($0 ~ /^1/) =0A= {=0A= handle_test_plan($0)=0A= write_error("Illegal test plan after Bail Out!")=0A= }=0A= else if ($0 ~ /^[ \t]*Bail out!/) =0A= {=0A= write_error("Multiple Bail Out!")=0A= }=0A= # Diagnostics.=0A= else if ($0 ~ /^#/) =0A= {=0A= if (handle_diagnostics() > 0) continue=0A= else break;=0A= }=0A= else if (!($0 ~ /^[ \t]*$/)) # not a blank line=0A= { # check for YAML & if not then ERROR=0A= if (DEBUG) print "check for YAML" > log_file=0A= if ($0 ~ /[ \t]+---[ \t]*$/) # YAML start --- line=0A= {=0A= if (handle_yaml() > 0) =0A= continue=0A= else =0A= {=0A= write_error("Missing YAML end")=0A= break=0A= }=0A= }=0A= else if ($0 ~ /^[ \t]+\.\.\.[ \t]*$/) # YAML stop ... line=0A= write_error("Missing YAML begin")=0A= =0A= else=0A= write_error("Undefined TAP statement")=0A= =0A= }=0A= st =3D getline=0A= if (DEBUG) print "test_suite_status " test_suite_status > = log_file=0A= } =0A= }=0A= =0A= if (DEBUG) print "handle_bail_out: bailed_out " bailed_out " testno = " testno > log_file=0A= =0A= return st=0A= }=0A= =0A= #=0A= # @fn handle_diagnostics()=0A= # @brief Process Diagnostics=0A= # <p>Where one Diagnnostic exist there may be many. Continue=0A= # inputting lines from the input test case pipe until =0A= # either a non-Diagnostic if found, an EOF is found,=0A= # or there is an I/O error.</p>=0A= # <p>The read loop assumes that a line has been input. This=0A= # assumption affects the main parsing loop. When a return=0A= # from this function is made, the next line of input has=0A= # already been input. Therefore, the st =3D getline statement=0A= # in the main parsing loop has to be bypassed. This is =0A= # all to say that this jewel of a code fragment is sneaky =0A= # pete code.</p>=0A= #=0A= # @return st status of input test case pipe=0A= #=0A= function handle_diagnostics( st) =0A= {=0A= if (DEBUG) print "handle_diagnostics:" > log_file=0A= =0A= st =3D getline=0A= while(st > 0) {=0A= if ($0 ~ /^#/) write_log($0)=0A= else break=0A= st =3D getline=0A= }=0A= return st=0A= }=0A= =0A= #=0A= # @fn handle_not_ok(line)=0A= # @brief Process TAP not ok test line.=0A= # <p>A test line is parsed and the result analyzed for=0A= # correctness. The default result is given in COOKED-FAIL.=0A= # COOKED_FAIL values are "FAIL" or "XFAIL" if a failure=0A= # is expected.</p>=0A= #=0A= # sideeffect[OUT] test_suite_status reflects global status=0A= # sideeffect[IN] N either testno or the parsed statement test no=0A= # sideeffect[IN] comment the parsed statement comment=0A= #=0A= # @param[inout] line the line to be processed. Processing destroys the = line.=0A= # @return 0 for successful, 1 for failure.=0A= #=0A= function handle_not_ok(line, result, parse) =0A= {=0A= if (DEBUG) print "handle_not_ok(\"" line "\") COOKED_FAIL " = COOKED_FAIL > log_file=0A= =0A= result =3D COOKED_FAIL=0A= sub(/^not ok/, "", line)=0A= if (line ~ /^[:graph:]/) # check if not EOL or [ \t]=0A= {=0A= result =3D "ERROR"=0A= }=0A= else # [:blank:] or EOL=0A= {=0A= parse =3D parse_test_line(line)=0A= switch(parse)=0A= {=0A= case "":=0A= case "TODO":=0A= if (DEBUG) print "handle_not_ok N(" N ") " testno > = log_file=0A= if (N !=3D testno)=0A= {=0A= test_suite_status =3D or(test_suite_status, ERROR)=0A= result =3D "ERROR"=0A= write_error("Test line number wrong " N " !=3D " = testno)=0A= }=0A= else if (result =3D=3D "XFAIL")=0A= test_suite_status =3D or(test_suite_status, PASS)=0A= else=0A= test_suite_status =3D or(test_suite_status, FAIL)=0A= break=0A= if (parse =3D=3D "TODO") result =3D COOKED_PASS=0A= case "SKIP":=0A= write_error("SKIP not allowed")=0A= case "ERROR":=0A= test_suite_status =3D ERROR=0A= result =3D "ERROR"=0A= break=0A= }=0A= }=0A= =0A= write_result(result, comment)=0A= return (result =3D=3D "ERROR")? 1: 0=0A= }=0A= =0A= #=0A= # @fn handle_ok(line)=0A= # @brief Process TAP ok test line.=0A= # <p>A test line is parsed and the result analyzed for=0A= # correctness. The default result is given in COOKED_PASS.=0A= # COOKED_PASS values are "PASS" and "XPASS" if a PASS is=0A= # not expected expected.</p>=0A= #=0A= # sideeffect[OUT] test_suite_status reflects global status=0A= # sideeffect[IN] N either testno or the parsed statement test no=0A= # sideeffect[IN] comment the parsed statement comment=0A= #=0A= # @param[inout] line the line to be processed. Processing destroys the = line.=0A= # return 0 for successful, 1 for failure.=0A= #=0A= function handle_ok(line, result, parse) =0A= { =0A= if (DEBUG) print "handle_ok(\"" line "\")" > log_file=0A= =0A= result =3D COOKED_PASS=0A= sub(/^ok/, "", line)=0A= if (line ~ /^[:graph:]/) # check if EOL or not [:blank:]=0A= {=0A= result =3D "ERROR"=0A= }=0A= else # [:blank:] or EOL=0A= {=0A= parse =3D parse_test_line(line)=0A= switch(parse)=0A= {=0A= case "":=0A= case "TODO":=0A= if (DEBUG) print "handle_ok N(" N ") " testno > log_file=0A= if (N !=3D testno)=0A= {=0A= test_suite_status =3D ERROR=0A= result =3D "ERROR"=0A= write_error("Test line number wrong " N " !=3D " = testno)=0A= }=0A= else if ((result =3D=3D "XFAIL") || (result =3D=3D "PASS"))=0A= test_suite_status =3D or(test_suite_status, PASS)=0A= else=0A= test_suite_status =3D or(test_suite_status, FAIL)=0A= break=0A= case "SKIP":=0A= result =3D "SKIP"=0A= test_suite_status =3D or(test_suite_status, SKIP)=0A= break=0A= case "ERROR":=0A= test_suite_status =3D ERROR=0A= result =3D "ERROR"=0A= break=0A= }=0A= }=0A= =0A= write_result(result, comment)=0A= return (result =3D=3D "ERROR")? 1: 0=0A= }=0A= =0A= #=0A= # @fn handle_test_plan(line)=0A= # @brief Parse and process test plans=0A= # <p>Test plans have the following format:</p>=0A= # <tt><pre>=0A= # 1..N [# [comment]]=0A= # 1..0 [# [comment]]=0A= # </pre></tt>=0A= #=0A= # <p>where N is a number >=3D 0 and</p>=0A= # <ul>=0A= # <li><b>1..0</b> signifies that the test suite has been skipped.=0A= # Any test lines of any description are errors and will cause=0A= # the test suite to be in ERROR.</li>=0A= # <li><b>1..N</b> signifies that the maximum number of test lines=0A= # in the test suite are N. If there are k > N test lines the=0A= # test suite will be in ERROR. If there are k < N test lines=0A= # in the test suite, the the missing k+1..N lines will be =0A= # considered as SKIPed.</li>=0A= # </ul>=0A= # <p>Parsing consists of recognizing the correct format of the input=0A= # statement and recording N or 0 in the global planned_tests = variable. =0A= # Comment lines are discarded.</p>=0A= # <p>Successful processing of the test plan depends on knowing=0A= # whether the current plan is the first or the last or if the=0A= # plan precedes all test lines that have been processed. These=0A= # determinations are made with the global variables:</p>=0A= # </br>=0A= # plan_seen which indicates the status of the test plan.=0A= # </br>=0A= # testno which counts the test lines seen.=0A= # <p>The values for plan_seen are:</p>=0A= # <ul>=0A= # <li><b>NO_PLAN</b>[0] the plan has not been seen.</li>=0A= # <li><b>EARLY_PLAN</b>[1] the plan is at the top.</li>=0A= # <li><b>LATE_PLAN</b>[>1] the plan is at the bottom</li>=0A= # </ul>=0A= # <p>At termination, after and EOF or I/O failure, it is possible=0A= # to determine the status of the test plan. The Algorithm is:</p>=0A= # <ul>=0A= # <li>test_plan =3D=3D 0 A test plan has not been seen. This =0A= # violates Automake standards and is an error.</li>=0A= # <li>test_plan =3D=3D 1 A test plan is an EARLY_PLAN. This=0A= # accords to the Automake standard and is accepted.</li>=0A= # <li>test_plan > 2 A test plan can either be a LATE_PLAN=0A= # or can be intermingled with test lines. If the test=0A= # plan is a LATE_PLAN then this violates Automake =0A= # standards. If the test plan is intermingled, it is=0A= # illegal. To distinguish between the two cases:=0A= # <p>if ((plan_seen - 1) =3D=3D testno) then it is a = LATE_PLAN</p>=0A= # </br>=0A= # else it is intermingled and illegal.=0A= # </li>=0A= # </ul>=0A= #=0A= # sideeffect[OUT] test_suite_status reflects global status=0A= # sideeffect[OUT] plan_seen 1 + testno if plan ok=0A= # sideeffect[OUT] planned_tests N in 1..N or MAX_TESTS for ERROR=0A= #=0A= # @param[inout] line the input line - the value is destroyed during = parsing=0A= # @return [BOOL] true if the plan is successfully validated.=0A= #=0A= function handle_test_plan(line)=0A= {=0A= if (DEBUG) printf("handle_test_plan(\"%s\"\n = plan_seen %d testno %d\n", line, plan_seen, testno) > log_file=0A= =0A= if (line ~ /^1..[[:digit:]]+/)=0A= {=0A= if (plan_seen)=0A= {=0A= test_suite_status =3D ERROR=0A= write_error("Test plan duplicate.")=0A= }=0A= else =0A= {=0A= if (testno)=0A= {=0A= test_suite_status =3D ERROR=0A= write_error("Test plan follows first test.")=0A= }=0A= sub(/^1../, "", line)=0A= match(line, /^[[:digit:]]+/)=0A= planned_tests =3D strtonum(substr(line, RSTART, RLENGTH))=0A= plan_seen =3D 1 + testno=0A= sub(/^[[:digit:]]+/, "", line)=0A= sub(/^[[:blank:]]*/, "", line)=0A= if (planned_tests < 0) =0A= {=0A= planned_test =3D MAX_TESTS=0A= test_suite_status =3D ERROR=0A= write_error("Test plan number wrong")=0A= }=0A= else if ((length(line) > 0) && !(line ~ /^#/))=0A= {=0A= test_suite_status =3D ERROR=0A= write_error("Test plan syntax wrong. Comment starts with = \"#\".")=0A= }=0A= else if (planned_tests =3D=3D 0)=0A= {=0A= test_suite_status =3D SKIP=0A= write_result("SKIP", "")=0A= }=0A= }=0A= }=0A= else=0A= {=0A= test_suite_status =3D ERROR=0A= write_error("Test plan syntax wrong. Should be \"1..digit\".")=0A= }=0A= if (DEBUG) print "handle_test_plan: planned_tests " planned_tests > = log_file=0A= }=0A= =0A= #=0A= # @fn handle_yaml()=0A= # @brief Process YAML comments.=0A= # <p>YAML comments are part of th Test Results File interfae.=0A= # There is no way to return YAML to the Automake Test Harnes=0A= # all YAML comments are disgarded.</p>=0A= # <p>This function searches for the YAML comment terminator.</p>=0A= # <p>The read loop assumes that a line has been input and the=0A= # YAML lead (---) has been found. This assumption affects the =0A= # main parsing loop. When a return from this function is made, =0A= # the next line of input has already been input. Therefore, =0A= # the st =3D getline statement in the main parsing loop has to=0A= # be bypassed. This is all to say that this jewel of a code =0A= # fragment is sneaky pete code.</p>=0A= #=0A= # @return st status of test case input file=0A= #=0A= function handle_yaml()=0A= {=0A= if (DEBUG) print "handle_yaml(" line ")" > log_file=0A= =0A= st =3D getline=0A= while(st > 0) =0A= {=0A= write_log($0)=0A= if ($0 ~ /^[ \t]+\.\.\.[ \t]*$/) break;=0A= st =3D getline=0A= }=0A= return st=0A= }=0A= =0A= #=0A= # @fn input_check(st)=0A= # @brief Determine if an I/O error occurred.=0A= # <p>Use the input status value to determine whether the =0A= # error was fatal (< 0) or and End Of File (=3D=3D 0).</p>=0A= #=0A= # @param[in] st I/O status =0A= #=0A= function input_check(st)=0A= {=0A= if(st <=3D 0) =0A= {=0A= write_fatal_test_results()=0A= if (st < 0) # I/O error.=0A= write_error("I/O error in input stream")=0A= else if (st =3D=3D 0) # End-of-input=0A= write_error("No input lines")=0A= }=0A= return st=0A= }=0A= =0A= #=0A= # @fn parse_test_line(line)=0A= # @brief Parse test line.=0A= # <p>The test line is parsed.</p>=0A= # <p>test line has the following formats</p>=0A= # <tt><pre>=0A= # ok [N] [comment] [# Directive [d_comment]]=0A= # not ok [N] [comment] [# Directive [d_comment]]=0A= # </pre></tt>=0A= #=0A= # <p>There must be at least on <ws> separator between elements of=0A= # the test-line except that not ok must have a single blank=0A= # separator between not and ok.</p>=0A= # <p>where</p>=0A= # <ul>=0A= # <li>N[current test line number] Optional test line number.</li>=0A= # <li>comment[""] Optional test list comment. The comment can =0A= # not contain a #.</li>=0A= # <li>Directive[""] Optional TAP directive. The Directives are not=0A= # case sensitive. If a Directive is found it is treated as a =0A= # SKIP.The legal directives are:</li>=0A= # <ul>=0A= # <li>SKIP </li>=0A= # <li>TODO </li>=0A= # </ul>=0A= # <li>d_comment[""] Optional directive comment</li>=0A= # </ul>=0A= #=0A= # <p>The trs :test-result: comment is:</p>=0A= # <tt><pre>=0A= # [comment] [# Directive [d_comment]]=0A= # </pre></tt>=0A= # <p>And the :test-result: Test Results File output will look like:</p>=0A= # <tt><pre>=0A= # :test-result: xxxxx [comment] [# Directive [d_comment]]=0A= # </pre></pre>=0A= # <p>Where xxxxx is the result left justified into a 5 character field=0A= # separated by a blank, from the comments.</p>=0A= #=0A= # sideeffect[OUT] N either testno or the parsed statement test no=0A= # sideeffect[OUT] comment the parsed statement comment=0A= #=0A= # @param[inout] line TAP test-line irremedially modified=0A= # @return processing result {"", "SKIP", "ERROR"}=0A= #=0A= function parse_test_line(line, d_loc, d_name, d_sep, directive)=0A= {=0A= N =3D testno=0A= comment =3D ""=0A= directive =3D ""=0A= if (line ~ /^[[:blank:]]+[[:digit:]]/) # check for N=0A= {=0A= sub(/^[[:blank:]]+/, "", line) # remove leading <ws>=0A= match(line, /^[[:digit:]]+/) # find N=0A= N =3D substr(line, RSTART, RLENGTH) + 0 # N=0A= sub(/^[[:digit:]]+/, "", line) =0A= }=0A= comment =3D substr(line, 1)=0A= d_loc =3D match(line, /[[:blank:]]#[[:blank:]]/) # search for = Directive separator=0A= if (DEBUG) print "parse_test_line; d_loc " d_loc " N (" N ") \"" = comment "\"" > log_file=0A= if (d_loc) # d_loc > 0 =3D> found #=0A= {=0A= sub(/^.*#[[:blank:]]*/, "", line) # remove .*#<ws>=0A= if (DEBUG) print "parse_test_line; \"" line "\"" > log_file=0A= directive =3D "SKIP" # assume SKIP=0A= d_name =3D toupper(substr(line, 1, 4))=0A= if (!((d_name =3D=3D "SKIP") || # not SKIP or TODO=0A= (d_name =3D=3D "TODO")))=0A= {=0A= directive =3D "ERROR"=0A= write_error("Directive Unknown (" d_name ")")=0A= } =0A= else if ((length(line) > 4) && !(substr(line, 5, 1) ~ = /[[:blank:]]/))=0A= {=0A= directive =3D "ERROR"=0A= write_error("SKIP or TODO not followed by whitespace \"" = line "\"")=0A= }=0A= else if (d_name =3D=3D "TODO")=0A= directive =3D "TODO"=0A= =0A= }=0A= else =0A= {=0A= d_loc =3D index(line, "#")=0A= if (DEBUG) print "parse_test_line d_loc " d_loc " \"" comment = "\""> log_file=0A= if (d_loc)=0A= { # is this wrong I ask you=0A= directive =3D "ERROR"=0A= d_sep =3D substr(line, d_loc-1, 3)=0A= write_error("Directive Ill-formed (" d_sep ")")=0A= }=0A= }=0A= =0A= if (DEBUG) print "parse_test_line directive (" directive ") N (" N = ") \"" comment "\"" > log_file=0A= =0A= return directive=0A= }=0A= =0A= #=0A= # @fn post_processing()=0A= # @brief Processing after the main parsing loop terminates.=0A= #=0A= # sideeffect[IN] bailed_out Bail Out! status=0A= # sideeffect[IN] plan_seen test plan status=0A= # sideeffect[OUT] test_suite_status global test result=0A= # sideeffect[IN] testno last test line numver processed=0A= #=0A= function post_processing() =0A= {=0A= # A "Bail out!" directive should cause us to ignore any following TAP=0A= # error, as well as a non-zero exit status from the TAP producer.=0A= if (DEBUG) {=0A= print "post_processing: testno: " testno > = log_file=0A= print " bailed_out: " bailed_out > = log_file=0A= print " plan_seen: " plan_seen - 1 > = log_file=0A= print " planned_tests: " planned_tests > = log_file=0A= }=0A= if (bailed_out) {=0A= test_suite_status =3D ERROR=0A= if (bailed_out =3D=3D testno)=0A= write_error("Illegal test line after Bail Out!")=0A= else if (bailed_out < testno)=0A= write_error("Illegal test lines after Bail Out!")=0A= }=0A= else if (planned_tests !=3D testno)=0A= {=0A= if (planned_tests =3D=3D MAX_TESTS) =0A= {=0A= test_suite_status =3D ERROR=0A= write_error("Test plan missing")=0A= }=0A= else if (testno < planned_tests) # if k < N then k+1 .. N are = SKIPs=0A= {=0A= for(; testno < planned_tests; testno++)=0A= write_result("SKIP", "")=0A= }=0A= else if (planned_tests !=3D MAX_TESTS)=0A= {=0A= test_suite_status =3D ERROR=0A= write_error("Test plan number wrong")=0A= }=0A= }=0A= if (((plan_seen) <=3D testno) && (plan_seen > 1)) =0A= {=0A= test_suite_status =3D ERROR=0A= write_error("Test plan found between two test lines.")=0A= }=0A= =0A= #=0A= # Output .trs test suite metadata =0A= #=0A= if (DEBUG) print " test_suite_status: " = test_suite_status > log_file=0A= =0A= switch(test_suite_status) =0A= {=0A= case 0: # PASS=0A= write_pass_test_results()=0A= break=0A= case 1: # FAIL=0A= case 3: # FAIL | SKIP=0A= write_fail_test_results()=0A= break=0A= case 2: # SKIP=0A= write_skip_test_results()=0A= break;=0A= case 4: # ERROR=0A= case 5: # ERROR | FAIL=0A= case 6: # ERROR | SKIP=0A= case 7: # ERROR | FAIL | SKIP=0A= write_fatal_test_results()=0A= break=0A= }=0A= =0A= close(trs_file)=0A= =0A= # if (!ignore_exit) {=0A= # # Fetch exit status from the last line.=0A= # exit_message =3D get_test_exit_message(nextline)=0A= # if (exit_message)=0A= # testsuite_error(exit_message)=0A= # }=0A= write_log_summary()=0A= }=0A= =0A= #=0A= # @fn preamble()=0A= # @brief Check and log Diagnostics preceding the test.=0A= # <p>This is an Automake extension of the TAP Standard.</p>=0A= # <p>An unlimited number of Diagnostics and YAML comments =0A= # can precede the first statement in the TAP test. The =0A= # first statement of the test is any one of a test plan, =0A= # test line, or Bail Out!. </p>=0A= #=0A= # @return I/O status of last input=0A= #=0A= function preamble( equal) {=0A= =0A= #=0A= # output executable name=0A= #=0A= len =3D length(test_script_name)=0A= equal =3D "## "=0A= while(len--) equal =3D equal "=3D"=0A= equal =3D equal " ##"=0A= printf "\n%s\n## %s ##\n%s\n\n", equal, test_script_name, equal > = log_file=0A= =0A= write_options()=0A= =0A= if (DEBUG) print "preamble:" > log_file=0A= =0A= #=0A= # .log file header=0A= print "lineno statement" > log_file=0A= =0A= return getline=0A= }=0A= =0A= #=0A= # @fn write_error(msg)=0A= # @brief Output diagnostic messages.=0A= # @param[in] msg error message=0A= #=0A= function write_error(msg) {=0A= print test_script_name ": ERROR " msg > log_file=0A= if ($comments) print test_script_name ": " decorate_result("ERROR") = " " msg;=0A= }=0A= =0A= #=0A= # @fn write_fail_test_results()=0A= # @brief Output .trs file metadata if the test suite status is FAIL.=0A= #=0A= function write_fail_test_results() {=0A= print ":global-test-result: FAIL" > trs_file=0A= print ":recheck: yes" > trs_file=0A= print ":copy-in-global-log: yes" > trs_file=0A= }=0A= =0A= #=0A= # @fn write_fatal_test_results()=0A= # @brief Output .trs file metadat if the test suite status is ERROR.=0A= #=0A= function write_fatal_test_results() {=0A= print ":global-test-result: ERROR" > trs_file=0A= print ":recheck: yes" > trs_file=0A= print ":copy-in-global-log: no" > trs_file=0A= }=0A= =0A= #=0A= # @fn write_log(str)=0A= # @brief Write to log file and update line counter.=0A= #=0A= # sideeffect[OUT} lineno current input line number (updated)=0A= # @param[in] str output string=0A= function write_log(str)=0A= {=0A= lineno++=0A= printf "%6d %s\n", lineno, str > log_file=0A= }=0A= =0A= #=0A= # @fn write_log_summary()=0A= # @brief Write log summary statistics=0A= # <p>Not implemented. No idea of what to output</p>=0A= #=0A= function write_log_summary() {=0A= =0A= }=0A= =0A= #=0A= # @fn write_options()=0A= # @brief Pretty-print input options=0A= #=0A= function write_options( comments_Option, expect_failure_Option, = ignore_exit_Option, merge_Option) =0A= {=0A= comments_Option =3D (comments)? "yes": "no"=0A= expect_failure_Option =3D (expect_failure)? "yes": "no"=0A= ignore_exit_Option =3D (ignore_exit)? "yes": "no"=0A= merge_Option =3D (merge)? "yes": "no"=0A= =0A= print "Options Custom TAP driver =3D " me > = log_file=0A= print " test_script_name =3D " test_script_name = > log_file=0A= print " log_file =3D " log_file = > log_file=0A= print " trs_file =3D " trs_file = > log_file=0A= print " comments =3D " comments_Option = > log_file=0A= print " expect_failure =3D " expect_failure_Option = > log_file=0A= print " ignore_exit =3D " ignore_exit_Option = > log_file=0A= print " merge =3D " merge_Option = > log_file=0A= print " diag_string =3D " diag_string = > log_file=0A= print "---------------------------------------------\n" > = log_file=0A= =0A= }=0A= =0A= #=0A= # @fn write_pass_test_results()=0A= # @brief Output .trs file metadat if the test suite status is PASS.=0A= #=0A= function write_pass_test_results() {=0A= print ":global-test-result: PASS" > trs_file=0A= print ":recheck: no" > trs_file=0A= print ":copy-in-global-log: no" > trs_file=0A= }=0A= =0A= #=0A= # @fn write_skip_test_results()=0A= # @brief Output .trs file metadat if the test suite status is SKIP.=0A= #=0A= function write_skip_test_results() {=0A= print ":global-test-result: PASS" > trs_file=0A= print ":recheck: yes" > trs_file=0A= print ":copy-in-global-log: no" > trs_file=0A= }=0A= =0A= #=0A= # @fn write_result(result, str)=0A= # @brief Output TRS data to the trs file and the monitor=0A= # <p>The results of a test are output to both the trs file=0A= # and to the users screen. The output format is:</p>=0A= # </br>=0A= # test_file_name: result: str=0A= # <p>Where the result can be any one of:</p>=0A= # <ul>=0A= # <li><b>PASS</b> Test Passed</li>=0A= # <li><b>FAIL</b> Test Failed</li>=0A= # <li><b>XFAIL</b> Test Failure expected</li>=0A= # <li><b>XPASS</b> Test PASS unexpected</li>=0A= # <li><b>SKIP</b> Test not run</li>=0A= # <li><b>ERROR</b> Test not run because of an error</li>=0A= # </ul>=0A= # <p>The result is colorized as required.</p>=0A= #=0A= # @param[in] result test execution result=0A= # @param[in] comment test comment=0A= function write_result(result, comment) {=0A= if (DEBUG) print "write_result(" result ", " comment ")" > log_file=0A= print ":test-result: " result " " comment > trs_file=0A= print decorate_result(result) ":" comment =0A= if ($merge) print ":test-result: " result " " comment > log_file;=0A= }=0A= =0A= ## ----------- ##=0A= ## CONTROL ##=0A= ## ----------- ##=0A= =0A= #=0A= # Some prefatory comments.=0A= # This gawk script translates TAP formatted messages into the=0A= # Automake Test Results File (.trs) format. This format has=0A= # metadata tags which support reporting the global result of=0A= # executing all tests and local results of executing each=0A= # individual task. The TAP Diagnostics and YAML structured=0A= # comments are discarded, and the test line comments and=0A= # Directive comments are concatenated.=0A= # =0A= # Terminology=0A= # o Each Automake Test Case returns TAP Formatted data.=0A= # o A Test Case: A script or compiled program which executes =0A= # individual tests. There may be zero or more tests within =0A= # a Test Case.=0A= # o Test: A TAP test line. =0A= # o Test Result: The result contained in a TAP test line =0A= # is any one of PASS, FAIL, XPASS, XFAIL, or SKIP or ERROR.=0A= # o Test Suite Status: The cumulative result of executing =0A= # all tests within a Test Case. This status=0A= # is one of PASS, FAIL, SKIP, or ERROR.=0A= # o ERROR: syntax or semantic error. Automake treats it =0A= # as an external event causing a Test Case to fail or =0A= # to not be executed.=0A= # o Test Results File(.trs): Interface file to Automake =0A= # containing Test Results File metadata.=0A= # o .log file: Contains all TAP data from the Tests in a=0A= # Test Case plus diagnostic messages and optionally the=0A= # generated .trs data.=0A= # =0A= # GENERAL TAP SYNTAX=0A= # test plan 1..0 [# comment]=0A= # test plan 1..N [# comment]=0A= # test line ok [comment] [# SKIP [comment]]=0A= # test line ok [comment] [# TODO [comment]]=0A= # test line not ok [comment] [# TODO [comment]]=0A= # Bail Out! Bail Out! [# comment]=0A= # Diagnostic # [comment]=0A= # YAML comment --- =0A= # YAML comment o o o=0A= # YAML comment ...=0A= #=0A= # Automake Test Results File metadata tags=0A= # :copy-in-global-log: copy .log file to test_suite_log file=0A= # :recheck: execute Test Case on make check recheck=0A= # :test-global-result: Test Suite Status=0A= # :test-result: test line result=0A= =0A= BEGIN {=0A= =0A= ## ------- ##=0A= ## SETUP ##=0A= ## ------- ##=0A= =0A= DEBUG =3D 0 # DEBUG =3D 1 output to log_file=0A= =0A= #=0A= # This little bit of ugly code is a legacy item. It=0A= # terminates the gawk program (the firs apostrophe)=0A= # then expands the definition of init_colors in the=0A= # sorrounding shell script, then reenters the gawk=0A= # program (second apostrophe). The result is that the=0A= # init_colors definition is inserted in this place.=0A= #=0A= # The code is perverse!=0A= #=0A= '"$init_colors"'=0A= =0A= =0A= COOKED_PASS =3D expect_failure ? "XPASS": "PASS";=0A= COOKED_FAIL =3D expect_failure ? "XFAIL": "FAIL";=0A= =0A= # =0A= # test plan processing uses the test-plan variable to pass=0A= # information concerning test plan status. The value of =0A= # the variable is: test_plan =3D=0A= # 1: 0 no test plan found=0A= # 2: 1 test plan if first non-diagnostic line (EARLY_PLAN)=0A= # 3: > 1 test plan is last test line seen (LATE_PLAN)=0A= #=0A= # See handle_test_plan for a desciption of the algorithm=0A= #=0A= NO_PLAN =3D 0=0A= plan_seen =3D NO_PLAN=0A= =0A= #=0A= # The initial maximum test range is set to all test lines to=0A= # be processed without error, until a test plan is seen. At=0A= # the time a test plan is processed appropriate diagnostic=0A= # messages are output (if test lines have been seend) and=0A= # the planned_tests value is set to N in the 1..N test plan.=0A= #=0A= MAX_TESTS =3D 20000=0A= planned_tests =3D MAX_TESTS # Maximum number of test lines w/o a test = plan=0A= =0A= # Enumeration constants for test suite status.=0A= # Test suite status is calculated as:=0A= # test_suite_status =3D or(test_suite_status, status)=0A= #=0A= # With the proviso that:=0A= # test_suite_status =3D ERROR=0A= #=0A= # whenever an ERROR is seen=0A= #=0A= # For test_suite_status =3D=0A= # 0: EXIT_PASS=0A= # 1: EXIT_FAIL=0A= # 2: EXIT_HARD=0A= # 3: EXIT_HARD=0A= # =0A= #=0A= PASS =3D 0 # test line pass or XFAIL found=0A= FAIL =3D 1 # test line fail or XPASS found=0A= SKIP =3D 2 # test line is ok # SKIP=0A= ERROR =3D 4 # syntax or processing error=0A= test_suite_status =3D PASS=0A= =0A= # Exit enumerated constants=0A= # =0A= EXIT_PASS =3D 0 # no errors=0A= EXIT_FAIL =3D 1 # FAIL or XPASS found=0A= EXIT_SKIP =3D 77 # TODO or SKIP found=0A= EXIT_HARD =3D 99 # I/O error, input not TAP compliant, other=0A= exit_value=3D EXIT_PASS=0A= =0A= #=0A= # bailed_out is either 0 or 1 + the testno of the last =0A= # test line seen before the Bail Out! TAP statement. During=0A= # post-processing if the current testno is greater than=0A= # the testno when Bail Out was processed, then a diagnostic=0A= # is issued stating that there was a failure to communicate.=0A= #=0A= bailed_out =3D 0 # Whether a "Bail out!" directive has been seen.=0A= skip_no =3D 0 # Number of test lines that are skipped=0A= testno =3D 0 # Number of test lines seen so far.=0A= lineno =3D 0 # Number of input lines=0A= =0A= ## --------- ##=0A= ## PARSING ##=0A= ## --------- ##=0A= =0A= #=0A= # Process inital Diagnostics =0A= # Exit if there is an I/O error or the test=0A= # is not test.=0A= #=0A= if (preamble() <=3D 0) exit EXIT_HARD=0A= =0A= ## ----------------- ##=0A= ## MAIN PARSING LOOP ##=0A= ## ----------------- ##=0A= =0A= do =0A= {=0A= write_log($0) # copy input into log file=0A= =0A= # TAP test line not ok.=0A= if ($0 ~ /^not ok/) {=0A= testno +=3D 1=0A= handle_not_ok($0)=0A= } =0A= # TAP test line ok.=0A= else if ($0 ~ /^ok/) {=0A= testno +=3D 1=0A= handle_ok($0)=0A= } =0A= # TAP plan 1..N=0A= else if ($0 ~ /^1/)=0A= handle_test_plan($0)=0A= =0A= # "Bail out!" magic.=0A= # Older versions of prove and TAP::Harness (e.g., 3.17) did not=0A= # recognize a "Bail out!" directive when preceded by leading=0A= # whitespace, but more modern versions (e.g., 3.23) do. So we=0A= # emulate the latter, "more modern" behaviour.=0A= else if ($0 ~ /^[ \t]*Bail out!/)=0A= if (handle_bail_out($0) <=3D 0) break=0A= # Diagnostics.=0A= else if ($0 ~ /^#/) {=0A= if (handle_diagnostics() > 0) continue=0A= else break;=0A= }=0A= else if (!($0 ~ /^[ \t]*$/)) # not a blank line=0A= { # check for YAML & if not then ERROR=0A= if (DEBUG) print "check for YAML" > log_file=0A= if ($0 ~ /[ \t]+---[ \t]*$/) # YAML start --- line=0A= {=0A= if (handle_yaml() > 0) =0A= continue=0A= else =0A= {=0A= write_error("Missing YAML end")=0A= break=0A= }=0A= }=0A= else if ($0 ~ /^[ \t]+\.\.\.[ \t]*$/) # YAML stop ... line=0A= write_error("Missing YAML begin")=0A= =0A= else=0A= write_error("Undefined TAP statement")=0A= =0A= }=0A= st =3D getline=0A= if (DEBUG) print "test_suite_status " test_suite_status > log_file=0A= } while(st > 0)=0A= =0A= if (st < 0) # I/O error.=0A= fatal("I/O error while reading from input stream")=0A= =0A= if (DEBUG) print "exit input loop. lineno(" lineno ") testno(" testno = ")" > log_file=0A= =0A= ## -------- ##=0A= ## FINISH ##=0A= ## -------- ##=0A= =0A= post_processing()=0A= =0A= # switch(test_suite_status) {=0A= # case 0: # PASS=0A= # exit EXIT_PASS=0A= # case 1: # FAIL=0A= # exit EXIT_FAIL=0A= # case 2: # ERROR=0A= # case 3: # ERROR=0A= # exit EXIT_ERROR=0A= # }=0A= exit PASS=0A= } # End of "BEGIN" block.=0A= '=0A= =0A= # TODO: document that we consume the file descriptor 3 :-(=0A= } 3>"$log_file"=0A= =0A= # test $? -eq 0 || fatal "I/O or internal error"=0A= =0A= # Local Variables:=0A= # mode: shell-script=0A= # sh-indentation: 4=0A= # eval: (add-hook "write-file-hooks "time-stamp)=0A= # time-stamp-start: "scriptversion=3D"=0A= # time-stamp-format: "%:y-%02m-%02d.%02H"=0A= # time-stamp-time-zone: "UTC"=0A= # time-stamp-end: "; # UTC"=0A= # End:=0A= =0A= ------=_NextPart_000_0015_01D0B72C.26DD8480--
Content-Disposition: inline Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Mailer: MIME-tools 5.503 (Entity 5.503) Content-Type: text/plain; charset=utf-8 X-Loop: help-debbugs@HIDDEN From: help-debbugs@HIDDEN (GNU bug Tracking System) To: "Arthur Schwarz" <aschwarz1309@HIDDEN> Subject: bug#20986: Acknowledgement (tap-driver.sh replacement) Message-ID: <handler.20986.B.143613057215285.ack <at> debbugs.gnu.org> References: <51D3686C77104D96961C51250512DF6F@2600kPC> X-Gnu-PR-Message: ack 20986 X-Gnu-PR-Package: automake Reply-To: 20986 <at> debbugs.gnu.org Date: Sun, 05 Jul 2015 21:10:08 +0000 Thank you for filing a new bug report with debbugs.gnu.org. This is an automatically generated reply to let you know your message has been received. Your message is being forwarded to the package maintainers and other interested parties for their attention; they will reply in due course. Your message has been sent to the package maintainer(s): bug-automake@HIDDEN If you wish to submit further information on this problem, please send it to 20986 <at> debbugs.gnu.org. Please do not send mail to help-debbugs@HIDDEN unless you wish to report a problem with the Bug-tracking system. --=20 20986: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D20986 GNU Bug Tracking System Contact help-debbugs@HIDDEN with problems
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.