Index: .github/workflows/linux-build.yml ================================================================== --- .github/workflows/linux-build.yml +++ .github/workflows/linux-build.yml @@ -14,11 +14,10 @@ runs-on: ubuntu-22.04 strategy: matrix: cfgopt: - "" - - "CFLAGS=-DTCL_NO_DEPRECATED=1" - "--disable-shared" - "--disable-zipfs" - "--enable-symbols" - "--enable-symbols=mem" - "--enable-symbols=all" Index: .github/workflows/win-build.yml ================================================================== --- .github/workflows/win-build.yml +++ .github/workflows/win-build.yml @@ -64,11 +64,10 @@ working-directory: win strategy: matrix: cfgopt: - "" - - "CFLAGS=-DTCL_NO_DEPRECATED=1" - "--disable-shared" - "--disable-zipfs" - "--enable-symbols" - "--enable-symbols=mem" - "--enable-symbols=all" Index: .travis.yml ================================================================== --- .travis.yml +++ .travis.yml @@ -24,11 +24,10 @@ os: linux dist: focal compiler: gcc env: - BUILD_DIR=unix - - CFGOPT="CFLAGS=-DTCL_NO_DEPRECATED=1" - name: "Linux/GCC/Static" os: linux dist: focal compiler: gcc env: @@ -292,17 +291,10 @@ - CFGOPT="--enable-64bit" before_install: &makepreinst - touch generic/tclStubInit.c generic/tclOOStubInit.c generic/tclOOScript.h - choco install -y make zip - cd ${BUILD_DIR} - - name: "Windows/GCC/Shared: NO_DEPRECATED" - os: windows - compiler: gcc - env: - - BUILD_DIR=win - - CFGOPT="--enable-64bit CFLAGS=-DTCL_NO_DEPRECATED=1" - before_install: *makepreinst - name: "Windows/GCC/Static" os: windows compiler: gcc env: - BUILD_DIR=win @@ -327,17 +319,10 @@ os: windows compiler: gcc env: - BUILD_DIR=win before_install: *makepreinst - - name: "Windows/GCC-x86/Shared: NO_DEPRECATED" - os: windows - compiler: gcc - env: - - BUILD_DIR=win - - CFGOPT="CFLAGS=-DTCL_NO_DEPRECATED=1" - before_install: *makepreinst - name: "Windows/GCC-x86/Static" os: windows compiler: gcc env: - BUILD_DIR=win ADDED COPYING Index: COPYING ================================================================== --- /dev/null +++ COPYING @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 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 Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are 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. + + 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. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + 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 Affero 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. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + 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 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 work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero 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 Affero 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 Affero 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 Affero 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 Affero 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 Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + 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 AGPL, see +. Index: changes ================================================================== --- changes +++ changes @@ -8245,11 +8245,11 @@ 2013-06-03 Restored lost performance appending to long strings (elby,porter) 2013-06-05 (bug fix)[2835313] [while 1 {foo [continue]}] crash (fellows) -2013-06-17 (bug fix)[a876646] [:cntrl:] includes \x00 to \x1F (nijtmans) +2013-06-17 (bug fix)[a876646] [:cntrl:] includes \x00 to \x1f (nijtmans) 2013-06-27 (bug fix)[983509] missing encodings for config values (nijtmans) 2013-06-27 (bug fix)[34538b] apply DST in 2099 (lang) Index: compat/dlfcn.h ================================================================== --- compat/dlfcn.h +++ compat/dlfcn.h @@ -1,12 +1,6 @@ /* - * dlfcn.h -- - * - * This file provides a replacement for the header file "dlfcn.h" - * on systems where dlfcn.h is missing. It's primary use is for - * AIX, where Tcl emulates the dl library. - * * This file is subject to the following copyright notice, which is * different from the notice used elsewhere in Tcl but rougly * equivalent in meaning. * * Copyright (c) 1992,1993,1995,1996, Jens-Uwe Mager, Helios Software GmbH @@ -17,10 +11,25 @@ * for any results of using the software, alterations are clearly marked * as such, and this notice is not modified. */ /* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + * + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * dlfcn.h -- + * + * This file provides a replacement for the header file "dlfcn.h" + * on systems where dlfcn.h is missing. It's primary use is for + * AIX, where Tcl emulates the dl library. + * * This is an unpublished work copyright (c) 1992 HELIOS Software GmbH * 30159 Hannover, Germany */ #ifndef __dlfcn_h__ Index: compat/fake-rfc2553.c ================================================================== --- compat/fake-rfc2553.c +++ compat/fake-rfc2553.c @@ -24,10 +24,19 @@ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + * + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ /* * Pseudo-implementation of RFC2553 name / address resolution functions * * But these functions are not implemented correctly. The minimum subset Index: compat/fake-rfc2553.h ================================================================== --- compat/fake-rfc2553.h +++ compat/fake-rfc2553.h @@ -24,10 +24,19 @@ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ /* * Pseudo-implementation of RFC2553 name / address resolution functions * * But these functions are not implemented correctly. The minimum subset Index: compat/gettod.c ================================================================== --- compat/gettod.c +++ compat/gettod.c @@ -1,16 +1,28 @@ /* - * gettod.c -- - * - * This file provides the gettimeofday function on systems - * that only have the System V ftime function. - * * Copyright (c) 1995 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * gettod.c -- + * + * This file provides the gettimeofday function on systems + * that only have the System V ftime function. + * +*/ #include "tclPort.h" #include #undef timezone Index: compat/mkstemp.c ================================================================== --- compat/mkstemp.c +++ compat/mkstemp.c @@ -6,10 +6,19 @@ * Copyright (c) 2009 Donal K. Fellows * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ #include #include #include #include Index: compat/string.h ================================================================== --- compat/string.h +++ compat/string.h @@ -7,10 +7,19 @@ * Copyright (c) 1994-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ #ifndef _STRING #define _STRING /* Index: compat/strncasecmp.c ================================================================== --- compat/strncasecmp.c +++ compat/strncasecmp.c @@ -7,10 +7,19 @@ * Copyright (c) 1995-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ #include "tclPort.h" /* * This array is designed for mapping upper and lower case letter together for Index: compat/waitpid.c ================================================================== --- compat/waitpid.c +++ compat/waitpid.c @@ -9,10 +9,19 @@ * Copyright (c) 1994 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ #include "tclPort.h" #ifndef pid_t #define pid_t int DELETED compat/zlib/win32/zdll.lib Index: compat/zlib/win32/zdll.lib ================================================================== --- compat/zlib/win32/zdll.lib +++ /dev/null cannot compute difference between binary files DELETED compat/zlib/win32/zlib1.dll Index: compat/zlib/win32/zlib1.dll ================================================================== --- compat/zlib/win32/zlib1.dll +++ /dev/null cannot compute difference between binary files DELETED compat/zlib/win64-arm/libz.dll.a Index: compat/zlib/win64-arm/libz.dll.a ================================================================== --- compat/zlib/win64-arm/libz.dll.a +++ /dev/null cannot compute difference between binary files DELETED compat/zlib/win64-arm/zdll.lib Index: compat/zlib/win64-arm/zdll.lib ================================================================== --- compat/zlib/win64-arm/zdll.lib +++ /dev/null cannot compute difference between binary files DELETED compat/zlib/win64-arm/zlib1.dll Index: compat/zlib/win64-arm/zlib1.dll ================================================================== --- compat/zlib/win64-arm/zlib1.dll +++ /dev/null cannot compute difference between binary files DELETED compat/zlib/win64/libz.dll.a Index: compat/zlib/win64/libz.dll.a ================================================================== --- compat/zlib/win64/libz.dll.a +++ /dev/null cannot compute difference between binary files DELETED compat/zlib/win64/zdll.lib Index: compat/zlib/win64/zdll.lib ================================================================== --- compat/zlib/win64/zdll.lib +++ /dev/null cannot compute difference between binary files DELETED compat/zlib/win64/zlib1.dll Index: compat/zlib/win64/zlib1.dll ================================================================== --- compat/zlib/win64/zlib1.dll +++ /dev/null cannot compute difference between binary files Index: doc/Access.3 ================================================================== --- doc/Access.3 +++ doc/Access.3 @@ -1,10 +1,17 @@ '\" '\" Copyright (c) 1998-1999 Scriptics Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution +'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" .TH Tcl_Access 3 8.1 Tcl "Tcl Library Procedures" .so man.macros .BS .SH NAME Index: doc/AddErrInfo.3 ================================================================== --- doc/AddErrInfo.3 +++ doc/AddErrInfo.3 @@ -2,10 +2,17 @@ '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution +'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" .TH Tcl_AddErrorInfo 3 8.5 Tcl "Tcl Library Procedures" .so man.macros .BS .SH NAME Index: doc/Alloc.3 ================================================================== --- doc/Alloc.3 +++ doc/Alloc.3 @@ -1,10 +1,17 @@ '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution +'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" .TH Tcl_Alloc 3 9.0 Tcl "Tcl Library Procedures" .so man.macros .BS .SH NAME Index: doc/AllowExc.3 ================================================================== --- doc/AllowExc.3 +++ doc/AllowExc.3 @@ -2,10 +2,17 @@ '\" Copyright (c) 1989-1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution +'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" .TH Tcl_AllowExceptions 3 7.4 Tcl "Tcl Library Procedures" .so man.macros .BS .SH NAME Index: doc/AppInit.3 ================================================================== --- doc/AppInit.3 +++ doc/AppInit.3 @@ -2,10 +2,17 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution +'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" .TH Tcl_AppInit 3 7.0 Tcl "Tcl Library Procedures" .so man.macros .BS .SH NAME Index: doc/Encoding.3 ================================================================== --- doc/Encoding.3 +++ doc/Encoding.3 @@ -103,13 +103,10 @@ routine to perform any finalization that needs to occur after the last byte is converted and then to reset to an initial state. The \fBTCL_PROFILE_*\fR bits defined in the \fBPROFILES\fR section below control the encoding profile to be used for dealing with invalid data or other errors in the encoding transform. -The flag \fBTCL_ENCODING_STOPONERROR\fR has no effect, -it only has meaning in Tcl 8.x. -.PP Some flags bits may not be usable with some functions as noted in the function descriptions below. .AP Tcl_EncodingState *statePtr in/out Used when converting a (generally long or indefinite length) byte stream in a piece-by-piece fashion. The conversion routine stores its current @@ -544,17 +541,17 @@ .ta 1.5i # Encoding file: iso2022-jp, escape-driven E init {} final {} -iso8859-1 \ex1B(B -jis0201 \ex1B(J -jis0208 \ex1B$@ -jis0208 \ex1B$B -jis0212 \ex1B$(D -gb2312 \ex1B$A -ksc5601 \ex1B$(C +iso8859-1 \ex1b(B +jis0201 \ex1b(J +jis0208 \ex1b$@ +jis0208 \ex1b$B +jis0212 \ex1b$(D +gb2312 \ex1b$A +ksc5601 \ex1b$(C .CE .PP In the file, the first column represents an option and the second column is the associated value. \fBinit\fR is a string to emit or expect before the first character is converted, while \fBfinal\fR is a string to emit @@ -562,11 +559,11 @@ table-based encodings; the associated value is the escape-sequence that marks that encoding. Tcl syntax is used for the values; in the above example, for instance, .QW \fB{}\fR represents the empty string and -.QW \fB\ex1B\fR +.QW \fB\ex1b\fR represents character 27. .PP When \fBTcl_GetEncoding\fR encounters an encoding \fIname\fR that has not been loaded, it attempts to load an encoding file called \fIname\fB.enc\fR from the \fBencoding\fR subdirectory of each directory that Tcl searches @@ -587,13 +584,13 @@ to be used by OR-ing the \fBflags\fR parameter passed to the function with at most one of \fBTCL_ENCODING_PROFILE_TCL8\fR, \fBTCL_ENCODING_PROFILE_STRICT\fR or \fBTCL_ENCODING_PROFILE_REPLACE\fR. These correspond to the \fBtcl8\fR, \fBstrict\fR and \fBreplace\fR profiles respectively. If none are specified, a version-dependent default profile is used. -For Tcl 9.0, the default profile is \fBstrict\fR. +The default profile is \fBstrict\fR. .PP For details about profiles, see the \fBPROFILES\fR section in the documentation of the \fBencoding\fR command. .SH "SEE ALSO" encoding(n) .SH KEYWORDS utf, encoding, convert Index: doc/ObjectType.3 ================================================================== --- doc/ObjectType.3 +++ doc/ObjectType.3 @@ -266,29 +266,29 @@ immediately, in order to limit stack usage. However, the value will be freed before the outermost current \fBTcl_DecrRefCount\fR returns. .SS "THE VERSION FIELD" .PP The \fIversion\fR member provides for future extensibility of the -structure and should be set to \fBTCL_OBJTYPE_V0\fR for compatability +structure and should be set to 0 for compatability of ObjType definitions prior to version 9.0. Specifics about versions will be described further in the sections below. -.SH "ABSTRACT LIST TYPES" +.SH "INTERFACES" .PP -Additional fields in the Tcl_ObjType descriptor allow for control over -how custom data values can be manipulated using Tcl's List commands -without converting the value to a List type. This requires the custom -type to provide functions that will perform the given operation on the -custom data representation. Not all functions are required. In the -absence of a particular function (set to NULL), the fallback is to -allow the internal List operation to perform the operation, most -likely causing the value type to be converted to a traditional list. +Additional fields in Tcl_ObjType structure expose interfaces for data types +that a value may represent. For example, if the list interface functions are +implemented for a Tcl_ObjType, then Tcl's list procedures use that interface to +operate on the value as a list. It is not necessary to implement all functions +for an interface. When a needed function is NULL, a procedure using the +interface can attempt to convert the internal Tcl_ObjType to one that it can +work with. For example, a procedure like \fBlndex\fR might attempt to convert +the internal type of a Tcl_Obj to \fBtclListType\fR. .SS "SCALAR VALUE TYPES" .PP For a custom value type that is scalar or atomic in nature, i.e., not -a divisible collection, version \fBTCL_OBJTYPE_V1\fR is -recommended. In this case, List commands will treat the scalar value -as if it where a list of length 1, and not convert the value to a List +a divisible collection, version 0 is +recommended. In this case, List commands treat the scalar value +as if it where a list of length 1, and do not convert the value to a List type. .SS "VERSION 2: ABSTRACT LISTS" .PP Version 2, \fBTCL_OBJTYPE_V2\fR, allows full List support when the functions described below are provided. This allows for script level Index: doc/Tcl.n ================================================================== --- doc/Tcl.n +++ doc/Tcl.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2023 Nathan Coulter '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH Tcl n "8.6" Tcl "Tcl Built-In Commands" .so man.macros .BS .SH NAME Index: doc/abstract.n ================================================================== --- doc/abstract.n +++ doc/abstract.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2018 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH abstract n 0.3 TclOO "TclOO Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/after.n ================================================================== --- doc/after.n +++ doc/after.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1990-1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH after n 7.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/append.n ================================================================== --- doc/append.n +++ doc/append.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH append n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/array.n ================================================================== --- doc/array.n +++ doc/array.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993-1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH array n 8.7 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/bgerror.n ================================================================== --- doc/bgerror.n +++ doc/bgerror.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1990-1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH bgerror n 7.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/binary.n ================================================================== --- doc/binary.n +++ doc/binary.n @@ -3,10 +3,16 @@ '\" Copyright (c) 2008 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. +'\" .TH binary n 8.0 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME @@ -239,11 +245,11 @@ .PP .CS \fB\e254\fR .CE .PP -(i.e. \fB\exAC\fR) by +(i.e. \fB\exac\fR) by truncating the high-bits of the character, and which is probably not what is desired. .RE .IP \fBA\fR 5 This form is the same as \fBa\fR except that spaces are used for @@ -297,11 +303,11 @@ .CE .PP will return a binary string equivalent to: .PP .CS -\fB\exE0\exE1\exA0\fR +\fB\exe0\exe1\exa0\fR .CE .RE .IP \fBH\fR 5 Stores a string of \fIcount\fR hexadecimal digits in high-to-low within each byte in the output binary string. \fIArg\fR must contain a @@ -324,11 +330,11 @@ .CE .PP will return a binary string equivalent to: .PP .CS -\fB\exAB\ex00\exDE\exF0\ex98\fR +\fB\exab\ex00\exde\exf0\ex98\fR .CE .RE .IP \fBh\fR 5 This form is the same as \fBH\fR except that the digits are stored in low-to-high order within each byte. This is seldom required. For example, @@ -339,11 +345,11 @@ .CE .PP will return a binary string equivalent to: .PP .CS -\fB\exBA\ex00\exED\ex0F\ex89\fR +\fB\exba\ex00\exed\ex0f\ex89\fR .CE .RE .IP \fBc\fR 5 Stores one or more 8-bit integer values in the output string. If no \fIcount\fR is specified, then \fIarg\fR must consist of an integer @@ -361,11 +367,11 @@ .CE .PP will return a binary string equivalent to: .PP .CS -\fB\ex03\exFD\ex80\ex04\ex02\ex05\fR +\fB\ex03\exfd\ex80\ex04\ex02\ex05\fR .CE .PP whereas: .PP .CS @@ -387,11 +393,11 @@ .CE .PP will return a binary string equivalent to: .PP .CS -\fB\ex03\ex00\exFD\exFF\ex02\ex01\fR +\fB\ex03\ex00\exfd\exff\ex02\ex01\fR .CE .RE .IP \fBS\fR 5 This form is the same as \fBs\fR except that it stores one or more 16-bit integers in big-endian byte order in the output string. For @@ -403,11 +409,11 @@ .CE .PP will return a binary string equivalent to: .PP .CS -\fB\ex00\ex03\exFF\exFD\ex01\ex02\fR +\fB\ex00\ex03\exff\exfd\ex01\ex02\fR .CE .RE .IP \fBt\fR 5 This form (mnemonically \fItiny\fR) is the same as \fBs\fR and \fBS\fR except that it stores the 16-bit integers in the output string in the @@ -427,11 +433,11 @@ .CE .PP will return a binary string equivalent to: .PP .CS -\fB\ex03\ex00\ex00\ex00\exFD\exFF\exFF\exFF\ex00\ex00\ex01\ex00\fR +\fB\ex03\ex00\ex00\ex00\exfd\exff\exff\exff\ex00\ex00\ex01\ex00\fR .CE .RE .IP \fBI\fR 5 This form is the same as \fBi\fR except that it stores one or more one or more 32-bit integers in big-endian byte order in the output string. @@ -443,11 +449,11 @@ .CE .PP will return a binary string equivalent to: .PP .CS -\fB\ex00\ex00\ex00\ex03\exFF\exFF\exFF\exFD\ex00\ex01\ex00\ex00\fR +\fB\ex00\ex00\ex00\ex03\exff\exff\exff\exfd\ex00\ex01\ex00\ex00\fR .CE .RE .IP \fBn\fR 5 This form (mnemonically \fInumber\fR or \fInormal\fR) is the same as \fBi\fR and \fBI\fR except that it stores the 32-bit integers in the @@ -508,11 +514,11 @@ .CE .PP will return a binary string equivalent to: .PP .CS -\fB\exCD\exCC\exCC\ex3F\ex9A\ex99\ex59\ex40\fR +\fB\excd\excc\excc\ex3f\ex9a\ex99\ex59\ex40\fR .CE .RE .IP \fBr\fR 5 This form (mnemonically \fIreal\fR) is the same as \fBf\fR except that it stores the single-precision floating point numbers in little-endian @@ -534,11 +540,11 @@ .CE .PP will return a binary string equivalent to: .PP .CS -\fB\ex9A\ex99\ex99\ex99\ex99\ex99\exF9\ex3F\fR +\fB\ex9a\ex99\ex99\ex99\ex99\ex99\exf9\ex3f\fR .CE .RE .IP \fBq\fR 5 This form (mnemonically the mirror of \fBd\fR) is the same as \fBd\fR except that it stores the double-precision floating point numbers in @@ -786,11 +792,11 @@ scanned. If \fIcount\fR is omitted, then one hex digit will be scanned. For example, .RS .PP .CS -\fBbinary scan\fR \ex07\exC6\ex05\ex1F\ex34 H3H* var1 var2 +\fBbinary scan\fR \ex07\exC6\ex05\ex1f\ex34 H3H* var1 var2 .CE .PP will return \fB2\fR with \fB07c\fR stored in \fIvar1\fR and \fB051f34\fR stored in \fIvar2\fR. .RE @@ -837,11 +843,11 @@ \fIcount\fR is omitted, then one 16-bit integer will be scanned. For example, .RS .PP .CS -\fBbinary scan\fR \ex05\ex00\ex07\ex00\exF0\exFF s2s* var1 var2 +\fBbinary scan\fR \ex05\ex00\ex07\ex00\exf0\exff s2s* var1 var2 .CE .PP will return \fB2\fR with \fB5 7\fR stored in \fIvar1\fR and \fB\-16\fR stored in \fIvar2\fR. Note that the integers returned are signed unless \fBsu\fR is used in place of \fBs\fR. @@ -851,11 +857,11 @@ as \fIcount\fR 16-bit integers represented in big-endian byte order. For example, .RS .PP .CS -\fBbinary scan\fR \ex00\ex05\ex00\ex07\exFF\exF0 S2S* var1 var2 +\fBbinary scan\fR \ex00\ex05\ex00\ex07\exff\exf0 S2S* var1 var2 .CE .PP will return \fB2\fR with \fB5 7\fR stored in \fIvar1\fR and \fB\-16\fR stored in \fIvar2\fR. .RE @@ -876,11 +882,11 @@ \fIcount\fR is omitted, then one 32-bit integer will be scanned. For example, .RS .PP .CS -set str \ex05\ex00\ex00\ex00\ex07\ex00\ex00\ex00\exF0\exFF\exFF\exFF +set str \ex05\ex00\ex00\ex00\ex07\ex00\ex00\ex00\exf0\exff\exff\exff \fBbinary scan\fR $str i2i* var1 var2 .CE .PP will return \fB2\fR with \fB5 7\fR stored in \fIvar1\fR and \fB\-16\fR stored in \fIvar2\fR. Note that the integers returned are signed unless @@ -892,11 +898,11 @@ order, or as unsigned if \fBu\fR is placed immediately after the \fBI\fR. For example, .RS .PP .CS -set str \ex00\ex00\ex00\ex05\ex00\ex00\ex00\ex07\exFF\exFF\exFF\exF0 +set str \ex00\ex00\ex00\ex05\ex00\ex00\ex00\ex07\exff\exff\exff\exf0 \fBbinary scan\fR $str I2I* var1 var2 .CE .PP will return \fB2\fR with \fB5 7\fR stored in \fIvar1\fR and \fB\-16\fR stored in \fIvar2\fR. @@ -918,11 +924,11 @@ \fIcount\fR is omitted, then one 64-bit integer will be scanned. For example, .RS .PP .CS -set str \ex05\ex00\ex00\ex00\ex07\ex00\ex00\ex00\exF0\exFF\exFF\exFF +set str \ex05\ex00\ex00\ex00\ex07\ex00\ex00\ex00\exf0\exff\exff\exff \fBbinary scan\fR $str wi* var1 var2 .CE .PP will return \fB2\fR with \fB30064771077\fR stored in \fIvar1\fR and \fB\-16\fR stored in \fIvar2\fR. @@ -933,11 +939,11 @@ order, or as unsigned if \fBu\fR is placed immediately after the \fBW\fR. For example, .RS .PP .CS -set str \ex00\ex00\ex00\ex05\ex00\ex00\ex00\ex07\exFF\exFF\exFF\exF0 +set str \ex00\ex00\ex00\ex05\ex00\ex00\ex00\ex07\exff\exff\exff\exf0 \fBbinary scan\fR $str WI* var1 var2 .CE .PP will return \fB2\fR with \fB21474836487\fR stored in \fIvar1\fR and \fB\-16\fR stored in \fIvar2\fR. @@ -964,11 +970,11 @@ compiler dependent. For example, on a Windows system running on an Intel Pentium processor, .RS .PP .CS -\fBbinary scan\fR \ex3F\exCC\exCC\exCD f var1 +\fBbinary scan\fR \ex3f\excc\excc\excd f var1 .CE .PP will return \fB1\fR with \fB1.6000000238418579\fR stored in \fIvar1\fR. .RE @@ -988,11 +994,11 @@ machine's native representation. For example, on a Windows system running on an Intel Pentium processor, .RS .PP .CS -\fBbinary scan\fR \ex9A\ex99\ex99\ex99\ex99\ex99\exF9\ex3F d var1 +\fBbinary scan\fR \ex9a\ex99\ex99\ex99\ex99\ex99\exf9\ex3f d var1 .CE .PP will return \fB1\fR with \fB1.6000000000000001\fR stored in \fIvar1\fR. .RE Index: doc/break.n ================================================================== --- doc/break.n +++ doc/break.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993-1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH break n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/callback.n ================================================================== --- doc/callback.n +++ doc/callback.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2018 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH callback n 0.3 TclOO "TclOO Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/catch.n ================================================================== --- doc/catch.n +++ doc/catch.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Contributions from Don Porter, NIST, 2003. (not subject to US copyright) '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH catch n "8.5" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/cd.n ================================================================== --- doc/cd.n +++ doc/cd.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH cd n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/chan.n ================================================================== --- doc/chan.n +++ doc/chan.n @@ -2,10 +2,16 @@ '\" Copyright (c) 2005-2006 Donal K. Fellows '\" Copyright (c) 2021 Nathan Coulter '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. .TH chan n 8.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME @@ -150,11 +156,11 @@ \fIchar\fR signals the end of the data when it is encountered in the input. If \fIchar\fR is the empty string, there is no special character that marks the end of the data. The default value is the empty string. The acceptable range is \ex01 - -\ex7F. A value outside this range results in an error. +\ex7f. A value outside this range results in an error. .VS "TCL8.7 TIP656" .TP \fB\-profile\fR \fIprofile\fR . Specifies the encoding profile to be used on the channel. The encoding Index: doc/class.n ================================================================== --- doc/class.n +++ doc/class.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2007 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH class n 0.1 TclOO "TclOO Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/classvariable.n ================================================================== --- doc/classvariable.n +++ doc/classvariable.n @@ -2,10 +2,16 @@ '\" Copyright (c) 2011-2015 Andreas Kupries '\" Copyright (c) 2018 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH classvariable n 0.3 TclOO "TclOO Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/close.n ================================================================== --- doc/close.n +++ doc/close.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH close n 7.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/concat.n ================================================================== --- doc/concat.n +++ doc/concat.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH concat n 8.3 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/configurable.n ================================================================== --- doc/configurable.n +++ doc/configurable.n @@ -1,10 +1,16 @@ '\" '\" Copyright © 2019 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH configurable n 0.4 TclOO "TclOO Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/continue.n ================================================================== --- doc/continue.n +++ doc/continue.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993-1994 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH continue n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/cookiejar.n ================================================================== --- doc/cookiejar.n +++ doc/cookiejar.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2014-2018 Donal K. Fellows. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH "cookiejar" n 0.1 http "Tcl Bundled Packages" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/copy.n ================================================================== --- doc/copy.n +++ doc/copy.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2007 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH copy n 0.1 TclOO "TclOO Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/coroutine.n ================================================================== --- doc/coroutine.n +++ doc/coroutine.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2009 Donal K. Fellows. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH coroutine n 8.6 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/dde.n ================================================================== --- doc/dde.n +++ doc/dde.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" Copyright (c) 2001 ActiveState Corporation. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH dde n 1.4 dde "Tcl Bundled Packages" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/define.n ================================================================== --- doc/define.n +++ doc/define.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2007-2018 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH define n 0.3 TclOO "TclOO Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/dict.n ================================================================== --- doc/dict.n +++ doc/dict.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2003 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH dict n 8.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/encoding.n ================================================================== --- doc/encoding.n +++ doc/encoding.n @@ -3,10 +3,16 @@ '\" Copyright (c) 2023 Nathan Coulter '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. +'\" .TH encoding n "8.1" Tcl "Tcl Built-In Commands" .so man.macros .BS .SH NAME encoding \- Work with encodings @@ -15,11 +21,11 @@ .BE .SH INTRODUCTION .PP In Tcl every string is composed of Unicode values. Text may be encoded into an encoding such as cp1252, iso8859-1, Shitf\-JIS, utf-8, utf-16, etc. Not every -Unicode vealue is encodable in every encoding, and some encodings can encode +Unicode value is encodable in every encoding, and some encodings can encode values that are not available in Unicode. .PP Even though Unicode is for encoding the written texts of human languages, any sequence of bytes can be encoded as the first 255 Unicode values. iso8859-1 an encoding for a subset of Unicode in which each byte is a Unicode value of 255 Index: doc/eof.n ================================================================== --- doc/eof.n +++ doc/eof.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH eof n 7.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/error.n ================================================================== --- doc/error.n +++ doc/error.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH error n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/eval.n ================================================================== --- doc/eval.n +++ doc/eval.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH eval n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/exec.n ================================================================== --- doc/exec.n +++ doc/exec.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2006 Donal K. Fellows. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH exec n 8.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/exit.n ================================================================== --- doc/exit.n +++ doc/exit.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH exit n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/expr.n ================================================================== --- doc/expr.n +++ doc/expr.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-2000 Sun Microsystems, Inc. '\" Copyright (c) 2005 Kevin B. Kenny . All rights reserved '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH expr n 8.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/fblocked.n ================================================================== --- doc/fblocked.n +++ doc/fblocked.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH fblocked n 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Index: doc/fconfigure.n ================================================================== --- doc/fconfigure.n +++ doc/fconfigure.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH fconfigure n 8.3 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/fcopy.n ================================================================== --- doc/fcopy.n +++ doc/fcopy.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH fcopy n 8.0 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/file.n ================================================================== --- doc/file.n +++ doc/file.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH file n 8.3 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/fileevent.n ================================================================== --- doc/fileevent.n +++ doc/fileevent.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2008 Pat Thoyts '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH fileevent n 7.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/filename.n ================================================================== --- doc/filename.n +++ doc/filename.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH filename n 7.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/flush.n ================================================================== --- doc/flush.n +++ doc/flush.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH flush n 7.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/for.n ================================================================== --- doc/for.n +++ doc/for.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH for n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/foreach.n ================================================================== --- doc/foreach.n +++ doc/foreach.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH foreach n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/format.n ================================================================== --- doc/format.n +++ doc/format.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH format n 8.1 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/fpclassify.n ================================================================== --- doc/fpclassify.n +++ doc/fpclassify.n @@ -2,10 +2,16 @@ '\" Copyright (c) 2018 Kevin B. Kenny . All rights reserved '\" Copyright (c) 2019 Donal Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH fpclassify n 8.7 Tcl "Tcl Float Classifier" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/gets.n ================================================================== --- doc/gets.n +++ doc/gets.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH gets n 7.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/glob.n ================================================================== --- doc/glob.n +++ doc/glob.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. .TH glob n 8.3 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME Index: doc/global.n ================================================================== --- doc/global.n +++ doc/global.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH global n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/history.n ================================================================== --- doc/history.n +++ doc/history.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH history n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/http.n ================================================================== --- doc/http.n +++ doc/http.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1998-2000 Ajuba Solutions. '\" Copyright (c) 2004 ActiveState Corporation. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH "http" n 2.10 http "Tcl Bundled Packages" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/idna.n ================================================================== --- doc/idna.n +++ doc/idna.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2014-2018 Donal K. Fellows. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH "idna" n 0.1 http "Tcl Bundled Packages" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/if.n ================================================================== --- doc/if.n +++ doc/if.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH if n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/incr.n ================================================================== --- doc/incr.n +++ doc/incr.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH incr n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/info.n ================================================================== --- doc/info.n +++ doc/info.n @@ -5,10 +5,16 @@ '\" Copyright (c) 1998-2000 Ajuba Solutions '\" Copyright (c) 2007-2012 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH info n 8.4 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/interp.n ================================================================== --- doc/interp.n +++ doc/interp.n @@ -3,10 +3,16 @@ '\" Copyright (c) 2004 Donal K. Fellows '\" Copyright (c) 2006-2008 Joe Mistachkin. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH interp n 8.6 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/join.n ================================================================== --- doc/join.n +++ doc/join.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH join n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/lappend.n ================================================================== --- doc/lappend.n +++ doc/lappend.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2001 Kevin B. Kenny . All rights reserved. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH lappend n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/lassign.n ================================================================== --- doc/lassign.n +++ doc/lassign.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1992-1999 Karl Lehenbauer & Mark Diekhans '\" Copyright (c) 2004 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH lassign n 8.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/ledit.n ================================================================== --- doc/ledit.n +++ doc/ledit.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2022 Ashok P. Nadkarni . All rights reserved. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH ledit n 8.7 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/library.n ================================================================== --- doc/library.n +++ doc/library.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1991-1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH library n "8.0" Tcl "Tcl Built-In Commands" .so man.macros .BS .SH NAME Index: doc/lindex.n ================================================================== --- doc/lindex.n +++ doc/lindex.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2001 Kevin B. Kenny . All rights reserved. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH lindex n 8.4 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/link.n ================================================================== --- doc/link.n +++ doc/link.n @@ -2,10 +2,16 @@ '\" Copyright (c) 2011-2015 Andreas Kupries '\" Copyright (c) 2018 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH link n 0.3 TclOO "TclOO Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/linsert.n ================================================================== --- doc/linsert.n +++ doc/linsert.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2001 Kevin B. Kenny . All rights reserved. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH linsert n 8.2 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/list.n ================================================================== --- doc/list.n +++ doc/list.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2001 Kevin B. Kenny . All rights reserved. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH list n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/llength.n ================================================================== --- doc/llength.n +++ doc/llength.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2001 Kevin B. Kenny . All rights reserved. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH llength n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/lmap.n ================================================================== --- doc/lmap.n +++ doc/lmap.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2012 Trevor Davel '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH lmap n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/load.n ================================================================== --- doc/load.n +++ doc/load.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH load n 7.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/lpop.n ================================================================== --- doc/lpop.n +++ doc/lpop.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2018 Peter Spjuth. All rights reserved. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH lpop n 8.7 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/lrange.n ================================================================== --- doc/lrange.n +++ doc/lrange.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2001 Kevin B. Kenny . All rights reserved. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH lrange n 7.4 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/lremove.n ================================================================== --- doc/lremove.n +++ doc/lremove.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2019 Donal K. Fellows. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH lremove n 8.7 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/lrepeat.n ================================================================== --- doc/lrepeat.n +++ doc/lrepeat.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2003 Simon Geard. All rights reserved. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH lrepeat n 8.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/lreplace.n ================================================================== --- doc/lreplace.n +++ doc/lreplace.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2001 Kevin B. Kenny . All rights reserved. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH lreplace n 7.4 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/lreverse.n ================================================================== --- doc/lreverse.n +++ doc/lreverse.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2006 Donal K. Fellows. All rights reserved. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH lreverse n 8.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/lsearch.n ================================================================== --- doc/lsearch.n +++ doc/lsearch.n @@ -4,10 +4,16 @@ '\" Copyright (c) 2001 Kevin B. Kenny . All rights reserved. '\" Copyright (c) 2003-2004 Donal K. Fellows. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH lsearch n 8.6 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/lseq.n ================================================================== --- doc/lseq.n +++ doc/lseq.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2022 Eric Taylor. All rights reserved. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH lseq n 8.7 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/lset.n ================================================================== --- doc/lset.n +++ doc/lset.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2001 Kevin B. Kenny . All rights reserved. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH lset n 8.4 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/lsort.n ================================================================== --- doc/lsort.n +++ doc/lsort.n @@ -4,10 +4,16 @@ '\" Copyright (c) 1999 Scriptics Corporation '\" Copyright (c) 2001 Kevin B. Kenny . All rights reserved. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH lsort n 8.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/mathfunc.n ================================================================== --- doc/mathfunc.n +++ doc/mathfunc.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-2000 Sun Microsystems, Inc. '\" Copyright (c) 2005 Kevin B. Kenny . All rights reserved '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH mathfunc n 8.5 Tcl "Tcl Mathematical Functions" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/msgcat.n ================================================================== --- doc/msgcat.n +++ doc/msgcat.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 1998 Mark Harrison. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH "msgcat" n 1.5 msgcat "Tcl Bundled Packages" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/my.n ================================================================== --- doc/my.n +++ doc/my.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2007 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH my n 0.1 TclOO "TclOO Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/namespace.n ================================================================== --- doc/namespace.n +++ doc/namespace.n @@ -4,10 +4,16 @@ '\" Copyright (c) 2000 Scriptics Corporation. '\" Copyright (c) 2004-2005 Donal K. Fellows. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH namespace n 8.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/next.n ================================================================== --- doc/next.n +++ doc/next.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2007 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH next n 0.1 TclOO "TclOO Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/object.n ================================================================== --- doc/object.n +++ doc/object.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2007-2008 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH object n 0.1 TclOO "TclOO Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/open.n ================================================================== --- doc/open.n +++ doc/open.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH open n 8.3 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/package.n ================================================================== --- doc/package.n +++ doc/package.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH package n 7.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/pid.n ================================================================== --- doc/pid.n +++ doc/pid.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH pid n 7.0 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/pkgMkIndex.n ================================================================== --- doc/pkgMkIndex.n +++ doc/pkgMkIndex.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH pkg_mkIndex n 8.3 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/platform.n ================================================================== --- doc/platform.n +++ doc/platform.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2006 ActiveState Software Inc '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH "platform" n 1.0.4 platform "Tcl Bundled Packages" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/platform_shell.n ================================================================== --- doc/platform_shell.n +++ doc/platform_shell.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2006-2008 ActiveState Software Inc '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH "platform::shell" n 1.1.4 platform::shell "Tcl Bundled Packages" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/prefix.n ================================================================== --- doc/prefix.n +++ doc/prefix.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2008 Peter Spjuth '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH prefix n 8.6 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/proc.n ================================================================== --- doc/proc.n +++ doc/proc.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH proc n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/process.n ================================================================== --- doc/process.n +++ doc/process.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2017 Frederic Bonnet. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH process n 8.7 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/puts.n ================================================================== --- doc/puts.n +++ doc/puts.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH puts n 7.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/pwd.n ================================================================== --- doc/pwd.n +++ doc/pwd.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH pwd n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/re_syntax.n ================================================================== --- doc/re_syntax.n +++ doc/re_syntax.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1998 Sun Microsystems, Inc. '\" Copyright (c) 1999 Scriptics Corporation '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .so man.macros .ie '\w'o''\w'\C'^o''' .ds qo \C'^o' .el .ds qo u .TH re_syntax n "8.1" Tcl "Tcl Built-In Commands" Index: doc/read.n ================================================================== --- doc/read.n +++ doc/read.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. +'\" .TH read n 8.1 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME @@ -60,18 +66,18 @@ .PP In blocking mode, the error is directly thrown, even, if there is a leading decodable data portion. The file pointer is advanced just before the encoding error. An eventual well decoded data chunk before the encoding error is returned -in the error option dictionary key \fB-data\fR. +in the error option dictionary key \fB-result read\fR. The value of the key contains the empty string, if the error arises at the first data position. .PP In non blocking mode, first, any data without encoding error is returned (without error state). In the next call, no data is returned and the \fBEILSEQ\fR error state is set. -The key \fB-data\fR is not present. +The key \fB-result read\fR is not present. .PP Here is an example with an encoding error in UTF-8 encoding, which is then introspected by a switch to the binary encoding. The test file contains a not continued multi-byte sequence at position 1 (\fBA \\xC3 B\fR): .PP @@ -87,11 +93,11 @@ file35a65a0 % fconfigure $f -encoding utf-8 -profile strict -blocking 1 % catch {read $f} e d 1 % set d --data A -code 1 -level 0 +-result {read A} -code 1 -level 0 -errorstack {INNER {invokeStk1 read file35a65a0}} -errorcode {POSIX EILSEQ {invalid or incomplete multibyte or wide character}} -errorinfo {...} -errorline 1 % tell $f 1 @@ -99,11 +105,11 @@ % read $f ÃB % close $f .CE The already decoded data "A" is returned in the error options dictionary key -\fB-data\fR. +\fB-result read\fR. The file position is advanced on the encoding error position 1. The data at the error position is thus recovered by the next \fBread\fR command. .PP Non blocking example . Index: doc/refchan.n ================================================================== --- doc/refchan.n +++ doc/refchan.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2006 Andreas Kupries '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH refchan n 8.5 Tcl "Tcl Built-In Commands" .so man.macros .BS .\" Note: do not modify the .SH NAME line immediately below! Index: doc/regexp.n ================================================================== --- doc/regexp.n +++ doc/regexp.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 1998 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH regexp n 8.3 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/registry.n ================================================================== --- doc/registry.n +++ doc/registry.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" Copyright (c) 2002 ActiveState Corporation. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH registry n 1.1 registry "Tcl Bundled Packages" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/regsub.n ================================================================== --- doc/regsub.n +++ doc/regsub.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2000 Scriptics Corporation. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH regsub n 8.3 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/rename.n ================================================================== --- doc/rename.n +++ doc/rename.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH rename n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/return.n ================================================================== --- doc/return.n +++ doc/return.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Contributions from Don Porter, NIST, 2003. (not subject to US copyright) '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH return n 8.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/safe.n ================================================================== --- doc/safe.n +++ doc/safe.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH "Safe Tcl" n 8.0 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/scan.n ================================================================== --- doc/scan.n +++ doc/scan.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2000 Scriptics Corporation. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH scan n 8.4 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/seek.n ================================================================== --- doc/seek.n +++ doc/seek.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH seek n 8.1 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/self.n ================================================================== --- doc/self.n +++ doc/self.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2007 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH self n 0.1 TclOO "TclOO Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/set.n ================================================================== --- doc/set.n +++ doc/set.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH set n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/singleton.n ================================================================== --- doc/singleton.n +++ doc/singleton.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2018 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH singleton n 0.3 TclOO "TclOO Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/socket.n ================================================================== --- doc/socket.n +++ doc/socket.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1996 Sun Microsystems, Inc. '\" Copyright (c) 1998-1999 Scriptics Corporation. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH socket n 8.6 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/source.n ================================================================== --- doc/source.n +++ doc/source.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2000 Scriptics Corporation. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH source n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/split.n ================================================================== --- doc/split.n +++ doc/split.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH split n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/subst.n ================================================================== --- doc/subst.n +++ doc/subst.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2001 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH subst n 7.4 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/switch.n ================================================================== --- doc/switch.n +++ doc/switch.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH switch n 8.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/tailcall.n ================================================================== --- doc/tailcall.n +++ doc/tailcall.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH tailcall n 8.6 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/tcltest.n ================================================================== --- doc/tcltest.n +++ doc/tcltest.n @@ -5,10 +5,16 @@ '\" Copyright (c) 2000 Ajuba Solutions '\" Contributions from Don Porter, NIST, 2002. (not subject to US copyright) '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH "tcltest" n 2.5 tcltest "Tcl Bundled Packages" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/tclvars.n ================================================================== --- doc/tclvars.n +++ doc/tclvars.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH tclvars n 8.0 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/tell.n ================================================================== --- doc/tell.n +++ doc/tell.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH tell n 8.1 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/throw.n ================================================================== --- doc/throw.n +++ doc/throw.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2008 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH throw n 8.6 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/time.n ================================================================== --- doc/time.n +++ doc/time.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH time n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/timerate.n ================================================================== --- doc/timerate.n +++ doc/timerate.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2005 Sergey Brester aka sebres. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH timerate n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/tm.n ================================================================== --- doc/tm.n +++ doc/tm.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2004-2010 Andreas Kupries '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH tm n 8.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/trace.n ================================================================== --- doc/trace.n +++ doc/trace.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2000 Ajuba Solutions. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH trace n "8.4" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/transchan.n ================================================================== --- doc/transchan.n +++ doc/transchan.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2008 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH transchan n 8.6 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/try.n ================================================================== --- doc/try.n +++ doc/try.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2008 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH try n 8.6 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/unknown.n ================================================================== --- doc/unknown.n +++ doc/unknown.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH unknown n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/unload.n ================================================================== --- doc/unload.n +++ doc/unload.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2003 George Petasis . '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH unload n 8.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/unset.n ================================================================== --- doc/unset.n +++ doc/unset.n @@ -3,10 +3,16 @@ '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" Copyright (c) 2000 Ajuba Solutions. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH unset n 8.4 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/update.n ================================================================== --- doc/update.n +++ doc/update.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1990-1992 The Regents of the University of California. '\" Copyright (c) 1994-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH update n 7.5 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/uplevel.n ================================================================== --- doc/uplevel.n +++ doc/uplevel.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH uplevel n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/upvar.n ================================================================== --- doc/upvar.n +++ doc/upvar.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH upvar n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/variable.n ================================================================== --- doc/variable.n +++ doc/variable.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993-1997 Bell Labs Innovations for Lucent Technologies '\" Copyright (c) 1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH variable n 8.0 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/vwait.n ================================================================== --- doc/vwait.n +++ doc/vwait.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 1995-1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH vwait n 8.0 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/while.n ================================================================== --- doc/while.n +++ doc/while.n @@ -2,10 +2,16 @@ '\" Copyright (c) 1993 The Regents of the University of California. '\" Copyright (c) 1994-1997 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH while n "" Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/zipfs.n ================================================================== --- doc/zipfs.n +++ doc/zipfs.n @@ -3,10 +3,16 @@ '\" Copyright (c) 2015 Christian Werner '\" Copyright (c) 2015 Sean Woods '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH zipfs n 1.0 Zipfs "zipfs Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: doc/zlib.n ================================================================== --- doc/zlib.n +++ doc/zlib.n @@ -1,10 +1,16 @@ '\" '\" Copyright (c) 2008-2012 Donal K. Fellows '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +'\" You may distribute and/or modify this program under the terms of the GNU +'\" Affero General Public License as published by the Free Software Foundation, +'\" either version 3 of the License, or (at your option) any later version. +'\" +'\" See the file "COPYING" for information on usage and redistribution. '\" .TH zlib n 8.6 Tcl "Tcl Built-In Commands" .so man.macros .BS '\" Note: do not modify the .SH NAME line immediately below! Index: generic/regc_color.c ================================================================== --- generic/regc_color.c +++ generic/regc_color.c @@ -1,9 +1,6 @@ /* - * colorings of characters - * This file is #included by regcomp.c. - * * Copyright © 1998, 1999 Henry Spencer. All rights reserved. * * Development of this software was funded, in part, by Cray Research Inc., * UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics * Corporation, none of whom are responsible for the results. The author @@ -30,10 +27,25 @@ * * Note that there are some incestuous relationships between this code and NFA * arc maintenance, which perhaps ought to be cleaned up sometime. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * colorings of characters + * This file is #included by regcomp.c. + * + */ + #define CISERR() VISERR(cm->v) #define CERR(e) VERR(cm->v, (e)) /* - initcm - set up new colormap Index: generic/regc_cvec.c ================================================================== --- generic/regc_cvec.c +++ generic/regc_cvec.c @@ -1,9 +1,6 @@ /* - * Utility functions for handling cvecs - * This file is #included by regcomp.c. - * * Copyright © 1998, 1999 Henry Spencer. All rights reserved. * * Development of this software was funded, in part, by Cray Research Inc., * UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics * Corporation, none of whom are responsible for the results. The author @@ -26,10 +23,25 @@ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * Utility functions for handling cvecs + * This file is #included by regcomp.c. + * +*/ /* * Notes: * Only (selected) functions in _this_ file should treat chr* as non-constant. */ Index: generic/regc_lex.c ================================================================== --- generic/regc_lex.c +++ generic/regc_lex.c @@ -1,9 +1,6 @@ /* - * lexical analyzer - * This file is #included by regcomp.c. - * * Copyright © 1998, 1999 Henry Spencer. All rights reserved. * * Development of this software was funded, in part, by Cray Research Inc., * UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics * Corporation, none of whom are responsible for the results. The author @@ -26,10 +23,25 @@ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * lexical analyzer + * This file is #included by regcomp.c. + * +*/ /* scanning macros (know about v) */ #define ATEOS() (v->now >= v->stop) #define HAVE(n) (v->stop - v->now >= (n)) #define NEXT1(c) (!ATEOS() && *v->now == CHR(c)) Index: generic/regc_locale.c ================================================================== --- generic/regc_locale.c +++ generic/regc_locale.c @@ -7,10 +7,19 @@ * Copyright © 1998 Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ /* ASCII character-name table */ static const struct cname { const char *name; Index: generic/regc_nfa.c ================================================================== --- generic/regc_nfa.c +++ generic/regc_nfa.c @@ -29,10 +29,19 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * One or two things that technically ought to be in here are actually in * color.c, thanks to some incestuous relationships in the color chains. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ #define NISERR() VISERR(nfa->v) #define NERR(e) VERR(nfa->v, (e)) #define STACK_TOO_DEEP(x) (0) #define CANCEL_REQUESTED(x) (0) Index: generic/regcomp.c ================================================================== --- generic/regcomp.c +++ generic/regcomp.c @@ -27,10 +27,19 @@ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ #include "regguts.h" /* * forward declarations, up here so forward datatypes etc. are defined early Index: generic/regcustom.h ================================================================== --- generic/regcustom.h +++ generic/regcustom.h @@ -23,10 +23,19 @@ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ /* * Headers if any. */ Index: generic/rege_dfa.c ================================================================== --- generic/rege_dfa.c +++ generic/rege_dfa.c @@ -27,10 +27,19 @@ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ /* - longest - longest-preferred matching engine ^ static chr *longest(struct vars *, struct dfa *, chr *, chr *, int *); */ Index: generic/regerror.c ================================================================== --- generic/regerror.c +++ generic/regerror.c @@ -26,10 +26,19 @@ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ #include "regguts.h" /* * Unknown-error explanation. Index: generic/regex.h ================================================================== --- generic/regex.h +++ generic/regex.h @@ -2,12 +2,10 @@ #define _REGEX_H_ /* never again */ #include "tclInt.h" /* - * regular expressions - * * Copyright (c) 1998, 1999 Henry Spencer. All rights reserved. * * Development of this software was funded, in part, by Cray Research Inc., * UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics * Corporation, none of whom are responsible for the results. The author @@ -29,10 +27,22 @@ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * + * regular expressions * * * Prototypes etc. marked with "^" within comments get gathered up (and * possibly edited) by the regfwd program and inserted near the bottom of this * file. Index: generic/regexec.c ================================================================== --- generic/regexec.c +++ generic/regexec.c @@ -25,10 +25,19 @@ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ #include "regguts.h" /* * Lazy-DFA representation. Index: generic/regfree.c ================================================================== --- generic/regfree.c +++ generic/regfree.c @@ -1,8 +1,6 @@ /* - * regfree - free an RE - * * Copyright © 1998, 1999 Henry Spencer. All rights reserved. * * Development of this software was funded, in part, by Cray Research Inc., * UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics * Corporation, none of whom are responsible for the results. The author @@ -31,10 +29,24 @@ * would be a reasonable idea... except that this is a generic function (with * a generic name), applicable to all compiled REs regardless of the size of * their characters, whereas the stuff in regcomp.c gets compiled once per * character size. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * regfree - free an RE + * +*/ #include "regguts.h" /* - regfree - free an RE (generic function, punts to RE-specific function) Index: generic/regfronts.c ================================================================== --- generic/regfronts.c +++ generic/regfronts.c @@ -1,11 +1,6 @@ /* - * regcomp and regexec - front ends to re_ routines - * - * Mostly for implementation of backward-compatibility kludges. Note that - * these routines exist ONLY in char versions. - * * Copyright © 1998, 1999 Henry Spencer. All rights reserved. * * Development of this software was funded, in part, by Cray Research Inc., * UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics * Corporation, none of whom are responsible for the results. The author @@ -28,10 +23,27 @@ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * regcomp and regexec - front ends to re_ routines + * + * Mostly for implementation of backward-compatibility kludges. Note that + * these routines exist ONLY in char versions. + * +*/ #include "regguts.h" /* - regcomp - compile regular expression Index: generic/regguts.h ================================================================== --- generic/regguts.h +++ generic/regguts.h @@ -1,8 +1,6 @@ /* - * Internal interface definitions, etc., for the reg package - * * Copyright (c) 1998, 1999 Henry Spencer. All rights reserved. * * Development of this software was funded, in part, by Cray Research Inc., * UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics * Corporation, none of whom are responsible for the results. The author @@ -25,10 +23,24 @@ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * Internal interface definitions, etc., for the reg package + * +*/ /* * Environmental customization. It should not (I hope) be necessary to alter * the file you are now reading -- regcustom.h should handle it all, given * care here and elsewhere. Index: generic/tcl.decls ================================================================== --- generic/tcl.decls +++ generic/tcl.decls @@ -10,10 +10,17 @@ # Copyright © 2007 Daniel A. Steffen # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + library tcl # Define the tcl interface with several sub interfaces: # tclPlat - platform specific public # tclInt - generic private @@ -21,13 +28,13 @@ interface tcl hooks {tclPlat tclInt tclIntPlat} scspec EXTERN -# Declare each of the functions in the public Tcl interface. Note that -# the an index should never be reused for a different function in order -# to preserve backwards compatibility. +# Declare each of the functions in the public Tcl interface. In order to +# preserve backwards compatibility, an index should never be reused for a +# different function. declare 0 { int Tcl_PkgProvideEx(Tcl_Interp *interp, const char *name, const char *version, const void *clientData) } @@ -2631,10 +2638,170 @@ # ----- BASELINE -- FOR -- 8.7.0 / 9.0.0 ----- # declare 688 { void TclUnusedStubEntry(void) } + + +declare 689 { + Tcl_ObjInterface *Tcl_NewObjInterface(void) +} + +declare 690 { + Tcl_ObjType *Tcl_NewObjType(void) +} + +declare 691 { + int Tcl_ObjInterfaceSetVersion(Tcl_ObjInterface *oiPtr ,int version) +} + +declare 692 { + int Tcl_ObjTypeSetFreeInternalRepProc(Tcl_ObjType *otPtr + , Tcl_FreeInternalRepProc *freeIntRepProc) +} + +declare 693 { + int Tcl_ObjTypeSetDupInternalRepProc(Tcl_ObjType *otPtr + ,Tcl_DupInternalRepProc *dupIntRepProc) +} + +declare 694 { + int Tcl_ObjTypeSetUpdateStringProc(Tcl_ObjType *otPtr + ,Tcl_UpdateStringProc *updateStringProc) +} + +declare 695 { + int Tcl_ObjTypeSetSetFromAnyProc(Tcl_ObjType *otPtr + ,Tcl_SetFromAnyProc *setFromAnyProc) +} + +declare 696 { + int Tcl_ObjTypeSetVersion(Tcl_ObjType *otPtr ,int version) +} + +declare 697 { + int Tcl_ObjInterfaceSetFnListAll(Tcl_ObjInterface *oiPtr + , Tcl_ObjInterfaceListAllProc *fnPtr) +} + +declare 698 { + int Tcl_ObjInterfaceSetFnListAppend(Tcl_ObjInterface *oiPtr + , Tcl_ObjInterfaceListAppendProc *fnPtr) +} + +declare 699 { + int Tcl_ObjInterfaceSetFnListAppendList(Tcl_ObjInterface *oiPtr + , Tcl_ObjInterfaceListAppendlistProc fnPtr) +} + + +declare 700 { + int Tcl_ObjInterfaceSetFnListIndex(Tcl_ObjInterface *oiPtr + ,Tcl_ObjInterfaceListIndexProc fnPtr) +} + + +declare 701 { + int Tcl_ObjInterfaceSetFnListIndexEnd(Tcl_ObjInterface *oiPtr + , Tcl_ObjInterfaceListIndexEndProc fnPtr) +} + +declare 702 { + int Tcl_ObjInterfaceSetFnListIsSorted(Tcl_ObjInterface *oiPtr + , Tcl_ObjInterfaceListIsSortedProc fnPtr) +} + +declare 703 { + int Tcl_ObjInterfaceSetFnListLength(Tcl_ObjInterface *oiPtr + ,Tcl_ObjInterfaceListlengthProc fnPtr) +} + +declare 704 { + int Tcl_ObjInterfaceSetFnListRange(Tcl_ObjInterface *oiPtr + ,Tcl_ObjInterfaceListRangeProc fnPtr) +} + +declare 705 { + int Tcl_ObjInterfaceSetFnListRangeEnd(Tcl_ObjInterface *oiPtr + ,Tcl_ObjInterfaceListRangeEndProc fnPtr) +} + +declare 706 { + int Tcl_ObjInterfaceSetFnListReplace(Tcl_ObjInterface *oiPtr + ,Tcl_ObjInterfaceListReplaceProc fnPtr) +} + + +declare 707 { + int Tcl_ObjInterfaceSetFnListReplaceList(Tcl_ObjInterface *oiPtr + ,Tcl_ObjInterfaceListReplaceListProc fnPtr) +} + +declare 708 { + int Tcl_ObjInterfaceSetFnListReverse(Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceListReverseProc fnPtr) +} + +declare 709 { + int Tcl_ObjInterfaceSetFnListSet(Tcl_ObjInterface *oiPtr + ,Tcl_ObjInterfaceListSetProc fnPtr) +} + +declare 710 { + int Tcl_ObjInterfaceSetFnListSetDeep(Tcl_ObjInterface *oiPtr + ,Tcl_ObjInterfaceListSetDeepProc fnPtr) +} + +declare 711 { + int Tcl_ObjInterfaceSetFnStringIndex(Tcl_ObjInterface *oiPtr + ,Tcl_ObjInterfaceStringIndexProc fnPtr) +} + +declare 712 { + int Tcl_ObjInterfaceSetFnStringIndexEnd(Tcl_ObjInterface *oiPtr + ,Tcl_ObjInterfaceStringIndexEndProc fnPtr) +} + +declare 713 { + int Tcl_ObjInterfaceSetFnStringLength(Tcl_ObjInterface *oiPtr + ,Tcl_ObjInterfaceStringLengthProc fnPtr) +} + +declare 714 { + int Tcl_ObjInterfaceSetFnStringRange(Tcl_ObjInterface *oiPtr + ,Tcl_ObjInterfaceStringRangeProc fnPtr) +} + +declare 715 { + int Tcl_ObjInterfaceSetFnStringRangeEnd(Tcl_ObjInterface *oiPtr + ,Tcl_ObjInterfaceStringRangeEndProc fnPtr) +} + +declare 716 { + int Tcl_ObjTypeSetInterface(Tcl_ObjType *objTypePtr + ,Tcl_ObjInterface *objInterfacePtr) +} + + +declare 717 { + int Tcl_ObjTypeSetName(Tcl_ObjType *objTypePtr ,char *name) +} + + +declare 718 { + int Tcl_ObjInterfaceSetFnStringIsEmpty(Tcl_ObjInterface *oiPtr + ,Tcl_ObjInterfaceStringIsEmptyProc fnPtr) +} + + +declare 719 { + int Tcl_ObjInterfaceSetFnListContains(Tcl_ObjInterface *oiPtr + ,Tcl_ObjInterfaceListContainsProc fnPtr) +} + + + ############################################################################## # Define the platform specific public Tcl interface. These functions are only # available on the designated platform. @@ -2649,11 +2816,11 @@ # Mac OS X specific functions declare 1 { int Tcl_MacOSXOpenVersionedBundleResources(Tcl_Interp *interp, const char *bundleName, const char *bundleVersion, - int hasResourceFile, Tcl_Size maxPathLen, char *libraryPath) + Tcl_Size hasResourceFile, Tcl_Size maxPathLen, char *libraryPath) } declare 2 { void Tcl_MacOSXNotifierAddRunLoopMode(const void *runLoopMode) } Index: generic/tcl.h ================================================================== --- generic/tcl.h +++ generic/tcl.h @@ -1,20 +1,35 @@ /* - * tcl.h -- - * - * This header file describes the externally-visible facilities of the - * Tcl interpreter. - * * Copyright (c) 1987-1994 The Regents of the University of California. * Copyright (c) 1993-1996 Lucent Technologies. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * Copyright (c) 1998-2000 by Scriptics Corporation. * Copyright (c) 2002 by Kevin B. Kenny. All rights reserved. + * Copyright (c) 2021 by Nathan Coulter. All rights reserved. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ + +/* + * Copyright © 2024 Nathan Coulter + * + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tcl.h -- + * + * This header file describes the externally-visible facilities of the + * Tcl interpreter. + * +*/ #ifndef _TCL #define _TCL /* @@ -102,10 +117,16 @@ * prior Tcl releases. */ #include #include + +/* Needed for PTRDIFF_MAX */ +#include + + +#define TCL_COMMENT(x) #if defined(__GNUC__) && (__GNUC__ > 2) # if defined(_WIN32) && defined(__USE_MINGW_ANSI_STDIO) && __USE_MINGW_ANSI_STDIO # define TCL_FORMAT_PRINTF(a,b) __attribute__ ((__format__ (__MINGW_PRINTF_FORMAT, a, b))) # else @@ -206,14 +227,10 @@ # else # define TCL_STORAGE_CLASS DLLIMPORT # endif #endif -#if !defined(CONST86) && !defined(TCL_NO_DEPRECATED) -# define CONST86 const -#endif - /* * Make sure EXTERN isn't defined elsewhere. */ #ifdef EXTERN @@ -319,28 +336,16 @@ #define Tcl_WideAsLong(val) ((long)((Tcl_WideInt)(val))) #define Tcl_LongAsWide(val) ((Tcl_WideInt)((long)(val))) #define Tcl_WideAsDouble(val) ((double)((Tcl_WideInt)(val))) #define Tcl_DoubleAsWide(val) ((Tcl_WideInt)((double)(val))) -#if TCL_MAJOR_VERSION < 9 - typedef int Tcl_Size; -# define TCL_SIZE_MAX ((int)(((unsigned int)-1)>>1)) -# define TCL_SIZE_MODIFIER "" -#else - typedef ptrdiff_t Tcl_Size; -# define TCL_SIZE_MAX ((ptrdiff_t)(((size_t)-1)>>1)) -# define TCL_SIZE_MODIFIER TCL_T_MODIFIER -#endif /* TCL_MAJOR_VERSION */ +typedef ptrdiff_t Tcl_Size; +#define TCL_SIZE_MAX PTRDIFF_MAX +#define TCL_SIZE_MODIFIER TCL_T_MODIFIER #ifdef _WIN32 -# if TCL_MAJOR_VERSION > 8 || defined(_WIN64) || defined(_USE_64BIT_TIME_T) - typedef struct __stat64 Tcl_StatBuf; -# elif defined(_USE_32BIT_TIME_T) - typedef struct _stati64 Tcl_StatBuf; -# else - typedef struct _stat32i64 Tcl_StatBuf; -# endif +typedef struct __stat64 Tcl_StatBuf; #elif defined(__CYGWIN__) typedef struct { unsigned st_dev; unsigned short st_ino; unsigned short st_mode; @@ -461,32 +466,22 @@ * relative to the start of the match string, not the beginning of the entire * string. */ typedef struct Tcl_RegExpIndices { -#if TCL_MAJOR_VERSION > 8 Tcl_Size start; /* Character offset of first character in * match. */ Tcl_Size end; /* Character offset of first character after * the match. */ -#else - long start; - long end; -#endif } Tcl_RegExpIndices; typedef struct Tcl_RegExpInfo { Tcl_Size nsubs; /* Number of subexpressions in the compiled * expression. */ Tcl_RegExpIndices *matches; /* Array of nsubs match offset pairs. */ -#if TCL_MAJOR_VERSION > 8 Tcl_Size extendStart; /* The offset at which a subsequent match * might begin. */ -#else - long extendStart; - long reserved; /* Reserved for later use. */ -#endif } Tcl_RegExpInfo; /* * Picky compilers complain if this typdef doesn't appear before the struct's * reference in tclDecls.h. @@ -577,26 +572,19 @@ typedef void (Tcl_InterpDeleteProc) (void *clientData, Tcl_Interp *interp); typedef void (Tcl_NamespaceDeleteProc) (void *clientData); typedef int (Tcl_ObjCmdProc) (void *clientData, Tcl_Interp *interp, int objc, struct Tcl_Obj *const *objv); -#if TCL_MAJOR_VERSION > 8 typedef int (Tcl_ObjCmdProc2) (void *clientData, Tcl_Interp *interp, Tcl_Size objc, struct Tcl_Obj *const *objv); typedef int (Tcl_CmdObjTraceProc2) (void *clientData, Tcl_Interp *interp, Tcl_Size level, const char *command, Tcl_Command commandInfo, Tcl_Size objc, struct Tcl_Obj *const *objv); typedef void (Tcl_FreeProc) (void *blockPtr); #define Tcl_ExitProc Tcl_FreeProc #define Tcl_FileFreeProc Tcl_FreeProc -#define Tcl_FileFreeProc Tcl_FreeProc #define Tcl_EncodingFreeProc Tcl_FreeProc -#else -#define Tcl_ObjCmdProc2 Tcl_ObjCmdProc -#define Tcl_CmdObjTraceProc2 Tcl_CmdObjTraceProc -typedef void (Tcl_FreeProc) (char *blockPtr); -#endif typedef int (Tcl_LibraryInitProc) (Tcl_Interp *interp); typedef int (Tcl_LibraryUnloadProc) (Tcl_Interp *interp, int flags); typedef void (Tcl_PanicProc) (const char *format, ...); typedef void (Tcl_TcpAcceptProc) (void *callbackData, Tcl_Channel chan, char *address, int port); @@ -614,44 +602,21 @@ typedef void (Tcl_ServiceModeHookProc) (int mode); typedef void *(Tcl_InitNotifierProc) (void); typedef void (Tcl_FinalizeNotifierProc) (void *clientData); typedef void (Tcl_MainLoopProc) (void); -/* Abstract List functions */ -typedef Tcl_Size (Tcl_ObjTypeLengthProc) (struct Tcl_Obj *listPtr); -typedef int (Tcl_ObjTypeIndexProc) (Tcl_Interp *interp, struct Tcl_Obj *listPtr, - Tcl_Size index, struct Tcl_Obj** elemObj); -typedef int (Tcl_ObjTypeSliceProc) (Tcl_Interp *interp, struct Tcl_Obj *listPtr, - Tcl_Size fromIdx, Tcl_Size toIdx, - struct Tcl_Obj **newObjPtr); -typedef int (Tcl_ObjTypeReverseProc) (Tcl_Interp *interp, struct Tcl_Obj *listPtr, - struct Tcl_Obj **newObjPtr); -typedef int (Tcl_ObjTypeGetElements) (Tcl_Interp *interp, struct Tcl_Obj *listPtr, - Tcl_Size *objcptr, struct Tcl_Obj ***objvptr); -typedef struct Tcl_Obj* (Tcl_ObjTypeSetElement) (Tcl_Interp *interp, struct Tcl_Obj *listPtr, - Tcl_Size indexCount, - struct Tcl_Obj *const indexArray[], - struct Tcl_Obj *valueObj); -typedef int (Tcl_ObjTypeReplaceProc) (Tcl_Interp *interp, struct Tcl_Obj *listObj, - Tcl_Size first, Tcl_Size numToDelete, - Tcl_Size numToInsert, - struct Tcl_Obj *const insertObjs[]); -typedef int (Tcl_ObjTypeInOperatorProc) (Tcl_Interp *interp, struct Tcl_Obj *valueObj, - struct Tcl_Obj *listObj, int *boolResult); - -#ifndef TCL_NO_DEPRECATED -# define Tcl_PackageInitProc Tcl_LibraryInitProc -# define Tcl_PackageUnloadProc Tcl_LibraryUnloadProc -#endif - /* *---------------------------------------------------------------------------- * The following structure represents a type of object, which is a particular * internal representation for an object plus a set of functions that provide * standard operations on objects of that type. */ +/* forward declaration */ +typedef struct Tcl_Obj Tcl_Obj; +typedef struct Tcl_ObjInterface Tcl_ObjInterface; + typedef struct Tcl_ObjType { const char *name; /* Name of the type, e.g. "int". */ Tcl_FreeInternalRepProc *freeIntRepProc; /* Called to free any storage for the type's * internal rep. NULL if the internal rep does @@ -664,44 +629,13 @@ * type's internal representation. */ Tcl_SetFromAnyProc *setFromAnyProc; /* Called to convert the object's internal rep * to this type. Frees the internal rep of the * old type. Returns TCL_ERROR on failure. */ -#if TCL_MAJOR_VERSION > 8 size_t version; - - /* List emulation functions - ObjType Version 1 */ - Tcl_ObjTypeLengthProc *lengthProc; /* Return the [llength] of the - ** AbstractList */ - Tcl_ObjTypeIndexProc *indexProc; /* Return a value (Tcl_Obj) for - ** [lindex $al $index] */ - Tcl_ObjTypeSliceProc *sliceProc; /* Return an AbstractList for - ** [lrange $al $start $end] */ - Tcl_ObjTypeReverseProc *reverseProc; /* Return an AbstractList for - ** [lreverse $al] */ - Tcl_ObjTypeGetElements *getElementsProc; /* Return an objv[] of all elements in - ** the list */ - Tcl_ObjTypeSetElement *setElementProc; /* Replace the element at the indicie - ** with the given valueObj. */ - Tcl_ObjTypeReplaceProc *replaceProc; /* Replace subset with subset */ - Tcl_ObjTypeInOperatorProc *inOperProc; /* "in" and "ni" expr list - ** operation Determine if the given - ** string value matches an element in - ** the list */ -#endif } Tcl_ObjType; -#if TCL_MAJOR_VERSION > 8 -# define TCL_OBJTYPE_V0 0, \ - 0,0,0,0,0,0,0,0 /* Pre-Tcl 9 */ -# define TCL_OBJTYPE_V1(a) offsetof(Tcl_ObjType, indexProc), \ - a,0,0,0,0,0,0,0 /* Tcl 9 Version 1 */ -# define TCL_OBJTYPE_V2(a,b,c,d,e,f,g,h) sizeof(Tcl_ObjType), \ - a,b,c,d,e,f,g,h /* Tcl 9 - AbstractLists */ -#else -# define TCL_OBJTYPE_V0 /* just empty */ -#endif /* * The following structure stores an internal representation (internalrep) for * a Tcl value. An internalrep is associated with an Tcl_ObjType when both * are stored in the same Tcl_Obj. The routines of the Tcl_ObjType govern @@ -728,11 +662,11 @@ * One of the following structures exists for each object in the Tcl system. * An object stores a value as either a string, some internal representation, * or both. */ -typedef struct Tcl_Obj { +struct Tcl_Obj { Tcl_Size refCount; /* When 0 the object will be freed. */ char *bytes; /* This points to the first byte of the * object's string representation. The array * must be followed by a null byte (i.e., at * offset length) but may also contain @@ -748,11 +682,11 @@ const Tcl_ObjType *typePtr; /* Denotes the object's type. Always * corresponds to the type of the object's * internal rep. NULL indicates the object has * no internal rep (has no type). */ Tcl_ObjInternalRep internalRep; /* The internal representation: */ -} Tcl_Obj; +}; /* *---------------------------------------------------------------------------- * The following definitions support Tcl's namespace facility. Note: the first @@ -939,15 +873,11 @@ /* * Flags that may be passed to Tcl_UniCharToUtf. * TCL_COMBINE Combine surrogates */ -#if TCL_MAJOR_VERSION > 8 -# define TCL_COMBINE 0x1000000 -#else -# define TCL_COMBINE 0 -#endif +#define TCL_COMBINE 0x1000000 /* *---------------------------------------------------------------------------- * Flag values passed to Tcl_RecordAndEval, Tcl_EvalObj, Tcl_EvalObjv. * WARNING: these bit choices must not conflict with the bit choices for * evalFlag bits in tclInt.h! @@ -1048,15 +978,11 @@ *---------------------------------------------------------------------------- * Forward declarations of Tcl_HashTable and related types. */ #ifndef TCL_HASH_TYPE -#if TCL_MAJOR_VERSION > 8 -# define TCL_HASH_TYPE size_t -#else -# define TCL_HASH_TYPE unsigned -#endif +#define TCL_HASH_TYPE size_t #endif typedef struct Tcl_HashKeyType Tcl_HashKeyType; typedef struct Tcl_HashTable Tcl_HashTable; typedef struct Tcl_HashEntry Tcl_HashEntry; @@ -1169,19 +1095,14 @@ * **bucketPtr. */ Tcl_Size numEntries; /* Total number of entries present in * table. */ Tcl_Size rebuildSize; /* Enlarge table when numEntries gets to be * this large. */ -#if TCL_MAJOR_VERSION > 8 size_t mask; /* Mask value used in hashing function. */ -#endif int downShift; /* Shift count used in hashing function. * Designed to use high-order bits of * randomized keys. */ -#if TCL_MAJOR_VERSION < 9 - int mask; /* Mask value used in hashing function. */ -#endif int keyType; /* Type of keys used in this table. It's * either TCL_CUSTOM_KEYS, TCL_STRING_KEYS, * TCL_ONE_WORD_KEYS, or an integer giving the * number of ints that is the size of the * key. */ @@ -1295,17 +1216,13 @@ * absolute time (the number of seconds from the epoch) or as an elapsed time. * On Unix systems the epoch is Midnight Jan 1, 1970 GMT. */ typedef struct Tcl_Time { -#if TCL_MAJOR_VERSION > 8 long long sec; /* Seconds. */ -#else - long sec; /* Seconds. */ -#endif -#if defined(_CYGWIN_) && TCL_MAJOR_VERSION > 8 - int usec; /* Microseconds. */ +#if defined(_WIN32) && defined(_WIN64) + int usec; /* Microseconds. */ #else long usec; /* Microseconds. */ #endif } Tcl_Time; @@ -1351,15 +1268,11 @@ /* * Value to use as the closeProc for a channel that supports the close2Proc * interface. */ -#if TCL_MAJOR_VERSION > 8 -# define TCL_CLOSE2PROC NULL -#else -# define TCL_CLOSE2PROC ((void *) 1) -#endif +#define TCL_CLOSE2PROC NULL /* * Channel version tag. This was introduced in 8.3.2/8.4. */ @@ -1903,16 +1816,14 @@ Tcl_Size numTokens; /* Total number of tokens in command. */ Tcl_Size tokensAvailable; /* Total number of tokens available at * *tokenPtr. */ int errorType; /* One of the parsing error types defined * above. */ -#if TCL_MAJOR_VERSION > 8 int incomplete; /* This field is set to 1 by Tcl_ParseCommand * if the command appears to be incomplete. * This information is used by * Tcl_CommandComplete. */ -#endif /* * The fields below are intended only for the private use of the parser. * They should not be used by functions that invoke Tcl_ParseCommand. */ @@ -1927,13 +1838,10 @@ * terminated most recent token. Filled in by * ParseTokens. If an error occurs, points to * beginning of region where the error * occurred (e.g. the open brace if the close * brace is missing). */ -#if TCL_MAJOR_VERSION < 9 - int incomplete; -#endif Tcl_Token staticTokens[NUM_STATIC_TOKENS]; /* Initial space for tokens for command. This * space should be large enough to accommodate * most commands; dynamic space is allocated * for very large commands that don't fit @@ -1986,11 +1894,11 @@ * perform any finalization that needs to occur * after the last byte is converted and then to * reset to an initial state. If the source * buffer contains the entire input stream to be * converted, this flag should be set. - * TCL_ENCODING_STOPONERROR - Not used any more. + * TCL_ENCODING_STOPONERROR - Obsolete. * TCL_ENCODING_NO_TERMINATE - If set, Tcl_ExternalToUtf does not append a * terminating NUL byte. Since it does not need * an extra byte for a terminating NUL, it fills * all dstLen bytes with encoded UTF-8 content if * needed. If clear, a byte is reserved in the @@ -2011,25 +1919,21 @@ * when adding bits. */ #define TCL_ENCODING_START 0x01 #define TCL_ENCODING_END 0x02 -#if TCL_MAJOR_VERSION > 8 -# define TCL_ENCODING_STOPONERROR 0x0 /* Not used any more */ -#else -# define TCL_ENCODING_STOPONERROR 0x04 -#endif +#define TCL_ENCODING_STOPONERROR 0x0 /* Not used any more */ #define TCL_ENCODING_NO_TERMINATE 0x08 #define TCL_ENCODING_CHAR_LIMIT 0x10 /* Internal use bits, do not define bits in this space. See above comment */ #define TCL_ENCODING_INTERNAL_USE_MASK 0xFF00 /* * Reserve top byte for profile values (disjoint, not a mask). In case of * changes, ensure ENCODING_PROFILE_* macros in tclInt.h are modified if * necessary. */ -#define TCL_ENCODING_PROFILE_STRICT TCL_ENCODING_STOPONERROR +#define TCL_ENCODING_PROFILE_STRICT 0x00000000 #define TCL_ENCODING_PROFILE_TCL8 0x01000000 #define TCL_ENCODING_PROFILE_REPLACE 0x02000000 /* * The following definitions are the error codes returned by the conversion @@ -2068,34 +1972,24 @@ * then Tcl_UniChar must be 2-bytes in size (UTF-16). Since Tcl 9.0, UCS-4 * mode is the default and recommended mode. */ #ifndef TCL_UTF_MAX -# if TCL_MAJOR_VERSION > 8 # define TCL_UTF_MAX 4 -# else -# define TCL_UTF_MAX 3 -# endif #endif /* * This represents a Unicode character. Any changes to this should also be * reflected in regcustom.h. */ -#if TCL_UTF_MAX == 4 - /* - * int isn't 100% accurate as it should be a strict 4-byte value - * (perhaps int32_t). ILP64/SILP64 systems may have troubles. The - * size of this value must be reflected correctly in regcustom.h. - */ +/* + * int isn't 100% accurate as it should be a strict 4-byte value + * (perhaps int32_t). ILP64/SILP64 systems may have troubles. The + * size of this value must be reflected correctly in regcustom.h. + */ typedef int Tcl_UniChar; -#elif TCL_UTF_MAX == 3 && !defined(BUILD_tcl) -typedef unsigned short Tcl_UniChar; -#else -# error "This TCL_UTF_MAX value is not supported" -#endif /* *---------------------------------------------------------------------------- * TIP #59: The following structure is used in calls 'Tcl_RegisterConfig' to * provide the system with the embedded configuration data. @@ -2121,15 +2015,11 @@ * Structure containing information about a limit handler to be called when a * command- or time-limit is exceeded by an interpreter. */ typedef void (Tcl_LimitHandlerProc) (void *clientData, Tcl_Interp *interp); -#if TCL_MAJOR_VERSION > 8 #define Tcl_LimitHandlerDeleteProc Tcl_FreeProc -#else -typedef void (Tcl_LimitHandlerDeleteProc) (void *clientData); -#endif #if 0 /* *---------------------------------------------------------------------------- * We would like to provide an anonymous structure "mp_int" here, which is @@ -2267,10 +2157,11 @@ */ #define TCL_IO_FAILURE ((Tcl_Size)-1) #define TCL_AUTO_LENGTH ((Tcl_Size)-1) #define TCL_INDEX_NONE ((Tcl_Size)-1) +#define TCL_LENGTH_NONE ((Tcl_Size)-1) /* *---------------------------------------------------------------------------- * Single public declaration for NRE. */ @@ -2282,15 +2173,11 @@ *---------------------------------------------------------------------------- * The following constant is used to test for older versions of Tcl in the * stubs tables. */ -#if TCL_MAJOR_VERSION > 8 -# define TCL_STUB_MAGIC ((int) 0xFCA3BACB + (int) sizeof(void *)) -#else -# define TCL_STUB_MAGIC ((int) 0xFCA3BACF) -#endif +#define TCL_STUB_MAGIC ((int) 0xFCA3BACB + (int) sizeof(void *)) /* * The following function is required to be defined in all stubs aware * extensions. The function is actually implemented in the stub library, not * the main Tcl library, although there is a trivial implementation in the @@ -2308,23 +2195,11 @@ #else # define Tcl_ConsolePanic NULL #endif #ifdef USE_TCL_STUBS -#if TCL_MAJOR_VERSION < 9 -# if TCL_UTF_MAX < 4 -# define Tcl_InitStubs(interp, version, exact) \ - (Tcl_InitStubs)(interp, version, \ - (exact)|(TCL_MAJOR_VERSION<<8)|(0xFF<<16), \ - TCL_STUB_MAGIC) -# else -# define Tcl_InitStubs(interp, version, exact) \ - (Tcl_InitStubs)(interp, "8.7.0", \ - (exact)|(TCL_MAJOR_VERSION<<8)|(0xFF<<16), \ - TCL_STUB_MAGIC) -# endif -#elif TCL_RELEASE_LEVEL == TCL_FINAL_RELEASE +#if TCL_RELEASE_LEVEL == TCL_FINAL_RELEASE # define Tcl_InitStubs(interp, version, exact) \ (Tcl_InitStubs)(interp, version, \ (exact)|(TCL_MAJOR_VERSION<<8)|(TCL_MINOR_VERSION<<16), \ TCL_STUB_MAGIC) #else @@ -2332,13 +2207,11 @@ (Tcl_InitStubs)(interp, TCL_PATCH_LEVEL, \ 1|(TCL_MAJOR_VERSION<<8)|(TCL_MINOR_VERSION<<16), \ TCL_STUB_MAGIC) #endif #else -#if TCL_MAJOR_VERSION < 9 -# error "Please define -DUSE_TCL_STUBS" -#elif TCL_RELEASE_LEVEL == TCL_FINAL_RELEASE +#if TCL_RELEASE_LEVEL == TCL_FINAL_RELEASE # define Tcl_InitStubs(interp, version, exact) \ Tcl_PkgInitStubsCheck(interp, version, \ (exact)|(TCL_MAJOR_VERSION<<8)|(TCL_MINOR_VERSION<<16)) #else # define Tcl_InitStubs(interp, version, exact) \ @@ -2366,13 +2239,10 @@ TCL_NORETURN1 Tcl_PanicProc *panicProc); EXTERN void Tcl_StaticLibrary(Tcl_Interp *interp, const char *prefix, Tcl_LibraryInitProc *initProc, Tcl_LibraryInitProc *safeInitProc); -#ifndef TCL_NO_DEPRECATED -# define Tcl_StaticPackage Tcl_StaticLibrary -#endif EXTERN Tcl_ExitProc *Tcl_SetExitProc(TCL_NORETURN1 Tcl_ExitProc *proc); #ifdef _WIN32 EXTERN const char *TclZipfs_AppHook(int *argc, wchar_t ***argv); #else EXTERN const char *TclZipfs_AppHook(int *argc, char ***argv); @@ -2383,11 +2253,11 @@ #endif # define Tcl_MainEx Tcl_MainExW EXTERN TCL_NORETURN void Tcl_MainExW(Tcl_Size argc, wchar_t **argv, Tcl_AppInitProc *appInitProc, Tcl_Interp *interp); #endif -#if defined(USE_TCL_STUBS) && (TCL_MAJOR_VERSION > 8) +#if defined(USE_TCL_STUBS) #define Tcl_SetPanicProc(panicProc) \ TclInitStubTable(((const char *(*)(Tcl_PanicProc *))TclStubCall((void *)panicProc))(panicProc)) #define Tcl_InitSubsystems() \ TclInitStubTable(((const char *(*)(void))TclStubCall((void *)1))()) #define Tcl_FindExecutable(argv0) \ @@ -2411,10 +2281,187 @@ (void)((const char *(*)(Tcl_DString *))TclStubCall((void *)8))(dsPtr) #define Tcl_SetPreInitScript(string) \ ((const char *(*)(const char *))TclStubCall((void *)9))(string) #endif + + + +/* + *---------------------------------------------------------------- + * Object interface data structures and macros + *---------------------------------------------------------------- + */ + + +#define tclObjTypeInterfaceArgsListAll \ + Tcl_Interp *interp, /* Used to report errors if not NULL. */ \ + Tcl_Obj *listPtr, /* List object for which an element array \ + * is to be returned. */ \ + Tcl_Size *objcPtr, /* Where to store the count of objects \ + * referenced by objv. */ \ + Tcl_Obj ***objvPtr /* Where to store the pointer to an \ + * array of */ + +#define tclObjTypeInterfaceArgsListAppend \ + Tcl_Interp *interp, /* Used to report errors if not NULL. */ \ + Tcl_Obj *listPtr, /* List object to append objPtr to. */ \ + Tcl_Obj *objPtr /* Object to append to listPtr's list. */ + +#define tclObjTypeInterfaceArgsListAppendList \ + Tcl_Interp *interp, /* Used to report errors if not NULL. */ \ + Tcl_Obj *listPtr, /* List object to append elements to. */ \ + Tcl_Obj *elemListPtr /* List obj with elements to append. */ + +#define tclObjTypeInterfaceArgsListContains \ + Tcl_Interp *interp, /* Used to report errors if not NULL. */ \ + Tcl_Obj *listPtr, /* List object to append elements to. */ \ + Tcl_Obj *givenPtr, /* Value to search for. */ \ + int *resPtr /* Location to store the result in. */ \ + +#define tclObjTypeInterfaceArgsListIndex \ + Tcl_Interp *interp, /* Used to report errors if not NULL. */ \ + Tcl_Obj *listPtr, /* List object to index into. */ \ + Tcl_Size index, /* Index of element to return. */ \ + Tcl_Obj **resPtrPtr /* The resulting Tcl_Obj* is stored here. */ + +#define tclObjTypeInterfaceArgsListIndexEnd \ + Tcl_Interp *interp, /* Used to report errors if not NULL. */ \ + Tcl_Obj *listPtr, /* List object to index into. */ \ + Tcl_Size index, /* Index of element to return. */ \ + Tcl_Obj **resPtrPtr /* The resulting Tcl_Obj* is stored here. */ + +#define tclObjTypeInterfaceArgsListIsSorted \ + Tcl_Interp * interp, /* Used to report errors */ \ + Tcl_Obj *listPtr, /* The list in question */ \ + size_t flags /* flags */ + +#define tclObjTypeInterfaceArgsListLength \ + Tcl_Interp *interp, /* Used to report errors if not NULL. */ \ + Tcl_Obj *listPtr, /* List object whose #elements to return. */ \ + Tcl_Size *lenPtr /* The resulting length is stored here. */ + +#define tclObjTypeInterfaceArgsListRange \ + Tcl_Interp *interp, /* Used to report errors */ \ + Tcl_Obj *listPtr, /* List object to take a range from. */ \ + Tcl_Size fromIdx, /* Index of first element to */ \ + /* include. */ \ + Tcl_Size toIdx, /* Index of last element to include. */ \ + Tcl_Obj **resPtrPtr /* The resulting Tcl_Obj* is stored here. */ + +#define tclObjTypeInterfaceArgsListRangeEnd \ + Tcl_Interp * interp, /* Used to report errors */ \ + Tcl_Obj *listPtr, /* List object to take a range from. */ \ + Tcl_Size fromAnchor,/* 0 for start and 1 for end */ \ + Tcl_Size fromIdx, /* Index of first element to include. */ \ + Tcl_Size toAnchor, /* 0 for start and 1 for end */ \ + Tcl_Size toIdx, /* Index of last element to include. */ \ + Tcl_Obj **resPtrPtr /* The resulting Tcl_Obj* is stored here. */ + +#define tclObjTypeInterfaceArgsListReplace \ + Tcl_Interp *interp, /* Used for error reporting if not NULL. */ \ + Tcl_Obj *listObj, /* List object whose elements to replace. */ \ + Tcl_Size first, /* Index of first element to replace. */ \ + Tcl_Size numToDelete, /* Number of elements to replace. */ \ + Tcl_Size numToInsert, /* Number of objects to insert. */ \ + /* An array of objc pointers to Tcl \ + * objects to insert. */ \ + Tcl_Obj *const insertObjs[] + +#define tclObjTypeInterfaceArgsListReplaceList \ + Tcl_Interp *interp, /* Used for error reporting if not NULL. */ \ + Tcl_Obj *listPtr, /* List object whose elements to replace. */ \ + Tcl_Size first, /* Index of first element to replace. */ \ + Tcl_Size count, /* Number of elements to replace. */ \ + Tcl_Obj *newItemsPtr /* a list of new items to insert */ + +#define tclObjTypeInterfaceArgsListReverse \ + Tcl_Interp *interp, /* Used for error reporting if not NULL. */ \ + Tcl_Obj *listPtr /* List object whose elements to replace. */ \ + + +#define tclObjTypeInterfaceArgsListSet \ + Tcl_Interp *interp, /* Tcl interpreter; used for error reporting \ + * if not NULL. */ \ + Tcl_Obj *listObj, /* List object in which element should be \ + * stored. */ \ + Tcl_Size index, /* Index of element to store. */ \ + Tcl_Obj *valueObj /* Tcl object to store in the designated list \ + * element. */ + + +#define tclObjTypeInterfaceArgsListSetDeep \ + Tcl_Interp *interp, /* Tcl interpreter. */ \ + Tcl_Obj *listObj, /* Pointer to the list being modified. */ \ + Tcl_Size indexCount, /* Number of index args. */ \ + Tcl_Obj *const indexArray[], /* Index args. */ \ + Tcl_Obj *valueObj, /* Value arg to 'lset' or NULL to 'lpop'. */ \ + Tcl_Obj **resPtrPtr /* An address at which to store the resulting list */ + + +#define tclObjTypeInterfaceArgsStringIndex \ + Tcl_Interp *interp, \ + Tcl_Obj *objPtr, \ + Tcl_Size index, \ + Tcl_Obj **resPtrPtr /* The resulting Tcl_Obj* is stored here. */ + + +#define tclObjTypeInterfaceArgsStringIndexEnd \ + Tcl_Interp *interp, \ + Tcl_Obj *objPtr, \ + Tcl_Size index, \ + Tcl_Obj **resPtrPtr /* The resulting Tcl_Obj* is stored here. */ + + +#define tclObjTypeInterfaceArgsStringLength \ + Tcl_Obj *listPtr, \ + Tcl_Size *lengthPtr /* An address at which to store the length. */ + + +#define tclObjTypeInterfaceArgsStringIsEmpty \ + Tcl_Interp *interp, \ + Tcl_Obj *listPtr, \ + int *res + + +#define tclObjTypeInterfaceArgsStringRange \ + Tcl_Obj *objPtr, /* The Tcl object to find the range of. */ \ + Tcl_Size first, /* First index of the range. */ \ + Tcl_Size last, /* Last index of the range. */ \ + Tcl_Obj **resPtrPtr /* The resulting Tcl_Obj* is stored here. */ + + +#define tclObjTypeInterfaceArgsStringRangeEnd \ + Tcl_Obj *objPtr, /* The Tcl object to find the range of. */ \ + Tcl_Size first, /* First index of the range. */ \ + Tcl_Size last, /* Last index of the range. */ \ + Tcl_Obj **resPtrPtr /* The resulting Tcl_Obj* is stored here. */ + +typedef int (Tcl_ObjInterfaceListAllProc)(tclObjTypeInterfaceArgsListAll); +typedef int (Tcl_ObjInterfaceListAppendProc)(tclObjTypeInterfaceArgsListAppend); +typedef int (Tcl_ObjInterfaceListAppendlistProc)(tclObjTypeInterfaceArgsListAppendList); +typedef int (Tcl_ObjInterfaceListContainsProc)(tclObjTypeInterfaceArgsListContains); +typedef int (Tcl_ObjInterfaceListIndexProc)(tclObjTypeInterfaceArgsListIndex); +typedef int (Tcl_ObjInterfaceListIndexEndProc)(tclObjTypeInterfaceArgsListIndexEnd); +typedef int (Tcl_ObjInterfaceListIsSortedProc)(tclObjTypeInterfaceArgsListIsSorted); +typedef int (Tcl_ObjInterfaceListlengthProc)(tclObjTypeInterfaceArgsListLength); +typedef int (Tcl_ObjInterfaceListRangeProc)(tclObjTypeInterfaceArgsListRange); +typedef int (Tcl_ObjInterfaceListRangeEndProc)(tclObjTypeInterfaceArgsListRangeEnd); +typedef int (Tcl_ObjInterfaceListReplaceProc)(tclObjTypeInterfaceArgsListReplace); +typedef int (Tcl_ObjInterfaceListReplaceListProc)(tclObjTypeInterfaceArgsListReplaceList); +typedef int (Tcl_ObjInterfaceListReverseProc)(tclObjTypeInterfaceArgsListReverse); +typedef int (Tcl_ObjInterfaceListSetProc)(tclObjTypeInterfaceArgsListSet); +typedef int (Tcl_ObjInterfaceListSetDeepProc)(tclObjTypeInterfaceArgsListSetDeep); + +typedef int (Tcl_ObjInterfaceStringIndexProc)(tclObjTypeInterfaceArgsStringIndex); +typedef int (Tcl_ObjInterfaceStringIndexEndProc)(tclObjTypeInterfaceArgsStringIndexEnd); +typedef int (Tcl_ObjInterfaceStringIsEmptyProc)(tclObjTypeInterfaceArgsStringIsEmpty); +typedef int (Tcl_ObjInterfaceStringLengthProc)(tclObjTypeInterfaceArgsStringLength); +typedef int (Tcl_ObjInterfaceStringRangeProc)(tclObjTypeInterfaceArgsStringRange); +typedef int (Tcl_ObjInterfaceStringRangeEndProc)(tclObjTypeInterfaceArgsStringRangeEnd); + + /* *---------------------------------------------------------------------------- * Include the public function declarations that are accessible via the stubs * table. */ @@ -2597,18 +2644,21 @@ #undef Tcl_CreateHashEntry #define Tcl_CreateHashEntry(tablePtr, key, newPtr) \ (*((tablePtr)->createProc))(tablePtr, (const char *)(key), newPtr) #endif /* RC_INVOKED */ + /* * end block for C++ */ #ifdef __cplusplus } #endif + + #endif /* _TCL */ /* * Local Variables: Index: generic/tclAlloc.c ================================================================== --- generic/tclAlloc.c +++ generic/tclAlloc.c @@ -1,22 +1,34 @@ /* - * tclAlloc.c -- - * - * This is a very fast storage allocator. It allocates blocks of a small - * number of different sizes, and keeps free lists of each size. Blocks - * that don't exactly fit are passed up to the next larger size. Blocks - * over a certain size are directly allocated from the system. - * * Copyright © 1983 Regents of the University of California. * Copyright © 1996-1997 Sun Microsystems, Inc. * Copyright © 1998-1999 Scriptics Corporation. * * Portions contributed by Chris Kingsley, Jack Jansen and Ray Johnson. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclAlloc.c -- + * + * This is a very fast storage allocator. It allocates blocks of a small + * number of different sizes, and keeps free lists of each size. Blocks + * that don't exactly fit are passed up to the next larger size. Blocks + * over a certain size are directly allocated from the system. + * +*/ /* * Windows and Unix use an alternative allocator when building with threads * that has significantly reduced lock contention. */ Index: generic/tclArithSeries.c ================================================================== --- generic/tclArithSeries.c +++ generic/tclArithSeries.c @@ -7,10 +7,21 @@ * Copyright © 2022 Brian S. Griffin. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ + +/* + * Copyright © 2024 Nathan Coulter + * + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ #include "tcl.h" #include "tclInt.h" #include #include @@ -65,42 +76,54 @@ int precision; } ArithSeriesDbl; /* -------------------------- ArithSeries object ---------------------------- */ -static int TclArithSeriesObjIndex(TCL_UNUSED(Tcl_Interp *), Tcl_Obj *arithSeriesObj, - Tcl_Size index, Tcl_Obj **elemObj); - -static Tcl_Size ArithSeriesObjLength(Tcl_Obj *arithSeriesObj); -static int TclArithSeriesObjRange(Tcl_Interp *interp, Tcl_Obj *arithSeriesObj, - Tcl_Size fromIdx, Tcl_Size toIdx, Tcl_Obj **newObjPtr); -static int TclArithSeriesObjReverse(Tcl_Interp *interp, Tcl_Obj *arithSeriesObj, Tcl_Obj **newObjPtr); -static int TclArithSeriesGetElements(Tcl_Interp *interp, - Tcl_Obj *objPtr, Tcl_Size *objcPtr, Tcl_Obj ***objvPtr); static void DupArithSeriesInternalRep(Tcl_Obj *srcPtr, Tcl_Obj *copyPtr); static void FreeArithSeriesInternalRep(Tcl_Obj *arithSeriesObjPtr); static void UpdateStringOfArithSeries(Tcl_Obj *arithSeriesObjPtr); static int SetArithSeriesFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr); static int ArithSeriesInOperation(Tcl_Interp *interp, Tcl_Obj *valueObj, Tcl_Obj *arithSeriesObj, int *boolResult); -static const Tcl_ObjType arithSeriesType = { - "arithseries", /* name */ +static int ArithSeriesObjIndex(TCL_UNUSED(Tcl_Interp *), Tcl_Obj *arithSeriesObj, + Tcl_Size index, Tcl_Obj **elemObj); +static int ArithSeriesObjLength(TCL_UNUSED(Tcl_Interp *), + Tcl_Obj *arithSeriesObj, Tcl_Size *result); +static Tcl_ObjInterfaceListRangeProc ArithSeriesObjRange; +static int ArithSeriesObjReverse(Tcl_Interp *interp, Tcl_Obj *arithSeriesObj); +static int ArithSeriesGetElements(Tcl_Interp *interp, + Tcl_Obj *objPtr, Tcl_Size *objcPtr, Tcl_Obj ***objvPtr); + + +static int ArithSeriesObjStep(Tcl_Obj *arithSeriesObj, Tcl_Obj **stepObj); + + +static ObjectType tclArithSeriesType = { + "arithseries", FreeArithSeriesInternalRep, /* freeIntRepProc */ DupArithSeriesInternalRep, /* dupIntRepProc */ UpdateStringOfArithSeries, /* updateStringProc */ SetArithSeriesFromAny, /* setFromAnyProc */ - TCL_OBJTYPE_V2( - ArithSeriesObjLength, - TclArithSeriesObjIndex, - TclArithSeriesObjRange, - TclArithSeriesObjReverse, - TclArithSeriesGetElements, - NULL, // SetElement - NULL, // Replace - ArithSeriesInOperation) // "in" operator + 2, + NULL }; + +void TclArithSeriesInit(void) { + Tcl_ObjInterface *oiPtr; + oiPtr = Tcl_NewObjInterface(); + Tcl_ObjInterfaceSetFnListContains(oiPtr ,ArithSeriesInOperation); + Tcl_ObjInterfaceSetFnListAll(oiPtr ,ArithSeriesGetElements); + Tcl_ObjInterfaceSetFnListIndex(oiPtr ,ArithSeriesObjIndex); + Tcl_ObjInterfaceSetFnListLength(oiPtr ,ArithSeriesObjLength); + Tcl_ObjInterfaceSetFnListRange(oiPtr ,ArithSeriesObjRange); + Tcl_ObjInterfaceSetFnListReverse(oiPtr ,ArithSeriesObjReverse); + Tcl_ObjTypeSetInterface((Tcl_ObjType *)&tclArithSeriesType ,oiPtr); + return; +} + + /* * Helper functions * * - ArithRound -- Round doubles to the number of significant fractional * digits @@ -107,11 +130,11 @@ * - ArithSeriesIndexDbl -- base list indexing operation for doubles * - ArithSeriesIndexInt -- " " " " " integers * - ArithSeriesGetInternalRep -- Return the internal rep from a Tcl_Obj * - Precision -- determine the number of factional digits for the given * double value - * - maxPrecision -- Using the values provide, determine the longest percision + * - maxPrecision -- Using the values provided, determine the longest precision * in the arithSeries */ static inline double ArithRound(double d, unsigned int n) { double scalefactor = pow(10, n); @@ -148,11 +171,11 @@ static inline ArithSeries* ArithSeriesGetInternalRep(Tcl_Obj *objPtr) { const Tcl_ObjInternalRep *irPtr; - irPtr = TclFetchInternalRep((objPtr), &arithSeriesType); + irPtr = TclFetchInternalRep((objPtr), (Tcl_ObjType *)&tclArithSeriesType); return irPtr ? (ArithSeries *)irPtr->twoPtrValue.ptr1 : NULL; } /* * Compute number of significant factional digits @@ -179,12 +202,10 @@ i = Precision(end); dp = i>dp ? i : dp; return dp; } -static int TclArithSeriesObjStep(Tcl_Obj *arithSeriesObj, Tcl_Obj **stepObj); - /* *---------------------------------------------------------------------- * * ArithSeriesLen -- * @@ -234,89 +255,10 @@ /* *---------------------------------------------------------------------- * - * DupArithSeriesInternalRep -- - * - * Initialize the internal representation of a arithseries Tcl_Obj to a - * copy of the internal representation of an existing arithseries object. - * - * Results: - * None. - * - * Side effects: - * We set "copyPtr"s internal rep to a pointer to a - * newly allocated ArithSeries structure. - *---------------------------------------------------------------------- - */ - -static void -DupArithSeriesInternalRep( - Tcl_Obj *srcPtr, /* Object with internal rep to copy. */ - Tcl_Obj *copyPtr) /* Object with internal rep to set. */ -{ - ArithSeries *srcArithSeriesRepPtr = - (ArithSeries *) srcPtr->internalRep.twoPtrValue.ptr1; - /* - * Allocate a new ArithSeries structure. */ - - if (srcArithSeriesRepPtr->isDouble) { - ArithSeriesDbl *srcArithSeriesDblRepPtr = - (ArithSeriesDbl *)srcArithSeriesRepPtr; - ArithSeriesDbl *copyArithSeriesDblRepPtr = - (ArithSeriesDbl *) Tcl_Alloc(sizeof(ArithSeriesDbl)); - *copyArithSeriesDblRepPtr = *srcArithSeriesDblRepPtr; - copyArithSeriesDblRepPtr->elements = NULL; - copyPtr->internalRep.twoPtrValue.ptr1 = copyArithSeriesDblRepPtr; - } else { - ArithSeries *copyArithSeriesRepPtr = - (ArithSeries *) Tcl_Alloc(sizeof(ArithSeries)); - *copyArithSeriesRepPtr = *srcArithSeriesRepPtr; - copyArithSeriesRepPtr->elements = NULL; - copyPtr->internalRep.twoPtrValue.ptr1 = copyArithSeriesRepPtr; - } - copyPtr->internalRep.twoPtrValue.ptr2 = NULL; - copyPtr->typePtr = &arithSeriesType; -} - -/* - *---------------------------------------------------------------------- - * - * FreeArithSeriesInternalRep -- - * - * Free any allocated memory in the ArithSeries Rep - * - * Results: - * None. - * - * Side effects: - * - *---------------------------------------------------------------------- - */ -static void -FreeArithSeriesInternalRep(Tcl_Obj *arithSeriesObjPtr) /* Free any allocated memory */ -{ - ArithSeries *arithSeriesRepPtr = (ArithSeries*)arithSeriesObjPtr->internalRep.twoPtrValue.ptr1; - - if (arithSeriesRepPtr) { - if (arithSeriesRepPtr->elements) { - Tcl_WideInt i, len = arithSeriesRepPtr->len; - for (i=0; ielements[i]); - } - Tcl_Free((char*)arithSeriesRepPtr->elements); - arithSeriesRepPtr->elements = NULL; - } - Tcl_Free((char*)arithSeriesRepPtr); - } -} - - -/* - *---------------------------------------------------------------------- - * * NewArithSeriesInt -- * * Creates a new ArithSeries object. The returned object has * refcount = 0. * @@ -354,11 +296,11 @@ arithSeriesRepPtr->step = step; arithSeriesRepPtr->len = length; arithSeriesRepPtr->elements = NULL; arithSeriesObj->internalRep.twoPtrValue.ptr1 = arithSeriesRepPtr; arithSeriesObj->internalRep.twoPtrValue.ptr2 = NULL; - arithSeriesObj->typePtr = &arithSeriesType; + arithSeriesObj->typePtr = (Tcl_ObjType *)&tclArithSeriesType; if (length > 0) Tcl_InvalidateStringRep(arithSeriesObj); return arithSeriesObj; } @@ -409,11 +351,11 @@ arithSeriesRepPtr->len = length; arithSeriesRepPtr->elements = NULL; arithSeriesRepPtr->precision = maxPrecision(start,end,step); arithSeriesObj->internalRep.twoPtrValue.ptr1 = arithSeriesRepPtr; arithSeriesObj->internalRep.twoPtrValue.ptr2 = NULL; - arithSeriesObj->typePtr = &arithSeriesType; + arithSeriesObj->typePtr = (Tcl_ObjType *)&tclArithSeriesType; if (length > 0) { Tcl_InvalidateStringRep(arithSeriesObj); } @@ -486,14 +428,13 @@ * * None. *---------------------------------------------------------------------- */ -int +Tcl_Obj * TclNewArithSeriesObj( Tcl_Interp *interp, /* For error reporting */ - Tcl_Obj **arithSeriesObj, /* return value */ int useDoubles, /* Flag indicates values start, ** end, step, are treated as doubles */ Tcl_Obj *startObj, /* Starting value */ Tcl_Obj *endObj, /* Ending limit */ Tcl_Obj *stepObj, /* increment value */ @@ -500,10 +441,11 @@ Tcl_Obj *lenObj) /* Number of elements */ { double dstart, dend, dstep; Tcl_WideInt start, end, step; Tcl_WideInt len = -1; + Tcl_Obj *arithSeriesObjPtr = NULL; if (startObj) { assignNumber(useDoubles, &start, &dstart, startObj); } else { start = 0; @@ -515,20 +457,20 @@ step = dstep; } else { dstep = step; } if (dstep == 0) { - TclNewObj(*arithSeriesObj); - return TCL_OK; + TclNewObj(arithSeriesObjPtr); + return arithSeriesObjPtr; } } if (endObj) { assignNumber(useDoubles, &end, &dend, endObj); } if (lenObj) { if (TCL_OK != Tcl_GetWideIntFromObj(interp, lenObj, &len)) { - return TCL_ERROR; + return arithSeriesObjPtr; } } if (startObj && endObj) { if (!stepObj) { @@ -564,35 +506,31 @@ if (len > TCL_SIZE_MAX) { Tcl_SetObjResult( interp, Tcl_NewStringObj("max length of a Tcl list exceeded", -1)); Tcl_SetErrorCode(interp, "TCL", "MEMORY", (void *)NULL); - return TCL_ERROR; + return arithSeriesObjPtr; } - if (arithSeriesObj) { - *arithSeriesObj = (useDoubles) - ? NewArithSeriesDbl(dstart, dend, dstep, len) - : NewArithSeriesInt(start, end, step, len); - } - return TCL_OK; + arithSeriesObjPtr = useDoubles + ? NewArithSeriesDbl(dstart, dend, dstep, len) + : NewArithSeriesInt(start, end, step, len); + return arithSeriesObjPtr; } /* *---------------------------------------------------------------------- * - * TclArithSeriesObjIndex -- + * ArithSeriesObjIndex -- * - * Returns the element with the specified index in the list - * represented by the specified Arithmetic Sequence object. - * If the index is out of range, TCL_ERROR is returned, - * otherwise TCL_OK is returned and the integer value of the - * element is stored in *element. + * Stores in **resultPtr the element with the specified index in the list + * represented by the specified Arithmetic Sequence object. * * Results: * - * TCL_OK on success. + * On success, returns TCL_OK and stores the position of the element in + * *element. Returns TCL_ERROR if the index is out of range. * * Side Effects: * * On success, the integer pointed by *element is modified. * An empty string ("") is assigned if index is out-of-bounds. @@ -599,11 +537,11 @@ * *---------------------------------------------------------------------- */ int -TclArithSeriesObjIndex( +ArithSeriesObjIndex( TCL_UNUSED(Tcl_Interp *),/* Used for error reporting if not NULL. */ Tcl_Obj *arithSeriesObj, /* List obj */ Tcl_Size index, /* index to element of interest */ Tcl_Obj **elemObj) /* Return value */ { @@ -638,21 +576,199 @@ * * None. * *---------------------------------------------------------------------- */ -Tcl_Size ArithSeriesObjLength(Tcl_Obj *arithSeriesObj) +int ArithSeriesObjLength(TCL_UNUSED(Tcl_Interp *), + Tcl_Obj *arithSeriesObj, Tcl_Size *result) { ArithSeries *arithSeriesRepPtr = (ArithSeries*) arithSeriesObj->internalRep.twoPtrValue.ptr1; - return arithSeriesRepPtr->len; + *result = arithSeriesRepPtr->len; + return TCL_OK; +} + +/* + *---------------------------------------------------------------------- + * + * FreeArithSeriesInternalRep -- + * + * Deallocate the storage associated with an arithseries object's + * internal representation. + * + * Results: + * None. + * + * Side effects: + * Frees arithSeriesObj's ArithSeries* internal representation and + * sets listPtr's internalRep.twoPtrValue.ptr1 to NULL. + * + *---------------------------------------------------------------------- + */ + +static void +FreeArithSeriesInternalRep(Tcl_Obj *arithSeriesObj) +{ + ArithSeries *arithSeriesRepPtr = + (ArithSeries *) arithSeriesObj->internalRep.twoPtrValue.ptr1; + if (arithSeriesRepPtr->elements) { + Tcl_Size i; + Tcl_Obj**elmts = arithSeriesRepPtr->elements; + for(i=0; ilen; i++) { + if (elmts[i]) { + Tcl_DecrRefCount(elmts[i]); + } + } + Tcl_Free((char *) arithSeriesRepPtr->elements); + } + Tcl_Free((char *) arithSeriesRepPtr); + arithSeriesObj->internalRep.twoPtrValue.ptr1 = NULL; +} + +/* + *---------------------------------------------------------------------- + * + * DupArithSeriesInternalRep -- + * + * Initialize the internal representation of a arithseries Tcl_Obj to a + * copy of the internal representation of an existing arithseries object. + * + * Results: + * None. + * + * Side effects: + * We set "copyPtr"s internal rep to a pointer to a + * newly allocated ArithSeries structure. + *---------------------------------------------------------------------- + */ + +static void +DupArithSeriesInternalRep( + Tcl_Obj *srcPtr, /* Object with internal rep to copy. */ + Tcl_Obj *copyPtr) /* Object with internal rep to set. */ +{ + ArithSeries *srcArithSeriesRepPtr = + (ArithSeries *) srcPtr->internalRep.twoPtrValue.ptr1; + + /* + * Allocate a new ArithSeries structure. */ + + if (srcArithSeriesRepPtr->isDouble) { + ArithSeriesDbl *srcArithSeriesDblRepPtr = + (ArithSeriesDbl *)srcArithSeriesRepPtr; + ArithSeriesDbl *copyArithSeriesDblRepPtr = + (ArithSeriesDbl *) Tcl_Alloc(sizeof(ArithSeriesDbl)); + *copyArithSeriesDblRepPtr = *srcArithSeriesDblRepPtr; + copyArithSeriesDblRepPtr->elements = NULL; + copyPtr->internalRep.twoPtrValue.ptr1 = copyArithSeriesDblRepPtr; + } else { + ArithSeries *copyArithSeriesRepPtr = + (ArithSeries *) Tcl_Alloc(sizeof(ArithSeries)); + *copyArithSeriesRepPtr = *srcArithSeriesRepPtr; + copyArithSeriesRepPtr->elements = NULL; + copyPtr->internalRep.twoPtrValue.ptr1 = copyArithSeriesRepPtr; + } + copyPtr->internalRep.twoPtrValue.ptr2 = NULL; + copyPtr->typePtr = (Tcl_ObjType *)&tclArithSeriesType; +} + +/* + *---------------------------------------------------------------------- + * + * UpdateStringOfArithSeries -- + * + * Update the string representation for an arithseries object. + * Note: This procedure does not invalidate an existing old string rep + * so storage will be lost if this has not already been done. + * + * Results: + * None. + * + * Side effects: + * The object's string is set to a valid string that results from + * the list-to-string conversion. This string will be empty if the + * list has no elements. The list internal representation + * should not be NULL and we assume it is not NULL. + * + * Notes: + * At the cost of overallocation it's possible to estimate + * the length of the string representation and make this procedure + * much faster. Because the programmer shouldn't expect the + * string conversion of a big arithmetic sequence to be fast + * this version takes more care of space than time. + * + *---------------------------------------------------------------------- + */ + +static void +UpdateStringOfArithSeries(Tcl_Obj *arithSeriesObj) +{ + ArithSeries *arithSeriesRepPtr = + (ArithSeries*) arithSeriesObj->internalRep.twoPtrValue.ptr1; + char *elem, *p; + Tcl_Obj *elemObj; + Tcl_Size i; + Tcl_Size length = 0; + Tcl_Size slen; + + /* + * Pass 1: estimate space. + */ + if (!arithSeriesRepPtr->isDouble) { + for (i = 0; i < arithSeriesRepPtr->len; i++) { + double d = ArithSeriesIndexDbl(arithSeriesRepPtr, i); + slen = d>0 ? log10(d)+1 : d<0 ? log10((0-d))+2 : 1; + length += slen; + } + } else { + for (i = 0; i < arithSeriesRepPtr->len; i++) { + double d = ArithSeriesIndexDbl(arithSeriesRepPtr, i); + char tmp[TCL_DOUBLE_SPACE+2]; + tmp[0] = 0; + Tcl_PrintDouble(NULL,d,tmp); + if ((length + strlen(tmp)) > TCL_SIZE_MAX) { + break; // overflow + } + length += strlen(tmp); + } + } + length += arithSeriesRepPtr->len; // Space for each separator + + /* + * Pass 2: generate the string repr. + */ + + p = Tcl_InitStringRep(arithSeriesObj, NULL, length); + if (p == NULL) { + Tcl_Panic("Unable to allocate string size %" TCL_Z_MODIFIER "u", length); + } + for (i = 0; i < arithSeriesRepPtr->len; i++) { + if (ArithSeriesObjIndex(NULL, arithSeriesObj, i, &elemObj) == TCL_OK) + { + elem = Tcl_GetStringFromObj(elemObj, &slen); + if (((p - arithSeriesObj->bytes)+slen) > length) { + break; + } + strncpy(p, elem, slen); + p[slen] = ' '; + p += slen+1; + Tcl_DecrRefCount(elemObj); + } else { + Tcl_Panic("UpdateStringOfArithSeries" + " {could not get value at index} index %" + TCL_Z_MODIFIER "u", i); + } + } + if (length > 0) arithSeriesObj->bytes[length-1] = '\0'; + arithSeriesObj->length = length-1; + return; } /* *---------------------------------------------------------------------- * - * TclArithSeriesObjStep -- + * ArithSeriesObjStep -- * * Return a Tcl_Obj with the step value from the give ArithSeries Obj. * refcount = 0. * * Results: @@ -664,12 +780,12 @@ * * None. *---------------------------------------------------------------------- */ -int -TclArithSeriesObjStep( +static int +ArithSeriesObjStep( Tcl_Obj *arithSeriesObj, Tcl_Obj **stepObj) { ArithSeries *arithSeriesRepPtr = ArithSeriesGetInternalRep(arithSeriesObj); if (arithSeriesRepPtr->isDouble) { @@ -712,11 +828,11 @@ } /* *---------------------------------------------------------------------- * - * TclArithSeriesObjRange -- + * ArithSeriesObjRange -- * * Makes a slice of an ArithSeries value. * *arithSeriesObj must be known to be a valid list. * * Results: @@ -729,19 +845,20 @@ * *---------------------------------------------------------------------- */ int -TclArithSeriesObjRange( +ArithSeriesObjRange( Tcl_Interp *interp, /* For error message(s) */ Tcl_Obj *arithSeriesObj, /* List object to take a range from. */ Tcl_Size fromIdx, /* Index of first element to include. */ Tcl_Size toIdx, /* Index of last element to include. */ - Tcl_Obj **newObjPtr) /* return value */ + Tcl_Obj **resPtr + ) /* return value */ { ArithSeries *arithSeriesRepPtr; - Tcl_Obj *startObj, *endObj, *stepObj; + Tcl_Obj *startObj, *endObj, *stepObj ,*newObjPtr; (void)interp; /* silence compiler */ arithSeriesRepPtr = ArithSeriesGetInternalRep(arithSeriesObj); @@ -753,11 +870,12 @@ toIdx = arithSeriesRepPtr->len-1; } if (fromIdx > toIdx || fromIdx >= arithSeriesRepPtr->len) { - TclNewObj(*newObjPtr); + TclNewObj(newObjPtr); + *resPtr = newObjPtr; return TCL_OK; } if (fromIdx < 0) { fromIdx = 0; @@ -767,78 +885,38 @@ } if (toIdx > arithSeriesRepPtr->len-1) { toIdx = arithSeriesRepPtr->len-1; } - TclArithSeriesObjIndex(interp, arithSeriesObj, fromIdx, &startObj); - Tcl_IncrRefCount(startObj); - TclArithSeriesObjIndex(interp, arithSeriesObj, toIdx, &endObj); - Tcl_IncrRefCount(endObj); - TclArithSeriesObjStep(arithSeriesObj, &stepObj); - Tcl_IncrRefCount(stepObj); - - if (Tcl_IsShared(arithSeriesObj) || - ((arithSeriesObj->refCount > 1))) { - int status = TclNewArithSeriesObj(NULL, newObjPtr, - arithSeriesRepPtr->isDouble, startObj, endObj, stepObj, NULL); - - Tcl_DecrRefCount(startObj); - Tcl_DecrRefCount(endObj); - Tcl_DecrRefCount(stepObj); - return status; - } - - /* - * In-place is possible. - */ - - /* - * Even if nothing below causes any changes, we still want the - * string-canonizing effect of [lrange 0 end]. - */ - - TclInvalidateStringRep(arithSeriesObj); - - if (arithSeriesRepPtr->isDouble) { - ArithSeriesDbl *arithSeriesDblRepPtr = (ArithSeriesDbl*)arithSeriesRepPtr; - double start, end, step; - - Tcl_GetDoubleFromObj(NULL, startObj, &start); - Tcl_GetDoubleFromObj(NULL, endObj, &end); - Tcl_GetDoubleFromObj(NULL, stepObj, &step); - arithSeriesDblRepPtr->start = start; - arithSeriesDblRepPtr->end = end; - arithSeriesDblRepPtr->step = step; - arithSeriesDblRepPtr->precision = maxPrecision(start, end, step); - arithSeriesDblRepPtr->len = - ArithSeriesLenDbl(start, end, step, arithSeriesDblRepPtr->precision); - arithSeriesDblRepPtr->elements = NULL; - - } else { - Tcl_WideInt start, end, step; - Tcl_GetWideIntFromObj(NULL, startObj, &start); - Tcl_GetWideIntFromObj(NULL, endObj, &end); - Tcl_GetWideIntFromObj(NULL, stepObj, &step); - arithSeriesRepPtr->start = start; - arithSeriesRepPtr->end = end; - arithSeriesRepPtr->step = step; - arithSeriesRepPtr->len = ArithSeriesLenInt(start, end, step); - arithSeriesRepPtr->elements = NULL; - } - - Tcl_DecrRefCount(startObj); - Tcl_DecrRefCount(endObj); - Tcl_DecrRefCount(stepObj); - - *newObjPtr = arithSeriesObj; + ArithSeriesObjIndex(interp, arithSeriesObj, fromIdx, &startObj); + if (startObj == NULL) { + return TCL_ERROR; + } + Tcl_IncrRefCount(startObj); + ArithSeriesObjIndex(interp, arithSeriesObj, toIdx, &endObj); + if (endObj == NULL) { + return TCL_ERROR; + } + Tcl_IncrRefCount(endObj); + ArithSeriesObjStep(arithSeriesObj, &stepObj); + Tcl_IncrRefCount(stepObj); + + newObjPtr = TclNewArithSeriesObj(NULL, + arithSeriesRepPtr->isDouble, startObj, endObj, stepObj, NULL); + + + Tcl_DecrRefCount(startObj); + Tcl_DecrRefCount(endObj); + Tcl_DecrRefCount(stepObj); + *resPtr = newObjPtr; return TCL_OK; } /* *---------------------------------------------------------------------- * - * TclArithSeriesGetElements -- + * ArithSeriesGetElements -- * * This function returns an (objc,objv) array of the elements in a list * object. * * Results: @@ -861,20 +939,20 @@ * *---------------------------------------------------------------------- */ int -TclArithSeriesGetElements( +ArithSeriesGetElements( Tcl_Interp *interp, /* Used to report errors if not NULL. */ Tcl_Obj *objPtr, /* ArithSeries object for which an element * array is to be returned. */ Tcl_Size *objcPtr, /* Where to store the count of objects * referenced by objv. */ Tcl_Obj ***objvPtr) /* Where to store the pointer to an array of * pointers to the list's objects. */ { - if (TclHasInternalRep(objPtr,&arithSeriesType)) { + if (TclHasInternalRep(objPtr,(Tcl_ObjType *)&tclArithSeriesType)) { ArithSeries *arithSeriesRepPtr; Tcl_Obj **objv; int i, objc; arithSeriesRepPtr = ArithSeriesGetInternalRep(objPtr); @@ -896,11 +974,11 @@ } return TCL_ERROR; } arithSeriesRepPtr->elements = objv; for (i = 0; i < objc; i++) { - int status = TclArithSeriesObjIndex(interp, objPtr, i, &objv[i]); + int status = ArithSeriesObjIndex(interp, objPtr, i, &objv[i]); if (status) { return TCL_ERROR; } Tcl_IncrRefCount(objv[i]); } @@ -923,53 +1001,52 @@ } /* *---------------------------------------------------------------------- * - * TclArithSeriesObjReverse -- + * ArithSeriesObjReverse -- * * Reverse the order of the ArithSeries value. The arithSeriesObj is * assumed to be a valid ArithSeries. The new Obj has the Start and End * values appropriately swapped and the Step value sign is changed. * * Results: * The result will be an ArithSeries in the reverse order. * * Side effects: - * The ogiginal obj will be modified and returned if it is not Shared. + * The original obj will be modified and returned if it is not Shared. * *---------------------------------------------------------------------- */ int -TclArithSeriesObjReverse( +ArithSeriesObjReverse( Tcl_Interp *interp, /* For error message(s) */ - Tcl_Obj *arithSeriesObj, /* List object to reverse. */ - Tcl_Obj **newObjPtr) + Tcl_Obj *arithSeriesObj /* List object to reverse. */ + ) { ArithSeries *arithSeriesRepPtr; Tcl_Obj *startObj, *endObj, *stepObj; - Tcl_Obj *resultObj; Tcl_WideInt start, end, step, len; double dstart, dend, dstep; int isDouble; (void)interp; - if (newObjPtr == NULL) { - return TCL_ERROR; + if (Tcl_IsShared(arithSeriesObj)) { + Tcl_Panic("%s called with shared object", "ArithSeriesObjReverse"); } arithSeriesRepPtr = ArithSeriesGetInternalRep(arithSeriesObj); isDouble = arithSeriesRepPtr->isDouble; len = arithSeriesRepPtr->len; - TclArithSeriesObjIndex(NULL, arithSeriesObj, (len-1), &startObj); + ArithSeriesObjIndex(NULL, arithSeriesObj, (len-1), &startObj); Tcl_IncrRefCount(startObj); - TclArithSeriesObjIndex(NULL, arithSeriesObj, 0, &endObj); + ArithSeriesObjIndex(NULL, arithSeriesObj, 0, &endObj); Tcl_IncrRefCount(endObj); - TclArithSeriesObjStep(arithSeriesObj, &stepObj); + ArithSeriesObjStep(arithSeriesObj, &stepObj); Tcl_IncrRefCount(stepObj); if (isDouble) { Tcl_GetDoubleFromObj(NULL, startObj, &dstart); Tcl_GetDoubleFromObj(NULL, endObj, &dend); @@ -982,136 +1059,39 @@ Tcl_GetWideIntFromObj(NULL, stepObj, &step); step = -step; TclSetIntObj(stepObj, step); } - if (Tcl_IsShared(arithSeriesObj) || - ((arithSeriesObj->refCount > 1))) { - Tcl_Obj *lenObj; - TclNewIntObj(lenObj, len); - if (TclNewArithSeriesObj(NULL, &resultObj, isDouble, - startObj, endObj, stepObj, lenObj) != TCL_OK) { - resultObj = NULL; - } - Tcl_DecrRefCount(lenObj); - } else { - - /* - * In-place is possible. - */ - - TclInvalidateStringRep(arithSeriesObj); - - if (isDouble) { - ArithSeriesDbl *arithSeriesDblRepPtr = - (ArithSeriesDbl*)arithSeriesRepPtr; - arithSeriesDblRepPtr->start = dstart; - arithSeriesDblRepPtr->end = dend; - arithSeriesDblRepPtr->step = dstep; - } else { - arithSeriesRepPtr->start = start; - arithSeriesRepPtr->end = end; - arithSeriesRepPtr->step = step; - } - if (arithSeriesRepPtr->elements) { - Tcl_WideInt i; - for (i=0; ielements[i]); - } - Tcl_Free((char*)arithSeriesRepPtr->elements); - } - arithSeriesRepPtr->elements = NULL; - - resultObj = arithSeriesObj; - } + TclInvalidateStringRep(arithSeriesObj); + + if (isDouble) { + ArithSeriesDbl *arithSeriesDblRepPtr = + (ArithSeriesDbl*)arithSeriesRepPtr; + arithSeriesDblRepPtr->start = dstart; + arithSeriesDblRepPtr->end = dend; + arithSeriesDblRepPtr->step = dstep; + } else { + arithSeriesRepPtr->start = start; + arithSeriesRepPtr->end = end; + arithSeriesRepPtr->step = step; + } + if (arithSeriesRepPtr->elements) { + Tcl_WideInt i; + for (i=0; ielements[i]); + } + Tcl_Free((char*)arithSeriesRepPtr->elements); + } + arithSeriesRepPtr->elements = NULL; Tcl_DecrRefCount(startObj); Tcl_DecrRefCount(endObj); Tcl_DecrRefCount(stepObj); - *newObjPtr = resultObj; - return TCL_OK; } - -/* - *---------------------------------------------------------------------- - * - * UpdateStringOfArithSeries -- - * - * Update the string representation for an arithseries object. - * Note: This procedure does not invalidate an existing old string rep - * so storage will be lost if this has not already been done. - * - * Results: - * None. - * - * Side effects: - * The object's string is set to a valid string that results from - * the list-to-string conversion. This string will be empty if the - * list has no elements. The list internal representation - * should not be NULL and we assume it is not NULL. - * - * Notes: - * At the cost of overallocation it's possible to estimate - * the length of the string representation and make this procedure - * much faster. Because the programmer shouldn't expect the - * string conversion of a big arithmetic sequence to be fast - * this version takes more care of space than time. - * - *---------------------------------------------------------------------- - */ - -static void -UpdateStringOfArithSeries(Tcl_Obj *arithSeriesObjPtr) -{ - ArithSeries *arithSeriesRepPtr = (ArithSeries*)arithSeriesObjPtr->internalRep.twoPtrValue.ptr1; - char *p; - Tcl_Obj *eleObj; - Tcl_Size i, bytlen = 0; - - /* - * Pass 1: estimate space. - */ - if (!arithSeriesRepPtr->isDouble) { - for (i = 0; i < arithSeriesRepPtr->len; i++) { - double d = ArithSeriesIndexDbl(arithSeriesRepPtr, i); - size_t slen = d>0 ? log10(d)+1 : d<0 ? log10((0-d))+2 : 1; - bytlen += slen; - } - } else { - for (i = 0; i < arithSeriesRepPtr->len; i++) { - double d = ArithSeriesIndexDbl(arithSeriesRepPtr, i); - char tmp[TCL_DOUBLE_SPACE+2]; - tmp[0] = 0; - Tcl_PrintDouble(NULL,d,tmp); - if ((bytlen + strlen(tmp)) > TCL_SIZE_MAX) { - break; // overflow - } - bytlen += strlen(tmp); - } - } - bytlen += arithSeriesRepPtr->len; // Space for each separator - - /* - * Pass 2: generate the string repr. - */ - - p = Tcl_InitStringRep(arithSeriesObjPtr, NULL, bytlen); - for (i = 0; i < arithSeriesRepPtr->len; i++) { - if (TclArithSeriesObjIndex(NULL, arithSeriesObjPtr, i, &eleObj) == TCL_OK) { - Tcl_Size slen; - char *str = Tcl_GetStringFromObj(eleObj, &slen); - strcpy(p, str); - p[slen] = ' '; - p += slen+1; - Tcl_DecrRefCount(eleObj); - } // else TODO: report error here? - } - if (bytlen > 0) arithSeriesObjPtr->bytes[bytlen-1] = '\0'; - arithSeriesObjPtr->length = bytlen-1; -} + /* *---------------------------------------------------------------------- * * ArithSeriesInOperator -- @@ -1131,12 +1111,12 @@ */ static int ArithSeriesInOperation( Tcl_Interp *interp, - Tcl_Obj *valueObj, Tcl_Obj *arithSeriesObjPtr, + Tcl_Obj *valueObj, int *boolResult) { ArithSeries *arithSeriesRepPtr = (ArithSeries*)arithSeriesObjPtr->internalRep.twoPtrValue.ptr1; ArithSeriesDbl *dblRepPtr = (ArithSeriesDbl*)arithSeriesRepPtr; int status; @@ -1149,16 +1129,16 @@ incr = 0; // Check index+incr where incr is 0 and 1 status = Tcl_GetDoubleFromObj(interp, valueObj, &y); if (status != TCL_OK) { test = 0; } else { - const char *vstr = Tcl_GetStringFromObj(valueObj, &vlen); + char *vstr = Tcl_GetStringFromObj(valueObj, &vlen); index = (y - dblRepPtr->start) / dblRepPtr->step; while (incr<2) { Tcl_Obj *elemObj; + ArithSeriesObjIndex(interp, arithSeriesObjPtr, (index+incr), &elemObj); elen = 0; - TclArithSeriesObjIndex(interp, arithSeriesObjPtr, (index+incr), &elemObj); const char *estr = elemObj ? Tcl_GetStringFromObj(elemObj, &elen) : ""; /* "in" operation defined as a string compare */ test = (elen == vlen) ? (memcmp(estr, vstr, elen) == 0) : 0; Tcl_BounceRefCount(elemObj); /* Stop if we have a match */ @@ -1182,11 +1162,11 @@ } } else { Tcl_Obj *elemObj; elen = 0; index = (y - intRepPtr->start) / intRepPtr->step; - TclArithSeriesObjIndex(interp, arithSeriesObjPtr, index, &elemObj); + ArithSeriesObjIndex(interp, arithSeriesObjPtr, index, &elemObj); char const *vstr = Tcl_GetStringFromObj(valueObj, &vlen); char const *estr = elemObj ? Tcl_GetStringFromObj(elemObj, &elen) : ""; if (boolResult) { *boolResult = (elen == vlen) ? (memcmp(estr, vstr, elen) == 0) : 0; } Index: generic/tclAssembly.c ================================================================== --- generic/tclAssembly.c +++ generic/tclAssembly.c @@ -1,19 +1,31 @@ +/* + * Copyright © 2010 Ozgur Dogan Ugurlu. + * Copyright © 2010 Kevin B. Kenny. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclAssembly.c -- * * Assembler for Tcl bytecodes. * * This file contains the procedures that convert Tcl Assembly Language (TAL) * to a sequence of bytecode instructions for the Tcl execution engine. * - * Copyright © 2010 Ozgur Dogan Ugurlu. - * Copyright © 2010 Kevin B. Kenny. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. - */ +*/ /*- *- THINGS TO DO: *- More instructions: *- done - alternate exit point (affects stack and exception range checking) @@ -324,11 +336,11 @@ "assemblecode", FreeAssembleCodeInternalRep, /* freeIntRepProc */ DupAssembleCodeInternalRep, /* dupIntRepProc */ NULL, /* updateStringProc */ NULL, /* setFromAnyProc */ - TCL_OBJTYPE_V0 + 0 }; /* * Source instructions recognized in the Tcl Assembly Language (TAL) */ Index: generic/tclAsync.c ================================================================== --- generic/tclAsync.c +++ generic/tclAsync.c @@ -1,18 +1,30 @@ /* - * tclAsync.c -- - * - * This file provides low-level support needed to invoke signal handlers - * in a safe way. The code here doesn't actually handle signals, though. - * This code is based on proposals made by Mark Diekhans and Don Libes. - * * Copyright © 1993 The Regents of the University of California. * Copyright © 1994 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclAsync.c -- + * + * This file provides low-level support needed to invoke signal handlers + * in a safe way. The code here doesn't actually handle signals, though. + * This code is based on proposals made by Mark Diekhans and Don Libes. + * +*/ #include "tclInt.h" /* Forward declaration */ struct ThreadSpecificData; Index: generic/tclBasic.c ================================================================== --- generic/tclBasic.c +++ generic/tclBasic.c @@ -1,12 +1,6 @@ /* - * tclBasic.c -- - * - * Contains the basic facilities for TCL command interpretation, - * including interpreter creation and deletion, command creation and - * deletion, and command/script execution. - * * Copyright © 1987-1994 The Regents of the University of California. * Copyright © 1994-1997 Sun Microsystems, Inc. * Copyright © 1998-1999 Scriptics Corporation. * Copyright © 2001, 2002 Kevin B. Kenny. All rights reserved. * Copyright © 2007 Daniel A. Steffen @@ -14,10 +8,28 @@ * Copyright © 2008 Miguel Sofer * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclBasic.c -- + * + * Contains the basic facilities for TCL command interpretation, + * including interpreter creation and deletion, command creation and + * deletion, and command/script execution. + * +*/ #include "tclInt.h" #include "tclOOInt.h" #include "tclCompile.h" #include "tclTomMath.h" @@ -6119,11 +6131,15 @@ * TODO: Create a test to demo this need, or eliminate it. * FIXME OPT: preserve just the internal rep? */ Tcl_IncrRefCount(objPtr); - listPtr = TclListObjCopy(interp, objPtr); + listPtr = TclDuplicatePureObj(interp, objPtr, tclListTypePtr); + if (!listPtr) { + Tcl_DecrRefCount(objPtr); + return TCL_ERROR; + } Tcl_IncrRefCount(listPtr); if (word != INT_MIN) { /* * TIP #280 Structures for tracking lines. As we know that this is @@ -7013,11 +7029,11 @@ return TCL_ERROR; } code = Tcl_GetDoubleFromObj(interp, objv[1], &d); #ifdef ACCEPT_NAN if (code != TCL_OK) { - const Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(objv[1], &tclDoubleType); + const Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(objv[1], tclDoubleType); if (irPtr) { Tcl_SetObjResult(interp, objv[1]); return TCL_OK; } @@ -7053,11 +7069,11 @@ return TCL_ERROR; } code = Tcl_GetDoubleFromObj(interp, objv[1], &d); #ifdef ACCEPT_NAN if (code != TCL_OK) { - const Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(objv[1], &tclDoubleType); + const Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(objv[1], tclDoubleType); if (irPtr) { Tcl_SetObjResult(interp, objv[1]); return TCL_OK; } @@ -7199,11 +7215,11 @@ return TCL_ERROR; } code = Tcl_GetDoubleFromObj(interp, objv[1], &d); #ifdef ACCEPT_NAN if (code != TCL_OK) { - const Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(objv[1], &tclDoubleType); + const Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(objv[1], tclDoubleType); if (irPtr) { Tcl_SetObjResult(interp, objv[1]); return TCL_OK; } @@ -7253,11 +7269,11 @@ return TCL_ERROR; } code = Tcl_GetDoubleFromObj(interp, objv[1], &d); #ifdef ACCEPT_NAN if (code != TCL_OK) { - const Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(objv[1], &tclDoubleType); + const Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(objv[1], tclDoubleType); if (irPtr) { d = irPtr->doubleValue; Tcl_ResetResult(interp); code = TCL_OK; @@ -7317,11 +7333,11 @@ return TCL_ERROR; } code = Tcl_GetDoubleFromObj(interp, objv[1], &d1); #ifdef ACCEPT_NAN if (code != TCL_OK) { - const Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(objv[1], &tclDoubleType); + const Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(objv[1], tclDoubleType); if (irPtr) { d1 = irPtr->doubleValue; Tcl_ResetResult(interp); code = TCL_OK; @@ -7332,11 +7348,11 @@ return TCL_ERROR; } code = Tcl_GetDoubleFromObj(interp, objv[2], &d2); #ifdef ACCEPT_NAN if (code != TCL_OK) { - const Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(objv[1], &tclDoubleType); + const Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(objv[1], tclDoubleType); if (irPtr) { d2 = irPtr->doubleValue; Tcl_ResetResult(interp); code = TCL_OK; @@ -7493,11 +7509,11 @@ MathFuncWrongNumArgs(interp, 2, objc, objv); return TCL_ERROR; } if (Tcl_GetDoubleFromObj(interp, objv[1], &dResult) != TCL_OK) { #ifdef ACCEPT_NAN - if (TclHasInternalRep(objv[1], &tclDoubleType)) { + if (TclHasInternalRep(objv[1], tclDoubleType)) { Tcl_SetObjResult(interp, objv[1]); return TCL_OK; } #endif return TCL_ERROR; Index: generic/tclBinary.c ================================================================== --- generic/tclBinary.c +++ generic/tclBinary.c @@ -1,17 +1,29 @@ /* - * tclBinary.c -- - * - * This file contains the implementation of the "binary" Tcl built-in - * command and the Tcl binary data object. - * * Copyright © 1997 Sun Microsystems, Inc. * Copyright © 1998-1999 Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclBinary.c -- + * + * This file contains the implementation of the "binary" Tcl built-in + * command and the Tcl binary data object. + * +*/ #include "tclInt.h" #include "tclTomMath.h" #include @@ -161,11 +173,11 @@ "bytearray", FreeProperByteArrayInternalRep, DupProperByteArrayInternalRep, UpdateStringOfByteArray, NULL, - TCL_OBJTYPE_V0 + 0 }; /* * The following structure is the internal rep for a ByteArray object. Keeps * track of how much memory has been used and how much has been allocated for @@ -379,39 +391,10 @@ *numBytesPtr = baPtr->used; } return baPtr->bytes; } -#if !defined(TCL_NO_DEPRECATED) -unsigned char * -TclGetBytesFromObj( - Tcl_Interp *interp, /* For error reporting */ - Tcl_Obj *objPtr, /* Value to extract from */ - void *numBytesPtr) /* If non-NULL, write the number of bytes - * in the array here */ -{ - Tcl_Size numBytes = 0; - unsigned char *bytes = Tcl_GetBytesFromObj(interp, objPtr, &numBytes); - - if (bytes && numBytesPtr) { - if (numBytes > INT_MAX) { - /* Caller asked for numBytes to be written to an int, but the - * value is outside the int range. */ - - if (interp) { - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "byte sequence length exceeds INT_MAX", -1)); - Tcl_SetErrorCode(interp, "TCL", "API", "OUTDATED", (void *)NULL); - } - return NULL; - } else { - *(int *)numBytesPtr = (int) numBytes; - } - } - return bytes; -} -#endif /* *---------------------------------------------------------------------- * * Tcl_SetByteArrayLength -- @@ -1999,11 +1982,11 @@ * returns TCL_ERROR for NaN, but we can check by comparing the * object's type pointer. */ if (Tcl_GetDoubleFromObj(interp, src, &dvalue) != TCL_OK) { - const Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(src, &tclDoubleType); + const Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(src, tclDoubleType); if (irPtr == NULL) { return TCL_ERROR; } dvalue = irPtr->doubleValue; } @@ -2019,11 +2002,11 @@ * returns TCL_ERROR for NaN, but we can check by comparing the * object's type pointer. */ if (Tcl_GetDoubleFromObj(interp, src, &dvalue) != TCL_OK) { - const Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(src, &tclDoubleType); + const Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(src, tclDoubleType); if (irPtr == NULL) { return TCL_ERROR; } dvalue = irPtr->doubleValue; Index: generic/tclCkalloc.c ================================================================== --- generic/tclCkalloc.c +++ generic/tclCkalloc.c @@ -1,21 +1,33 @@ /* - * tclCkalloc.c -- - * - * Interface to malloc and free that provides support for debugging - * problems involving overwritten, double freeing memory and loss of - * memory. - * * Copyright © 1991-1994 The Regents of the University of California. * Copyright © 1994-1997 Sun Microsystems, Inc. * Copyright © 1998-1999 Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * * This code contributed by Karl Lehenbauer and Mark Diekhans */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclCkalloc.c -- + * + * Interface to malloc and free that provides support for debugging + * problems involving overwritten, double freeing memory and loss of + * memory. + * +*/ #include "tclInt.h" #include #define FALSE 0 Index: generic/tclClock.c ================================================================== --- generic/tclClock.c +++ generic/tclClock.c @@ -1,20 +1,31 @@ /* - * tclClock.c -- - * - * Contains the time and date related commands. This code is derived from - * the time and date facilities of TclX, by Mark Diekhans and Karl - * Lehenbauer. - * * Copyright © 1991-1995 Karl Lehenbauer & Mark Diekhans. * Copyright © 1995 Sun Microsystems, Inc. * Copyright © 2004 Kevin B. Kenny. All rights reserved. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclClock.c -- + * + * Contains the time and date related commands. This code is derived from + * the time and date facilities of TclX, by Mark Diekhans and Karl + * Lehenbauer. + */ + #include "tclInt.h" #include "tclTomMath.h" /* * Windows has mktime. The configurators do not check. @@ -431,11 +442,11 @@ /* * fields.seconds could be an unsigned number that overflowed. Make sure * that it isn't. */ - if (TclHasInternalRep(objv[1], &tclBignumType)) { + if (TclHasInternalRep(objv[1], tclBignumType)) { Tcl_SetObjResult(interp, lit[LIT_INTEGER_VALUE_TOO_LARGE]); return TCL_ERROR; } /* Index: generic/tclCmdAH.c ================================================================== --- generic/tclCmdAH.c +++ generic/tclCmdAH.c @@ -1,18 +1,29 @@ /* - * tclCmdAH.c -- - * - * This file contains the top-level command routines for most of the Tcl - * built-in commands whose names begin with the letters A to H. - * * Copyright © 1987-1993 The Regents of the University of California. * Copyright © 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclCmdAH.c -- + * + * This file contains the top-level command routines for most of the Tcl + * built-in commands whose names begin with the letters A to H. + */ + #include "tclInt.h" #include "tclIO.h" #include "tclTomMath.h" #ifdef _WIN32 # include "tclWinInt.h" @@ -2077,11 +2088,11 @@ if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "name"); return TCL_ERROR; } - res = Tcl_FSSplitPath(objv[1], (Tcl_Size *)NULL); + res = Tcl_FSSplitPath(objv[1], NULL); if (res == NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "could not read \"%s\": no such file or directory", TclGetString(objv[1]))); Tcl_SetErrorCode(interp, "TCL", "OPERATION", "PATHSPLIT", "NONESUCH", @@ -2818,12 +2829,13 @@ */ for (i=0 ; ivCopyList[i] = TclListObjCopy(interp, objv[1+i*2]); - if (statePtr->vCopyList[i] == NULL) { + statePtr->vCopyList[i] = TclDuplicatePureObj( + interp, objv[1+i*2], tclListTypePtr); + if (!statePtr->vCopyList[i]) { result = TCL_ERROR; goto done; } result = TclListObjLengthM(interp, statePtr->vCopyList[i], &statePtr->varcList[i]); @@ -2843,23 +2855,29 @@ } TclListObjGetElementsM(NULL, statePtr->vCopyList[i], &statePtr->varcList[i], &statePtr->varvList[i]); /* Values */ - if (TclObjTypeHasProc(objv[2+i*2],indexProc)) { - /* Special case for AbstractList */ + if (TclObjectHasInterface(objv[2+i*2], list, length)) { + int status; statePtr->aCopyList[i] = Tcl_DuplicateObj(objv[2+i*2]); + Tcl_IncrRefCount(statePtr->aCopyList[i]); if (statePtr->aCopyList[i] == NULL) { result = TCL_ERROR; goto done; } /* Don't compute values here, wait until the last moment */ - statePtr->argcList[i] = TclObjTypeLength(statePtr->aCopyList[i]); + TclObjectDispatchNoDefault(interp, status, statePtr->aCopyList[i], list, + length, interp, statePtr->aCopyList[i], &statePtr->argcList[i]); + if (status != TCL_OK) { + result = TCL_ERROR; + goto done; + } } else { - /* List values */ - statePtr->aCopyList[i] = TclListObjCopy(interp, objv[2+i*2]); - if (statePtr->aCopyList[i] == NULL) { + statePtr->aCopyList[i] = TclDuplicatePureObj( + interp, objv[2+i*2], tclListTypePtr); + if (!statePtr->aCopyList[i]) { result = TCL_ERROR; goto done; } result = TclListObjGetElementsM(interp, statePtr->aCopyList[i], &statePtr->argcList[i], &statePtr->argvList[i]); @@ -2992,18 +3010,20 @@ int i; Tcl_Size v, k; Tcl_Obj *valuePtr, *varValuePtr; for (i=0 ; inumLists ; i++) { - int isAbstractList = - TclObjTypeHasProc(statePtr->aCopyList[i],indexProc) != NULL; - + int status; + int hasindexinterface = TclObjectHasInterface( + statePtr->aCopyList[i], list, index); for (v=0 ; vvarcList[i] ; v++) { k = statePtr->index[i]++; if (k < statePtr->argcList[i]) { - if (isAbstractList) { - if (TclObjTypeIndex(interp, statePtr->aCopyList[i], k, &valuePtr) != TCL_OK) { + if (hasindexinterface) { + status = TclObjectDispatchNoDefault(interp, status, statePtr->aCopyList[i], list, + index, interp, statePtr->aCopyList[i], k, &valuePtr); + if (status != TCL_OK) { Tcl_AppendObjToErrorInfo(interp, Tcl_ObjPrintf( "\n (setting %s loop variable \"%s\")", (statePtr->resultList != NULL ? "lmap" : "foreach"), TclGetString(statePtr->varvList[i][v]))); return TCL_ERROR; Index: generic/tclCmdIL.c ================================================================== --- generic/tclCmdIL.c +++ generic/tclCmdIL.c @@ -1,13 +1,6 @@ /* - * tclCmdIL.c -- - * - * This file contains the top-level command routines for most of the Tcl - * built-in commands whose names begin with the letters I through L. It - * contains only commands in the generic core (i.e., those that don't - * depend much upon UNIX facilities). - * * Copyright © 1987-1993 The Regents of the University of California. * Copyright © 1993-1997 Lucent Technologies. * Copyright © 1994-1997 Sun Microsystems, Inc. * Copyright © 1998-1999 Scriptics Corporation. * Copyright © 2001 Kevin B. Kenny. All rights reserved. @@ -15,10 +8,28 @@ * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclCmdIL.c -- + * + * This file contains the top-level command routines for most of the Tcl + * built-in commands whose names begin with the letters I through L. It + * contains only commands in the generic core (i.e., those that don't + * depend much upon UNIX facilities). + */ + #include "tclInt.h" #include "tclRegexp.h" #include "tclTomMath.h" #include #include @@ -2202,12 +2213,12 @@ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* The argument objects. */ { Tcl_Size length, listLen; - int isAbstractList = 0; - Tcl_Obj *resObjPtr = NULL, *joinObjPtr, **elemPtrs; + int status; + Tcl_Obj *resObjPtr = NULL, *joinObjPtr, **elemPtrs = NULL; if ((objc < 2) || (objc > 3)) { Tcl_WrongNumArgs(interp, 1, objv, "list ?joinString?"); return TCL_ERROR; } @@ -2215,65 +2226,106 @@ /* * Make sure the list argument is a list object and get its length and a * pointer to its array of element pointers. */ - if (TclObjTypeHasProc(objv[1], getElementsProc)) { - listLen = TclObjTypeLength(objv[1]); - isAbstractList = (listLen ? 1 : 0); - if (listLen > 1 && - TclObjTypeGetElements(interp, objv[1], &listLen, &elemPtrs) - != TCL_OK) { + if (TclObjectHasInterface(objv[1], list, length)) { + status = TclObjectDispatchNoDefault(interp, status, objv[1], list, + length, interp, objv[1], &listLen); + if (status != TCL_OK ) { return TCL_ERROR; } - } else if (TclListObjGetElementsM(interp, objv[1], &listLen, + } else { + if (TclListObjGetElementsM(interp, objv[1], &listLen, &elemPtrs) != TCL_OK) { - return TCL_ERROR; + return TCL_ERROR; + } } if (listLen == 0) { /* No elements to join; default empty result is correct. */ return TCL_OK; } if (listLen == 1) { + Tcl_Obj *valueObj; /* One element; return it */ - if (!isAbstractList) { - Tcl_SetObjResult(interp, elemPtrs[0]); - } else { - Tcl_Obj *elemObj; - if (TclObjTypeIndex(interp, objv[1], 0, &elemObj) - != TCL_OK) { + if (TclObjectHasInterface(objv[1], list, index)) { + TclObjectDispatchNoDefault(interp, status, objv[1], list, + index, interp, objv[1], 0, &valueObj); + if (status != TCL_OK) { return TCL_ERROR; } - Tcl_SetObjResult(interp, elemObj); + Tcl_SetObjResult(interp, valueObj); + } else { + if (elemPtrs == NULL) { + if (TclListObjGetElementsM(interp, objv[1], &listLen, + &elemPtrs) != TCL_OK) { + return TCL_ERROR; + } + } + Tcl_SetObjResult(interp, elemPtrs[0]); } return TCL_OK; } joinObjPtr = (objc == 2) ? Tcl_NewStringObj(" ", 1) : objv[2]; Tcl_IncrRefCount(joinObjPtr); (void) Tcl_GetStringFromObj(joinObjPtr, &length); if (length == 0) { + if (TclListObjGetElementsM(interp, objv[1], &listLen, + &elemPtrs) != TCL_OK) { + return TCL_ERROR; + } resObjPtr = TclStringCat(interp, listLen, elemPtrs, 0); } else { Tcl_Size i; TclNewObj(resObjPtr); - for (i = 0; i < listLen; i++) { - if (i > 0) { - - /* - * NOTE: This code is relying on Tcl_AppendObjToObj() **NOT** - * to shimmer joinObjPtr. If it did, then the case where - * objv[1] and objv[2] are the same value would not be safe. - * Accessing elemPtrs would crash. - */ - - Tcl_AppendObjToObj(resObjPtr, joinObjPtr); - } - Tcl_AppendObjToObj(resObjPtr, elemPtrs[i]); + if (TclObjectHasInterface(objv[1], list, index)) { + Tcl_Obj *valueObj; + for (i = 0; i < listLen; i++) { + if (i > 0) { + + /* + * NOTE: This code is relying on Tcl_AppendObjToObj() **NOT** + * to shimmer joinObjPtr. If it did, then the case where + * objv[1] and objv[2] are the same value would not be safe. + * Accessing elemPtrs would crash. + */ + + Tcl_AppendObjToObj(resObjPtr, joinObjPtr); + } + TclObjectDispatchNoDefault(interp, status, objv[1], list, + index, interp, objv[1], i, &valueObj); + if (status != TCL_OK) { + return TCL_ERROR; + } + Tcl_AppendObjToObj(resObjPtr, valueObj); + TclBounceRefCount(valueObj); + } + } else { + if (elemPtrs == NULL) { + if (TclListObjGetElementsM(interp, objv[1], &listLen, + &elemPtrs) != TCL_OK) { + return TCL_ERROR; + } + } + for (i = 0; i < listLen; i++) { + if (i > 0) { + + /* + * NOTE: This code is relying on Tcl_AppendObjToObj() **NOT** + * to shimmer joinObjPtr. If it did, then the case where + * objv[1] and objv[2] are the same value would not be safe. + * Accessing elemPtrs would crash. + */ + + Tcl_AppendObjToObj(resObjPtr, joinObjPtr); + } + Tcl_AppendObjToObj(resObjPtr, elemPtrs[i]); + } } } Tcl_DecrRefCount(joinObjPtr); if (resObjPtr) { Tcl_SetObjResult(interp, resObjPtr); @@ -2307,11 +2359,11 @@ Tcl_Obj *const objv[]) /* Argument objects. */ { Tcl_Obj *listPtr; Tcl_Size listObjc; /* The length of the list. */ Tcl_Size origListObjc; /* Original length */ - int i; + int i, status; if (objc < 2) { Tcl_WrongNumArgs(interp, 1, objv, "list ?varName ...?"); return TCL_ERROR; } @@ -2370,27 +2422,28 @@ } Tcl_DecrRefCount(emptyObj); } if (listObjc > 0) { - Tcl_Obj *resultObjPtr = NULL; + Tcl_Obj *resultPtr = NULL; Tcl_Size fromIdx = origListObjc - listObjc; Tcl_Size toIdx = origListObjc - 1; - if (TclObjTypeHasProc(listPtr, sliceProc)) { - if (TclObjTypeSlice( - interp, listPtr, fromIdx, toIdx, &resultObjPtr) != TCL_OK) { + if (TclObjectHasInterface(listPtr, list, range)) { + TclObjectDispatchNoDefault(interp, status, listPtr, list, range, + interp, listPtr, fromIdx, toIdx, &resultPtr); + if (status != TCL_OK) { return TCL_ERROR; } } else { - resultObjPtr = TclListObjRange( - interp, listPtr, origListObjc - listObjc, origListObjc - 1); - if (resultObjPtr == NULL) { - return TCL_ERROR; + status = TclListObjRange(interp, listPtr, + origListObjc - listObjc, origListObjc - 1, &resultPtr); + if (status != TCL_OK || resultPtr == NULL) { + return status; } } - Tcl_SetObjResult(interp, resultObjPtr); + Tcl_SetObjResult(interp, resultPtr); } return TCL_OK; } @@ -2509,11 +2562,14 @@ * create a copy to modify: this is "copy on write". */ listPtr = objv[1]; if (Tcl_IsShared(listPtr)) { - listPtr = TclListObjCopy(NULL, listPtr); + listPtr = TclDuplicatePureObj(interp, listPtr, tclListTypePtr); + if (!listPtr) { + return TCL_ERROR; + } copied = 1; } if ((objc == 4) && (index == len)) { /* @@ -2654,11 +2710,11 @@ int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { Tcl_Size listLen; - int copied = 0, result; + int copied = 0, result, status; Tcl_Obj *elemPtr, *stored; Tcl_Obj *listPtr; if (objc < 2) { Tcl_WrongNumArgs(interp, 1, objv, "listvar ?index?"); @@ -2706,16 +2762,18 @@ Tcl_SetObjResult(interp, elemPtr); Tcl_DecrRefCount(elemPtr); /* * Second, remove the element. - * TclLsetFlat adds a ref count which is handled. */ if (objc == 2) { if (Tcl_IsShared(listPtr)) { - listPtr = TclListObjCopy(NULL, listPtr); + listPtr = TclDuplicatePureObj(interp, listPtr, tclListTypePtr); + if (!listPtr) { + return TCL_ERROR; + } copied = 1; } result = Tcl_ListObjReplace(interp, listPtr, listLen - 1, 1, 0, NULL); if (result != TCL_OK) { if (copied) { @@ -2723,24 +2781,15 @@ } return result; } } else { Tcl_Obj *newListPtr; - Tcl_ObjTypeSetElement *proc = TclObjTypeHasProc(listPtr, setElementProc); - if (proc) { - newListPtr = proc(interp, listPtr, objc-2, objv+2, NULL); - } else { - newListPtr = TclLsetFlat(interp, listPtr, objc-2, objv+2, NULL); - } - if (newListPtr == NULL) { - if (copied) { - Tcl_DecrRefCount(listPtr); - } - return TCL_ERROR; + status = TclLsetFlat(interp, listPtr, objc-2, objv+2, NULL, &newListPtr); + if (status != TCL_OK || newListPtr == NULL) { + return status; } else { listPtr = newListPtr; - TclUndoRefCount(listPtr); } } stored = Tcl_ObjSetVar2(interp, objv[1], NULL, listPtr, TCL_LEAVE_ERR_MSG); if (stored == NULL) { @@ -2773,12 +2822,12 @@ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { - int result; - Tcl_Size listLen, first, last; + int result, status; + Tcl_Size fromAnchor, first, fromIdx, last, listLen, toAnchor, toIdx; if (objc != 4) { Tcl_WrongNumArgs(interp, 1, objv, "list first last"); return TCL_ERROR; } @@ -2785,36 +2834,58 @@ result = TclListObjLengthM(interp, objv[1], &listLen); if (result != TCL_OK) { return result; } - result = TclGetIntForIndexM(interp, objv[2], /*endValue*/ listLen - 1, - &first); - if (result != TCL_OK) { - return result; - } - - result = TclGetIntForIndexM(interp, objv[3], /*endValue*/ listLen - 1, - &last); - if (result != TCL_OK) { - return result; - } - - if (TclObjTypeHasProc(objv[1], sliceProc)) { - Tcl_Obj *resultObj; - int status = TclObjTypeSlice(interp, objv[1], first, last, &resultObj); - if (status == TCL_OK) { - Tcl_SetObjResult(interp, resultObj); - } else { - return TCL_ERROR; - } - } else { - Tcl_Obj *resultObj = TclListObjRange(interp, objv[1], first, last); - if (resultObj == NULL) { - return TCL_ERROR; - } - Tcl_SetObjResult(interp, resultObj); + result = TclGetIntForIndexM(interp, objv[2], /*endValue*/ TCL_SIZE_MAX - 1, + &toIdx); + if (result != TCL_OK) { + return result; + } + + result = TclGetIntForIndexM(interp, objv[2], /*endValue*/ TCL_SIZE_MAX - 1, + &fromIdx); + if (result != TCL_OK) { + return result; + } + + toAnchor = TclIndexIsFromEnd(toIdx); + fromAnchor = TclIndexIsFromEnd(fromIdx); + + if (!Tcl_LengthIsFinite(listLen) + && (toAnchor == 1 || fromAnchor == 1) + && TclObjectHasInterface(objv[1], list, rangeEnd) + ) { + Tcl_Obj *objResultPtr; + + status = TclObjectInterfaceCall(objv[1], list, rangeEnd, + interp, objv[1], toAnchor, toIdx, fromAnchor, fromIdx, + &objResultPtr); + if (status != TCL_OK || objResultPtr == NULL) { + return TCL_ERROR; + } else { + Tcl_SetObjResult(interp, objResultPtr); + } + } else { + Tcl_Obj *resultPtr; + result = TclGetIntForIndexM(interp, objv[2], /*endValue*/ listLen - 1, + &first); + if (result != TCL_OK) { + return result; + } + + result = TclGetIntForIndexM(interp, objv[3], /*endValue*/ listLen - 1, + &last); + if (result != TCL_OK) { + return result; + } + + status = TclListObjRange(interp, objv[1], first, last, &resultPtr); + if (status != TCL_OK || resultPtr == NULL) { + return status; + } + Tcl_SetObjResult(interp, resultPtr); } return TCL_OK; } /* @@ -2901,11 +2972,15 @@ /* * Make our working copy, then do the actual removes piecemeal. */ if (Tcl_IsShared(listObj)) { - listObj = TclListObjCopy(NULL, listObj); + listObj = TclDuplicatePureObj(interp, listObj, tclListTypePtr); + if (!listObj) { + status = TCL_ERROR; + goto done; + } copied = 1; } num = 0; first = listLen; for (i = 0, prevIdx = -1 ; i < idxc ; i++) { @@ -2986,12 +3061,11 @@ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* The argument objects. */ { - Tcl_WideInt elementCount, i; - Tcl_Size totalElems; + Tcl_Size elementCount, i, totalElems; Tcl_Obj *listPtr, **dataArray = NULL; /* * Check arguments for legality: * lrepeat count ?value ...? @@ -2999,16 +3073,16 @@ if (objc < 2) { Tcl_WrongNumArgs(interp, 1, objv, "count ?value ...?"); return TCL_ERROR; } - if (TCL_OK != TclGetWideIntFromObj(interp, objv[1], &elementCount)) { + if (TCL_OK != Tcl_GetSizeIntFromObj(interp, objv[1], &elementCount)) { return TCL_ERROR; } if (elementCount < 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "bad count \"%" TCL_LL_MODIFIER "d\": must be integer >= 0", elementCount)); + "bad count \"%" TCL_SIZE_MODIFIER "d\": must be integer >= 0", elementCount)); Tcl_SetErrorCode(interp, "TCL", "OPERATION", "LREPEAT", "NEGARG", (void *)NULL); return TCL_ERROR; } @@ -3141,11 +3215,11 @@ if (last >= listLen) { last = listLen - 1; } if (first <= last) { - numToDelete = (size_t)last - (size_t)first + 1; /* See [3d3124d01d] */ + numToDelete = last - first + 1; } else { numToDelete = 0; } /* @@ -3153,11 +3227,14 @@ * create a copy to modify: this is "copy on write". */ listPtr = objv[1]; if (Tcl_IsShared(listPtr)) { - listPtr = TclListObjCopy(NULL, listPtr); + listPtr = TclDuplicatePureObj(interp, listPtr, tclListTypePtr); + if (!listPtr) { + return TCL_ERROR; + } } /* * Note that we call Tcl_ListObjReplace even when numToDelete == 0 and * objc == 4. In this case, the list value of listPtr is not changed (no @@ -3210,22 +3287,25 @@ if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "list"); return TCL_ERROR; } - /* - * Handle AbstractList special case - do not shimmer into a list, if it - * supports a private Reverse function, just to reverse it. - */ - if (TclObjTypeHasProc(objv[1], reverseProc)) { - Tcl_Obj *resultObj; - - if (TclObjTypeReverse(interp, objv[1], &resultObj) == TCL_OK) { - Tcl_SetObjResult(interp, resultObj); - return TCL_OK; - } - } /* end Abstract List */ + if (TclObjectHasInterface(objv[1], list, reverse)) { + int status; + Tcl_Obj *resObj; + if (Tcl_IsShared(objv[1])) { + resObj = Tcl_DuplicateObj(objv[1]); + } else { + resObj = objv[1]; + } + TclObjectDispatchNoDefault(interp, status, resObj, list, + reverse, interp, resObj); + if (status == TCL_OK) { + Tcl_SetObjResult(interp, resObj); + } + return status; + } if (TclListObjLengthM(interp, objv[1], &elemc) != TCL_OK) { return TCL_ERROR; } @@ -3308,18 +3388,18 @@ Tcl_Obj *const objv[]) /* Argument values. */ { const char *bytes, *patternBytes; int match, result=TCL_OK, bisect; Tcl_Size i, length = 0, listc, elemLen, start, index; - Tcl_Size groupOffset, lower, upper; + Tcl_Size groupSize, groupOffset, lower, upper; int allocatedIndexVector = 0; int isIncreasing; - Tcl_WideInt patWide, objWide, wide, groupSize; + Tcl_WideInt patWide, objWide, wide; int allMatches, inlineReturn, negatedMatch, returnSubindices, noCase; double patDouble, objDouble; SortInfo sortInfo; - Tcl_Obj *patObj, **listv, *listPtr, *startPtr, *itemPtr = NULL; + Tcl_Obj *patObj, *itemPtr, *item2Ptr, *listPtr, *subjectPtr, *startPtr; SortStrCmpFn_t strCmpFn = TclUtfCmp; Tcl_RegExp regexp = NULL; static const char *const options[] = { "-all", "-ascii", "-bisect", "-decreasing", "-dictionary", "-exact", "-glob", "-increasing", "-index", @@ -3345,10 +3425,11 @@ mode = GLOB; dataType = ASCII; isIncreasing = 1; allMatches = 0; inlineReturn = 0; + itemPtr = NULL; returnSubindices = 0; negatedMatch = 0; bisect = 0; listPtr = NULL; startPtr = NULL; @@ -3613,11 +3694,12 @@ /* * Make sure the list argument is a list object and get its length and a * pointer to its array of element pointers. */ - result = TclListObjGetElementsM(interp, objv[objc - 2], &listc, &listv); + subjectPtr = objv[objc-2]; + result = Tcl_ListObjLength(interp, subjectPtr, &listc); if (result != TCL_OK) { goto done; } /* @@ -3667,29 +3749,31 @@ /* * Get the user-specified start offset. */ if (startPtr) { - result = TclGetIntForIndexM(interp, startPtr, listc-1, &start); + result = TclGetIntForIndexM(interp, startPtr, + (Tcl_LengthIsFinite(listc) ? listc - 1 : TCL_SIZE_MAX), &start); if (result != TCL_OK) { goto done; } if (start == TCL_INDEX_NONE) { start = TCL_INDEX_START; } /* - * If the search started past the end of the list, we just return a + * If the search started past the end of the list, just return a * "did not match anything at all" result straight away. [Bug 1374778] */ - if (start >= listc) { + if (Tcl_LengthIsFinite(listc) && start >= listc) { if (allMatches || inlineReturn) { Tcl_ResetResult(interp); } else { TclNewIntObj(itemPtr, -1); Tcl_SetObjResult(interp, itemPtr); + itemPtr = NULL; } goto done; } /* @@ -3714,28 +3798,24 @@ if (result != TCL_OK) { goto done; } /* - * List representation might have been shimmered; restore it. [Bug - * 1844789] + * [Bug 1844789], "lsearch -exact -integer ..." crashes, was + * previously fixed at this point. */ - - TclListObjGetElementsM(NULL, objv[objc - 2], &listc, &listv); break; case REAL: result = Tcl_GetDoubleFromObj(interp, patObj, &patDouble); if (result != TCL_OK) { goto done; } /* - * List representation might have been shimmered; restore it. [Bug - * 1844789] + * [Bug 1844789], "lsearch -exact -integer ..." crashes, was + * previously fixed at this point. */ - - TclListObjGetElementsM(NULL, objv[objc - 2], &listc, &listv); break; } } else { patternBytes = Tcl_GetStringFromObj(patObj, &length); } @@ -3747,10 +3827,11 @@ index = -1; match = 0; if (mode == SORTED && !allMatches && !negatedMatch) { + int isfinite; /* * If the data is sorted, we can do a more intelligent search. Note * that there is no point in being smart when -all was specified; in * that case, we have to look at all items anyway, and there is no * sense in doing this when the match sense is inverted. @@ -3759,27 +3840,61 @@ /* * With -stride, lower, upper and i are kept as multiples of groupSize. */ lower = start - groupSize; - upper = listc; - itemPtr = NULL; - while (lower + groupSize != upper && sortInfo.resultCode == TCL_OK) { - i = (lower + upper)/2; + isfinite = Tcl_LengthIsFinite(listc); + if (isfinite) { + upper = listc; + } else { + upper = 1; + } + while ( + (lower + groupSize < upper && sortInfo.resultCode == TCL_OK) + || !isfinite + ) { + i = (lower + upper) / 2; + if (i < 0) { + result = TCL_ERROR; + Tcl_SetObjResult(interp, Tcl_NewStringObj("sorted list is incoherent", -1)); + goto done; + } i -= i % groupSize; - - Tcl_BounceRefCount(itemPtr); - itemPtr = NULL; - + result = Tcl_ListObjIndex(interp, subjectPtr, i+groupOffset, &itemPtr); + if (result != TCL_OK) { + if (isfinite) { + goto done; + } else { + if (Tcl_ListObjLength(interp, subjectPtr, &listc) == TCL_OK) { + isfinite = Tcl_LengthIsFinite(listc); + if (isfinite) { + if (listc - 1 > i) { + upper = listc = 1; + break; + } else { + goto done; + } + } else { + goto done; + } + } else { + goto done; + } + } + } + Tcl_IncrRefCount(itemPtr); if (sortInfo.indexc != 0) { - itemPtr = SelectObjFromSublist(listv[i+groupOffset], &sortInfo); + item2Ptr = SelectObjFromSublist(itemPtr, &sortInfo); if (sortInfo.resultCode != TCL_OK) { result = sortInfo.resultCode; goto done; } - } else { - itemPtr = listv[i+groupOffset]; + /* Increment item2Ptr refcount first in case it's the same + * object as itemPtr. */ + Tcl_IncrRefCount(item2Ptr); + Tcl_DecrRefCount(itemPtr); + itemPtr = item2Ptr; } switch (dataType) { case ASCII: bytes = TclGetString(itemPtr); match = strCmpFn(patternBytes, bytes); @@ -3813,10 +3928,12 @@ } else { match = 1; } break; } + Tcl_DecrRefCount(itemPtr); + itemPtr = NULL; if (match == 0) { /* * Normally, binary search is written to stop when it finds a * match. If there are duplicates of an element in the list, * our first match might not be the first occurrence. @@ -3839,18 +3956,26 @@ upper = i; } } else if (match > 0) { if (isIncreasing) { lower = i; + if (!isfinite) { + upper *= 2; + } } else { upper = i; + isfinite = 1; } } else { if (isIncreasing) { upper = i; + isfinite = 1; } else { lower = i; + if (!isfinite) { + upper *= 2; + } } } } if (bisect && index < 0) { index = lower; @@ -3864,26 +3989,31 @@ */ if (allMatches) { listPtr = Tcl_NewListObj(0, NULL); } - for (i = start; i < listc; i += groupSize) { + for (i = start; listc < 0 || i < listc; i += groupSize) { match = 0; - Tcl_BounceRefCount(itemPtr); - itemPtr = NULL; - + result = Tcl_ListObjIndex(interp, subjectPtr, i+groupOffset, &itemPtr); + if (result != TCL_OK) { + goto done; + } + Tcl_IncrRefCount(itemPtr); if (sortInfo.indexc != 0) { - itemPtr = SelectObjFromSublist(listv[i+groupOffset], &sortInfo); + item2Ptr = SelectObjFromSublist(itemPtr, &sortInfo); if (sortInfo.resultCode != TCL_OK) { if (listPtr != NULL) { Tcl_DecrRefCount(listPtr); } result = sortInfo.resultCode; goto done; } - } else { - itemPtr = listv[i+groupOffset]; + /* Increment item2Ptr refcount first in case it's the same + * object as itemPtr. */ + Tcl_IncrRefCount(item2Ptr); + Tcl_DecrRefCount(itemPtr); + itemPtr = item2Ptr; } switch (mode) { case SORTED: case EXACT: @@ -3957,53 +4087,73 @@ if (negatedMatch) { match = !match; } if (!match) { + Tcl_DecrRefCount(itemPtr); + itemPtr = NULL; continue; } if (!allMatches) { index = i; + Tcl_DecrRefCount(itemPtr); + itemPtr = NULL; break; } else if (inlineReturn) { /* - * Note that these appends are not expected to fail. + * These append operations are expected to not fail. */ + Tcl_DecrRefCount(itemPtr); + itemPtr = NULL; if (returnSubindices && (sortInfo.indexc != 0)) { - Tcl_BounceRefCount(itemPtr); - itemPtr = SelectObjFromSublist(listv[i+groupOffset], - &sortInfo); - Tcl_ListObjAppendElement(interp, listPtr, itemPtr); + result = Tcl_ListObjIndex(interp, subjectPtr, i+groupOffset, &itemPtr); + if (result != TCL_OK) { + goto done; + } + Tcl_IncrRefCount(itemPtr); + item2Ptr = SelectObjFromSublist(itemPtr, &sortInfo); + Tcl_ListObjAppendElement(interp, listPtr, item2Ptr); + Tcl_DecrRefCount(itemPtr); } else if (groupSize > 1) { - Tcl_ListObjReplace(interp, listPtr, LIST_MAX, 0, - groupSize, &listv[i]); + Tcl_Size j; + for (j = 0; j < groupSize; j++) { + result = Tcl_ListObjIndex(interp, subjectPtr, + i+j, &itemPtr); + if (result != TCL_OK) { + goto done; + } + Tcl_ListObjReplace(interp, listPtr, LIST_MAX, 0, + 1, &itemPtr); + } } else { - Tcl_BounceRefCount(itemPtr); - itemPtr = listv[i]; + result = Tcl_ListObjIndex(interp, subjectPtr, i, &itemPtr); + if (result != TCL_OK) { + goto done; + } Tcl_ListObjAppendElement(interp, listPtr, itemPtr); } } else if (returnSubindices) { Tcl_Size j; + Tcl_DecrRefCount(itemPtr); TclNewIndexObj(itemPtr, i+groupOffset); for (j=0 ; j 1) { - Tcl_SetObjResult(interp, Tcl_NewListObj(groupSize, &listv[index])); + Tcl_Size j; + listPtr = Tcl_NewListObj(0, NULL); + for (j = 0; j < groupSize; j++) { + result = Tcl_ListObjIndex(interp, subjectPtr, index + j, &itemPtr); + if (result != TCL_OK) { + Tcl_DecrRefCount(listPtr); + goto done; + } + Tcl_ListObjAppendElement(interp, listPtr, itemPtr); + } + Tcl_SetObjResult(interp, listPtr); } else { - Tcl_SetObjResult(interp, listv[index]); + result = Tcl_ListObjIndex(interp, subjectPtr, index, &itemPtr); + if (result != TCL_OK) { + goto done; + } + Tcl_SetObjResult(interp, itemPtr); } + itemPtr = NULL; } result = TCL_OK; /* * Cleanup the index list array. */ done: - /* potential lingering abstract list element */ - Tcl_BounceRefCount(itemPtr); - + if (itemPtr != NULL) { + Tcl_DecrRefCount(itemPtr); + } if (startPtr != NULL) { Tcl_DecrRefCount(startPtr); } if (allocatedIndexVector) { TclStackFree(interp, sortInfo.indexv); } return result; } + + +/* + *---------------------------------------------------------------------- + * + * Tcl_LsetObjCmd -- + * + * This procedure is invoked to process the "lset" Tcl command. See the + * user documentation for details on what it does. + * + * Results: + * A standard Tcl result. + * + * Side effects: + * See the user documentation. + * + *---------------------------------------------------------------------- + */ + +int +Tcl_LsetObjCmd( + TCL_UNUSED(ClientData), + Tcl_Interp *interp, /* Current interpreter. */ + int objc, /* Number of arguments. */ + Tcl_Obj *const objv[]) /* Argument values. */ +{ + Tcl_Obj *listPtr; /* Pointer to the list being altered. */ + Tcl_Obj *finalValuePtr; /* Value finally assigned to the variable. */ + int status = TCL_OK; + + /* + * Check parameter count. + */ + + if (objc < 3) { + Tcl_WrongNumArgs(interp, 1, objv, + "listVar ?index? ?index ...? value"); + return TCL_ERROR; + } + + /* + * Look up the list variable's value. + */ + + listPtr = Tcl_ObjGetVar2(interp, objv[1], NULL, TCL_LEAVE_ERR_MSG); + if (listPtr == NULL) { + return TCL_ERROR; + } + + /* + * Substitute the value in the value. Return either the value or else an + * unshared copy of it. + */ + + if (objc == 4) { + finalValuePtr = TclLsetList(interp, listPtr, objv[2], objv[3]); + } else { + status = TclLsetFlat(interp, listPtr, objc-3, objv+2, + objv[objc-1], &finalValuePtr); + } + + /* + * If substitution has failed, bail out. + */ + + if (status != TCL_OK || finalValuePtr == NULL) { + return TCL_ERROR; + } + + /* + * Finally, update the variable so that traces fire. + */ + + listPtr = Tcl_ObjSetVar2(interp, objv[1], NULL, finalValuePtr, + TCL_LEAVE_ERR_MSG); + if (listPtr == NULL) { + return TCL_ERROR; + } + + /* + * Return the new value of the variable as the interpreter result. + */ + + Tcl_SetObjResult(interp, listPtr); + return TCL_OK; +} /* *---------------------------------------------------------------------- * * SequenceIdentifyArgument -- @@ -4429,16 +4685,20 @@ } /* * Success! Now lets create the series object. */ - status = TclNewArithSeriesObj(interp, &arithSeriesPtr, - useDoubles, start, end, step, elementCount); + arithSeriesPtr = TclNewArithSeriesObj(interp, + useDoubles, start, end, step, elementCount); - if (status == TCL_OK) { + if (arithSeriesPtr) { + status = TCL_OK; Tcl_SetObjResult(interp, arithSeriesPtr); + } else { + status = TCL_ERROR; } + done: // Free number arguments. while (--value_i>=0) { if (numValues[value_i]) Tcl_DecrRefCount(numValues[value_i]); @@ -4448,103 +4708,10 @@ Tcl_DecrRefCount(zero); Tcl_DecrRefCount(one); return status; } - -/* - *---------------------------------------------------------------------- - * - * Tcl_LsetObjCmd -- - * - * This procedure is invoked to process the "lset" Tcl command. See the - * user documentation for details on what it does. - * - * Results: - * A standard Tcl result. - * - * Side effects: - * See the user documentation. - * - *---------------------------------------------------------------------- - */ - -int -Tcl_LsetObjCmd( - TCL_UNUSED(void *), - Tcl_Interp *interp, /* Current interpreter. */ - int objc, /* Number of arguments. */ - Tcl_Obj *const objv[]) /* Argument values. */ -{ - Tcl_Obj *listPtr; /* Pointer to the list being altered. */ - Tcl_Obj *finalValuePtr; /* Value finally assigned to the variable. */ - - /* - * Check parameter count. - */ - - if (objc < 3) { - Tcl_WrongNumArgs(interp, 1, objv, - "listVar ?index? ?index ...? value"); - return TCL_ERROR; - } - - /* - * Look up the list variable's value. - */ - - listPtr = Tcl_ObjGetVar2(interp, objv[1], NULL, TCL_LEAVE_ERR_MSG); - if (listPtr == NULL) { - return TCL_ERROR; - } - - /* - * Substitute the value in the value. Return either the value or else an - * unshared copy of it. - */ - - if (objc == 4) { - finalValuePtr = TclLsetList(interp, listPtr, objv[2], objv[3]); - } else { - if (TclObjTypeHasProc(listPtr, setElementProc)) { - finalValuePtr = TclObjTypeSetElement(interp, listPtr, - objc-3, objv+2, objv[objc-1]); - if (finalValuePtr) { - Tcl_IncrRefCount(finalValuePtr); - } - } else { - finalValuePtr = TclLsetFlat(interp, listPtr, objc-3, objv+2, - objv[objc-1]); - } - } - - /* - * If substitution has failed, bail out. - */ - - if (finalValuePtr == NULL) { - return TCL_ERROR; - } - - /* - * Finally, update the variable so that traces fire. - */ - - listPtr = Tcl_ObjSetVar2(interp, objv[1], NULL, finalValuePtr, - TCL_LEAVE_ERR_MSG); - Tcl_DecrRefCount(finalValuePtr); - if (listPtr == NULL) { - return TCL_ERROR; - } - - /* - * Return the new value of the variable as the interpreter result. - */ - - Tcl_SetObjResult(interp, listPtr); - return TCL_OK; -} /* *---------------------------------------------------------------------- * * Tcl_LsortObjCmd -- @@ -4569,12 +4736,12 @@ Tcl_Obj *const objv[]) /* Argument values. */ { int indices, nocase = 0, indexc; int sortMode = SORTMODE_ASCII; int group, allocatedIndexVector = 0; - Tcl_Size j, idx, groupOffset, length; - Tcl_WideInt wide, groupSize; + Tcl_Size j, idx, groupSize, groupOffset, length; + Tcl_WideInt wide; Tcl_Obj *resultPtr, *cmdPtr, **listObjPtrs, *listObj, *indexPtr; Tcl_Size i, elmArrSize; SortElement *elementArray = NULL, *elementPtr; SortInfo sortInfo; /* Information about this sort that needs to * be passed to the comparison function. */ @@ -4786,11 +4953,11 @@ * have the representation of the list being sorted shimmered out from * underneath our feet. Take a copy (cheap) to prevent this. [Bug * 1675116] */ - listObj = TclListObjCopy(interp, listObj); + listObj = TclDuplicatePureObj(interp ,listObj, tclListTypePtr); if (listObj == NULL) { sortInfo.resultCode = TCL_ERROR; goto done; } @@ -4811,13 +4978,14 @@ } Tcl_ListObjAppendElement(interp, newCommandPtr, Tcl_NewObj()); sortInfo.compareCmdPtr = newCommandPtr; } - if (TclObjTypeHasProc(objv[1], getElementsProc)) { - sortInfo.resultCode = - TclObjTypeGetElements(interp, listObj, &length, &listObjPtrs); + if (TclObjectHasInterface(listObj, list, all)) { + TCL_UNUSEDVAR(int status); + sortInfo.resultCode = TclObjectDispatchNoDefault(interp, status, + listObj, list, all, interp, listObj, &length, &listObjPtrs); } else { sortInfo.resultCode = TclListObjGetElementsM(interp, listObj, &length, &listObjPtrs); } if (sortInfo.resultCode != TCL_OK || length <= 0) { @@ -5007,11 +5175,11 @@ resultPtr = Tcl_NewListObj(sortInfo.numElements * groupSize, NULL); ListObjGetRep(resultPtr, &listRep); newArray = ListRepElementsBase(&listRep); if (group) { - for (i=0; elementPtr!=NULL ; elementPtr=elementPtr->nextPtr) { + for (i=0; elementPtr != NULL ; elementPtr = elementPtr->nextPtr) { idx = elementPtr->payload.index; for (j = 0; j < groupSize; j++) { if (indices) { TclNewIndexObj(objPtr, idx + j - groupOffset); newArray[i++] = objPtr; @@ -5135,17 +5303,20 @@ if (last >= listLen) { last = listLen - 1; } if (first <= last) { - numToDelete = (size_t)last - (size_t)first + 1; /* See [3d3124d01d] */ + numToDelete = last - first + 1; } else { numToDelete = 0; } if (Tcl_IsShared(listPtr)) { - listPtr = TclListObjCopy(NULL, listPtr); + listPtr = TclDuplicatePureObj(interp, listPtr, tclListTypePtr); + if (!listPtr) { + return TCL_ERROR; + } createdNewObj = 1; } else { createdNewObj = 0; } Index: generic/tclCmdMZ.c ================================================================== --- generic/tclCmdMZ.c +++ generic/tclCmdMZ.c @@ -1,13 +1,6 @@ /* - * tclCmdMZ.c -- - * - * This file contains the top-level command routines for most of the Tcl - * built-in commands whose names begin with the letters M to Z. It - * contains only commands in the generic core (i.e. those that don't - * depend much upon UNIX facilities). - * * Copyright © 1987-1993 The Regents of the University of California. * Copyright © 1994-1997 Sun Microsystems, Inc. * Copyright © 1998-2000 Scriptics Corporation. * Copyright © 2002 ActiveState Corporation. * Copyright © 2003-2009 Donal K. Fellows. @@ -14,18 +7,37 @@ * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclCmdMZ.c -- + * + * This file contains the top-level command routines for most of the Tcl + * built-in commands whose names begin with the letters M to Z. It + * contains only commands in the generic core (i.e. those that don't + * depend much upon UNIX facilities). + */ + #include "tclInt.h" #include "tclCompile.h" #include "tclRegexp.h" #include "tclStringTrim.h" #include "tclTomMath.h" static inline Tcl_Obj * During(Tcl_Interp *interp, int resultCode, Tcl_Obj *oldOptions, Tcl_Obj *errorInfo); + static Tcl_NRPostProc SwitchPostProc; static Tcl_NRPostProc TryPostBody; static Tcl_NRPostProc TryPostFinal; static Tcl_NRPostProc TryPostHandler; static int UniCharIsAscii(int character); @@ -1312,11 +1324,11 @@ { Tcl_Size start = TCL_INDEX_START; if (objc < 3 || objc > 4) { Tcl_WrongNumArgs(interp, 1, objv, - "needleString haystackString ?startIndex?"); + "needleString haystackString ?startIndex?"); return TCL_ERROR; } if (objc == 4) { Tcl_Size end = Tcl_GetCharLength(objv[2]) - 1; @@ -1403,43 +1415,55 @@ if (objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "string charIndex"); return TCL_ERROR; } - /* - * Get the char length to calculate what 'end' means. - */ - - end = Tcl_GetCharLength(objv[1]) - 1; - if (TclGetIntForIndexM(interp, objv[2], end, &index) != TCL_OK) { - return TCL_ERROR; - } - - if ((index >= 0) && (index <= end)) { - int ch = Tcl_GetUniChar(objv[1], index); - - if (ch == -1) { - return TCL_OK; - } - - /* - * If we have a ByteArray object, we're careful to generate a new - * bytearray for a result. - */ - - if (TclIsPureByteArray(objv[1])) { - unsigned char uch = UCHAR(ch); - - Tcl_SetObjResult(interp, Tcl_NewByteArrayObj(&uch, 1)); - } else { - char buf[4] = ""; - - end = Tcl_UniCharToUtf(ch, buf); - Tcl_SetObjResult(interp, Tcl_NewStringObj(buf, end)); - } - } - return TCL_OK; + if (TclObjectHasInterface(objv[1], string, index)) { + int status; + Tcl_Obj *charPtr; + status = TclStringIndexInterface(interp, objv[1], objv[2], &charPtr) ; + if (status != TCL_OK) { + return status; + } else { + Tcl_SetObjResult(interp, charPtr); + return TCL_OK; + } + } else { + /* + * Get the char length to calculate what 'end' means. + */ + + end = Tcl_GetCharLength(objv[1]) - 1; + if (TclGetIntForIndexM(interp, objv[2], end, &index) != TCL_OK) { + return TCL_ERROR; + } + + if ((index >= 0) && (index <= end)) { + int ch = Tcl_GetUniChar(objv[1], index); + + if (ch == -1) { + return TCL_OK; + } + + /* + * If we have a ByteArray object, we're careful to generate a new + * bytearray for a result. + */ + + if (TclIsPureByteArray(objv[1])) { + unsigned char uch = UCHAR(ch); + + Tcl_SetObjResult(interp, Tcl_NewByteArrayObj(&uch, 1)); + } else { + char buf[4] = ""; + + end = Tcl_UniCharToUtf(ch, buf); + Tcl_SetObjResult(interp, Tcl_NewStringObj(buf, end)); + } + } + return TCL_OK; + } } /* *---------------------------------------------------------------------- * @@ -1608,11 +1632,11 @@ chcomp = UniCharIsAscii; break; case STR_IS_BOOL: case STR_IS_TRUE: case STR_IS_FALSE: - if (!TclHasInternalRep(objPtr, &tclBooleanType) + if (!TclHasInternalRep(objPtr, tclBooleanType) && (TCL_OK != TclSetBooleanFromAny(NULL, objPtr))) { if (strict) { result = 0; } else { string1 = Tcl_GetStringFromObj(objPtr, &length1); @@ -1677,13 +1701,13 @@ } case STR_IS_DIGIT: chcomp = Tcl_UniCharIsDigit; break; case STR_IS_DOUBLE: { - if (TclHasInternalRep(objPtr, &tclDoubleType) || - TclHasInternalRep(objPtr, &tclIntType) || - TclHasInternalRep(objPtr, &tclBignumType)) { + if (TclHasInternalRep(objPtr, tclDoubleType) || + TclHasInternalRep(objPtr, tclIntType) || + TclHasInternalRep(objPtr, tclBignumType)) { break; } string1 = Tcl_GetStringFromObj(objPtr, &length1); if (length1 == 0) { if (strict) { @@ -1708,12 +1732,12 @@ case STR_IS_GRAPH: chcomp = Tcl_UniCharIsGraph; break; case STR_IS_INT: case STR_IS_ENTIER: - if (TclHasInternalRep(objPtr, &tclIntType) || - TclHasInternalRep(objPtr, &tclBignumType)) { + if (TclHasInternalRep(objPtr, tclIntType) || + TclHasInternalRep(objPtr, tclBignumType)) { break; } string1 = Tcl_GetStringFromObj(objPtr, &length1); if (length1 == 0) { if (strict) { @@ -1987,11 +2011,11 @@ * This test is tricky, but has to be that way or you get other strange * inconsistencies (see test string-10.20.1 for illustration why!) */ if (!TclHasStringRep(objv[objc-2]) - && TclHasInternalRep(objv[objc-2], &tclDictType)) { + && TclHasInternalRep(objv[objc-2], tclDictTypePtr)) { Tcl_Size i; int done; Tcl_DictSearch search; /* @@ -2529,15 +2553,15 @@ if (!Tcl_UniCharIsWordChar(ch)) { break; } - next = ((p > string) ? (p - 1) : p); + next = p > string ? p - 1 : p; do { next += delta; - ch = *next; delta = 1; + ch = *next; } while (next + delta < p); p = next; } if (cur != index) { cur += 1; Index: generic/tclCompCmds.c ================================================================== --- generic/tclCompCmds.c +++ generic/tclCompCmds.c @@ -1,20 +1,31 @@ /* - * tclCompCmds.c -- - * - * This file contains compilation procedures that compile various Tcl - * commands into a sequence of instructions ("bytecodes"). - * * Copyright © 1997-1998 Sun Microsystems, Inc. * Copyright © 2001 Kevin B. Kenny. All rights reserved. * Copyright © 2002 ActiveState Corporation. * Copyright © 2004-2013 Donal K. Fellows. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclCompCmds.c -- + * + * This file contains compilation procedures that compile various Tcl + * commands into a sequence of instructions ("bytecodes"). + */ + #include "tclInt.h" #include "tclCompile.h" #include /* Index: generic/tclCompCmdsGR.c ================================================================== --- generic/tclCompCmdsGR.c +++ generic/tclCompCmdsGR.c @@ -1,21 +1,32 @@ /* - * tclCompCmdsGR.c -- - * - * This file contains compilation procedures that compile various Tcl - * commands (beginning with the letters 'g' through 'r') into a sequence - * of instructions ("bytecodes"). - * * Copyright © 1997-1998 Sun Microsystems, Inc. * Copyright © 2001 Kevin B. Kenny. All rights reserved. * Copyright © 2002 ActiveState Corporation. * Copyright © 2004-2013 Donal K. Fellows. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclCompCmdsGR.c -- + * + * This file contains compilation procedures that compile various Tcl + * commands (beginning with the letters 'g' through 'r') into a sequence + * of instructions ("bytecodes"). + */ + #include "tclInt.h" #include "tclCompile.h" #include /* @@ -39,11 +50,11 @@ * Returns: * TCL_OK if parsing succeeded, and TCL_ERROR if it failed. * * Side effects: * When TCL_OK is returned, the encoded index value is written - * to *index. + * to *indexPtr. * *---------------------------------------------------------------------- */ int @@ -1409,10 +1420,17 @@ { DefineLineInformation; /* TIP #280 */ Tcl_Token *tokenPtr; int i; + /* + * For now, disable compilation of lreplace. Figure out later if any + * compilation can be done given that any Tcl_ObjType may implement + * lreplace, and should return an object of the same type. + */ + return TCL_ERROR; + if (parsePtr->numWords < 4) { return TCL_ERROR; } /* Push list, first, last onto the stack */ Index: generic/tclCompCmdsSZ.c ================================================================== --- generic/tclCompCmdsSZ.c +++ generic/tclCompCmdsSZ.c @@ -1,22 +1,33 @@ /* - * tclCompCmdsSZ.c -- - * - * This file contains compilation procedures that compile various Tcl - * commands (beginning with the letters 's' through 'z', except for - * [upvar] and [variable]) into a sequence of instructions ("bytecodes"). - * Also includes the operator command compilers. - * * Copyright © 1997-1998 Sun Microsystems, Inc. * Copyright © 2001 Kevin B. Kenny. All rights reserved. * Copyright © 2002 ActiveState Corporation. * Copyright © 2004-2010 Donal K. Fellows. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclCompCmdsSZ.c -- + * + * This file contains compilation procedures that compile various Tcl + * commands (beginning with the letters 's' through 'z', except for + * [upvar] and [variable]) into a sequence of instructions ("bytecodes"). + * Also includes the operator command compilers. + */ + #include "tclInt.h" #include "tclCompile.h" #include "tclStringTrim.h" /* Index: generic/tclCompExpr.c ================================================================== --- generic/tclCompExpr.c +++ generic/tclCompExpr.c @@ -1,16 +1,27 @@ +/* + * Contributions from Don Porter, NIST, 2006-2007. (not subject to US copyright) + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclCompExpr.c -- * * This file contains the code to parse and compile Tcl expressions and * implementations of the Tcl commands corresponding to expression * operators, such as the command ::tcl::mathop::+ . - * - * Contributions from Don Porter, NIST, 2006-2007. (not subject to US copyright) - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" #include "tclCompile.h" /* CompileEnv */ @@ -2109,11 +2120,11 @@ * (alpha, digit, underscore). Is this a number followed by * bareword syntax error? Or should we join into one bareword? * Example: Inf + luence + () becomes a valid function call. * [Bug 3401704] */ - if (TclHasInternalRep(literal, &tclDoubleType)) { + if (TclHasInternalRep(literal, tclDoubleType)) { const char *p = start; while (p < end) { if (!TclIsBareword(*p++)) { /* Index: generic/tclCompile.c ================================================================== --- generic/tclCompile.c +++ generic/tclCompile.c @@ -1,19 +1,30 @@ /* - * tclCompile.c -- - * - * This file contains procedures that compile Tcl commands or parts of - * commands (like quoted strings or nested sub-commands) into a sequence - * of instructions ("bytecodes"). - * * Copyright © 1996-1998 Sun Microsystems, Inc. * Copyright © 2001 Kevin B. Kenny. All rights reserved. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclCompile.c -- + * + * This file contains procedures that compile Tcl commands or parts of + * commands (like quoted strings or nested sub-commands) into a sequence + * of instructions ("bytecodes"). + */ + #include "tclInt.h" #include "tclCompile.h" #include /* @@ -722,11 +733,11 @@ "bytecode", /* name */ FreeByteCodeInternalRep, /* freeIntRepProc */ DupByteCodeInternalRep, /* dupIntRepProc */ NULL, /* updateStringProc */ SetByteCodeFromAny, /* setFromAnyProc */ - TCL_OBJTYPE_V0 + 0 }; /* * substCodeType provides the standard type management procedures for the * substcode type, which represents substitution within a Tcl value. @@ -736,11 +747,11 @@ "substcode", /* name */ FreeSubstCodeInternalRep, /* freeIntRepProc */ DupByteCodeInternalRep, /* dupIntRepProc - shared with bytecode */ NULL, /* updateStringProc */ NULL, /* setFromAnyProc */ - TCL_OBJTYPE_V0 + 0 }; #define SubstFlags(objPtr) (objPtr)->internalRep.twoPtrValue.ptr2 /* * Helper macros. Index: generic/tclCompile.h ================================================================== --- generic/tclCompile.h +++ generic/tclCompile.h @@ -1,17 +1,29 @@ /* - * tclCompile.h -- - * * Copyright (c) 1996-1998 Sun Microsystems, Inc. * Copyright (c) 1998-2000 by Scriptics Corporation. * Copyright (c) 2001 by Kevin B. Kenny. All rights reserved. * Copyright (c) 2007 Daniel A. Steffen * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclCompile.h -- + * + */ + #ifndef _TCLCOMPILATION #define _TCLCOMPILATION 1 #include "tclInt.h" @@ -288,25 +300,27 @@ * emitted will depend on the interpreter. */ const char *source; /* The source string being compiled by * SetByteCodeFromAny. This pointer is not * owned by the CompileEnv and must not be * freed or changed by it. */ - Tcl_Size numSrcBytes; /* Number of bytes in source. */ + Tcl_Size numSrcBytes; /* Number of bytes in source. */ Proc *procPtr; /* If a procedure is being compiled, a pointer * to its Proc structure; otherwise NULL. Used * to compile local variables. Set from * information provided by ObjInterpProc in * tclProc.c. */ - Tcl_Size numCommands; /* Number of commands compiled. */ - Tcl_Size exceptDepth; /* Current exception range nesting level; TCL_INDEX_NONE - * if not in any range currently. */ - Tcl_Size maxExceptDepth; /* Max nesting level of exception ranges; TCL_INDEX_NONE - * if no ranges have been compiled. */ - Tcl_Size maxStackDepth; /* Maximum number of stack elements needed to + Tcl_Size numCommands; /* Number of commands compiled. */ + Tcl_Size exceptDepth; /* Current exception range nesting level; + * TCL_INDEX_NONE if not in any range + * currently. */ + Tcl_Size maxExceptDepth; /* Max nesting level of exception ranges; + * TCL_INDEX_NONE if no ranges have been + * compiled. */ + Tcl_Size maxStackDepth; /* Maximum number of stack elements needed to * execute the code. Set by compilation * procedures before returning. */ - Tcl_Size currStackDepth; /* Current stack depth. */ + Tcl_Size currStackDepth; /* Current stack depth. */ LiteralTable localLitTable; /* Contains LiteralEntry's describing all Tcl * objects referenced by this compiled code. * Indexed by the string representations of * the literals. Used to avoid creating * duplicate objects. */ @@ -314,14 +328,12 @@ unsigned char *codeNext; /* Points to next code array byte to use. */ unsigned char *codeEnd; /* Points just after the last allocated code * array byte. */ int mallocedCodeArray; /* Set 1 if code array was expanded and * codeStart points into the heap.*/ -#if TCL_MAJOR_VERSION > 8 int mallocedExceptArray; /* 1 if ExceptionRange array was expanded and * exceptArrayPtr points in heap, else 0. */ -#endif LiteralEntry *literalArrayPtr; /* Points to start of LiteralEntry array. */ Tcl_Size literalArrayNext; /* Index of next free object array entry. */ Tcl_Size literalArrayEnd; /* Index just after last obj array entry. */ int mallocedLiteralArray; /* 1 if object array was expanded and objArray @@ -331,15 +343,12 @@ * array. */ Tcl_Size exceptArrayNext; /* Next free ExceptionRange array index. * exceptArrayNext is the number of ranges and * (exceptArrayNext-1) is the index of the * current range's array entry. */ - Tcl_Size exceptArrayEnd; /* Index after the last ExceptionRange array + Tcl_Size exceptArrayEnd; /* Index after the last ExceptionRange array * entry. */ -#if TCL_MAJOR_VERSION < 9 - int mallocedExceptArray; -#endif ExceptionAux *exceptAuxArrayPtr; /* Array of information used to restore the * state when processing BREAK/CONTINUE * exceptions. Must be the same size as the * exceptArrayPtr. */ @@ -348,23 +357,18 @@ * to use; (numCommands-1) is the entry index * for the last command. */ Tcl_Size cmdMapEnd; /* Index after last CmdLocation entry. */ int mallocedCmdMap; /* 1 if command map array was expanded and * cmdMapPtr points in the heap, else 0. */ -#if TCL_MAJOR_VERSION > 8 int mallocedAuxDataArray; /* 1 if aux data array was expanded and * auxDataArrayPtr points in heap else 0. */ -#endif AuxData *auxDataArrayPtr; /* Points to auxiliary data array start. */ Tcl_Size auxDataArrayNext; /* Next free compile aux data array index. * auxDataArrayNext is the number of aux data * items and (auxDataArrayNext-1) is index of * current aux data array entry. */ Tcl_Size auxDataArrayEnd; /* Index after last aux data array entry. */ -#if TCL_MAJOR_VERSION < 9 - int mallocedAuxDataArray; -#endif unsigned char staticCodeSpace[COMPILEENV_INIT_CODE_BYTES]; /* Initial storage for code. */ LiteralEntry staticLiteralSpace[COMPILEENV_INIT_NUM_OBJECTS]; /* Initial storage of LiteralEntry array. */ ExceptionRange staticExceptArraySpace[COMPILEENV_INIT_EXCEPT_RANGES]; @@ -377,20 +381,20 @@ AuxData staticAuxDataArraySpace[COMPILEENV_INIT_AUX_DATA_SIZE]; /* Initial storage for aux data array. */ /* TIP #280 */ ExtCmdLoc *extCmdMapPtr; /* Extended command location information for * 'info frame'. */ - Tcl_Size line; /* First line of the script, based on the + Tcl_Size line; /* First line of the script, based on the * invoking context, then the line of the * command currently compiled. */ int atCmdStart; /* Flag to say whether an INST_START_CMD * should be issued; they should never be * issued repeatedly, as that is significantly * inefficient. If set to 2, that instruction * should not be issued at all (by the generic * part of the command compiler). */ - Tcl_Size expandCount; /* Number of INST_EXPAND_START instructions + Tcl_Size expandCount; /* Number of INST_EXPAND_START instructions * encountered that have not yet been paired * with a corresponding * INST_INVOKE_EXPANDED. */ Tcl_Size *clNext; /* If not NULL, it refers to the next slot in * clLoc to check for an invisible @@ -1066,11 +1070,10 @@ *---------------------------------------------------------------- * Procedures exported by tclBasic.c to be used within the engine. *---------------------------------------------------------------- */ -#if TCL_MAJOR_VERSION > 8 MODULE_SCOPE Tcl_ObjCmdProc TclNRInterpCoroutine; /* *---------------------------------------------------------------- * Procedures exported by the engine to be used by tclBasic.c @@ -1205,13 +1208,10 @@ const unsigned char *pc, Tcl_Obj **tosPtr); MODULE_SCOPE Tcl_Obj *TclNewInstNameObj(unsigned char inst); MODULE_SCOPE int TclPushProcCallFrame(void *clientData, Tcl_Interp *interp, Tcl_Size objc, Tcl_Obj *const objv[], int isLambda); -#endif /* TCL_MAJOR_VERSION > 8 */ - - /* *---------------------------------------------------------------- * Macros and flag values used by Tcl bytecode compilation and execution * modules inside the Tcl core but not used outside. *---------------------------------------------------------------- Index: generic/tclConfig.c ================================================================== --- generic/tclConfig.c +++ generic/tclConfig.c @@ -1,17 +1,28 @@ /* - * tclConfig.c -- - * - * This file provides the facilities which allow Tcl and other packages - * to embed configuration information into their binary libraries. - * * Copyright © 2002 Andreas Kupries * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclConfig.c -- + * + * This file provides the facilities which allow Tcl and other packages + * to embed configuration information into their binary libraries. + */ + #include "tclInt.h" /* * Internal structure to hold embedded configuration information. * Index: generic/tclDTrace.d ================================================================== --- generic/tclDTrace.d +++ generic/tclDTrace.d @@ -1,19 +1,30 @@ /* - * tclDTrace.d -- - * - * Tcl DTrace provider. - * * Copyright (c) 2007-2008 Daniel A. Steffen * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ -typedef struct Tcl_Obj Tcl_Obj; +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclDTrace.d -- + * + * Tcl DTrace provider. + */ +typedef struct Tcl_Obj Tcl_Obj; typedef ptrdiff_t Tcl_Size; + /* * Tcl DTrace probes */ Index: generic/tclDecls.h ================================================================== --- generic/tclDecls.h +++ generic/tclDecls.h @@ -6,10 +6,19 @@ * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ #ifndef _TCLDECLS #define _TCLDECLS #include /* for size_t */ @@ -25,14 +34,12 @@ # endif #endif #if !defined(BUILD_tcl) # define TCL_DEPRECATED(msg) EXTERN TCL_DEPRECATED_API(msg) -#elif defined(TCL_NO_DEPRECATED) -# define TCL_DEPRECATED(msg) MODULE_SCOPE #else -# define TCL_DEPRECATED(msg) EXTERN +# define TCL_DEPRECATED(msg) MODULE_SCOPE #endif /* * WARNING: This file is automatically generated by the tools/genStubs.tcl @@ -1864,10 +1871,120 @@ EXTERN Tcl_Obj * Tcl_DStringToObj(Tcl_DString *dsPtr); /* Slot 686 is reserved */ /* Slot 687 is reserved */ /* 688 */ EXTERN void TclUnusedStubEntry(void); +/* 689 */ +EXTERN Tcl_ObjInterface * Tcl_NewObjInterface(void); +/* 690 */ +EXTERN Tcl_ObjType * Tcl_NewObjType(void); +/* 691 */ +EXTERN int Tcl_ObjInterfaceSetVersion(Tcl_ObjInterface *oiPtr, + int version); +/* 692 */ +EXTERN int Tcl_ObjTypeSetFreeInternalRepProc(Tcl_ObjType *otPtr, + Tcl_FreeInternalRepProc *freeIntRepProc); +/* 693 */ +EXTERN int Tcl_ObjTypeSetDupInternalRepProc(Tcl_ObjType *otPtr, + Tcl_DupInternalRepProc *dupIntRepProc); +/* 694 */ +EXTERN int Tcl_ObjTypeSetUpdateStringProc(Tcl_ObjType *otPtr, + Tcl_UpdateStringProc *updateStringProc); +/* 695 */ +EXTERN int Tcl_ObjTypeSetSetFromAnyProc(Tcl_ObjType *otPtr, + Tcl_SetFromAnyProc *setFromAnyProc); +/* 696 */ +EXTERN int Tcl_ObjTypeSetVersion(Tcl_ObjType *otPtr, + int version); +/* 697 */ +EXTERN int Tcl_ObjInterfaceSetFnListAll(Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceListAllProc *fnPtr); +/* 698 */ +EXTERN int Tcl_ObjInterfaceSetFnListAppend( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceListAppendProc *fnPtr); +/* 699 */ +EXTERN int Tcl_ObjInterfaceSetFnListAppendList( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceListAppendlistProc fnPtr); +/* 700 */ +EXTERN int Tcl_ObjInterfaceSetFnListIndex( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceListIndexProc fnPtr); +/* 701 */ +EXTERN int Tcl_ObjInterfaceSetFnListIndexEnd( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceListIndexEndProc fnPtr); +/* 702 */ +EXTERN int Tcl_ObjInterfaceSetFnListIsSorted( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceListIsSortedProc fnPtr); +/* 703 */ +EXTERN int Tcl_ObjInterfaceSetFnListLength( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceListlengthProc fnPtr); +/* 704 */ +EXTERN int Tcl_ObjInterfaceSetFnListRange( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceListRangeProc fnPtr); +/* 705 */ +EXTERN int Tcl_ObjInterfaceSetFnListRangeEnd( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceListRangeEndProc fnPtr); +/* 706 */ +EXTERN int Tcl_ObjInterfaceSetFnListReplace( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceListReplaceProc fnPtr); +/* 707 */ +EXTERN int Tcl_ObjInterfaceSetFnListReplaceList( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceListReplaceListProc fnPtr); +/* 708 */ +EXTERN int Tcl_ObjInterfaceSetFnListReverse( + Tcl_ObjInterface *objInterfacePtr, + Tcl_ObjInterfaceListReverseProc fnPtr); +/* 709 */ +EXTERN int Tcl_ObjInterfaceSetFnListSet(Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceListSetProc fnPtr); +/* 710 */ +EXTERN int Tcl_ObjInterfaceSetFnListSetDeep( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceListSetDeepProc fnPtr); +/* 711 */ +EXTERN int Tcl_ObjInterfaceSetFnStringIndex( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceStringIndexProc fnPtr); +/* 712 */ +EXTERN int Tcl_ObjInterfaceSetFnStringIndexEnd( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceStringIndexEndProc fnPtr); +/* 713 */ +EXTERN int Tcl_ObjInterfaceSetFnStringLength( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceStringLengthProc fnPtr); +/* 714 */ +EXTERN int Tcl_ObjInterfaceSetFnStringRange( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceStringRangeProc fnPtr); +/* 715 */ +EXTERN int Tcl_ObjInterfaceSetFnStringRangeEnd( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceStringRangeEndProc fnPtr); +/* 716 */ +EXTERN int Tcl_ObjTypeSetInterface(Tcl_ObjType *objTypePtr, + Tcl_ObjInterface *objInterfacePtr); +/* 717 */ +EXTERN int Tcl_ObjTypeSetName(Tcl_ObjType *objTypePtr, + char *name); +/* 718 */ +EXTERN int Tcl_ObjInterfaceSetFnStringIsEmpty( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceStringIsEmptyProc fnPtr); +/* 719 */ +EXTERN int Tcl_ObjInterfaceSetFnListContains( + Tcl_ObjInterface *oiPtr, + Tcl_ObjInterfaceListContainsProc fnPtr); typedef struct { const struct TclPlatStubs *tclPlatStubs; const struct TclIntStubs *tclIntStubs; const struct TclIntPlatStubs *tclIntPlatStubs; @@ -2564,10 +2681,41 @@ int (*tcl_GetWideUIntFromObj) (Tcl_Interp *interp, Tcl_Obj *objPtr, Tcl_WideUInt *uwidePtr); /* 684 */ Tcl_Obj * (*tcl_DStringToObj) (Tcl_DString *dsPtr); /* 685 */ void (*reserved686)(void); void (*reserved687)(void); void (*tclUnusedStubEntry) (void); /* 688 */ + Tcl_ObjInterface * (*tcl_NewObjInterface) (void); /* 689 */ + Tcl_ObjType * (*tcl_NewObjType) (void); /* 690 */ + int (*tcl_ObjInterfaceSetVersion) (Tcl_ObjInterface *oiPtr, int version); /* 691 */ + int (*tcl_ObjTypeSetFreeInternalRepProc) (Tcl_ObjType *otPtr, Tcl_FreeInternalRepProc *freeIntRepProc); /* 692 */ + int (*tcl_ObjTypeSetDupInternalRepProc) (Tcl_ObjType *otPtr, Tcl_DupInternalRepProc *dupIntRepProc); /* 693 */ + int (*tcl_ObjTypeSetUpdateStringProc) (Tcl_ObjType *otPtr, Tcl_UpdateStringProc *updateStringProc); /* 694 */ + int (*tcl_ObjTypeSetSetFromAnyProc) (Tcl_ObjType *otPtr, Tcl_SetFromAnyProc *setFromAnyProc); /* 695 */ + int (*tcl_ObjTypeSetVersion) (Tcl_ObjType *otPtr, int version); /* 696 */ + int (*tcl_ObjInterfaceSetFnListAll) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceListAllProc *fnPtr); /* 697 */ + int (*tcl_ObjInterfaceSetFnListAppend) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceListAppendProc *fnPtr); /* 698 */ + int (*tcl_ObjInterfaceSetFnListAppendList) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceListAppendlistProc fnPtr); /* 699 */ + int (*tcl_ObjInterfaceSetFnListIndex) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceListIndexProc fnPtr); /* 700 */ + int (*tcl_ObjInterfaceSetFnListIndexEnd) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceListIndexEndProc fnPtr); /* 701 */ + int (*tcl_ObjInterfaceSetFnListIsSorted) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceListIsSortedProc fnPtr); /* 702 */ + int (*tcl_ObjInterfaceSetFnListLength) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceListlengthProc fnPtr); /* 703 */ + int (*tcl_ObjInterfaceSetFnListRange) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceListRangeProc fnPtr); /* 704 */ + int (*tcl_ObjInterfaceSetFnListRangeEnd) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceListRangeEndProc fnPtr); /* 705 */ + int (*tcl_ObjInterfaceSetFnListReplace) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceListReplaceProc fnPtr); /* 706 */ + int (*tcl_ObjInterfaceSetFnListReplaceList) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceListReplaceListProc fnPtr); /* 707 */ + int (*tcl_ObjInterfaceSetFnListReverse) (Tcl_ObjInterface *objInterfacePtr, Tcl_ObjInterfaceListReverseProc fnPtr); /* 708 */ + int (*tcl_ObjInterfaceSetFnListSet) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceListSetProc fnPtr); /* 709 */ + int (*tcl_ObjInterfaceSetFnListSetDeep) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceListSetDeepProc fnPtr); /* 710 */ + int (*tcl_ObjInterfaceSetFnStringIndex) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceStringIndexProc fnPtr); /* 711 */ + int (*tcl_ObjInterfaceSetFnStringIndexEnd) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceStringIndexEndProc fnPtr); /* 712 */ + int (*tcl_ObjInterfaceSetFnStringLength) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceStringLengthProc fnPtr); /* 713 */ + int (*tcl_ObjInterfaceSetFnStringRange) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceStringRangeProc fnPtr); /* 714 */ + int (*tcl_ObjInterfaceSetFnStringRangeEnd) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceStringRangeEndProc fnPtr); /* 715 */ + int (*tcl_ObjTypeSetInterface) (Tcl_ObjType *objTypePtr, Tcl_ObjInterface *objInterfacePtr); /* 716 */ + int (*tcl_ObjTypeSetName) (Tcl_ObjType *objTypePtr, char *name); /* 717 */ + int (*tcl_ObjInterfaceSetFnStringIsEmpty) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceStringIsEmptyProc fnPtr); /* 718 */ + int (*tcl_ObjInterfaceSetFnListContains) (Tcl_ObjInterface *oiPtr, Tcl_ObjInterfaceListContainsProc fnPtr); /* 719 */ } TclStubs; extern const TclStubs *tclStubsPtr; #ifdef __cplusplus @@ -3892,10 +4040,72 @@ (tclStubsPtr->tcl_DStringToObj) /* 685 */ /* Slot 686 is reserved */ /* Slot 687 is reserved */ #define TclUnusedStubEntry \ (tclStubsPtr->tclUnusedStubEntry) /* 688 */ +#define Tcl_NewObjInterface \ + (tclStubsPtr->tcl_NewObjInterface) /* 689 */ +#define Tcl_NewObjType \ + (tclStubsPtr->tcl_NewObjType) /* 690 */ +#define Tcl_ObjInterfaceSetVersion \ + (tclStubsPtr->tcl_ObjInterfaceSetVersion) /* 691 */ +#define Tcl_ObjTypeSetFreeInternalRepProc \ + (tclStubsPtr->tcl_ObjTypeSetFreeInternalRepProc) /* 692 */ +#define Tcl_ObjTypeSetDupInternalRepProc \ + (tclStubsPtr->tcl_ObjTypeSetDupInternalRepProc) /* 693 */ +#define Tcl_ObjTypeSetUpdateStringProc \ + (tclStubsPtr->tcl_ObjTypeSetUpdateStringProc) /* 694 */ +#define Tcl_ObjTypeSetSetFromAnyProc \ + (tclStubsPtr->tcl_ObjTypeSetSetFromAnyProc) /* 695 */ +#define Tcl_ObjTypeSetVersion \ + (tclStubsPtr->tcl_ObjTypeSetVersion) /* 696 */ +#define Tcl_ObjInterfaceSetFnListAll \ + (tclStubsPtr->tcl_ObjInterfaceSetFnListAll) /* 697 */ +#define Tcl_ObjInterfaceSetFnListAppend \ + (tclStubsPtr->tcl_ObjInterfaceSetFnListAppend) /* 698 */ +#define Tcl_ObjInterfaceSetFnListAppendList \ + (tclStubsPtr->tcl_ObjInterfaceSetFnListAppendList) /* 699 */ +#define Tcl_ObjInterfaceSetFnListIndex \ + (tclStubsPtr->tcl_ObjInterfaceSetFnListIndex) /* 700 */ +#define Tcl_ObjInterfaceSetFnListIndexEnd \ + (tclStubsPtr->tcl_ObjInterfaceSetFnListIndexEnd) /* 701 */ +#define Tcl_ObjInterfaceSetFnListIsSorted \ + (tclStubsPtr->tcl_ObjInterfaceSetFnListIsSorted) /* 702 */ +#define Tcl_ObjInterfaceSetFnListLength \ + (tclStubsPtr->tcl_ObjInterfaceSetFnListLength) /* 703 */ +#define Tcl_ObjInterfaceSetFnListRange \ + (tclStubsPtr->tcl_ObjInterfaceSetFnListRange) /* 704 */ +#define Tcl_ObjInterfaceSetFnListRangeEnd \ + (tclStubsPtr->tcl_ObjInterfaceSetFnListRangeEnd) /* 705 */ +#define Tcl_ObjInterfaceSetFnListReplace \ + (tclStubsPtr->tcl_ObjInterfaceSetFnListReplace) /* 706 */ +#define Tcl_ObjInterfaceSetFnListReplaceList \ + (tclStubsPtr->tcl_ObjInterfaceSetFnListReplaceList) /* 707 */ +#define Tcl_ObjInterfaceSetFnListReverse \ + (tclStubsPtr->tcl_ObjInterfaceSetFnListReverse) /* 708 */ +#define Tcl_ObjInterfaceSetFnListSet \ + (tclStubsPtr->tcl_ObjInterfaceSetFnListSet) /* 709 */ +#define Tcl_ObjInterfaceSetFnListSetDeep \ + (tclStubsPtr->tcl_ObjInterfaceSetFnListSetDeep) /* 710 */ +#define Tcl_ObjInterfaceSetFnStringIndex \ + (tclStubsPtr->tcl_ObjInterfaceSetFnStringIndex) /* 711 */ +#define Tcl_ObjInterfaceSetFnStringIndexEnd \ + (tclStubsPtr->tcl_ObjInterfaceSetFnStringIndexEnd) /* 712 */ +#define Tcl_ObjInterfaceSetFnStringLength \ + (tclStubsPtr->tcl_ObjInterfaceSetFnStringLength) /* 713 */ +#define Tcl_ObjInterfaceSetFnStringRange \ + (tclStubsPtr->tcl_ObjInterfaceSetFnStringRange) /* 714 */ +#define Tcl_ObjInterfaceSetFnStringRangeEnd \ + (tclStubsPtr->tcl_ObjInterfaceSetFnStringRangeEnd) /* 715 */ +#define Tcl_ObjTypeSetInterface \ + (tclStubsPtr->tcl_ObjTypeSetInterface) /* 716 */ +#define Tcl_ObjTypeSetName \ + (tclStubsPtr->tcl_ObjTypeSetName) /* 717 */ +#define Tcl_ObjInterfaceSetFnStringIsEmpty \ + (tclStubsPtr->tcl_ObjInterfaceSetFnStringIsEmpty) /* 718 */ +#define Tcl_ObjInterfaceSetFnListContains \ + (tclStubsPtr->tcl_ObjInterfaceSetFnListContains) /* 719 */ #endif /* defined(USE_TCL_STUBS) */ /* !END!: Do not edit above this line. */ @@ -4023,29 +4233,29 @@ # define TCLBOOLWARNING(boolPtr) ({__attribute__((unused)) char _bool_Var[sizeof(*(boolPtr)) > sizeof(int) ? -1 : 1];}), #else # define TCLBOOLWARNING(boolPtr) #endif #if defined(USE_TCL_STUBS) -#define Tcl_GetIndexFromObjStruct(interp, objPtr, tablePtr, offset, msg, flags, indexPtr) \ - (tclStubsPtr->tcl_GetIndexFromObjStruct((interp), (objPtr), (tablePtr), (offset), (msg), \ - (flags)|(int)(sizeof(*(indexPtr))<<1), (indexPtr))) -#define Tcl_GetBooleanFromObj(interp, objPtr, boolPtr) \ - (TCLBOOLWARNING(boolPtr)(sizeof(*(boolPtr)) >= sizeof(int) && (TCL_MAJOR_VERSION == 8)) ? tclStubsPtr->tcl_GetBooleanFromObj(interp, objPtr, (int *)(boolPtr)) : \ - Tcl_GetBoolFromObj(interp, objPtr, (TCL_NULL_OK-2)&(int)sizeof((*(boolPtr))), (char *)(boolPtr))) -#define Tcl_GetBoolean(interp, src, boolPtr) \ - (TCLBOOLWARNING(boolPtr)(sizeof(*(boolPtr)) >= sizeof(int) && (TCL_MAJOR_VERSION == 8)) ? tclStubsPtr->tcl_GetBoolean(interp, src, (int *)(boolPtr)) : \ - Tcl_GetBool(interp, src, (TCL_NULL_OK-2)&(int)sizeof((*(boolPtr))), (char *)(boolPtr))) -#else -#define Tcl_GetIndexFromObjStruct(interp, objPtr, tablePtr, offset, msg, flags, indexPtr) \ - ((Tcl_GetIndexFromObjStruct)((interp), (objPtr), (tablePtr), (offset), (msg), \ - (flags)|(int)(sizeof(*(indexPtr))<<1), (indexPtr))) -#define Tcl_GetBooleanFromObj(interp, objPtr, boolPtr) \ - (TCLBOOLWARNING(boolPtr)(sizeof(*(boolPtr)) >= sizeof(int) && (TCL_MAJOR_VERSION == 8)) ? Tcl_GetBooleanFromObj(interp, objPtr, (int *)(boolPtr)) : \ - Tcl_GetBoolFromObj(interp, objPtr, (TCL_NULL_OK-2)&(int)sizeof((*(boolPtr))), (char *)(boolPtr))) -#define Tcl_GetBoolean(interp, src, boolPtr) \ - (TCLBOOLWARNING(boolPtr)(sizeof(*(boolPtr)) >= sizeof(int) && (TCL_MAJOR_VERSION == 8)) ? Tcl_GetBoolean(interp, src, (int *)(boolPtr)) : \ - Tcl_GetBool(interp, src, (TCL_NULL_OK-2)&(int)sizeof((*(boolPtr))), (char *)(boolPtr))) +#define Tcl_GetIndexFromObjStruct(interp, objPtr, tablePtr, offset, msg,\ + flags, indexPtr) \ + (tclStubsPtr->tcl_GetIndexFromObjStruct(\ + (interp), (objPtr), (tablePtr), (offset), (msg), \ + (flags)|(int)(sizeof(*(indexPtr))<<1), (indexPtr))) +#define Tcl_GetBooleanFromObj(interp, objPtr, boolPtr) \ + (Tcl_GetBoolFromObj(interp, objPtr,\ + (TCL_NULL_OK-2)&(int)sizeof((*(boolPtr))), (char *)(boolPtr))) +#define Tcl_GetBoolean(interp, src, boolPtr) \ + (Tcl_GetBool(interp, src, (TCL_NULL_OK-2)&(int)sizeof(\ + (*(boolPtr))), (char *)(boolPtr))) +#undef Tcl_GetByteArrayFromObj +#define Tcl_GetByteArrayFromObj(objPtr, sizePtr) \ + (tclStubsPtr->tcl_GetBytesFromObj(\ + NULL, objPtr, (Tcl_Size *)(void *)(sizePtr))) +#else +#undef Tcl_GetByteArrayFromObj +#define Tcl_GetByteArrayFromObj(objPtr, sizePtr) \ + (Tcl_GetBytesFromObj)(NULL, objPtr, (Tcl_Size *)(void *)(sizePtr)) #endif #ifdef TCL_MEM_DEBUG # undef Tcl_Alloc # define Tcl_Alloc(x) \ @@ -4070,40 +4280,10 @@ #define Tcl_SetIntObj(objPtr, value) Tcl_SetWideIntObj((objPtr), (int)(value)) #define Tcl_SetLongObj(objPtr, value) Tcl_SetWideIntObj((objPtr), (long)(value)) #define Tcl_BackgroundError(interp) Tcl_BackgroundException((interp), TCL_ERROR) #define Tcl_StringMatch(str, pattern) Tcl_StringCaseMatch((str), (pattern), 0) -#if TCL_UTF_MAX < 4 -# undef Tcl_UniCharToUtfDString -# define Tcl_UniCharToUtfDString Tcl_Char16ToUtfDString -# undef Tcl_UtfToUniCharDString -# define Tcl_UtfToUniCharDString Tcl_UtfToChar16DString -# undef Tcl_UtfToUniChar -# define Tcl_UtfToUniChar Tcl_UtfToChar16 -# undef Tcl_UniCharLen -# define Tcl_UniCharLen Tcl_Char16Len -# undef Tcl_UniCharToUtf -# if defined(USE_TCL_STUBS) -# define Tcl_UniCharToUtf(c, p) \ - (tclStubsPtr->tcl_UniCharToUtf((c)|TCL_COMBINE, (p))) -# else -# define Tcl_UniCharToUtf(c, p) \ - ((Tcl_UniCharToUtf)((c)|TCL_COMBINE, (p))) -# endif -#if !defined(BUILD_tcl) -# undef Tcl_NumUtfChars -# define Tcl_NumUtfChars TclNumUtfChars -# undef Tcl_GetCharLength -# define Tcl_GetCharLength TclGetCharLength -# undef Tcl_UtfAtIndex -# define Tcl_UtfAtIndex TclUtfAtIndex -# undef Tcl_GetRange -# define Tcl_GetRange TclGetRange -# undef Tcl_GetUniChar -# define Tcl_GetUniChar TclGetUniChar -#endif -#endif #if defined(USE_TCL_STUBS) # define Tcl_WCharToUtfDString (sizeof(wchar_t) != sizeof(short) \ ? (char *(*)(const wchar_t *, Tcl_Size, Tcl_DString *))tclStubsPtr->tcl_UniCharToUtfDString \ : (char *(*)(const wchar_t *, Tcl_Size, Tcl_DString *))Tcl_Char16ToUtfDString) # define Tcl_UtfToWCharDString (sizeof(wchar_t) != sizeof(short) \ @@ -4137,165 +4317,13 @@ #define Tcl_EvalObj(interp, objPtr) \ Tcl_EvalObjEx(interp, objPtr, 0) #define Tcl_GlobalEvalObj(interp, objPtr) \ Tcl_EvalObjEx(interp, objPtr, TCL_EVAL_GLOBAL) -#if TCL_MAJOR_VERSION > 8 -# undef Tcl_Close -# define Tcl_Close(interp, chan) Tcl_CloseEx(interp, chan, 0) -#endif +# undef Tcl_Close +# define Tcl_Close(interp, chan) Tcl_CloseEx(interp, chan, 0) #undef TclUtfCharComplete #undef TclUtfNext #undef TclUtfPrev -#ifndef TCL_NO_DEPRECATED -# define Tcl_CreateSlave Tcl_CreateChild -# define Tcl_GetSlave Tcl_GetChild -# define Tcl_GetMaster Tcl_GetParent -#endif - -#ifdef USE_TCL_STUBS - /* Protect those 10 functions, make them useless through the stub table */ -# undef TclGetStringFromObj -# undef TclGetBytesFromObj -# undef TclGetUnicodeFromObj -# undef TclListObjGetElements -# undef TclListObjLength -# undef TclDictObjSize -# undef TclSplitList -# undef TclSplitPath -# undef TclFSSplitPath -# undef TclParseArgsObjv -#endif - -#if TCL_MAJOR_VERSION < 9 - /* TIP #627 for 8.7 */ -# undef Tcl_CreateObjCommand2 -# define Tcl_CreateObjCommand2 Tcl_CreateObjCommand -# undef Tcl_CreateObjTrace2 -# define Tcl_CreateObjTrace2 Tcl_CreateObjTrace -# undef Tcl_NRCreateCommand2 -# define Tcl_NRCreateCommand2 Tcl_NRCreateCommand -# undef Tcl_NRCallObjProc2 -# define Tcl_NRCallObjProc2 Tcl_NRCallObjProc - /* TIP #660 for 8.7 */ -# undef Tcl_GetSizeIntFromObj -# define Tcl_GetSizeIntFromObj Tcl_GetIntFromObj - -# undef Tcl_GetBytesFromObj -# define Tcl_GetBytesFromObj(interp, objPtr, sizePtr) \ - tclStubsPtr->tclGetBytesFromObj((interp), (objPtr), (sizePtr)) -# undef Tcl_GetStringFromObj -# define Tcl_GetStringFromObj(objPtr, sizePtr) \ - tclStubsPtr->tclGetStringFromObj((objPtr), (sizePtr)) -# undef Tcl_GetUnicodeFromObj -# define Tcl_GetUnicodeFromObj(objPtr, sizePtr) \ - tclStubsPtr->tclGetUnicodeFromObj((objPtr), (sizePtr)) -# undef Tcl_ListObjGetElements -# define Tcl_ListObjGetElements(interp, listPtr, objcPtr, objvPtr) \ - tclStubsPtr->tclListObjGetElements((interp), (listPtr), (objcPtr), (objvPtr)) -# undef Tcl_ListObjLength -# define Tcl_ListObjLength(interp, listPtr, lengthPtr) \ - tclStubsPtr->tclListObjLength((interp), (listPtr), (lengthPtr)) -# undef Tcl_DictObjSize -# define Tcl_DictObjSize(interp, dictPtr, sizePtr) \ - tclStubsPtr->tclDictObjSize((interp), (dictPtr), (sizePtr)) -# undef Tcl_SplitList -# define Tcl_SplitList(interp, listStr, argcPtr, argvPtr) \ - tclStubsPtr->tclSplitList((interp), (listStr), (argcPtr), (argvPtr)) -# undef Tcl_SplitPath -# define Tcl_SplitPath(path, argcPtr, argvPtr) \ - tclStubsPtr->tclSplitPath((path), (argcPtr), (argvPtr)) -# undef Tcl_FSSplitPath -# define Tcl_FSSplitPath(pathPtr, lenPtr) \ - tclStubsPtr->tclFSSplitPath((pathPtr), (lenPtr)) -# undef Tcl_ParseArgsObjv -# define Tcl_ParseArgsObjv(interp, argTable, objcPtr, objv, remObjv) \ - tclStubsPtr->tclParseArgsObjv((interp), (argTable), (objcPtr), (objv), (remObjv)) -#elif defined(TCL_8_API) -# undef Tcl_GetByteArrayFromObj -# undef Tcl_GetBytesFromObj -# undef Tcl_GetStringFromObj -# undef Tcl_GetUnicodeFromObj -# undef Tcl_ListObjGetElements -# undef Tcl_ListObjLength -# undef Tcl_DictObjSize -# undef Tcl_SplitList -# undef Tcl_SplitPath -# undef Tcl_FSSplitPath -# undef Tcl_ParseArgsObjv -# if !defined(USE_TCL_STUBS) -# define Tcl_GetByteArrayFromObj(objPtr, sizePtr) (sizeof(*(sizePtr)) <= sizeof(int) ? \ - TclGetBytesFromObj(NULL, (objPtr), (sizePtr)) : \ - (Tcl_GetBytesFromObj)(NULL, (objPtr), (Tcl_Size *)(void *)(sizePtr))) -# define Tcl_GetBytesFromObj(interp, objPtr, sizePtr) (sizeof(*(sizePtr)) <= sizeof(int) ? \ - TclGetBytesFromObj((interp), (objPtr), (sizePtr)) : \ - (Tcl_GetBytesFromObj)((interp), (objPtr), (Tcl_Size *)(void *)(sizePtr))) -# define Tcl_GetStringFromObj(objPtr, sizePtr) (sizeof(*(sizePtr)) <= sizeof(int) ? \ - TclGetStringFromObj((objPtr), (sizePtr)) : \ - (Tcl_GetStringFromObj)((objPtr), (Tcl_Size *)(void *)(sizePtr))) -# define Tcl_GetUnicodeFromObj(objPtr, sizePtr) (sizeof(*(sizePtr)) <= sizeof(int) ? \ - TclGetUnicodeFromObj((objPtr), (sizePtr)) : \ - (Tcl_GetUnicodeFromObj)((objPtr), (Tcl_Size *)(void *)(sizePtr))) -# define Tcl_ListObjGetElements(interp, listPtr, objcPtr, objvPtr) (sizeof(*(objcPtr)) <= sizeof(int) ? \ - TclListObjGetElements((interp), (listPtr), (objcPtr), (objvPtr)) : \ - (Tcl_ListObjGetElements)((interp), (listPtr), (Tcl_Size *)(void *)(objcPtr), (objvPtr))) -# define Tcl_ListObjLength(interp, listPtr, lengthPtr) (sizeof(*(lengthPtr)) <= sizeof(int) ? \ - TclListObjLength((interp), (listPtr), (lengthPtr)) : \ - (Tcl_ListObjLength)((interp), (listPtr), (Tcl_Size *)(void *)(lengthPtr))) -# define Tcl_DictObjSize(interp, dictPtr, sizePtr) (sizeof(*(sizePtr)) <= sizeof(int) ? \ - TclDictObjSize((interp), (dictPtr), (sizePtr)) : \ - (Tcl_DictObjSize)((interp), (dictPtr), (Tcl_Size *)(void *)(sizePtr))) -# define Tcl_SplitList(interp, listStr, argcPtr, argvPtr) (sizeof(*(argcPtr)) <= sizeof(int) ? \ - TclSplitList((interp), (listStr), (argcPtr), (argvPtr)) : \ - (Tcl_SplitList)((interp), (listStr), (Tcl_Size *)(void *)(argcPtr), (argvPtr))) -# define Tcl_SplitPath(path, argcPtr, argvPtr) (sizeof(*(argcPtr)) <= sizeof(int) ? \ - TclSplitPath((path), (argcPtr), (argvPtr)) : \ - (Tcl_SplitPath)((path), (Tcl_Size *)(void *)(argcPtr), (argvPtr))) -# define Tcl_FSSplitPath(pathPtr, lenPtr) (sizeof(*(lenPtr)) <= sizeof(int) ? \ - TclFSSplitPath((pathPtr), (lenPtr)) : \ - (Tcl_FSSplitPath)((pathPtr), (Tcl_Size *)(void *)(lenPtr))) -# define Tcl_ParseArgsObjv(interp, argTable, objcPtr, objv, remObjv) (sizeof(*(objcPtr)) <= sizeof(int) ? \ - TclParseArgsObjv((interp), (argTable), (objcPtr), (objv), (remObjv)) : \ - (Tcl_ParseArgsObjv)((interp), (argTable), (Tcl_Size *)(void *)(objcPtr), (objv), (remObjv))) -# elif !defined(BUILD_tcl) -# define Tcl_GetByteArrayFromObj(objPtr, sizePtr) (sizeof(*(sizePtr)) <= sizeof(int) ? \ - tclStubsPtr->tclGetBytesFromObj(NULL, (objPtr), (sizePtr)) : \ - tclStubsPtr->tcl_GetBytesFromObj(NULL, (objPtr), (Tcl_Size *)(void *)(sizePtr))) -# define Tcl_GetBytesFromObj(interp, objPtr, sizePtr) (sizeof(*(sizePtr)) <= sizeof(int) ? \ - tclStubsPtr->tclGetBytesFromObj((interp), (objPtr), (sizePtr)) : \ - tclStubsPtr->tcl_GetBytesFromObj((interp), (objPtr), (Tcl_Size *)(void *)(sizePtr))) -# define Tcl_GetStringFromObj(objPtr, sizePtr) (sizeof(*(sizePtr)) <= sizeof(int) ? \ - tclStubsPtr->tclGetStringFromObj((objPtr), (sizePtr)) : \ - tclStubsPtr->tcl_GetStringFromObj((objPtr), (Tcl_Size *)(void *)(sizePtr))) -# define Tcl_GetUnicodeFromObj(objPtr, sizePtr) (sizeof(*(sizePtr)) <= sizeof(int) ? \ - tclStubsPtr->tclGetUnicodeFromObj((objPtr), (sizePtr)) : \ - tclStubsPtr->tcl_GetUnicodeFromObj((objPtr), (Tcl_Size *)(void *)(sizePtr))) -# define Tcl_ListObjGetElements(interp, listPtr, objcPtr, objvPtr) (sizeof(*(objcPtr)) <= sizeof(int) ? \ - tclStubsPtr->tclListObjGetElements((interp), (listPtr), (objcPtr), (objvPtr)) : \ - tclStubsPtr->tcl_ListObjGetElements((interp), (listPtr), (Tcl_Size *)(void *)(objcPtr), (objvPtr))) -# define Tcl_ListObjLength(interp, listPtr, lengthPtr) (sizeof(*(lengthPtr)) <= sizeof(int) ? \ - tclStubsPtr->tclListObjLength((interp), (listPtr), (lengthPtr)) : \ - tclStubsPtr->tcl_ListObjLength((interp), (listPtr), (Tcl_Size *)(void *)(lengthPtr))) -# define Tcl_DictObjSize(interp, dictPtr, sizePtr) (sizeof(*(sizePtr)) <= sizeof(int) ? \ - tclStubsPtr->tclDictObjSize((interp), (dictPtr), (sizePtr)) : \ - tclStubsPtr->tcl_DictObjSize((interp), (dictPtr), (Tcl_Size *)(void *)(sizePtr))) -# define Tcl_SplitList(interp, listStr, argcPtr, argvPtr) (sizeof(*(argcPtr)) <= sizeof(int) ? \ - tclStubsPtr->tclSplitList((interp), (listStr), (argcPtr), (argvPtr)) : \ - tclStubsPtr->tcl_SplitList((interp), (listStr), (Tcl_Size *)(void *)(argcPtr), (argvPtr))) -# define Tcl_SplitPath(path, argcPtr, argvPtr) (sizeof(*(argcPtr)) <= sizeof(int) ? \ - tclStubsPtr->tclSplitPath((path), (argcPtr), (argvPtr)) : \ - tclStubsPtr->tcl_SplitPath((path), (Tcl_Size *)(void *)(argcPtr), (argvPtr))) -# define Tcl_FSSplitPath(pathPtr, lenPtr) (sizeof(*(lenPtr)) <= sizeof(int) ? \ - tclStubsPtr->tclFSSplitPath((pathPtr), (lenPtr)) : \ - tclStubsPtr->tcl_FSSplitPath((pathPtr), (Tcl_Size *)(void *)(lenPtr))) -# define Tcl_ParseArgsObjv(interp, argTable, objcPtr, objv, remObjv) (sizeof(*(objcPtr)) <= sizeof(int) ? \ - tclStubsPtr->tclParseArgsObjv((interp), (argTable), (objcPtr), (objv), (remObjv)) : \ - tclStubsPtr->tcl_ParseArgsObjv((interp), (argTable), (Tcl_Size *)(void *)(objcPtr), (objv), (remObjv))) -# endif /* defined(USE_TCL_STUBS) */ -#else /* !defined(TCL_8_API) */ -# undef Tcl_GetByteArrayFromObj -# define Tcl_GetByteArrayFromObj(objPtr, sizePtr) \ - Tcl_GetBytesFromObj(NULL, (objPtr), (sizePtr)) -#endif /* defined(TCL_8_API) */ #endif /* _TCLDECLS */ Index: generic/tclDictObj.c ================================================================== --- generic/tclDictObj.c +++ generic/tclDictObj.c @@ -1,17 +1,28 @@ /* - * tclDictObj.c -- - * - * This file contains functions that implement the Tcl dict object type - * and its accessor command. - * * Copyright © 2002-2010 Donal K. Fellows. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclDictObj.c -- + * + * This file contains functions that implement the Tcl dict object type + * and its accessor command. + */ + #include "tclInt.h" #include "tclTomMath.h" #include /* @@ -59,12 +70,13 @@ static Tcl_NRPostProc FinalizeDictWith; static Tcl_ObjCmdProc DictForNRCmd; static Tcl_ObjCmdProc DictMapNRCmd; static Tcl_NRPostProc DictForLoopCallback; static Tcl_NRPostProc DictMapLoopCallback; -static Tcl_ObjTypeLengthProc DictAsListLength; -/* static Tcl_ObjTypeIndexProc DictAsListIndex; Needs rewrite */ + +static Tcl_ObjInterfaceListlengthProc DictAsListLength; +/* static Tcl_ObjInterfaceListIndexProc DictAsListIndex; */ /* * Table of dict subcommand names and implementations. */ @@ -141,43 +153,40 @@ /* * The structure below defines the dictionary object type by means of * functions that can be invoked by generic object code. */ -const Tcl_ObjType tclDictType = { + +ObjInterface dictObjInterface; + + + +static ObjectType tclDictObjectType = { "dict", FreeDictInternalRep, /* freeIntRepProc */ DupDictInternalRep, /* dupIntRepProc */ UpdateStringOfDict, /* updateStringProc */ SetDictFromAny, /* setFromAnyProc */ - TCL_OBJTYPE_V2( /* Extended type for AbstractLists */ - DictAsListLength, /* return "list" length of dict value w/o - * shimmering */ - NULL, /* return key or value at "list" index - * location. (keysare at even indicies, - * values at odd indicies) */ - NULL, - NULL, - NULL, - NULL, - NULL, - NULL) + 2, + NULL }; -#define DictSetInternalRep(objPtr, dictRepPtr) \ +Tcl_ObjType *tclDictTypePtr = (Tcl_ObjType *)&tclDictObjectType; + +#define DictSetIntRep(objPtr, dictRepPtr) \ do { \ - Tcl_ObjInternalRep ir; \ + Tcl_ObjInternalRep ir; \ ir.twoPtrValue.ptr1 = (dictRepPtr); \ ir.twoPtrValue.ptr2 = NULL; \ - Tcl_StoreInternalRep((objPtr), &tclDictType, &ir); \ + Tcl_StoreInternalRep((objPtr), tclDictTypePtr, &ir); \ } while (0) #define DictGetInternalRep(objPtr, dictRepPtr) \ do { \ - const Tcl_ObjInternalRep *irPtr; \ - irPtr = TclFetchInternalRep((objPtr), &tclDictType); \ - (dictRepPtr) = irPtr ? (Dict *)irPtr->twoPtrValue.ptr1 : NULL; \ + const Tcl_ObjInternalRep *irPtr; \ + irPtr = TclFetchInternalRep((objPtr), tclDictTypePtr); \ + (dictRepPtr) = irPtr ? (Dict *)irPtr->twoPtrValue.ptr1 : NULL; \ } while (0) /* * The type of the specially adapted version of the Tcl_Obj*-containing hash * table defined in the tclObj.c code. This version differs in that it @@ -211,10 +220,19 @@ Tcl_Obj *scriptObj; /* The script to evaluate each time through * the loop. */ Tcl_Obj *accumulatorObj; /* The dictionary used to accumulate the * results. */ } DictMapStorage; + + +void TclDictInit(void) { + Tcl_ObjInterface *oiPtr; + oiPtr = Tcl_NewObjInterface(); + Tcl_ObjInterfaceSetFnListLength(oiPtr ,DictAsListLength); + Tcl_ObjTypeSetInterface(tclDictTypePtr ,oiPtr); + return; +} /***** START OF FUNCTIONS IMPLEMENTING DICT CORE API *****/ /* *---------------------------------------------------------------------- @@ -407,11 +425,11 @@ /* * Store in the object. */ - DictSetInternalRep(copyPtr, newDict); + DictSetIntRep(copyPtr, newDict); } /* *---------------------------------------------------------------------- * @@ -614,11 +632,11 @@ * Since lists and dictionaries have very closely-related string * representations (i.e. the same parsing code) we can safely special-case * the conversion from lists to dictionaries. */ - if (TclHasInternalRep(objPtr, &tclListType)) { + if (TclHasInternalRep(objPtr, tclListTypePtr)) { Tcl_Size objc, i; Tcl_Obj **objv; /* Cannot fail, we already know the Tcl_ObjType is "list". */ TclListObjGetElementsM(NULL, objPtr, &objc, &objv); @@ -722,11 +740,11 @@ */ dict->epoch = 1; dict->chain = NULL; dict->refCount = 1; - DictSetInternalRep(objPtr, dict); + DictSetIntRep(objPtr, dict); return TCL_OK; missingValue: if (interp != NULL) { Tcl_SetObjResult(interp, Tcl_NewStringObj( @@ -901,11 +919,11 @@ do { dict->refCount++; TclInvalidateStringRep(dictObj); TclFreeInternalRep(dictObj); - DictSetInternalRep(dictObj, dict); + DictSetIntRep(dictObj, dict); dict->epoch++; dictObj = dict->chain; if (dictObj == NULL) { break; @@ -956,11 +974,11 @@ TclInvalidateStringRep(dictPtr); hPtr = CreateChainEntry(dict, keyPtr, &isNew); dict->refCount++; TclFreeInternalRep(dictPtr) - DictSetInternalRep(dictPtr, dict); + DictSetIntRep(dictPtr, dict); Tcl_IncrRefCount(valuePtr); if (!isNew) { Tcl_Obj *oldValuePtr = (Tcl_Obj *)Tcl_GetHashValue(hPtr); TclDecrRefCount(oldValuePtr); @@ -1437,11 +1455,11 @@ dict = (Dict *)Tcl_Alloc(sizeof(Dict)); InitChainTable(dict); dict->epoch = 1; dict->chain = NULL; dict->refCount = 1; - DictSetInternalRep(dictPtr, dict); + DictSetIntRep(dictPtr, dict); return dictPtr; #endif } /* @@ -1485,11 +1503,11 @@ dict = (Dict *)Tcl_Alloc(sizeof(Dict)); InitChainTable(dict); dict->epoch = 1; dict->chain = NULL; dict->refCount = 1; - DictSetInternalRep(dictPtr, dict); + DictSetIntRep(dictPtr, dict); return dictPtr; } #else /* !TCL_MEM_DEBUG */ Tcl_Obj * Tcl_DbNewDictObj( @@ -1520,11 +1538,11 @@ *---------------------------------------------------------------------- */ static int DictCreateCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Tcl_Obj *dictObj; @@ -1570,11 +1588,11 @@ *---------------------------------------------------------------------- */ static int DictGetCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Tcl_Obj *dictPtr, *valuePtr = NULL; @@ -1663,11 +1681,11 @@ *---------------------------------------------------------------------- */ static int DictGetDefCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Tcl_Obj *dictPtr, *keyPtr, *valuePtr, *defaultPtr; @@ -1728,11 +1746,11 @@ *---------------------------------------------------------------------- */ static int DictReplaceCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Tcl_Obj *dictPtr; @@ -1776,11 +1794,11 @@ *---------------------------------------------------------------------- */ static int DictRemoveCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Tcl_Obj *dictPtr; @@ -1824,11 +1842,11 @@ *---------------------------------------------------------------------- */ static int DictMergeCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Tcl_Obj *targetObj, *keyObj = NULL, *valueObj = NULL; @@ -1911,11 +1929,11 @@ *---------------------------------------------------------------------- */ static int DictKeysCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Tcl_Obj *listPtr; @@ -1990,11 +2008,11 @@ *---------------------------------------------------------------------- */ static int DictValuesCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Tcl_Obj *valuePtr = NULL, *listPtr; @@ -2050,11 +2068,11 @@ *---------------------------------------------------------------------- */ static int DictSizeCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { int result; @@ -2089,11 +2107,11 @@ *---------------------------------------------------------------------- */ static int DictExistsCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Tcl_Obj *dictPtr, *valuePtr; @@ -2131,11 +2149,11 @@ *---------------------------------------------------------------------- */ static int DictInfoCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Dict *dict; @@ -2175,11 +2193,11 @@ *---------------------------------------------------------------------- */ static int DictIncrCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { int code = TCL_OK; @@ -2296,11 +2314,11 @@ *---------------------------------------------------------------------- */ static int DictLappendCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Tcl_Obj *dictPtr, *valuePtr, *resultPtr; @@ -2383,11 +2401,11 @@ *---------------------------------------------------------------------- */ static int DictAppendCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Tcl_Obj *dictPtr, *valuePtr, *resultPtr; @@ -2485,11 +2503,11 @@ *---------------------------------------------------------------------- */ static int DictForNRCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Interp *iPtr = (Interp *) interp; @@ -2681,11 +2699,11 @@ *---------------------------------------------------------------------- */ static int DictMapNRCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Interp *iPtr = (Interp *) interp; @@ -2894,11 +2912,11 @@ *---------------------------------------------------------------------- */ static int DictSetCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Tcl_Obj *dictPtr, *resultPtr; @@ -2954,11 +2972,11 @@ *---------------------------------------------------------------------- */ static int DictUnsetCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Tcl_Obj *dictPtr, *resultPtr; @@ -3013,11 +3031,11 @@ *---------------------------------------------------------------------- */ static int DictFilterCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Interp *iPtr = (Interp *) interp; @@ -3299,11 +3317,11 @@ *---------------------------------------------------------------------- */ static int DictUpdateCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Interp *iPtr = (Interp *) interp; @@ -3458,11 +3476,11 @@ *---------------------------------------------------------------------- */ static int DictWithCmd( - TCL_UNUSED(void *), + TCL_UNUSED(ClientData), Tcl_Interp *interp, int objc, Tcl_Obj *const *objv) { Interp *iPtr = (Interp *) interp; @@ -3813,19 +3831,26 @@ * there are duplicate keys in the original string representation. * * Side Effects -- * * The intent is to have no side effects. + * + * Reviewer note: Currently, however there is the side effect that the + * string representation of the dictionary is generated if there isn't one + * already. */ -static Tcl_Size +static int DictAsListLength( - Tcl_Obj *objPtr) + TCL_UNUSED(Tcl_Interp *), + Tcl_Obj *objPtr, + Tcl_Size *lenPtr) { Tcl_Size estCount, length, llen; const char *limit, *nextElem = Tcl_GetStringFromObj(objPtr, &length); Tcl_Obj *elemPtr; + int status = TCL_OK; /* * Allocate enough space to hold a (Tcl_Obj *) for each * (possible) list element. */ @@ -3841,14 +3866,16 @@ const char *elemStart; char *check; Tcl_Size elemSize; int literal; - if (TCL_OK != TclFindElement(NULL, nextElem, limit - nextElem, - &elemStart, &nextElem, &elemSize, &literal)) { + status = TclFindElement(NULL, nextElem, limit - nextElem, + &elemStart, &nextElem, &elemSize, &literal); + if (status != TCL_OK) { Tcl_DecrRefCount(elemPtr); - return 0; + *lenPtr = 0; + return TCL_OK; } if (elemStart == limit) { break; } @@ -3855,109 +3882,26 @@ TclInvalidateStringRep(elemPtr); check = Tcl_InitStringRep(elemPtr, literal ? elemStart : NULL, elemSize); if (elemSize && check == NULL) { Tcl_DecrRefCount(elemPtr); - return 0; + *lenPtr = 0; + return TCL_OK ; } if (!literal) { Tcl_InitStringRep(elemPtr, NULL, TclCopyAndCollapse(elemSize, elemStart, check)); } llen++; } Tcl_DecrRefCount(elemPtr); - return llen; -} - - -/* - *---------------------------------------------------------------------- - * - * DictAsListIndex -- - * - * Return the key or value at the given "list" index, i.e., as if the string - * value where treated as a list. The intent is to support this list - * operation w/o causing the Obj value to shimmer into a List. - * - * Side Effects -- - * - * The intent is to have no side effects. - * - */ -#if 0 /* Needs rewrite */ -static int -DictAsListIndex( - Tcl_Interp *interp, - struct Tcl_Obj *objPtr, - Tcl_Size index, - Tcl_Obj** elemObjPtr) -{ - Tcl_Size /*estCount,*/ length, llen; - const char *limit, *nextElem = Tcl_GetStringFromObj(objPtr, &length); - Tcl_Obj *elemPtr; - - /* - * Compute limit of the list string - */ - - TclMaxListLength(nextElem, length, &limit); - elemPtr = Tcl_NewObj(); - - llen = 0; - - /* - * parse out each element until reaching the "index"th element. - * Sure this is slow, but shimmering is slower. - */ - while (nextElem < limit) { - const char *elemStart; - char *check; - Tcl_Size elemSize; - int literal; - - if (TCL_OK != TclFindElement(NULL, nextElem, limit - nextElem, - &elemStart, &nextElem, &elemSize, &literal)) { - Tcl_DecrRefCount(elemPtr); - return 0; - } - if (elemStart == limit) { - break; - } - - TclInvalidateStringRep(elemPtr); - check = Tcl_InitStringRep(elemPtr, literal ? elemStart : NULL, - elemSize); - if (elemSize && check == NULL) { - Tcl_DecrRefCount(elemPtr); - if (interp) { - // Need error message here - } - return TCL_ERROR; - } - if (!literal) { - Tcl_InitStringRep(elemPtr, NULL, - TclCopyAndCollapse(elemSize, elemStart, check)); - } - if (llen == index) { - *elemObjPtr = elemPtr; - return TCL_OK; - } - llen++; - } - - /* - * Index is beyond end of list - return empty - */ - Tcl_InitStringRep(elemPtr, NULL, 0); - *elemObjPtr = elemPtr; - return TCL_OK; -} -#endif + *lenPtr = llen; + return TCL_OK; +} /* * Local Variables: * mode: c * c-basic-offset: 4 * fill-column: 78 * End: */ Index: generic/tclDisassemble.c ================================================================== --- generic/tclDisassemble.c +++ generic/tclDisassemble.c @@ -1,19 +1,31 @@ /* - * tclDisassemble.c -- - * - * This file contains procedures that disassemble bytecode into either - * human-readable or Tcl-processable forms. - * * Copyright © 1996-1998 Sun Microsystems, Inc. * Copyright © 2001 Kevin B. Kenny. All rights reserved. * Copyright © 2013-2016 Donal K. Fellows. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclDisassemble.c -- + * + * This file contains procedures that disassemble bytecode into either + * human-readable or Tcl-processable forms. + */ + #include "tclInt.h" #include "tclCompile.h" #include "tclOOInt.h" #include @@ -40,11 +52,11 @@ "instname", /* name */ NULL, /* freeIntRepProc */ NULL, /* dupIntRepProc */ UpdateStringOfInstName, /* updateStringProc */ NULL, /* setFromAnyProc */ - TCL_OBJTYPE_V0 + 0 }; #define InstNameSetInternalRep(objPtr, inst) \ do { \ Tcl_ObjInternalRep ir; \ @@ -952,11 +964,11 @@ /* * Get the literals from the bytecode. */ TclNewObj(literals); - for (i=0 ; inumLitObjects ; i++) { + for (i=0 ; i<(int)codePtr->numLitObjects ; i++) { Tcl_ListObjAppendElement(NULL, literals, codePtr->objArrayPtr[i]); } /* * Get the variables from the bytecode. Index: generic/tclEncoding.c ================================================================== --- generic/tclEncoding.c +++ generic/tclEncoding.c @@ -1,16 +1,27 @@ /* - * tclEncoding.c -- - * - * Contains the implementation of the encoding conversion package. - * * Copyright © 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclEncoding.c -- + * + * Contains the implementation of the encoding conversion package. + */ + #include "tclInt.h" #include typedef size_t (LengthProc)(const char *src); @@ -268,11 +279,11 @@ "encoding", FreeEncodingInternalRep, DupEncodingInternalRep, NULL, NULL, - TCL_OBJTYPE_V0 + 0 }; #define EncodingSetInternalRep(objPtr, encoding) \ do { \ Tcl_ObjInternalRep ir; \ @@ -605,15 +616,10 @@ Tcl_CreateEncoding(&type); type.encodingName = "utf-16"; type.clientData = INT2PTR(leFlags); Tcl_CreateEncoding(&type); -#ifndef TCL_NO_DEPRECATED - type.encodingName = "unicode"; - Tcl_CreateEncoding(&type); -#endif - /* * Need the iso8859-1 encoding in order to process binary data, so force * it to always be embedded. Note that this encoding *must* be a proper * table encoding or some of the escape encodings crash! Hence the ugly * code to duplicate the structure of a table encoding here. @@ -1106,11 +1112,11 @@ * encoding-specific string length. */ Tcl_DString *dstPtr) /* Uninitialized or free DString in which the * converted string is stored. */ { Tcl_ExternalToUtfDStringEx( - NULL, encoding, src, srcLen, TCL_ENCODING_PROFILE_TCL8, dstPtr, NULL); + NULL, encoding, src, srcLen, TCL_ENCODING_PROFILE_STRICT, dstPtr, NULL); return Tcl_DStringValue(dstPtr); } /* @@ -2483,11 +2489,10 @@ dstStart = dst; flags |= PTR2INT(clientData); dstEnd = dst + dstLen - ((flags & ENCODING_UTF) ? TCL_UTF_MAX : 6); - profile = ENCODING_PROFILE_GET(flags); for (numChars = 0; src < srcEnd && numChars <= charLimit; numChars++) { if ((src > srcClose) && (!Tcl_UtfCharComplete(src, srcEnd - src))) { /* @@ -2531,14 +2536,14 @@ } } else if (!Tcl_UtfCharComplete(src, srcEnd - src)) { /* * Incomplete byte sequence. - * Always check before using Tcl_UtfToUniChar. Not doing so can cause it - * run beyond the end of the buffer! If we happen on such an incomplete - * char its bytes are made to represent themselves unless the user has - * explicitly asked to be told. + * Always check before using Tcl_UtfToUniChar. Not doing can so cause + * it to run beyond the end of the buffer! If we happen such an + * incomplete char its bytes are made to represent themselves + * unless the user has explicitly asked to be told. */ if (flags & ENCODING_INPUT) { /* Incomplete bytes for modified UTF-8 target */ if (PROFILE_STRICT(profile)) { @@ -2715,18 +2720,16 @@ dst += Tcl_UniCharToUtf(ch, dst); } src += 4; } - /* - * If we had a truncated code unit at the end AND this is the last - * fragment AND profile is not "strict", stick FFFD in its place. - */ if ((flags & TCL_ENCODING_END) && (result == TCL_CONVERT_MULTIBYTE)) { + /* We have a code fragment left-over at the end */ if (dst > dstEnd) { result = TCL_CONVERT_NOSPACE; } else { + /* destination is not full, so we really are at the end now */ if (PROFILE_STRICT(flags)) { result = TCL_CONVERT_SYNTAX; } else { /* PROFILE_REPLACE or PROFILE_TCL8 */ result = TCL_OK; @@ -3628,11 +3631,10 @@ break; } /* * Plunge on, using '?' as a fallback character. */ - ch = (Tcl_UniChar) '?'; /* Profiles TCL8 and REPLACE */ } if (dst > dstEnd) { result = TCL_CONVERT_NOSPACE; Index: generic/tclEnsemble.c ================================================================== --- generic/tclEnsemble.c +++ generic/tclEnsemble.c @@ -1,17 +1,28 @@ /* - * tclEnsemble.c -- - * - * Contains support for ensembles (see TIP#112), which provide simple - * mechanism for creating composite commands on top of namespaces. - * * Copyright © 2005-2013 Donal K. Fellows. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclEnsemble.c -- + * + * Contains support for ensembles (see TIP#112), which provide simple + * mechanism for creating composite commands on top of namespaces. + */ + #include "tclInt.h" #include "tclCompile.h" /* * Declarations for functions local to this file: @@ -80,11 +91,11 @@ "ensembleCommand", /* the type's name */ FreeEnsembleCmdRep, /* freeIntRepProc */ DupEnsembleCmdRep, /* dupIntRepProc */ NULL, /* updateStringProc */ NULL, /* setFromAnyProc */ - TCL_OBJTYPE_V0 + 0 }; #define ECRSetInternalRep(objPtr, ecRepPtr) \ do { \ Tcl_ObjInternalRep ir; \ @@ -310,11 +321,21 @@ Tcl_AppendStringsToObj(newCmd, "::", (void *)NULL); } Tcl_AppendObjToObj(newCmd, listv[0]); Tcl_ListObjReplace(NULL, newList, 0, 1, 1, &newCmd); if (patchedDict == NULL) { - patchedDict = Tcl_DuplicateObj(objv[1]); + patchedDict = TclDuplicatePureObj( + interp, objv[1], tclDictTypePtr); + if (!patchedDict) { + if (allocatedMapFlag) { + Tcl_DecrRefCount(mapObj); + } + Tcl_DecrRefCount(newList); + Tcl_DecrRefCount(newCmd); + Tcl_DecrRefCount(patchedDict); + return TCL_ERROR; + } } Tcl_DictObjPut(NULL, patchedDict, subcmdWordsObj, newList); } Tcl_DictObjNext(&search, &subcmdWordsObj, &listObj, @@ -594,21 +615,32 @@ } goto freeMapAndError; } cmd = TclGetString(listv[0]); if (!(cmd[0] == ':' && cmd[1] == ':')) { - Tcl_Obj *newList = Tcl_DuplicateObj(listObj); + Tcl_Obj *newList = TclDuplicatePureObj( + interp, listObj, tclListTypePtr); + if (!newList) { + if (patchedDict) { + Tcl_DecrRefCount(patchedDict); + } + goto freeMapAndError; + } Tcl_Obj *newCmd = NewNsObj((Tcl_Namespace*)nsPtr); if (nsPtr->parentPtr) { Tcl_AppendStringsToObj(newCmd, "::", (void *)NULL); } Tcl_AppendObjToObj(newCmd, listv[0]); Tcl_ListObjReplace(NULL, newList, 0, 1, 1, &newCmd); if (patchedDict == NULL) { - patchedDict = Tcl_DuplicateObj(objv[1]); + patchedDict = TclDuplicatePureObj( + interp, objv[1], tclListTypePtr); + if (!patchedDict) { + goto freeMapAndError; + } } Tcl_DictObjPut(NULL, patchedDict, subcmdWordsObj, newList); } Tcl_DictObjNext(&search, &subcmdWordsObj, &listObj, @@ -1902,11 +1934,15 @@ Tcl_Size copyObjc, prefixObjc; TclListObjLengthM(NULL, prefixObj, &prefixObjc); if (objc == 2) { - copyPtr = TclListObjCopy(NULL, prefixObj); + copyPtr = TclDuplicatePureObj( + interp, prefixObj, tclListTypePtr); + if (!copyPtr) { + return TCL_ERROR; + } } else { copyPtr = Tcl_NewListObj(objc - 2 + prefixObjc, NULL); Tcl_ListObjAppendList(NULL, copyPtr, prefixObj); Tcl_ListObjReplace(NULL, copyPtr, LIST_MAX, 0, ensemblePtr->numParameters, objv + 1); @@ -2302,11 +2338,15 @@ /* * Create the "unknown" command callback to determine what to do. */ - unknownCmd = Tcl_DuplicateObj(ensemblePtr->unknownHandler); + unknownCmd = TclDuplicatePureObj( + interp, ensemblePtr->unknownHandler, tclListTypePtr); + if (!unknownCmd) { + return TCL_ERROR; + } TclNewObj(ensObj); Tcl_GetCommandFullName(interp, ensemblePtr->token, ensObj); Tcl_ListObjAppendElement(NULL, unknownCmd, ensObj); for (i = 1 ; i < objc ; i++) { Tcl_ListObjAppendElement(NULL, unknownCmd, objv[i]); Index: generic/tclEnv.c ================================================================== --- generic/tclEnv.c +++ generic/tclEnv.c @@ -1,18 +1,29 @@ +/* + * Copyright © 1991-1994 The Regents of the University of California. + * Copyright © 1994-1998 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclEnv.c -- * * Tcl support for environment variables, including a setenv function. * This file contains the generic portion of the environment module. It * is primarily responsible for keeping the "env" arrays in sync with the * system environment variables. - * - * Copyright © 1991-1994 The Regents of the University of California. - * Copyright © 1994-1998 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" TCL_DECLARE_MUTEX(envMutex) /* To serialize access to environ. */ Index: generic/tclEvent.c ================================================================== --- generic/tclEvent.c +++ generic/tclEvent.c @@ -1,20 +1,31 @@ /* - * tclEvent.c -- - * - * This file implements some general event related interfaces including - * background errors, exit handlers, and the "vwait" and "update" command - * functions. - * * Copyright © 1990-1994 The Regents of the University of California. * Copyright © 1994-1998 Sun Microsystems, Inc. * Copyright © 2004 Zoran Vasiljevic. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclEvent.c -- + * + * This file implements some general event related interfaces including + * background errors, exit handlers, and the "vwait" and "update" command + * functions. + */ + #include "tclInt.h" #include "tclUuid.h" /* * The data structure below is used to report background errors. One such @@ -232,11 +243,15 @@ /* * Note we copy the handler command prefix each pass through, so we do * support one handler setting another handler. */ - Tcl_Obj *copyObj = TclListObjCopy(NULL, assocPtr->cmdPrefix); + Tcl_Obj *copyObj = TclDuplicatePureObj( + interp, assocPtr->cmdPrefix, tclListTypePtr); + if (!copyObj) { + return; + } errPtr = assocPtr->firstBgPtr; TclListObjGetElementsM(NULL, copyObj, &prefixObjc, &prefixObjv); tempObjv = (Tcl_Obj**)Tcl_Alloc((prefixObjc+2) * sizeof(Tcl_Obj *)); @@ -1092,13 +1107,10 @@ ".msvc-" STRINGIFY(_MSC_VER) #endif #ifdef USE_NMAKE ".nmake" #endif -#ifdef TCL_NO_DEPRECATED - ".no-deprecate" -#endif #if !TCL_THREADS ".no-thread" #endif #ifndef TCL_CFG_OPTIMIZED ".no-optimize" @@ -1160,10 +1172,14 @@ TclInitObjSubsystem(); /* Register obj types, create * mutexes. */ TclInitIOSubsystem(); /* Inits a tsd key (noop). */ TclInitEncodingSubsystem(); /* Process wide encoding init. */ TclInitNamespaceSubsystem();/* Register ns obj type (mutexed). */ + + TclArithSeriesInit(); + TclListInit(); + TclDictInit(); subsystemsInitialized = 1; } TclpInitUnlock(); } TclInitNotifier(); Index: generic/tclExecute.c ================================================================== --- generic/tclExecute.c +++ generic/tclExecute.c @@ -1,22 +1,34 @@ /* - * tclExecute.c -- - * - * This file contains procedures that execute byte-compiled Tcl commands. - * * Copyright © 1996-1997 Sun Microsystems, Inc. * Copyright © 1998-2000 Scriptics Corporation. * Copyright © 2001 Kevin B. Kenny. All rights reserved. * Copyright © 2002-2010 Miguel Sofer. * Copyright © 2005-2007 Donal K. Fellows. * Copyright © 2007 Daniel A. Steffen * Copyright © 2006-2008 Joe Mistachkin. All rights reserved. + * Copyright © 2021-2024 Nathan Coulter. All rights reserved. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclExecute.c -- + * + * This file contains procedures that execute byte-compiled Tcl commands. + */ + #include "tclInt.h" #include "tclCompile.h" #include "tclOOInt.h" #include "tclTomMath.h" #include @@ -448,15 +460,15 @@ * MODULE_SCOPE int GetNumberFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, * void **ptrPtr, int *tPtr); */ #define GetNumberFromObj(interp, objPtr, ptrPtr, tPtr) \ - ((TclHasInternalRep((objPtr), &tclIntType)) \ + ((TclHasInternalRep((objPtr), tclIntType)) \ ? (*(tPtr) = TCL_NUMBER_INT, \ *(ptrPtr) = (void *) \ (&((objPtr)->internalRep.wideValue)), TCL_OK) : \ - TclHasInternalRep((objPtr), &tclDoubleType) \ + TclHasInternalRep((objPtr), tclDoubleType) \ ? (((isnan((objPtr)->internalRep.doubleValue)) \ ? (*(tPtr) = TCL_NUMBER_NAN) \ : (*(tPtr) = TCL_NUMBER_DOUBLE)), \ *(ptrPtr) = (void *) \ (&((objPtr)->internalRep.doubleValue)), TCL_OK) : \ @@ -660,11 +672,11 @@ "exprcode", FreeExprCodeInternalRep, /* freeIntRepProc */ DupExprCodeInternalRep, /* dupIntRepProc */ NULL, /* updateStringProc */ NULL, /* setFromAnyProc */ - TCL_OBJTYPE_V0 + 0 }; /* * Custom object type only used in this file; values of its type should never * be seen by user scripts. @@ -672,11 +684,11 @@ static const Tcl_ObjType dictIteratorType = { "dictIterator", ReleaseDictIterator, NULL, NULL, NULL, - TCL_OBJTYPE_V0 + 0 }; /* *---------------------------------------------------------------------- * @@ -916,11 +928,11 @@ execInitialized = 0; Tcl_MutexUnlock(&execMutex); } /* - * Auxiliary code to insure that GrowEvaluationStack always returns correctly + * Auxiliary code to ensure that GrowEvaluationStack returns correctly * aligned memory. * * WALLOCALIGN represents the alignment reqs in words, just as TCL_ALLOCALIGN * represents the reqs in bytes. This assumes that TCL_ALLOCALIGN is a * multiple of the wordsize 'sizeof(Tcl_Obj *)'. @@ -1479,20 +1491,20 @@ *---------------------------------------------------------------------- * * DupExprCodeInternalRep -- * * Part of the Tcl object type implementation for Tcl expression - * bytecode. We do not copy the bytecode internalrep. Instead, we return + * bytecode. We do not copy the bytecode intrep. Instead, we return * without setting copyPtr->typePtr, so the copy is a plain string copy * of the expression value, and if it is to be used as a compiled * expression, it will just need a recompile. * * This makes sense, because with Tcl's copy-on-write practices, the * usual (only?) time Tcl_DuplicateObj() will be called is when the copy * is about to be modified, which would invalidate any copied bytecode * anyway. The only reason it might make sense to copy the bytecode is if - * we had some modifying routines that operated directly on the internalrep, + * we had some modifying routines that operated directly on the intrep, * like we do for lists and dicts. * * Results: * None. * @@ -3375,11 +3387,20 @@ if (TclListObjLengthM(interp, objResultPtr, &len) != TCL_OK) { TRACE_ERROR(interp); goto gotError; } if (Tcl_IsShared(objResultPtr)) { - Tcl_Obj *newValue = Tcl_DuplicateObj(objResultPtr); + Tcl_Obj *newValue; + + DECACHE_STACK_INFO(); + newValue = TclDuplicatePureObj(interp, objResultPtr, tclListTypePtr); + CACHE_STACK_INFO(); + + if (!newValue) { + TRACE_ERROR(interp); + goto gotError; + } TclDecrRefCount(objResultPtr); varPtr->value.objPtr = objResultPtr = newValue; Tcl_IncrRefCount(newValue); } @@ -3434,11 +3455,17 @@ } else if (TclListObjLengthM(interp, objResultPtr, &len)!=TCL_OK) { TRACE_ERROR(interp); goto gotError; } else { if (Tcl_IsShared(objResultPtr)) { - valueToAssign = Tcl_DuplicateObj(objResultPtr); + DECACHE_STACK_INFO(); + valueToAssign = TclDuplicatePureObj( + interp, objResultPtr, tclListTypePtr); + CACHE_STACK_INFO(); + if (!valueToAssign) { + goto errorInLappendListPtr; + } createdNewObj = 1; } else { valueToAssign = objResultPtr; } if (TclListObjAppendElements(interp, valueToAssign, @@ -4402,21 +4429,25 @@ origCmd = cmd; } TclNewObj(objResultPtr); Tcl_GetCommandFullName(interp, origCmd, objResultPtr); - if (TclCheckEmptyString(objResultPtr) == TCL_EMPTYSTRING_YES ) { - Tcl_DecrRefCount(objResultPtr); - instOriginError: - Tcl_SetObjResult(interp, Tcl_ObjPrintf( - "invalid command name \"%s\"", TclGetString(OBJ_AT_TOS))); - DECACHE_STACK_INFO(); - Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "COMMAND", - TclGetString(OBJ_AT_TOS), (void *)NULL); - CACHE_STACK_INFO(); - TRACE_APPEND(("ERROR: not command\n")); - goto gotError; + { + int isEmpty = TCL_EMPTYSTRING_YES, status; + status = TclCheckEmptyString(interp, objResultPtr, &isEmpty); + if (status || isEmpty == TCL_EMPTYSTRING_YES) { + Tcl_DecrRefCount(objResultPtr); + instOriginError: + Tcl_SetObjResult(interp, Tcl_ObjPrintf( + "invalid command name \"%s\"", TclGetString(OBJ_AT_TOS))); + DECACHE_STACK_INFO(); + Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "COMMAND", + TclGetString(OBJ_AT_TOS), (void *)NULL); + CACHE_STACK_INFO(); + TRACE_APPEND(("ERROR: not command\n")); + goto gotError; + } } TRACE_APPEND(("\"%.30s\"", O2S(OBJ_AT_TOS))); NEXT_INST_F(1, 1, 1); } @@ -4701,11 +4732,12 @@ * ----------------------------------------------------------------- * Start of INST_LIST and related instructions. */ { - int numIndices, nocase, match, cflags; + int dstatus, numIndices, nocase, match, cflags, + toIdxAnchor, fromIdxAnchor; Tcl_Size slength, length2, fromIdx, toIdx, index, s1len, s2len; const char *s1, *s2; case INST_LIST: /* @@ -4730,74 +4762,88 @@ case INST_LIST_INDEX: /* lindex with objc == 3 */ value2Ptr = OBJ_AT_TOS; valuePtr = OBJ_UNDER_TOS; TRACE(("\"%.30s\" \"%.30s\" => ", O2S(valuePtr), O2S(value2Ptr))); + if ( + TclHasInternalRep(value2Ptr, tclListTypePtr) + || + TclObjectHasInterface(value2Ptr, list, length) + ) { + Tcl_Size value2Length; + if (Tcl_ListObjLength(interp,value2Ptr,&value2Length), + value2Length == 1) { + if (TclHasInternalRep(value2Ptr, tclListTypePtr)) { + value2Ptr = TclListObjGetElement(value2Ptr, 0); + } else { + Tcl_ListObjIndex(interp, value2Ptr, 0, &value2Ptr); + } + } else { + goto TclLindexList; + } + } - /* special case for AbstractList */ - if (TclObjTypeHasProc(valuePtr,indexProc)) { + if (TclObjectHasInterface(valuePtr, list, length) + || TclHasInternalRep(valuePtr, tclListTypePtr)) { + int code, haveElements = 0, status; + + if (TclHasInternalRep(valuePtr, tclListTypePtr)) { + /* since the type is tclListTypePtr, this can't fail */ + TclListObjGetElementsM(interp, valuePtr, &objc, &objv); + haveElements = 1; + } else { + TclObjectDispatchNoDefault(interp, status, valuePtr, list, + length, interp, valuePtr, &objc); + if (status != TCL_OK) { + CACHE_STACK_INFO(); + TRACE_ERROR(interp); + goto gotError; + } + + if (objc < 0) { + objc = TCL_SIZE_MAX; + } + } + + Tcl_IncrRefCount(value2Ptr); DECACHE_STACK_INFO(); - length = TclObjTypeLength(valuePtr); - if (TclGetIntForIndexM(interp, value2Ptr, length-1, &index)!=TCL_OK) { - CACHE_STACK_INFO(); + code = TclGetIntForIndexM(interp, value2Ptr, objc-1, &index); + CACHE_STACK_INFO(); + if (code != TCL_OK) { + goto TclLindexList; + } + Tcl_DecrRefCount(value2Ptr); + + if (haveElements && code == TCL_OK) { + tosPtr--; + pcAdjustment = 1; + goto lindexFastPath; + } + + Tcl_ResetResult(interp); + TclObjectDispatchNoDefault(interp, status, valuePtr, list, + index, interp, valuePtr, index, &objResultPtr); + if (status != TCL_OK) { TRACE_ERROR(interp); goto gotError; } - if (TclObjTypeIndex(interp, valuePtr, index, &objResultPtr)!=TCL_OK) { - CACHE_STACK_INFO(); - TRACE_ERROR(interp); - goto gotError; + if (objResultPtr == NULL) { + TclNewObj(objResultPtr); } CACHE_STACK_INFO(); if (objResultPtr == NULL) { /* Index is out of range, return empty result. */ TclNewObj(objResultPtr); } Tcl_IncrRefCount(objResultPtr); // reference held here goto lindexDone; + } - + TclLindexList: /* * Extract the desired list element. */ - - { - Tcl_Size value2Length; - Tcl_Obj *indexListPtr = value2Ptr; - if ((TclListObjGetElementsM(interp, valuePtr, &objc, &objv) == TCL_OK) - && ( - !TclHasInternalRep(value2Ptr, &tclListType) - || - ((Tcl_ListObjLength(interp,value2Ptr,&value2Length), - value2Length == 1 - ? (indexListPtr = TclListObjGetElement(value2Ptr, 0), 1) - : 0 - )) - ) - ) { - int code; - - /* increment the refCount of value2Ptr because TclListObjGetElement may - * have just extracted it from a list in the condition for this block. - */ - Tcl_IncrRefCount(indexListPtr); - - DECACHE_STACK_INFO(); - code = TclGetIntForIndexM(interp, indexListPtr, objc-1, &index); - TclDecrRefCount(indexListPtr); - CACHE_STACK_INFO(); - if (code == TCL_OK) { - Tcl_DecrRefCount(value2Ptr); - tosPtr--; - pcAdjustment = 1; - goto lindexFastPath; - } - Tcl_ResetResult(interp); - } - } - - DECACHE_STACK_INFO(); objResultPtr = TclLindexList(interp, valuePtr, value2Ptr); CACHE_STACK_INFO(); lindexDone: if (!objResultPtr) { @@ -4820,50 +4866,87 @@ */ valuePtr = OBJ_AT_TOS; opnd = TclGetInt4AtPtr(pc+1); TRACE(("\"%.30s\" %d => ", O2S(valuePtr), opnd)); + + if (TclObjectHasInterface(valuePtr, list, length) + && TclObjectHasInterface(valuePtr ,list ,index)) { + TCL_UNUSEDVAR(int status); + TclObjectDispatchNoDefault(interp, status, valuePtr, list, + length, interp, valuePtr, &length); + + /* Decode end-offset index values. */ + + index = TclIndexDecode(opnd, length-1); + + /* Compute value @ index */ + if (index >= 0 && index < length) { + TclObjectDispatchNoDefault(interp, status, valuePtr, list, + index, interp, valuePtr, index, &objResultPtr); + if (objResultPtr == NULL) { + CACHE_STACK_INFO(); + TRACE_ERROR(interp); + goto gotError; + } + } else { + TclNewObj(objResultPtr); + } + pcAdjustment = 5; + goto lindexFastPath2; + } /* * Get the contents of the list, making sure that it really is a list * in the process. */ - /* special case for AbstractList */ - if (TclObjTypeHasProc(valuePtr,indexProc)) { - length = TclObjTypeLength(valuePtr); - - /* Decode end-offset index values. */ - index = TclIndexDecode(opnd, length-1); - - if (index >= 0 && index < length) { - /* Compute value @ index */ - DECACHE_STACK_INFO(); - if (TclObjTypeIndex(interp, valuePtr, index, &objResultPtr)!=TCL_OK) { - CACHE_STACK_INFO(); - TRACE_ERROR(interp); - goto gotError; - } - CACHE_STACK_INFO(); - } else { - TclNewObj(objResultPtr); - } - - pcAdjustment = 5; - goto lindexFastPath2; - } - - /* List case */ - if (TclListObjGetElementsM(interp, valuePtr, &objc, &objv) != TCL_OK) { - TRACE_ERROR(interp); - goto gotError; - } - - /* Decode end-offset index values. */ - - index = TclIndexDecode(opnd, objc - 1); - pcAdjustment = 5; + if (!TclHasInternalRep(valuePtr, tclListTypePtr) + && TclObjectHasInterface(valuePtr, list, index)) { + if (Tcl_ListObjLength(interp, valuePtr, &objc) != TCL_OK) { + TRACE_ERROR(interp); + goto gotError; + } + + if (TclIndexIsFromEnd(opnd) && !Tcl_LengthIsFinite(objc)) { + /* end-relative index, and list end is indeterminate */ + if (TclObjectDispatchNoDefault(interp, dstatus, valuePtr, list, indexEnd, + interp, valuePtr, index, &objResultPtr) != TCL_OK + || dstatus != TCL_OK) { + TRACE_ERROR(interp); + goto gotError; + } + } else { + index = TclIndexDecode(opnd, TclIndexLast(objc)); + if (Tcl_ListObjIndex(interp, valuePtr, index, &objResultPtr) + != TCL_OK) { + TRACE_ERROR(interp); + goto gotError; + } + } + if (objResultPtr == NULL) { + TclNewObj(objResultPtr); + } + Tcl_IncrRefCount(objResultPtr); + + /* + * Stash the list element on the stack. + */ + + TRACE_APPEND(("\"%.30s\"\n", O2S(objResultPtr))); + /* Already has the correct refCount */ + NEXT_INST_F(5, 1, -1); + } else { + if (TclListObjGetElementsM(interp, valuePtr, &objc, &objv) != TCL_OK) { + TRACE_ERROR(interp); + goto gotError; + } + /* Decode end-offset index values. */ + + index = TclIndexDecode(opnd, TclIndexLast(objc)); + pcAdjustment = 5; + } lindexFastPath: if (index >= 0 && index < objc) { objResultPtr = objv[index]; } else { @@ -4924,30 +5007,28 @@ /* * Compute the new variable value. */ DECACHE_STACK_INFO(); - if (TclObjTypeHasProc(valuePtr, setElementProc)) { - objResultPtr = TclObjTypeSetElement(interp, - valuePtr, numIndices, - &OBJ_AT_DEPTH(numIndices), OBJ_AT_TOS); - } else { - objResultPtr = TclLsetFlat(interp, valuePtr, numIndices, - &OBJ_AT_DEPTH(numIndices), OBJ_AT_TOS); - } - if (!objResultPtr) { - CACHE_STACK_INFO(); - TRACE_ERROR(interp); - goto gotError; + { + int status; + status = TclLsetFlat(interp, valuePtr, numIndices, + &OBJ_AT_DEPTH(numIndices), OBJ_AT_TOS, &objResultPtr); + + if (status != TCL_OK || !objResultPtr) { + CACHE_STACK_INFO(); + TRACE_ERROR(interp); + goto gotError; + } } /* * Set result. */ CACHE_STACK_INFO(); TRACE_APPEND(("\"%.30s\"\n", O2S(objResultPtr))); - NEXT_INST_V(5, numIndices+1, -1); + NEXT_INST_V(5, numIndices+1, 1); case INST_LSET_LIST: /* 'lset' with 4 args */ /* * Get the old value of variable, and remove the stack ref. This is * safe because the variable still references the object; the ref @@ -4980,11 +5061,11 @@ /* * Set result. */ TRACE_APPEND(("\"%.30s\"\n", O2S(objResultPtr))); - NEXT_INST_F(1, 2, -1); + NEXT_INST_F(1, 2, 1); case INST_LIST_RANGE_IMM: /* lrange with objc==4 and both indices in * bytecode stream */ /* @@ -5034,41 +5115,50 @@ emptyList: TclNewObj(objResultPtr); TRACE_APPEND(("\"%.30s\"", O2S(objResultPtr))); NEXT_INST_F(9, 1, 1); } - toIdx = TclIndexDecode(toIdx, objc - 1); - if (toIdx == TCL_INDEX_NONE) { - goto emptyList; - } else if (toIdx >= objc) { - toIdx = objc - 1; - } - - assert (toIdx >= 0 && toIdx < objc); - /* - assert ( fromIdx != TCL_INDEX_NONE ); - * - * Extra safety for legacy bytecodes: - */ - if (fromIdx == TCL_INDEX_NONE) { - fromIdx = TCL_INDEX_START; - } - - fromIdx = TclIndexDecode(fromIdx, objc - 1); + + toIdxAnchor = TclIndexIsFromEnd(toIdx); + fromIdxAnchor = TclIndexIsFromEnd(fromIdx); DECACHE_STACK_INFO(); - if (TclObjTypeHasProc(valuePtr, sliceProc)) { - if (TclObjTypeSlice(interp, valuePtr, fromIdx, toIdx, &objResultPtr) != TCL_OK) { - objResultPtr = NULL; + if (!Tcl_LengthIsFinite(objc) + && (toIdxAnchor == 1 || fromIdxAnchor == 1)) { + + toIdx = TclIndexDecode(toIdx, SIZE_MAX); + fromIdx = TclIndexDecode(fromIdx, SIZE_MAX); + dstatus = TclObjectInterfaceCall(valuePtr, list, rangeEnd, + interp, valuePtr, toIdxAnchor, toIdx, fromIdxAnchor, + fromIdx, &objResultPtr); + if (dstatus != TCL_OK || objResultPtr == NULL) { + CACHE_STACK_INFO(); + TRACE_ERROR(interp); + goto gotError; } } else { - objResultPtr = TclListObjRange(interp, valuePtr, fromIdx, toIdx); - } - if (objResultPtr == NULL) { - CACHE_STACK_INFO(); - TRACE_ERROR(interp); - goto gotError; + toIdx = TclIndexDecode(toIdx, TclIndexLast(objc)); + if (toIdx == TCL_INDEX_NONE) { + goto emptyList; + } else if (Tcl_LengthIsFinite(objc) && toIdx + 1 >= objc + 1) { + toIdx = TclIndexLast(objc); + } + + assert (toIdx < objc); + /* + assert ( fromIdx != TCL_INDEX_NONE ); + * + * Extra safety for legacy bytecodes: + */ + if (fromIdx == TCL_INDEX_NONE) { + fromIdx = TCL_INDEX_START; + } + + fromIdx = TclIndexDecode(fromIdx, objc - 1); + + /* to do: catch status? */ + TclListObjRange(interp, valuePtr, fromIdx, toIdx, &objResultPtr); } CACHE_STACK_INFO(); TRACE_APPEND(("\"%.30s\"", O2S(objResultPtr))); NEXT_INST_F(9, 1, 1); @@ -5076,64 +5166,60 @@ case INST_LIST_IN: case INST_LIST_NOT_IN: /* Basic list containment operators. */ value2Ptr = OBJ_AT_TOS; valuePtr = OBJ_UNDER_TOS; - s1 = Tcl_GetStringFromObj(valuePtr, &s1len); - TRACE(("\"%.30s\" \"%.30s\" => ", O2S(valuePtr), O2S(value2Ptr))); + s1 = Tcl_GetStringFromObj(valuePtr, &s1len); - if (TclObjTypeHasProc(value2Ptr,inOperProc) != NULL) { - int status = TclObjTypeInOperator(interp, valuePtr, value2Ptr, &match); + if (TclObjectHasInterface(value2Ptr, list, contains)) { + int status; + TclObjectDispatchNoDefault(interp, status, value2Ptr, list, + contains, interp, value2Ptr, valuePtr, &match); if (status != TCL_OK) { TRACE_ERROR(interp); goto gotError; } - } else { - - if (TclListObjLengthM(interp, value2Ptr, &length) != TCL_OK) { - TRACE_ERROR(interp); - goto gotError; - } - match = 0; - if (length > 0) { - Tcl_Size i = 0; - Tcl_Obj *o; - int isAbstractList = TclObjTypeHasProc(value2Ptr,indexProc) != NULL; - - /* - * An empty list doesn't match anything. - */ - - do { - if (isAbstractList) { - DECACHE_STACK_INFO(); - if (TclObjTypeIndex(interp, value2Ptr, i, &o) != TCL_OK) { - CACHE_STACK_INFO(); - TRACE_ERROR(interp); - goto gotError; - } - CACHE_STACK_INFO(); - } else { - Tcl_ListObjIndex(NULL, value2Ptr, i, &o); - } - if (o != NULL) { - s2 = Tcl_GetStringFromObj(o, &s2len); - } else { - s2 = ""; - s2len = 0; - } - if (s1len == s2len) { - match = (memcmp(s1, s2, s1len) == 0); - } - - /* Could be an ephemeral abstract obj */ - Tcl_BounceRefCount(o); - - i++; - } while (i < length && match == 0); - } - } + } else { + TRACE(("\"%.30s\" \"%.30s\" => ", O2S(valuePtr), O2S(value2Ptr))); + if (TclListObjLengthM(interp, value2Ptr, &length) != TCL_OK) { + TRACE_ERROR(interp); + goto gotError; + } + match = 0; + if (length > 0) { + Tcl_Size i = 0; + Tcl_Obj *o; + /* + * An empty list doesn't match anything. + */ + + do { + if (TclObjectHasInterface(valuePtr, list, index)) { + TCL_UNUSEDVAR(int status); + TclObjectDispatchNoDefault(interp, status, value2Ptr, list, + index, interp, value2Ptr, i, &o); + if (!o) { + TRACE_ERROR(interp); + goto gotError; + } + } else { + Tcl_ListObjIndex(NULL, value2Ptr, i, &o); + } + if (o != NULL) { + s2 = Tcl_GetStringFromObj(o, &s2len); + } else { + s2 = ""; + s2len = 0; + } + if (s1len == s2len) { + match = (memcmp(s1, s2, s1len) == 0); + } + TclBounceRefCount(o); + i++; + } while (i < length && match == 0); + } + } if (*pc == INST_LIST_NOT_IN) { match = !match; } @@ -5202,11 +5288,11 @@ != TCL_OK) { CACHE_STACK_INFO(); TRACE_ERROR(interp); goto gotError; } - if (fromIdx == TCL_INDEX_NONE) { + if (fromIdx < 0) { fromIdx = 0; } else if (fromIdx > length) { fromIdx = length; } numToDelete = 0; @@ -5221,11 +5307,11 @@ if (toIdx != TCL_INDEX_NONE) { if (toIdx > length) { toIdx = length; } if (toIdx >= fromIdx) { - numToDelete = (size_t)toIdx - (size_t)fromIdx + 1; + numToDelete = toIdx - fromIdx + 1; } } } CACHE_STACK_INFO(); @@ -5393,43 +5479,51 @@ /* * Get char length to calculate what 'end' means. */ slength = Tcl_GetCharLength(valuePtr); - DECACHE_STACK_INFO(); - if (TclGetIntForIndexM(interp, value2Ptr, slength-1, &index)!=TCL_OK) { - CACHE_STACK_INFO(); - TRACE_ERROR(interp); - goto gotError; - } - CACHE_STACK_INFO(); - - if (index < 0 || index >= slength) { - TclNewObj(objResultPtr); - } else if (TclIsPureByteArray(valuePtr)) { - objResultPtr = Tcl_NewByteArrayObj( - Tcl_GetBytesFromObj(NULL, valuePtr, (Tcl_Size *)NULL)+index, 1); - } else if (valuePtr->bytes && slength == valuePtr->length) { - objResultPtr = Tcl_NewStringObj((const char *) - valuePtr->bytes+index, 1); - } else { - char buf[4] = ""; - int ch = Tcl_GetUniChar(valuePtr, index); - - /* - * This could be: Tcl_NewUnicodeObj((const Tcl_UniChar *)&ch, 1) - * but creating the object as a string seems to be faster in - * practical use. - */ - if (ch == -1) { - TclNewObj(objResultPtr); - } else { - slength = Tcl_UniCharToUtf(ch, buf); - objResultPtr = Tcl_NewStringObj(buf, slength); - } - } - + if (TclObjectHasInterface(valuePtr, string, index)) { + int status; + status = TclStringIndexInterface(interp, valuePtr, value2Ptr, &objResultPtr); + if (status != TCL_OK) { + TRACE_ERROR(interp); + goto gotError; + } + } else { + DECACHE_STACK_INFO(); + if (TclGetIntForIndexM(interp, value2Ptr, slength-1, &index)!=TCL_OK) { + CACHE_STACK_INFO(); + TRACE_ERROR(interp); + goto gotError; + } + CACHE_STACK_INFO(); + + if (index < 0 || index >= slength) { + TclNewObj(objResultPtr); + } else if (TclIsPureByteArray(valuePtr)) { + objResultPtr = Tcl_NewByteArrayObj( + Tcl_GetBytesFromObj(NULL, valuePtr, NULL)+index, 1); + } else if (valuePtr->bytes && slength == valuePtr->length) { + objResultPtr = Tcl_NewStringObj((const char *) + valuePtr->bytes+index, 1); + } else { + char buf[4] = ""; + int ch = Tcl_GetUniChar(valuePtr, index); + + /* + * This could be: Tcl_NewUnicodeObj((const Tcl_UniChar *)&ch, 1) + * but creating the object as a string seems to be faster in + * practical use. + */ + if (ch == -1) { + TclNewObj(objResultPtr); + } else { + slength = Tcl_UniCharToUtf(ch, buf); + objResultPtr = Tcl_NewStringObj(buf, slength); + } + } + } TRACE_APPEND(("\"%s\"\n", O2S(objResultPtr))); NEXT_INST_F(1, 2, 1); case INST_STR_RANGE: TRACE(("\"%.20s\" %.20s %.20s =>", @@ -5470,18 +5564,78 @@ if (slength == 0) { TRACE_APPEND(("\n")); NEXT_INST_F(9, 0, 0); } - /* Decode index operands. */ + if (TclObjectHasInterface(valuePtr, list, index)) { + if ((TclIndexIsFromEnd(toIdx) || TclIndexIsFromEnd(fromIdx)) + && !Tcl_LengthIsFinite(slength)) { - toIdx = TclIndexDecode(toIdx, slength - 1); - fromIdx = TclIndexDecode(fromIdx, slength - 1); - if (toIdx == TCL_INDEX_NONE) { - TclNewObj(objResultPtr); + fromIdx = TclIndexDecode(fromIdx, TclIndexLast(slength)); + toIdx = TclIndexDecode(toIdx, TclIndexLast(slength)); + + if (TclObjectInterfaceCall(valuePtr, + string, rangeEnd, valuePtr, fromIdx, toIdx, &objResultPtr) + != TCL_OK || objResultPtr == NULL) { + TRACE_ERROR(interp); + goto gotError; + } + } else { + fromIdx = TclIndexDecode(fromIdx, TclIndexLast(slength)); + toIdx = TclIndexDecode(toIdx, TclIndexLast(slength)); + if (TclObjectInterfaceCall(valuePtr, string, range, valuePtr, + fromIdx, toIdx, &objResultPtr) + != TCL_OK || objResultPtr == NULL) { + TRACE_ERROR(interp); + goto gotError; + } + } } else { - objResultPtr = Tcl_GetRange(valuePtr, fromIdx, toIdx); + /* Decode index operands. */ + + /* + assert ( toIdx != TCL_INDEX_NONE ); + * + * Extra safety for legacy bytecodes: + */ + if (toIdx == TCL_INDEX_NONE) { + goto emptyRange; + } + + toIdx = TclIndexDecode(toIdx, slength - 1); + if (toIdx == TCL_INDEX_NONE) { + goto emptyRange; + } else if (toIdx >= slength) { + toIdx = slength - 1; + } + + assert ( toIdx != TCL_INDEX_NONE && toIdx < slength ); + + /* + assert ( fromIdx != TCL_INDEX_NONE ); + * + * Extra safety for legacy bytecodes: + */ + if (fromIdx == TCL_INDEX_NONE) { + fromIdx = TCL_INDEX_START; + } + + fromIdx = TclIndexDecode(fromIdx, slength - 1); + if (fromIdx == TCL_INDEX_NONE) { + fromIdx = TCL_INDEX_START; + } + + if (fromIdx + 1 <= toIdx + 1) { + objResultPtr = Tcl_GetRange(valuePtr, fromIdx, toIdx); + if (objResultPtr == NULL) { + TRACE_ERROR(interp); + goto gotError; + } + } else { + emptyRange: + TclNewObj(objResultPtr); + } } TRACE_APPEND(("%.30s\n", O2S(objResultPtr))); NEXT_INST_F(9, 1, 1); { @@ -5806,21 +5960,33 @@ case INST_NEQ: case INST_LT: case INST_GT: case INST_LE: case INST_GE: { - int iResult = 0, compare = 0; + int isEmpty, iResult = 0, compare = 0, status; value2Ptr = OBJ_AT_TOS; valuePtr = OBJ_UNDER_TOS; /* Try to determine, without triggering generation of a string representation, whether one value is not a number. */ - if (TclCheckEmptyString(valuePtr) > 0 || TclCheckEmptyString(value2Ptr) > 0) { + status = TclCheckEmptyString(interp, valuePtr, &isEmpty); + if (status) { + goto gotError; + } + if (isEmpty > 0) { goto stringCompare; + } else { + status = TclCheckEmptyString(interp, value2Ptr ,&isEmpty); + if (status) { + goto gotError; + } + if (isEmpty > 0) { + goto stringCompare; + } } if (GetNumberFromObj(NULL, valuePtr, &ptr1, &type1) != TCL_OK || GetNumberFromObj(NULL, value2Ptr, &ptr2, &type2) != TCL_OK) { /* @@ -6438,11 +6604,11 @@ NEXT_INST_F(1, 0, 0); } if (Tcl_IsShared(valuePtr)) { /* * Here we do some surgery within the Tcl_Obj internals. We want - * to copy the internalrep, but not the string, so we temporarily hide + * to copy the intrep, but not the string, so we temporarily hide * the string so we do not copy it. */ char *savedString = valuePtr->bytes; @@ -6463,11 +6629,11 @@ * ----------------------------------------------------------------- */ case INST_TRY_CVT_TO_BOOLEAN: valuePtr = OBJ_AT_TOS; - if (TclHasInternalRep(valuePtr, &tclBooleanType)) { + if (TclHasInternalRep(valuePtr, tclBooleanType)) { objResultPtr = TCONST(1); } else { int res = (TclSetBooleanFromAny(NULL, valuePtr) == TCL_OK); objResultPtr = TCONST(res); } @@ -6532,11 +6698,17 @@ TRACE_APPEND(("ERROR converting list %" TCL_Z_MODIFIER "d, \"%s\": %s", i, O2S(listPtr), O2S(Tcl_GetObjResult(interp)))); goto gotError; } if (Tcl_IsShared(listPtr)) { - objPtr = TclListObjCopy(NULL, listPtr); + DECACHE_STACK_INFO(); + objPtr = TclDuplicatePureObj( + interp, listPtr, tclListTypePtr); + CACHE_STACK_INFO(); + if (!objPtr) { + goto gotError; + } Tcl_IncrRefCount(objPtr); Tcl_DecrRefCount(listPtr); OBJ_AT_DEPTH(listTmpDepth) = objPtr; } iterTmp = (listLen + (numVars - 1))/numVars; @@ -6606,16 +6778,14 @@ listTmpDepth = numLists + 1; for (i = 0; i < numLists; i++) { varListPtr = infoPtr->varLists[i]; numVars = varListPtr->numVars; - int hasAbstractList; listPtr = OBJ_AT_DEPTH(listTmpDepth); - hasAbstractList = TclObjTypeHasProc(listPtr, indexProc) != 0; DECACHE_STACK_INFO(); - if (hasAbstractList) { + if (TclObjectHasInterface(listPtr, list, index)) { status = Tcl_ListObjLength(interp, listPtr, &listLen); elements = NULL; } else { status = TclListObjGetElementsM( interp, listPtr, &listLen, &elements); @@ -6622,13 +6792,10 @@ } if (status != TCL_OK) { CACHE_STACK_INFO(); goto gotError; } - CACHE_STACK_INFO(); - - valIndex = (iterNum * numVars); for (j = 0; j < numVars; j++) { if (valIndex >= listLen) { TclNewObj(valuePtr); } else { @@ -7169,11 +7336,11 @@ if (Tcl_DictObjFirst(interp, dictPtr, searchPtr, &keyPtr, &valuePtr, &done) != TCL_OK) { /* * dictPtr is no longer on the stack, and we're not - * moving it into the internalrep of an iterator. We need + * moving it into the intrep of an iterator. We need * to drop the refcount [Tcl Bug 9b352768e6]. */ Tcl_DecrRefCount(dictPtr); Tcl_Free(searchPtr); @@ -7782,14 +7949,14 @@ TclStackFree(interp, TD); /* free my stack */ return result; /* - * INST_START_CMD failure case removed where it doesn't bother that much + * INST_START_CMD failure case removed where it doesn't bother that much. * - * Remark that if the interpreter is marked for deletion its - * compileEpoch is modified, so that the epoch check also verifies + * If the interpreter is marked for deletion, its + * compileEpoch is modified, Therefore the epoch check also verifies * that the interp is not deleted. If no outside call has been made * since the last check, it is safe to omit the check. * case INST_START_CMD: */ @@ -8517,11 +8684,11 @@ } overflowExpon: if ((TclGetWideIntFromObj(NULL, value2Ptr, &w2) != TCL_OK) - || (value2Ptr->typePtr != &tclIntType) + || (value2Ptr->typePtr != tclIntType) || (Tcl_WideUInt)w2 >= (1<<28)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "exponent too large", -1)); return GENERAL_ARITHMETIC_ERROR; } Index: generic/tclFCmd.c ================================================================== --- generic/tclFCmd.c +++ generic/tclFCmd.c @@ -1,17 +1,28 @@ /* - * tclFCmd.c - * - * This file implements the generic portion of file manipulation - * subcommands of the "file" command. - * * Copyright © 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclFCmd.c + * + * This file implements the generic portion of file manipulation + * subcommands of the "file" command. + */ + #include "tclInt.h" #include "tclFileSystem.h" /* * Declarations for local functions defined in this file: Index: generic/tclFileName.c ================================================================== --- generic/tclFileName.c +++ generic/tclFileName.c @@ -1,18 +1,29 @@ /* - * tclFileName.c -- - * - * This file contains routines for converting file names betwen native - * and network form. - * * Copyright © 1995-1998 Sun Microsystems, Inc. * Copyright © 1998-1999 Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclFileName.c -- + * + * This file contains routines for converting file names betwen native + * and network form. + */ + #include "tclInt.h" #include "tclRegexp.h" #include "tclFileSystem.h" /* For TclGetPathType() */ /* Index: generic/tclFileSystem.h ================================================================== --- generic/tclFileSystem.h +++ generic/tclFileSystem.h @@ -1,17 +1,28 @@ /* - * tclFileSystem.h -- - * - * This file contains the common definitions and prototypes for use by - * Tcl's filesystem and path handling layers. - * * Copyright (c) 2003 Vince Darley. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclFileSystem.h -- + * + * This file contains the common definitions and prototypes for use by + * Tcl's filesystem and path handling layers. + */ + #ifndef _TCLFILESYSTEM #define _TCLFILESYSTEM #include "tcl.h" Index: generic/tclGet.c ================================================================== --- generic/tclGet.c +++ generic/tclGet.c @@ -1,19 +1,30 @@ /* - * tclGet.c -- - * - * This file contains functions to convert strings into other forms, like - * integers or floating-point numbers or booleans, doing syntax checking - * along the way. - * * Copyright © 1990-1993 The Regents of the University of California. * Copyright © 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclGet.c -- + * + * This file contains functions to convert strings into other forms, like + * integers or floating-point numbers or booleans, doing syntax checking + * along the way. + */ + #include "tclInt.h" /* *---------------------------------------------------------------------- * Index: generic/tclGetDate.y ================================================================== --- generic/tclGetDate.y +++ generic/tclGetDate.y @@ -1,19 +1,30 @@ +/* + * Copyright (c) 1992-1995 Karl Lehenbauer & Mark Diekhans. + * Copyright (c) 1995-1997 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclGetDate.y -- * * Contains yacc grammar for parsing date and time strings. The output of * this file should be the file tclDate.c which is used directly in the * Tcl sources. Note that this file is largely obsolete in Tcl 8.5; it is * only used when doing free-form date parsing, an ill-defined process * anyway. - * - * Copyright (c) 1992-1995 Karl Lehenbauer & Mark Diekhans. - * Copyright (c) 1995-1997 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ %parse-param {DateInfo* info} %lex-param {DateInfo* info} %define api.pure @@ -32,10 +43,20 @@ * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + #include "tclInt.h" /* * Bison generates several labels that happen to be unused. MS Visual C++ * doesn't like that, and complains. Tell it to shut up. Index: generic/tclHash.c ================================================================== --- generic/tclHash.c +++ generic/tclHash.c @@ -1,18 +1,29 @@ /* - * tclHash.c -- - * - * Implementation of in-memory hash tables for Tcl and Tcl-based - * applications. - * * Copyright © 1991-1993 The Regents of the University of California. * Copyright © 1994 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclHash.c -- + * + * Implementation of in-memory hash tables for Tcl and Tcl-based + * applications. + */ + #include "tclInt.h" /* * When there are this many entries per bucket, on average, rebuild the hash * table to make it larger. Index: generic/tclHistory.c ================================================================== --- generic/tclHistory.c +++ generic/tclHistory.c @@ -1,18 +1,29 @@ +/* + * Copyright © 1990-1993 The Regents of the University of California. + * Copyright © 1994-1997 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclHistory.c -- * * This module and the Tcl library file history.tcl together implement * Tcl command history. Tcl_RecordAndEval(Obj) can be called to record * commands ("events") before they are executed. Commands defined in * history.tcl may be used to perform history substitutions. - * - * Copyright © 1990-1993 The Regents of the University of California. - * Copyright © 1994-1997 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" /* Index: generic/tclIO.c ================================================================== --- generic/tclIO.c +++ generic/tclIO.c @@ -1,19 +1,30 @@ /* - * tclIO.c -- - * - * This file provides the generic portions (those that are the same on - * all platforms and for all channel types) of Tcl's IO facilities. - * * Copyright © 1998-2000 Ajuba Solutions * Copyright © 1995-1997 Sun Microsystems, Inc. * Contributions from Don Porter, NIST, 2014. (not subject to US copyright) * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclIO.c -- + * + * This file provides the generic portions (those that are the same on + * all platforms and for all channel types) of Tcl's IO facilities. + */ + #include "tclInt.h" #include "tclIO.h" #include /* @@ -335,11 +346,11 @@ "channel", /* name for this type */ FreeChannelInternalRep, /* freeIntRepProc */ DupChannelInternalRep, /* dupIntRepProc */ NULL, /* updateStringProc */ NULL, /* setFromAnyProc */ - TCL_OBJTYPE_V0 + 0 }; #define GetIso88591() \ (binaryEncoding ? Tcl_GetEncoding(NULL, "iso8859-1") : binaryEncoding) @@ -1668,10 +1679,14 @@ tmp = (char *)Tcl_Alloc(7); tmp[0] = '\0'; } statePtr->channelName = tmp; statePtr->flags = mask; + /* uncomment this to make default encoding error handling strict */ + /* + statePtr->flags |= CHANNEL_ENCODING_STRICT; + */ statePtr->maxPerms = mask; /* Save max privileges for close callback */ /* * Set the channel to system default encoding. * @@ -5946,10 +5961,11 @@ if (GotFlag(statePtr, CHANNEL_ENCODING_ERROR)) { ResetFlag(statePtr, CHANNEL_EOF|CHANNEL_ENCODING_ERROR); /* TODO: UpdateInterest not needed here? */ UpdateInterest(chanPtr); + Tcl_SetErrno(EILSEQ); return -1; } /* * Early out when next read will see eofchar. @@ -6046,10 +6062,11 @@ */ if (GotFlag(statePtr, CHANNEL_ENCODING_ERROR) && !GotFlag(statePtr, CHANNEL_STICKY_EOF) && (!GotFlag(statePtr, CHANNEL_NONBLOCKING))) { + copied = -1; goto finish; } } if (copiedNow < 0) { @@ -6125,10 +6142,13 @@ ResetFlag(statePtr, CHANNEL_EOF|CHANNEL_ENCODING_ERROR); Tcl_SetErrno(EILSEQ); copied = -1; } TclChannelRelease((Tcl_Channel)chanPtr); + if (copied == TCL_INDEX_NONE) { + ResetFlag(statePtr, CHANNEL_ENCODING_ERROR|CHANNEL_EOF); + } return copied; } /* *--------------------------------------------------------------------------- @@ -6257,11 +6277,11 @@ int factor = *factorPtr; int dstLimit = TCL_UTF_MAX - 1 + toRead * factor / UTF_EXPANSION_FACTOR; (void) Tcl_GetStringFromObj(objPtr, &numBytes); - Tcl_SetObjLength(objPtr, numBytes + dstLimit); + Tcl_AppendToObj(objPtr, NULL, dstLimit); if (toRead == srcLen) { Tcl_Size size; dst = TclGetStringStorage(objPtr, &size) + numBytes; dstLimit = (size - numBytes) > INT_MAX ? INT_MAX : (size - numBytes); @@ -8241,13 +8261,11 @@ ResetFlag(statePtr, CHANNEL_NEED_MORE_DATA|CHANNEL_ENCODING_ERROR); UpdateInterest(chanPtr); return TCL_OK; } else if (HaveOpt(2, "-eofchar")) { if (!newValue[0] || (!(newValue[0] & 0x80) && (!newValue[1] -#ifndef TCL_NO_DEPRECATED || !strcmp(newValue+1, " {}") -#endif ))) { if (GotFlag(statePtr, TCL_READABLE)) { statePtr->inEofChar = newValue[0]; } } else { Index: generic/tclIO.h ================================================================== --- generic/tclIO.h +++ generic/tclIO.h @@ -1,18 +1,29 @@ /* - * tclIO.h -- - * - * This file provides the generic portions (those that are the same on - * all platforms and for all channel types) of Tcl's IO facilities. - * * Copyright (c) 1998-2000 Ajuba Solutions * Copyright (c) 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclIO.h -- + * + * This file provides the generic portions (those that are the same on + * all platforms and for all channel types) of Tcl's IO facilities. + */ + /* * Make sure that both EAGAIN and EWOULDBLOCK are defined. This does not * compile on systems where neither is defined. We want both defined so that * we can test safely for both. In the code we still have to test for both * because there may be systems on which both are defined and have different @@ -156,14 +167,10 @@ TclEolTranslation outputTranslation; /* What translation to use for generating end * of line sequences in output? */ int inEofChar; /* If nonzero, use this as a signal of EOF on * input. */ -#if TCL_MAJOR_VERSION < 9 - int outEofChar; /* If nonzero, append this to the channel when - * it is closed if it is open for writing. For Tcl 8.x only */ -#endif int unreportedError; /* Non-zero if an error report was deferred * because it happened in the background. The * value is the POSIX error code. */ Tcl_Size refCount; /* How many interpreters hold references to * this IO channel? */ Index: generic/tclIOCmd.c ================================================================== --- generic/tclIOCmd.c +++ generic/tclIOCmd.c @@ -1,16 +1,27 @@ /* - * tclIOCmd.c -- - * - * Contains the definitions of most of the Tcl commands relating to IO. - * * Copyright © 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclIOCmd.c -- + * + * Contains the definitions of most of the Tcl commands relating to IO. + */ + #include "tclInt.h" #include "tclTomMath.h" /* * Callback structure for accept callback in a TCP server. @@ -304,11 +315,10 @@ TclChannelPreserve(chan); TclNewObj(linePtr); lineLen = Tcl_GetsObj(chan, linePtr); if (lineLen == TCL_IO_FAILURE) { if (!Tcl_Eof(chan) && !Tcl_InputBlocked(chan)) { - Tcl_DecrRefCount(linePtr); /* * TIP #219. * Capture error messages put by the driver into the bypass area * and put them into the regular interpreter result. Fall back to @@ -369,11 +379,12 @@ Tcl_Channel chan; /* The channel to read from. */ int newline, i; /* Discard newline at end? */ Tcl_WideInt toRead; /* How many bytes to read? */ Tcl_Size charactersRead; /* How many characters were read? */ int mode; /* Mode in which channel is opened. */ - Tcl_Obj *resultPtr, *chanObjPtr; + Tcl_Obj *resultPtr, *resultDictPtr, *returnOptsPtr, *chanObjPtr; + int res, status; if ((objc != 2) && (objc != 3)) { Interp *iPtr; argerror: @@ -431,18 +442,10 @@ TclNewObj(resultPtr); TclChannelPreserve(chan); charactersRead = Tcl_ReadChars(chan, resultPtr, toRead, 0); if (charactersRead == TCL_IO_FAILURE) { - Tcl_Obj *returnOptsPtr = NULL; - if (TclChannelGetBlockingMode(chan)) { - returnOptsPtr = Tcl_NewDictObj(); - Tcl_DictObjPut(NULL, returnOptsPtr, Tcl_NewStringObj("-data", -1), - resultPtr); - } else { - Tcl_DecrRefCount(resultPtr); - } /* * TIP #219. * Capture error messages put by the driver into the bypass area and * put them into the regular interpreter result. Fall back to the * regular message if nothing was found in the bypass. @@ -451,16 +454,25 @@ if (!TclChanCaughtErrorBypass(interp, chan)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "error reading \"%s\": %s", TclGetString(chanObjPtr), Tcl_PosixError(interp))); } - TclChannelRelease(chan); - if (returnOptsPtr) { + status = TclCheckEmptyString(interp, resultPtr, &res); + if (!status && !res) { + resultDictPtr = Tcl_NewDictObj(); + Tcl_DictObjPut(NULL, resultDictPtr, Tcl_NewStringObj("read", -1) + , resultPtr); + returnOptsPtr = Tcl_NewDictObj(); + Tcl_DictObjPut(NULL, returnOptsPtr, Tcl_NewStringObj("-result", -1) + , resultDictPtr); Tcl_SetReturnOptions(interp, returnOptsPtr); + } else { + Tcl_DecrRefCount(resultPtr); } + TclChannelRelease(chan); return TCL_ERROR; - } + } /* * If requested, remove the last newline in the channel if at EOF. */ @@ -944,15 +956,10 @@ if (chan == NULL) { return TCL_ERROR; } - /* Bug [0f1ddc0df7] - encoding errors - use replace profile */ - if (Tcl_SetChannelOption(NULL, chan, "-profile", "replace") != TCL_OK) { - return TCL_ERROR; - } - if (background) { /* * Store the list of PIDs from the pipeline in interp's result and * detach the PIDs (instead of waiting for them). */ Index: generic/tclIOGT.c ================================================================== --- generic/tclIOGT.c +++ generic/tclIOGT.c @@ -1,18 +1,29 @@ /* - * tclIOGT.c -- - * - * Implements a generic transformation exposing the underlying API at the - * script level. Contributed by Andreas Kupries. - * * Copyright © 2000 Ajuba Solutions * Copyright © 1999-2000 Andreas Kupries (a.kupries@westend.com) * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclIOGT.c -- + * + * Implements a generic transformation exposing the underlying API at the + * script level. Contributed by Andreas Kupries. + */ + #include "tclInt.h" #include "tclIO.h" /* * Forward declarations of internal procedures. First the driver procedures of @@ -377,11 +388,15 @@ Tcl_Obj *resObj; /* See below, switch (transmit). */ Tcl_Size resLen = 0; unsigned char *resBuf; Tcl_InterpState state = NULL; int res = TCL_OK; - Tcl_Obj *command = TclListObjCopy(NULL, dataPtr->command); + Tcl_Obj *command = TclDuplicatePureObj( + interp, dataPtr->command, tclListTypePtr); + if (!command) { + return TCL_ERROR; + } Tcl_Interp *eval = dataPtr->interp; Tcl_Preserve(eval); /* Index: generic/tclIORChan.c ================================================================== --- generic/tclIORChan.c +++ generic/tclIORChan.c @@ -1,5 +1,21 @@ +/* + * Copyright © 2004-2005 ActiveState, a division of Sophos + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclIORChan.c -- * * This file contains the implementation of Tcl's generic channel * reflection code, which allows the implementation of Tcl channels in @@ -7,15 +23,10 @@ * * Parts of this file are based on code contributed by Jean-Claude * Wippler. * * See TIP #219 for the specification of this functionality. - * - * Copyright © 2004-2005 ActiveState, a division of Sophos - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" #include "tclIO.h" #include @@ -2259,11 +2270,14 @@ rcPtr->thread = Tcl_GetCurrentThread(); #endif rcPtr->mode = mode; rcPtr->interest = 0; /* Initially no interest registered */ - rcPtr->cmd = TclListObjCopy(NULL, cmdpfxObj); + rcPtr->cmd = TclDuplicatePureObj(interp, cmdpfxObj, tclListTypePtr); + if (!rcPtr->cmd) { + return NULL; + } Tcl_IncrRefCount(rcPtr->cmd); rcPtr->methods = Tcl_NewListObj(METH_WRITE + 1, NULL); while (mn <= (int)METH_WRITE) { Tcl_ListObjAppendElement(NULL, rcPtr->methods, Tcl_NewStringObj(methodNames[mn++], -1)); @@ -2397,11 +2411,14 @@ /* * Insert method into the callback command, after the command prefix, * before the channel id. */ - cmd = TclListObjCopy(NULL, rcPtr->cmd); + cmd = TclDuplicatePureObj(NULL, rcPtr->cmd, tclListTypePtr); + if (!cmd) { + return TCL_ERROR; + } Tcl_ListObjIndex(NULL, rcPtr->methods, method, &methObj); Tcl_ListObjAppendElement(NULL, cmd, methObj); Tcl_ListObjAppendElement(NULL, cmd, rcPtr->name); /* Index: generic/tclIORTrans.c ================================================================== --- generic/tclIORTrans.c +++ generic/tclIORTrans.c @@ -1,5 +1,21 @@ +/* + * Copyright © 2007-2008 ActiveState. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclIORTrans.c -- * * This file contains the implementation of Tcl's generic transformation * reflection code, which allows the implementation of Tcl channel @@ -7,15 +23,10 @@ * * Parts of this file are based on code contributed by Jean-Claude * Wippler. * * See TIP #230 for the specification of this functionality. - * - * Copyright © 2007-2008 ActiveState. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" #include "tclIO.h" #include Index: generic/tclIOSock.c ================================================================== --- generic/tclIOSock.c +++ generic/tclIOSock.c @@ -1,16 +1,27 @@ /* - * tclIOSock.c -- - * - * Common routines used by all socket based channel types. - * * Copyright © 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclIOSock.c -- + * + * Common routines used by all socket based channel types. + */ + #include "tclInt.h" #if defined(_WIN32) /* * On Windows, we need to do proper Unicode->UTF-8 conversion. Index: generic/tclIOUtil.c ================================================================== --- generic/tclIOUtil.c +++ generic/tclIOUtil.c @@ -1,20 +1,31 @@ +/* + * Copyright © 1991-1994 The Regents of the University of California. + * Copyright © 1994-1997 Sun Microsystems, Inc. + * Copyright © 2001-2004 Vincent Darley. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclIOUtil.c -- * * Provides an interface for managing filesystems in Tcl, and also for * creating a filesystem interface in Tcl arbitrary facilities. All * filesystem operations are performed via this interface. Vince Darley * is the primary author. Other signifiant contributors are Karl * Lehenbauer, Mark Diekhans and Peter da Silva. - * - * Copyright © 1991-1994 The Regents of the University of California. - * Copyright © 1994-1997 Sun Microsystems, Inc. - * Copyright © 2001-2004 Vincent Darley. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" #ifdef _WIN32 # include "tclWinInt.h" @@ -1733,10 +1744,15 @@ if (Tcl_SetChannelOption(interp, chan, "-encoding", encodingName) != TCL_OK) { Tcl_CloseEx(interp,chan,0); return result; } + if (Tcl_SetChannelOption(interp, chan, "-profile", "strict") + != TCL_OK) { + Tcl_CloseEx(interp,chan,0); + return result; + } TclNewObj(objPtr); Tcl_IncrRefCount(objPtr); /* @@ -1953,16 +1969,16 @@ * Record information about where the error occurred. */ Tcl_Size length; const char *pathString = Tcl_GetStringFromObj(pathPtr, &length); - const unsigned limit = 150; - int overflow = ((unsigned)length > limit); + const int limit = 150; + int overflow = (length > limit); Tcl_AppendObjToErrorInfo(interp, Tcl_ObjPrintf( "\n (file \"%.*s%s\" line %d)", - (overflow ? limit : (unsigned)length), pathString, + (overflow ? limit : (int)length), pathString, (overflow ? "..." : ""), Tcl_GetErrorLine(interp))); } Tcl_DecrRefCount(objPtr); return result; Index: generic/tclIndexObj.c ================================================================== --- generic/tclIndexObj.c +++ generic/tclIndexObj.c @@ -1,20 +1,31 @@ /* - * tclIndexObj.c -- - * - * This file implements objects of type "index". This object type is used - * to lookup a keyword in a table of valid values and cache the index of - * the matching entry. Also provides table-based argv/argc processing. - * * Copyright © 1990-1994 The Regents of the University of California. * Copyright © 1997 Sun Microsystems, Inc. * Copyright © 2006 Sam Bromley. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclIndexObj.c -- + * + * This file implements objects of type "index". This object type is used + * to lookup a keyword in a table of valid values and cache the index of + * the matching entry. Also provides table-based argv/argc processing. + */ + #include "tclInt.h" #include /* * Prototypes for functions defined later in this file: @@ -35,17 +46,17 @@ /* * The structure below defines the index Tcl object type by means of functions * that can be invoked by generic object code. */ -const Tcl_ObjType tclIndexType = { +static const Tcl_ObjType indexType = { "index", /* name */ FreeIndex, /* freeIntRepProc */ DupIndex, /* dupIntRepProc */ UpdateStringOfIndex, /* updateStringProc */ NULL, /* setFromAnyProc */ - TCL_OBJTYPE_V0 + 0 }; /* * The definition of the internal representation of the "index" object; The * internalRep.twoPtrValue.ptr1 field of an object of "index" type will be a @@ -211,11 +222,11 @@ /* * See if there is a valid cached result from a previous lookup. */ if (objPtr && !(flags & TCL_INDEX_TEMP_TABLE)) { - irPtr = TclFetchInternalRep(objPtr, &tclIndexType); + irPtr = TclFetchInternalRep(objPtr, &indexType); if (irPtr) { indexRep = (IndexRep *)irPtr->twoPtrValue.ptr1; if ((indexRep->tablePtr == tablePtr) && (indexRep->offset == offset) && (indexRep->index != TCL_INDEX_NONE)) { @@ -280,19 +291,19 @@ * new internal-rep if at all possible since that is potentially a slow * operation. */ if (objPtr && (index != TCL_INDEX_NONE) && !(flags & TCL_INDEX_TEMP_TABLE)) { - irPtr = TclFetchInternalRep(objPtr, &tclIndexType); + irPtr = TclFetchInternalRep(objPtr, &indexType); if (irPtr) { indexRep = (IndexRep *)irPtr->twoPtrValue.ptr1; } else { Tcl_ObjInternalRep ir; indexRep = (IndexRep*)Tcl_Alloc(sizeof(IndexRep)); ir.twoPtrValue.ptr1 = indexRep; - Tcl_StoreInternalRep(objPtr, &tclIndexType, &ir); + Tcl_StoreInternalRep(objPtr, &indexType, &ir); } indexRep->tablePtr = (void *) tablePtr; indexRep->offset = offset; indexRep->index = index; } @@ -383,11 +394,11 @@ static void UpdateStringOfIndex( Tcl_Obj *objPtr) { - IndexRep *indexRep = (IndexRep *)TclFetchInternalRep(objPtr, &tclIndexType)->twoPtrValue.ptr1; + IndexRep *indexRep = (IndexRep *)TclFetchInternalRep(objPtr, &indexType)->twoPtrValue.ptr1; const char *indexStr = EXPAND_OF(indexRep); Tcl_InitStringRep(objPtr, indexStr, strlen(indexStr)); } @@ -415,15 +426,15 @@ Tcl_Obj *dupPtr) { Tcl_ObjInternalRep ir; IndexRep *dupIndexRep = (IndexRep *)Tcl_Alloc(sizeof(IndexRep)); - memcpy(dupIndexRep, TclFetchInternalRep(srcPtr, &tclIndexType)->twoPtrValue.ptr1, + memcpy(dupIndexRep, TclFetchInternalRep(srcPtr, &indexType)->twoPtrValue.ptr1, sizeof(IndexRep)); ir.twoPtrValue.ptr1 = dupIndexRep; - Tcl_StoreInternalRep(dupPtr, &tclIndexType, &ir); + Tcl_StoreInternalRep(dupPtr, &indexType, &ir); } /* *---------------------------------------------------------------------- * @@ -443,11 +454,11 @@ static void FreeIndex( Tcl_Obj *objPtr) { - Tcl_Free(TclFetchInternalRep(objPtr, &tclIndexType)->twoPtrValue.ptr1); + Tcl_Free(TclFetchInternalRep(objPtr, &indexType)->twoPtrValue.ptr1); objPtr->typePtr = NULL; } /* *---------------------------------------------------------------------- @@ -863,11 +874,11 @@ /* * Add the element, quoting it if necessary. */ const Tcl_ObjInternalRep *irPtr; - if ((irPtr = TclFetchInternalRep(origObjv[i], &tclIndexType))) { + if ((irPtr = TclFetchInternalRep(origObjv[i], &indexType))) { IndexRep *indexRep = (IndexRep *)irPtr->twoPtrValue.ptr1; elementStr = EXPAND_OF(indexRep); elemLen = strlen(elementStr); } else { @@ -910,11 +921,11 @@ * the correct error message even if the subcommand was abbreviated. * Otherwise, just use the string rep. */ const Tcl_ObjInternalRep *irPtr; - if ((irPtr = TclFetchInternalRep(objv[i], &tclIndexType))) { + if ((irPtr = TclFetchInternalRep(objv[i], &indexType))) { IndexRep *indexRep = (IndexRep *)irPtr->twoPtrValue.ptr1; Tcl_AppendStringsToObj(objPtr, EXPAND_OF(indexRep), (void *)NULL); } else { /* @@ -1359,11 +1370,11 @@ { static const char *const returnCodes[] = { "ok", "error", "return", "break", "continue", NULL }; - if (!TclHasInternalRep(value, &tclIndexType) + if (!TclHasInternalRep(value, &indexType) && TclGetIntFromObj(NULL, value, codePtr) == TCL_OK) { return TCL_OK; } if (Tcl_GetIndexFromObjStruct(NULL, value, returnCodes, sizeof(char *), NULL, TCL_EXACT, codePtr) == TCL_OK) { Index: generic/tclInt.decls ================================================================== --- generic/tclInt.decls +++ generic/tclInt.decls @@ -1,18 +1,26 @@ +# Copyright © 1998-1999 Scriptics Corporation. +# Copyright © 2001 Kevin B. Kenny. All rights reserved. +# Copyright © 2007 Daniel A. Steffen +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # tclInt.decls -- # # This file contains the declarations for all unsupported # functions that are exported by the Tcl library. This file # is used to generate the tclIntDecls.h, tclIntPlatDecls.h # and tclStubInit.c files # -# Copyright © 1998-1999 Scriptics Corporation. -# Copyright © 2001 Kevin B. Kenny. All rights reserved. -# Copyright © 2007 Daniel A. Steffen -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. library tcl # Define the unsupported generic interfaces. Index: generic/tclInt.h ================================================================== --- generic/tclInt.h +++ generic/tclInt.h @@ -1,23 +1,35 @@ /* - * tclInt.h -- - * - * Declarations of things used internally by the Tcl interpreter. - * * Copyright (c) 1987-1993 The Regents of the University of California. * Copyright (c) 1993-1997 Lucent Technologies. * Copyright (c) 1994-1998 Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * Copyright (c) 2001, 2002 by Kevin B. Kenny. All rights reserved. * Copyright (c) 2007 Daniel A. Steffen * Copyright (c) 2006-2008 by Joe Mistachkin. All rights reserved. * Copyright (c) 2008 by Miguel Sofer. All rights reserved. + * Copyright (c) 2021 by Nathan Coulter. All rights reserved. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclInt.h -- + * + * Declarations of things used internally by the Tcl interpreter. + */ + #ifndef _TCLINT #define _TCLINT /* * Some numerics configuration options. @@ -44,14 +56,17 @@ # define JOIN1(a,b) a##b #endif #if defined(__cplusplus) # define TCL_UNUSED(T) T +# define TCL_UNUSEDVAR(T) T #elif defined(__GNUC__) && (__GNUC__ > 2) # define TCL_UNUSED(T) T JOIN(dummy, __LINE__) __attribute__((unused)) +# define TCL_UNUSEDVAR(T) T __attribute__((unused)) #else # define TCL_UNUSED(T) T JOIN(dummy, __LINE__) +# define TCL_UNUSEDVAR(T) T #endif /* * Common include files needed by most of the Tcl source files are included * here, so that system-dependent personalizations for the include files only @@ -200,10 +215,107 @@ * namespace; never follow the second (global) resolution path * - Bug #631741 - do not use special namespace or interp resolvers */ #define TCL_AVOID_RESOLVERS 0x40000 + +/* + *---------------------------------------------------------------- + * Object type + *---------------------------------------------------------------- + */ + +/* version is a pointer so that it can be overridden if ever needed */ +typedef struct TclObjectTypeType { + int *version; +} TclObjectTypeType; + + +/* keep this structure in sync with Tcl_ObjType */ +typedef struct ObjectType { + const char *name; /* Name of the type, e.g. "int". */ + Tcl_FreeInternalRepProc *freeIntRepProc; + /* Called to free any storage for the type's + * internal rep. NULL if the internal rep does + * not need freeing. */ + Tcl_DupInternalRepProc *dupIntRepProc; + /* Called to create a new object as a copy of + * an existing object. */ + Tcl_UpdateStringProc *updateStringProc; + /* Called to update the string rep from the + * type's internal representation. */ + Tcl_SetFromAnyProc *setFromAnyProc; + /* Called to convert the object's internal rep + * to this type. Frees the internal rep of the + * old type. Returns TCL_ERROR on failure. */ + int version; + Tcl_ObjInterface *ifPtr; /* pointer to a functional interface */ +} ObjectType; + +#define TclObjectInterfaceCall(objPtr, iface, proc, ...) \ + ((ObjInterface *)((ObjectType *)(objPtr)->typePtr)->ifPtr) \ + ->iface.proc(__VA_ARGS__) + +#define TclObjectDispatch(objPtr, default, iface, proc, ...) \ + TclObjectHasInterface((objPtr), iface, proc) \ + ? TclObjectInterfaceCall(objPtr, iface, proc, __VA_ARGS__) \ + : default(__VA_ARGS__) + + +#define TclObjectDispatchNoDefault(interp, res, objPtr, iface, proc, ...) \ + (TclObjectHasInterface((objPtr), iface, proc) \ + ? ((res) = TclObjectInterfaceCall((objPtr), iface, proc, __VA_ARGS__), \ + TCL_OK) \ + : (Tcl_SetObjResult((interp), \ + Tcl_ObjPrintf("interface error interface %s proc %s\n%s" \ + , #iface, #proc, \ + Tcl_GetStringFromObj( \ + Tcl_GetObjResult(interp) ,NULL))), TCL_ERROR)) + + +#define TclObjectHasInterface(objPtr, iface, proc) \ + ( \ + (objPtr)->typePtr != NULL \ + &&TclObjInterface(objPtr) != NULL \ + && TclObjInterface(objPtr)->iface.proc != NULL \ + ) + +/* + *---------------------------------------------------------------- + * Object interface data structures and macros + *---------------------------------------------------------------- + */ + +typedef struct ObjInterface { + int version; + struct string { + int (*index)(tclObjTypeInterfaceArgsStringIndex); + int (*indexEnd)(tclObjTypeInterfaceArgsStringIndexEnd); + int (*isEmpty)(tclObjTypeInterfaceArgsStringIsEmpty); + int (*length)(tclObjTypeInterfaceArgsStringLength); + int (*range)(tclObjTypeInterfaceArgsStringRange); + int (*rangeEnd)(tclObjTypeInterfaceArgsStringRangeEnd); + } string; + struct list { + int (*all)(tclObjTypeInterfaceArgsListAll); + int (*append)(tclObjTypeInterfaceArgsListAppend); + int (*appendlist)(tclObjTypeInterfaceArgsListAppendList); + int (*contains)(tclObjTypeInterfaceArgsListContains); + int (*index)(tclObjTypeInterfaceArgsListIndex); + int (*indexEnd)(tclObjTypeInterfaceArgsListIndexEnd); + int (*isSorted)(tclObjTypeInterfaceArgsListIsSorted); + int (*length)(tclObjTypeInterfaceArgsListLength); + int (*range)(tclObjTypeInterfaceArgsListRange); + int (*rangeEnd)(tclObjTypeInterfaceArgsListRangeEnd); + int (*replace)(tclObjTypeInterfaceArgsListReplace); + int (*replaceList)(tclObjTypeInterfaceArgsListReplaceList); + int (*reverse)(tclObjTypeInterfaceArgsListReverse); + int (*set)(tclObjTypeInterfaceArgsListSet); + int (*setDeep)(tclObjTypeInterfaceArgsListSetDeep); + } list; +} ObjInterface; + /* *---------------------------------------------------------------- * Data structures related to namespaces. *---------------------------------------------------------------- @@ -220,13 +332,11 @@ */ typedef struct TclVarHashTable { Tcl_HashTable table; struct Namespace *nsPtr; -#if TCL_MAJOR_VERSION > 8 struct Var *arrayPtr; -#endif /* TCL_MAJOR_VERSION > 8 */ } TclVarHashTable; /* * This is for itcl - it likes to search our varTables directly :( */ @@ -272,15 +382,11 @@ Tcl_HashTable *childTablePtr; /* Contains any child namespaces. Indexed by * strings; values have type (Namespace *). If * NULL, there are no children. */ #endif -#if TCL_MAJOR_VERSION > 8 size_t nsId; /* Unique id for the namespace. */ -#else - unsigned long nsId; -#endif Tcl_Interp *interp; /* The interpreter containing this * namespace. */ int flags; /* OR-ed combination of the namespace status * flags NS_DYING and NS_DEAD listed below. */ Tcl_Size activationCount; /* Number of "activations" or active call @@ -968,17 +1074,14 @@ typedef struct CompiledLocal { struct CompiledLocal *nextPtr; /* Next compiler-recognized local variable for * this procedure, or NULL if this is the last * local. */ - Tcl_Size nameLength; /* The number of bytes in local variable's name. + Tcl_Size nameLength; /* The number of bytes in local variable's name. * Among others used to speed up var lookups. */ - Tcl_Size frameIndex; /* Index in the array of compiler-assigned + Tcl_Size frameIndex; /* Index in the array of compiler-assigned * variables in the procedure call frame. */ -#if TCL_MAJOR_VERSION < 9 - int flags; -#endif Tcl_Obj *defValuePtr; /* Pointer to the default value of an * argument, if any. NULL if not an argument * or, if an argument, no default value. */ Tcl_ResolvedVarInfo *resolveInfo; /* Customized variable resolution info @@ -985,17 +1088,15 @@ * supplied by the Tcl_ResolveCompiledVarProc * associated with a namespace. Each variable * is marked by a unique tag during * compilation, and that same tag is used to * find the variable at runtime. */ -#if TCL_MAJOR_VERSION > 8 int flags; /* Flag bits for the local variable. Same as * the flags for the Var structure above, * although only VAR_ARGUMENT, VAR_TEMPORARY, * and VAR_RESOLVED make sense. */ -#endif - char name[TCLFLEXARRAY]; /* Name of the local variable starts here. If + char name[TCLFLEXARRAY]; /* Name of the local variable starts here. If * the name is NULL, this will just be '\0'. * The actual size of this field will be large * enough to hold the name. MUST BE THE LAST * FIELD IN THE STRUCTURE! */ } CompiledLocal; @@ -1048,15 +1149,11 @@ */ typedef struct Trace { Tcl_Size level; /* Only trace commands at nesting level less * than or equal to this. */ -#if TCL_MAJOR_VERSION > 8 Tcl_CmdObjTraceProc2 *proc; /* Procedure to call to trace command. */ -#else - Tcl_CmdObjTraceProc *proc; /* Procedure to call to trace command. */ -#endif void *clientData; /* Arbitrary value to pass to proc. */ struct Trace *nextPtr; /* Next in list of traces for this interp. */ int flags; /* Flags governing the trace - see * Tcl_CreateObjTrace for details. */ Tcl_CmdObjTraceDeleteProc *delProc; @@ -1095,106 +1192,10 @@ * "leavestep" traces. */ #define TCL_TRACE_ENTER_EXEC 1 #define TCL_TRACE_LEAVE_EXEC 2 - -#if TCL_MAJOR_VERSION > 8 -#define TclObjTypeHasProc(objPtr, proc) (((objPtr)->typePtr \ - && ((offsetof(Tcl_ObjType, proc) < offsetof(Tcl_ObjType, version)) \ - || (offsetof(Tcl_ObjType, proc) < (objPtr)->typePtr->version))) ? \ - ((objPtr)->typePtr)->proc : NULL) - -MODULE_SCOPE Tcl_Size TclLengthOne(Tcl_Obj *); - - -/* - * Abstract List - * - * This structure provides the functions used in List operations to emulate a - * List for AbstractList types. - */ - - -static inline Tcl_Size -TclObjTypeLength(Tcl_Obj *objPtr) -{ - Tcl_ObjTypeLengthProc *proc = TclObjTypeHasProc(objPtr, lengthProc); - return proc(objPtr); -} -static inline int -TclObjTypeIndex( - Tcl_Interp *interp, - Tcl_Obj *objPtr, - Tcl_Size index, - Tcl_Obj **elemObjPtr) -{ - Tcl_ObjTypeIndexProc *proc = TclObjTypeHasProc(objPtr, indexProc); - return proc(interp, objPtr, index, elemObjPtr); -} -static inline int -TclObjTypeSlice( - Tcl_Interp *interp, - Tcl_Obj *objPtr, - Tcl_Size fromIdx, - Tcl_Size toIdx, - Tcl_Obj **newObjPtr) -{ - Tcl_ObjTypeSliceProc *proc = TclObjTypeHasProc(objPtr, sliceProc); - return proc(interp, objPtr, fromIdx, toIdx, newObjPtr); -} -static inline int -TclObjTypeReverse( - Tcl_Interp *interp, - Tcl_Obj *objPtr, - Tcl_Obj **newObjPtr) -{ - Tcl_ObjTypeReverseProc *proc = TclObjTypeHasProc(objPtr, reverseProc); - return proc(interp, objPtr, newObjPtr); -} -static inline int -TclObjTypeGetElements( - Tcl_Interp *interp, - Tcl_Obj *objPtr, - Tcl_Size *objCPtr, - Tcl_Obj ***objVPtr) -{ - Tcl_ObjTypeGetElements *proc = TclObjTypeHasProc(objPtr, getElementsProc); - return proc(interp, objPtr, objCPtr, objVPtr); -} -static inline Tcl_Obj* -TclObjTypeSetElement( - Tcl_Interp *interp, - Tcl_Obj *objPtr, - Tcl_Size indexCount, - Tcl_Obj *const indexArray[], - Tcl_Obj *valueObj) -{ - Tcl_ObjTypeSetElement *proc = TclObjTypeHasProc(objPtr, setElementProc); - return proc(interp, objPtr, indexCount, indexArray, valueObj); -} -static inline int -TclObjTypeReplace( - Tcl_Interp *interp, - Tcl_Obj *objPtr, - Tcl_Size first, - Tcl_Size numToDelete, - Tcl_Size numToInsert, - Tcl_Obj *const insertObjs[]) -{ - Tcl_ObjTypeReplaceProc *proc = TclObjTypeHasProc(objPtr, replaceProc); - return proc(interp, objPtr, first, numToDelete, numToInsert, insertObjs); -} -static inline int -TclObjTypeInOperator(Tcl_Interp *interp, struct Tcl_Obj *valueObj, - struct Tcl_Obj *listObj, int *boolResult) -{ - Tcl_ObjTypeInOperatorProc *proc = TclObjTypeHasProc(listObj, inOperProc); - return proc(interp, valueObj, listObj, boolResult); -} -#endif /* TCL_MAJOR_VERSION > 8 */ - /* * The structure below defines an entry in the assocData hash table which is * associated with an interpreter. The entry contains a pointer to a function * to call when the interpreter is deleted, and a pointer to a user-defined @@ -1973,22 +1974,11 @@ * of hidden commands on a per-interp * basis. */ void *interpInfo; /* Information used by tclInterp.c to keep * track of parent/child interps on a * per-interp basis. */ -#if TCL_MAJOR_VERSION > 8 - void (*optimizer)(void *envPtr); -#else - union { - void (*optimizer)(void *envPtr); - Tcl_HashTable unused2; /* No longer used (was mathFuncTable). The - * unused space in interp was repurposed for - * pluggable bytecode optimizers. The core - * contains one optimizer, which can be - * selectively overridden by extensions. */ - } extra; -#endif + void (*optimizer)(void *envPtr); /* * Information related to procedures and variables. See tclProc.c and * tclVar.c for usage. */ @@ -2013,16 +2003,10 @@ CallFrame *rootFramePtr; /* Global frame pointer for this * interpreter. */ Namespace *lookupNsPtr; /* Namespace to use ONLY on the next * TCL_EVAL_INVOKE call to Tcl_EvalObjv. */ -#if TCL_MAJOR_VERSION < 9 - char *appendResultDontUse; - int appendAvlDontUse; - int appendUsedDontUse; -#endif - /* * Information about packages. Used only in tclPkg.c. */ Tcl_HashTable packageTable; /* Describes all of the packages loaded in or @@ -2041,13 +2025,10 @@ * has been called for this interpreter. */ int evalFlags; /* Flags to control next call to Tcl_Eval. * Normally zero, but may be set before * calling Tcl_Eval. See below for valid * values. */ -#if TCL_MAJOR_VERSION < 9 - int unused1; /* No longer used (was termOffset) */ -#endif LiteralTable literalTable; /* Contains LiteralEntry's describing all Tcl * objects holding literals of scripts * compiled by the interpreter. Indexed by the * string representations of literals. Used to * avoid creating duplicate objects. */ @@ -2081,13 +2062,10 @@ * evaluation stack. */ Tcl_Obj *emptyObjPtr; /* Points to an object holding an empty * string. Returned by Tcl_ObjSetVar2 when * variable traces change a variable in a * gross way. */ -#if TCL_MAJOR_VERSION < 9 - char resultSpaceDontUse[TCL_DSTRING_STATIC_SIZE+1]; -#endif Tcl_Obj *objResultPtr; /* If the last command returned an object * result, this points to it. Should not be * accessed directly; see comment above. */ Tcl_ThreadId threadId; /* ID of thread that owns the interpreter. */ @@ -2110,11 +2088,11 @@ * last [return] command. */ Tcl_Obj *errorInfo; /* errorInfo value (now as a Tcl_Obj). */ Tcl_Obj *eiVar; /* cached ref to ::errorInfo variable. */ Tcl_Obj *errorCode; /* errorCode value (now as a Tcl_Obj). */ - Tcl_Obj *ecVar; /* cached ref to ::errorInfo variable. */ + Tcl_Obj *ecVar; /* cached ref to ::errorCode variable. */ int returnLevel; /* [return -level] parameter. */ /* * Resource limiting framework support (TIP#143). */ @@ -2536,10 +2514,11 @@ */ #define TCL_INVOKE_HIDDEN (1<<0) #define TCL_INVOKE_NO_UNKNOWN (1<<1) #define TCL_INVOKE_NO_TRACEBACK (1<<2) + /* * ListStore -- * * A Tcl list's internal representation is defined through three structures. @@ -2705,28 +2684,29 @@ * count and base address of this list's elements in objcPtr_ and objvPtr_. * Return TCL_OK on success or TCL_ERROR if the Tcl_Obj cannot be * converted to a list. */ #define TclListObjGetElementsM(interp_, listObj_, objcPtr_, objvPtr_) \ - (((listObj_)->typePtr == &tclListType) \ - ? ((ListObjGetElements((listObj_), *(objcPtr_), *(objvPtr_))), \ - TCL_OK) \ - : Tcl_ListObjGetElements( \ + (((listObj_)->typePtr == tclListTypePtr) \ + ? ((ListObjGetElements((listObj_), *(objcPtr_), *(objvPtr_))), \ + TCL_OK) \ + : Tcl_ListObjGetElements( \ (interp_), (listObj_), (objcPtr_), (objvPtr_))) /* * Converts the Tcl_Obj to a list if it isn't one and stores the element * count in lenPtr_. Returns TCL_OK on success or TCL_ERROR if the * Tcl_Obj cannot be converted to a list. */ -#define TclListObjLengthM(interp_, listObj_, lenPtr_) \ - (((listObj_)->typePtr == &tclListType) \ - ? ((ListObjLength((listObj_), *(lenPtr_))), TCL_OK) \ +#define TclListObjLengthM(interp_, listObj_, lenPtr_) \ + (((listObj_)->typePtr == tclListTypePtr) \ + ? ((ListObjLength((listObj_), *(lenPtr_))), TCL_OK) \ : Tcl_ListObjLength((interp_), (listObj_), (lenPtr_))) -#define TclListObjIsCanonical(listObj_) \ - (((listObj_)->typePtr == &tclListType) ? ListObjIsCanonical((listObj_)) : 0) +#define TclListObjIsCanonical(listObj_) \ + (((listObj_)->typePtr == tclListTypePtr) \ + ? ListObjIsCanonical((listObj_)) : 0) /* * Modes for collecting (or not) in the implementations of TclNRForeachCmd, * TclNRLmapCmd and their compilations. */ @@ -2740,47 +2720,38 @@ * and Tcl_GetIntForIndex. * * WARNING: these macros eval their args more than once. */ -#if TCL_MAJOR_VERSION > 8 #define TclGetBooleanFromObj(interp, objPtr, intPtr) \ - (((objPtr)->typePtr == &tclIntType \ - || (objPtr)->typePtr == &tclBooleanType) \ + (((objPtr)->typePtr == tclIntType \ + || (objPtr)->typePtr == tclBooleanType) \ ? (*(intPtr) = ((objPtr)->internalRep.wideValue!=0), TCL_OK) \ : Tcl_GetBooleanFromObj((interp), (objPtr), (intPtr))) -#else -#define TclGetBooleanFromObj(interp, objPtr, intPtr) \ - (((objPtr)->typePtr == &tclIntType) \ - ? (*(intPtr) = ((objPtr)->internalRep.wideValue!=0), TCL_OK) \ - : ((objPtr)->typePtr == &tclBooleanType) \ - ? (*(intPtr) = ((objPtr)->internalRep.longValue!=0), TCL_OK) \ - : Tcl_GetBooleanFromObj((interp), (objPtr), (intPtr))) -#endif #ifdef TCL_WIDE_INT_IS_LONG #define TclGetLongFromObj(interp, objPtr, longPtr) \ - (((objPtr)->typePtr == &tclIntType) \ + (((objPtr)->typePtr == tclIntType) \ ? ((*(longPtr) = (objPtr)->internalRep.wideValue), TCL_OK) \ : Tcl_GetLongFromObj((interp), (objPtr), (longPtr))) #else #define TclGetLongFromObj(interp, objPtr, longPtr) \ - (((objPtr)->typePtr == &tclIntType \ + (((objPtr)->typePtr == tclIntType \ && (objPtr)->internalRep.wideValue >= (Tcl_WideInt)(LONG_MIN) \ && (objPtr)->internalRep.wideValue <= (Tcl_WideInt)(LONG_MAX)) \ ? ((*(longPtr) = (long)(objPtr)->internalRep.wideValue), TCL_OK) \ : Tcl_GetLongFromObj((interp), (objPtr), (longPtr))) #endif #define TclGetIntFromObj(interp, objPtr, intPtr) \ - (((objPtr)->typePtr == &tclIntType \ + (((objPtr)->typePtr == tclIntType \ && (objPtr)->internalRep.wideValue >= (Tcl_WideInt)(INT_MIN) \ && (objPtr)->internalRep.wideValue <= (Tcl_WideInt)(INT_MAX)) \ ? ((*(intPtr) = (int)(objPtr)->internalRep.wideValue), TCL_OK) \ : Tcl_GetIntFromObj((interp), (objPtr), (intPtr))) #define TclGetIntForIndexM(interp, objPtr, endValue, idxPtr) \ - ((((objPtr)->typePtr == &tclIntType) && ((objPtr)->internalRep.wideValue >= 0) \ + ((((objPtr)->typePtr == tclIntType) && ((objPtr)->internalRep.wideValue >= 0) \ && ((objPtr)->internalRep.wideValue <= endValue)) \ ? ((*(idxPtr) = (objPtr)->internalRep.wideValue), TCL_OK) \ : Tcl_GetIntForIndex((interp), (objPtr), (endValue), (idxPtr))) /* @@ -2790,11 +2761,11 @@ * MODULE_SCOPE int TclGetWideIntFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, * Tcl_WideInt *wideIntPtr); */ #define TclGetWideIntFromObj(interp, objPtr, wideIntPtr) \ - (((objPtr)->typePtr == &tclIntType) \ + (((objPtr)->typePtr == tclIntType) \ ? (*(wideIntPtr) = \ ((objPtr)->internalRep.wideValue), TCL_OK) : \ Tcl_GetWideIntFromObj((interp), (objPtr), (wideIntPtr))) /* @@ -3071,18 +3042,17 @@ /* * Variables denoting the Tcl object types defined in the core. */ -MODULE_SCOPE const Tcl_ObjType tclBignumType; -MODULE_SCOPE const Tcl_ObjType tclBooleanType; +MODULE_SCOPE const Tcl_ObjType *tclBignumType; +MODULE_SCOPE const Tcl_ObjType *tclBooleanType; MODULE_SCOPE const Tcl_ObjType tclByteCodeType; -MODULE_SCOPE const Tcl_ObjType tclDoubleType; -MODULE_SCOPE const Tcl_ObjType tclIntType; -MODULE_SCOPE const Tcl_ObjType tclIndexType; -MODULE_SCOPE const Tcl_ObjType tclListType; -MODULE_SCOPE const Tcl_ObjType tclDictType; +MODULE_SCOPE const Tcl_ObjType *tclDoubleType; +MODULE_SCOPE const Tcl_ObjType *tclIntType; +MODULE_SCOPE Tcl_ObjType * tclListTypePtr; +MODULE_SCOPE Tcl_ObjType * tclDictTypePtr; MODULE_SCOPE const Tcl_ObjType tclProcBodyType; MODULE_SCOPE const Tcl_ObjType tclStringType; MODULE_SCOPE const Tcl_ObjType tclEnsembleCmdType; MODULE_SCOPE const Tcl_ObjType tclRegexpType; MODULE_SCOPE Tcl_ObjType tclCmdNameType; @@ -3220,11 +3190,10 @@ *---------------------------------------------------------------- * Procedures shared among Tcl modules but not used by the outside world: *---------------------------------------------------------------- */ -#if TCL_MAJOR_VERSION > 8 MODULE_SCOPE void TclAppendBytesToByteArray(Tcl_Obj *objPtr, const unsigned char *bytes, Tcl_Size len); MODULE_SCOPE void TclAdvanceContinuations(Tcl_Size *line, Tcl_Size **next, int loc); MODULE_SCOPE void TclAdvanceLines(Tcl_Size *line, const char *start, @@ -3238,10 +3207,11 @@ void *codePtr, CmdFrame *cfPtr, Tcl_Size cmd, Tcl_Size pc); MODULE_SCOPE void TclArgumentBCRelease(Tcl_Interp *interp, CmdFrame *cfPtr); MODULE_SCOPE void TclArgumentGet(Tcl_Interp *interp, Tcl_Obj *obj, CmdFrame **cfPtrPtr, int *wordPtr); +MODULE_SCOPE void TclArithSeriesInit(void); MODULE_SCOPE int TclAsyncNotifier(int sigNumber, Tcl_ThreadId threadId, void *clientData, int *flagPtr, int value); MODULE_SCOPE void TclAsyncMarkFromNotifier(void); MODULE_SCOPE double TclBignumToDouble(const void *bignum); MODULE_SCOPE int TclByteArrayMatch(const unsigned char *string, @@ -3251,11 +3221,11 @@ MODULE_SCOPE void TclChannelPreserve(Tcl_Channel chan); MODULE_SCOPE void TclChannelRelease(Tcl_Channel chan); MODULE_SCOPE int TclChannelGetBlockingMode(Tcl_Channel chan); MODULE_SCOPE int TclCheckArrayTraces(Tcl_Interp *interp, Var *varPtr, Var *arrayPtr, Tcl_Obj *name, int index); -MODULE_SCOPE int TclCheckEmptyString(Tcl_Obj *objPtr); +MODULE_SCOPE int TclCheckEmptyString(Tcl_Interp *interp, Tcl_Obj *objPtr, int *res); MODULE_SCOPE int TclChanCaughtErrorBypass(Tcl_Interp *interp, Tcl_Channel chan); MODULE_SCOPE Tcl_ObjCmdProc TclChannelNamesCmd; MODULE_SCOPE Tcl_NRPostProc TclClearRootEnsemble; MODULE_SCOPE int TclCompareTwoNumbers(Tcl_Obj *valuePtr, @@ -3276,11 +3246,13 @@ MODULE_SCOPE Tcl_Command TclCreateEnsembleInNs(Tcl_Interp *interp, const char *name, Tcl_Namespace *nameNamespacePtr, Tcl_Namespace *ensembleNamespacePtr, int flags); MODULE_SCOPE void TclDeleteNamespaceVars(Namespace *nsPtr); MODULE_SCOPE void TclDeleteNamespaceChildren(Namespace *nsPtr); -MODULE_SCOPE Tcl_Size TclDictGetSize(Tcl_Obj *dictPtr); +MODULE_SCOPE void TclDictInit(void); +MODULE_SCOPE Tcl_Obj* TclDuplicatePureObj(Tcl_Interp *interp, + Tcl_Obj * objPtr, const Tcl_ObjType *typPtr); MODULE_SCOPE int TclFindDictElement(Tcl_Interp *interp, const char *dict, Tcl_Size dictLength, const char **elementPtr, const char **nextPtr, Tcl_Size *sizePtr, int *literalPtr); /* TIP #280 - Modified token based evaluation, with line information. */ @@ -3364,10 +3336,12 @@ MODULE_SCOPE int TclGetLoadedLibraries(Tcl_Interp *interp, const char *targetName, const char *packageName); MODULE_SCOPE int TclGetWideBitsFromObj(Tcl_Interp *, Tcl_Obj *, Tcl_WideInt *); +MODULE_SCOPE int TclIndexIsFromEnd(Tcl_Size encoded); +MODULE_SCOPE Tcl_Size TclIndexLast (Tcl_Size N); MODULE_SCOPE int TclIncrObj(Tcl_Interp *interp, Tcl_Obj *valuePtr, Tcl_Obj *incrPtr); MODULE_SCOPE Tcl_Obj * TclIncrObjVar2(Tcl_Interp *interp, Tcl_Obj *part1Ptr, Tcl_Obj *part2Ptr, Tcl_Obj *incrPtr, int flags); MODULE_SCOPE Tcl_ObjCmdProc TclInfoExistsCmd; @@ -3402,24 +3376,27 @@ MODULE_SCOPE Tcl_Obj * TclLindexList(Tcl_Interp *interp, Tcl_Obj *listPtr, Tcl_Obj *argPtr); MODULE_SCOPE Tcl_Obj * TclLindexFlat(Tcl_Interp *interp, Tcl_Obj *listPtr, Tcl_Size indexCount, Tcl_Obj *const indexArray[]); MODULE_SCOPE Tcl_Obj * TclListObjGetElement(Tcl_Obj *listObj, Tcl_Size index); +MODULE_SCOPE int Tcl_LengthIsFinite(Tcl_Size length); +MODULE_SCOPE void TclListInit(void); /* TIP #280 */ MODULE_SCOPE void TclListLines(Tcl_Obj *listObj, Tcl_Size line, Tcl_Size n, Tcl_Size *lines, Tcl_Obj *const *elems); -MODULE_SCOPE Tcl_Obj * TclListObjCopy(Tcl_Interp *interp, Tcl_Obj *listPtr); +MODULE_SCOPE int (*TclObjInterfaceGetListIndex (Tcl_Obj *objPtr)) + (tclObjTypeInterfaceArgsListIndex); MODULE_SCOPE int TclListObjAppendElements(Tcl_Interp *interp, Tcl_Obj *toObj, Tcl_Size elemCount, Tcl_Obj *const elemObjv[]); -MODULE_SCOPE Tcl_Obj * TclListObjRange(Tcl_Interp *interp, Tcl_Obj *listPtr, - Tcl_Size fromIdx, Tcl_Size toIdx); +MODULE_SCOPE int TclListObjRange(Tcl_Interp *interp, Tcl_Obj *listPtr, + Tcl_Size fromIdx, Tcl_Size toIdx, Tcl_Obj **resultPtr); MODULE_SCOPE Tcl_Obj * TclLsetList(Tcl_Interp *interp, Tcl_Obj *listPtr, Tcl_Obj *indexPtr, Tcl_Obj *valuePtr); -MODULE_SCOPE Tcl_Obj * TclLsetFlat(Tcl_Interp *interp, Tcl_Obj *listPtr, - Tcl_Size indexCount, Tcl_Obj *const indexArray[], - Tcl_Obj *valuePtr); +MODULE_SCOPE int TclLsetFlat(tclObjTypeInterfaceArgsListSetDeep); +MODULE_SCOPE Tcl_Obj * TclLsetList(Tcl_Interp *interp, Tcl_Obj *listPtr, + Tcl_Obj *indexPtr, Tcl_Obj *valuePtr); MODULE_SCOPE Tcl_Command TclMakeEnsemble(Tcl_Interp *interp, const char *name, const EnsembleImplMap map[]); MODULE_SCOPE Tcl_Size TclMaxListLength(const char *bytes, Tcl_Size numBytes, const char **endPtr); MODULE_SCOPE int TclMergeReturnOptions(Tcl_Interp *interp, int objc, @@ -3427,10 +3404,14 @@ int *codePtr, int *levelPtr); MODULE_SCOPE Tcl_Obj * TclNoErrorStack(Tcl_Interp *interp, Tcl_Obj *options); MODULE_SCOPE int TclNokia770Doubles(void); MODULE_SCOPE void TclNsDecrRefCount(Namespace *nsPtr); MODULE_SCOPE int TclNamespaceDeleted(Namespace *nsPtr); +MODULE_SCOPE Tcl_Obj * TclObjGetScalar(Tcl_Obj *objPtr); +MODULE_SCOPE ObjInterface * TclObjInterface(Tcl_Obj *objPtr); +MODULE_SCOPE const char * TclObjTypeName(const Tcl_ObjType *typePtr); +MODULE_SCOPE int TclObjTypeVersion (const Tcl_ObjType *typePtr); MODULE_SCOPE void TclObjVarErrMsg(Tcl_Interp *interp, Tcl_Obj *part1Ptr, Tcl_Obj *part2Ptr, const char *operation, const char *reason, int index); MODULE_SCOPE int TclObjInvokeNamespace(Tcl_Interp *interp, int objc, Tcl_Obj *const objv[], @@ -3450,11 +3431,11 @@ MODULE_SCOPE void TclUndoRefCount(Tcl_Obj *objPtr); MODULE_SCOPE int TclpObjLstat(Tcl_Obj *pathPtr, Tcl_StatBuf *buf); MODULE_SCOPE Tcl_Obj * TclpTempFileName(void); MODULE_SCOPE Tcl_Obj * TclpTempFileNameForLibrary(Tcl_Interp *interp, Tcl_Obj* pathPtr); -MODULE_SCOPE int TclNewArithSeriesObj(Tcl_Interp *interp, Tcl_Obj **arithSeriesPtr, +MODULE_SCOPE Tcl_Obj * TclNewArithSeriesObj(Tcl_Interp *interp, int useDoubles, Tcl_Obj *startObj, Tcl_Obj *endObj, Tcl_Obj *stepObj, Tcl_Obj *lenObj); MODULE_SCOPE Tcl_Obj * TclNewFSPathObj(Tcl_Obj *dirPtr, const char *addStrRep, Tcl_Size len); MODULE_SCOPE void TclpAlertNotifier(void *clientData); @@ -3507,10 +3488,11 @@ MODULE_SCOPE void *TclpGetNativeCwd(void *clientData); MODULE_SCOPE Tcl_FSDupInternalRepProc TclNativeDupInternalRep; MODULE_SCOPE Tcl_Obj * TclpObjLink(Tcl_Obj *pathPtr, Tcl_Obj *toPtr, int linkType); MODULE_SCOPE int TclpObjChdir(Tcl_Obj *pathPtr); +MODULE_SCOPE void Tcl_ObjTypeVersion(Tcl_Obj *objPtr, int *version); MODULE_SCOPE Tcl_Channel TclpOpenTemporaryFile(Tcl_Obj *dirObj, Tcl_Obj *basenameObj, Tcl_Obj *extensionObj, Tcl_Obj *resultingNameObj); MODULE_SCOPE void TclPkgFileSeen(Tcl_Interp *interp, const char *fileName); @@ -3551,10 +3533,12 @@ MODULE_SCOPE void * TclStackRealloc(Tcl_Interp *interp, void *ptr, TCL_HASH_TYPE numBytes); typedef int (*memCmpFn_t)(const void*, const void*, size_t); MODULE_SCOPE int TclStringCmp(Tcl_Obj *value1Ptr, Tcl_Obj *value2Ptr, int checkEq, int nocase, Tcl_Size reqlength); +MODULE_SCOPE int TclStringIndexInterface(Tcl_Interp *interp, Tcl_Obj *objPtr, + Tcl_Obj *indexPtr, Tcl_Obj **charPtr); MODULE_SCOPE int TclStringMatch(const char *str, Tcl_Size strLen, const char *pattern, int ptnLen, int flags); MODULE_SCOPE int TclStringMatchObj(Tcl_Obj *stringObj, Tcl_Obj *patternObj, int flags); MODULE_SCOPE void TclSubstCompile(Tcl_Interp *interp, const char *bytes, @@ -3579,10 +3563,11 @@ Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); MODULE_SCOPE void TclRegisterCommandTypeName( Tcl_ObjCmdProc *implementationProc, const char *nameStr); +MODULE_SCOPE void TclUndoRefCount(Tcl_Obj *objPtr); MODULE_SCOPE int TclUtfCmp(const char *cs, const char *ct); MODULE_SCOPE int TclUtfCasecmp(const char *cs, const char *ct); MODULE_SCOPE int TclUtfCount(int ch); MODULE_SCOPE Tcl_Obj * TclpNativeToNormalized(void *clientData); MODULE_SCOPE Tcl_Obj * TclpFilesystemPathType(Tcl_Obj *pathPtr); @@ -4072,12 +4057,10 @@ /* * Error message utility functions */ MODULE_SCOPE int TclCommandWordLimitError(Tcl_Interp *interp, Tcl_Size count); -#endif /* TCL_MAJOR_VERSION > 8 */ - /* Constants used in index value encoding routines. */ #define TCL_INDEX_END ((Tcl_Size)-2) #define TCL_INDEX_START ((Tcl_Size)0) /* @@ -4555,21 +4538,14 @@ * * MODULE_SCOPE int TclUtfToUniChar(const char *string, Tcl_UniChar *ch); *---------------------------------------------------------------- */ -#if TCL_UTF_MAX > 3 #define TclUtfToUniChar(str, chPtr) \ (((UCHAR(*(str))) < 0x80) ? \ ((*(chPtr) = UCHAR(*(str))), 1) \ : Tcl_UtfToUniChar(str, chPtr)) -#else -#define TclUtfToUniChar(str, chPtr) \ - (((UCHAR(*(str))) < 0x80) ? \ - ((*(chPtr) = UCHAR(*(str))), 1) \ - : Tcl_UtfToChar16(str, chPtr)) -#endif /* *---------------------------------------------------------------- * Macro counterpart of the Tcl_NumUtfChars() function. To be used in speed- * -sensitive points where it pays to avoid a function call in the common case @@ -4609,13 +4585,13 @@ *---------------------------------------------------------------- */ MODULE_SCOPE int TclIsPureByteArray(Tcl_Obj *objPtr); #define TclIsPureDict(objPtr) \ - (((objPtr)->bytes==NULL) && ((objPtr)->typePtr==&tclDictType)) + (((objPtr)->bytes==NULL) && ((objPtr)->typePtr==(void *)tclDictTypePtr)) #define TclHasInternalRep(objPtr, type) \ - ((objPtr)->typePtr == (type)) + ((objPtr)->typePtr == ((void *)type)) #define TclFetchInternalRep(objPtr, type) \ (TclHasInternalRep((objPtr), (type)) ? &((objPtr)->internalRep) : NULL) /* @@ -4658,12 +4634,13 @@ MODULE_SCOPE Tcl_LibraryInitProc TclplatformtestInit; MODULE_SCOPE Tcl_LibraryInitProc TclObjTest_Init; MODULE_SCOPE Tcl_LibraryInitProc TclThread_Init; MODULE_SCOPE Tcl_LibraryInitProc Procbodytest_Init; MODULE_SCOPE Tcl_LibraryInitProc Procbodytest_SafeInit; +MODULE_SCOPE Tcl_LibraryInitProc TcltestObjectInterfaceInit; +MODULE_SCOPE Tcl_LibraryInitProc TcltestObjectInterfaceListIntegerInit; MODULE_SCOPE Tcl_LibraryInitProc Tcl_ABSListTest_Init; - /* *---------------------------------------------------------------- * Macro used by the Tcl core to check whether a pattern has any characters * special to [string match]. The ANSI C "prototype" for this macro is: @@ -4690,19 +4667,19 @@ #define TclSetIntObj(objPtr, i) \ do { \ Tcl_ObjInternalRep ir; \ ir.wideValue = (Tcl_WideInt) i; \ TclInvalidateStringRep(objPtr); \ - Tcl_StoreInternalRep(objPtr, &tclIntType, &ir); \ + Tcl_StoreInternalRep(objPtr, tclIntType, &ir); \ } while (0) #define TclSetDoubleObj(objPtr, d) \ do { \ Tcl_ObjInternalRep ir; \ ir.doubleValue = (double) d; \ TclInvalidateStringRep(objPtr); \ - Tcl_StoreInternalRep(objPtr, &tclDoubleType, &ir); \ + Tcl_StoreInternalRep(objPtr, tclDoubleType, &ir); \ } while (0) /* *---------------------------------------------------------------- * Macros used by the Tcl core to create and initialise objects of standard @@ -4709,11 +4686,11 @@ * types, avoiding the corresponding function calls in time critical parts of * the core. The ANSI C "prototypes" for these macros are: * * MODULE_SCOPE void TclNewIntObj(Tcl_Obj *objPtr, Tcl_WideInt w); * MODULE_SCOPE void TclNewDoubleObj(Tcl_Obj *objPtr, double d); - * MODULE_SCOPE void TclNewStringObj(Tcl_Obj *objPtr, const char *s, Tcl_Size len); + * MODULE_SCOPE void TclNewStringObj(Tcl_Obj *objPtr, const char *s, * Tcl_Size len); * MODULE_SCOPE void TclNewLiteralStringObj(Tcl_Obj*objPtr, const char *sLiteral); * *---------------------------------------------------------------- */ @@ -4723,11 +4700,11 @@ TclIncrObjsAllocated(); \ TclAllocObjStorage(objPtr); \ (objPtr)->refCount = 0; \ (objPtr)->bytes = NULL; \ (objPtr)->internalRep.wideValue = (Tcl_WideInt)(w); \ - (objPtr)->typePtr = &tclIntType; \ + (objPtr)->typePtr = tclIntType; \ TCL_DTRACE_OBJ_CREATE(objPtr); \ } while (0) #define TclNewUIntObj(objPtr, uw) \ do { \ @@ -4742,26 +4719,26 @@ Tcl_Panic("%s: memory overflow", "TclNewUIntObj"); \ } \ TclSetBignumInternalRep((objPtr), &bignumValue_); \ } else { \ (objPtr)->internalRep.wideValue = (Tcl_WideInt)(uw_); \ - (objPtr)->typePtr = &tclIntType; \ + (objPtr)->typePtr = tclIntType; \ } \ TCL_DTRACE_OBJ_CREATE(objPtr); \ } while (0) -#define TclNewIndexObj(objPtr, w) \ - TclNewIntObj(objPtr, w) +#define TclNewIndexObj(objPtr, uw) \ + TclNewIntObj(objPtr, uw) #define TclNewDoubleObj(objPtr, d) \ do { \ TclIncrObjsAllocated(); \ TclAllocObjStorage(objPtr); \ (objPtr)->refCount = 0; \ (objPtr)->bytes = NULL; \ (objPtr)->internalRep.doubleValue = (double)(d); \ - (objPtr)->typePtr = &tclDoubleType; \ + (objPtr)->typePtr = tclDoubleType; \ TCL_DTRACE_OBJ_CREATE(objPtr); \ } while (0) #define TclNewStringObj(objPtr, s, len) \ do { \ @@ -5018,11 +4995,11 @@ #define TCLNR_ALLOC(interp, ptr) \ TclSmallAllocEx(interp, sizeof(NRE_callback), (ptr)) #define TCLNR_FREE(interp, ptr) TclSmallFreeEx((interp), (ptr)) #else #define TCLNR_ALLOC(interp, ptr) \ - ((ptr) = Tcl_Alloc(sizeof(NRE_callback))) + ((ptr) = (Tcl_Alloc(sizeof(NRE_callback)))) #define TCLNR_FREE(interp, ptr) Tcl_Free(ptr) #endif #if NRE_ENABLE_ASSERTS #define NRE_ASSERT(expr) assert((expr)) Index: generic/tclIntDecls.h ================================================================== --- generic/tclIntDecls.h +++ generic/tclIntDecls.h @@ -1,17 +1,28 @@ +/* + * Copyright (c) 1998-1999 by Scriptics Corporation. + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclIntDecls.h -- * * This file contains the declarations for all unsupported * functions that are exported by the Tcl library. These * interfaces are not guaranteed to remain the same between * versions. Use at your own risk. - * - * Copyright (c) 1998-1999 by Scriptics Corporation. - * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #ifndef _TCLINTDECLS #define _TCLINTDECLS @@ -1267,24 +1278,13 @@ #undef Tcl_StaticLibrary #define Tcl_StaticLibrary \ (tclIntStubsPtr->tclStaticLibrary) #endif /* defined(USE_TCL_STUBS) */ -#if (TCL_MAJOR_VERSION < 9) && defined(USE_TCL_STUBS) -#undef TclpGetClicks -#define TclpGetClicks() \ - ((unsigned long)tclIntStubsPtr->tclpGetClicks()) -#undef TclpGetSeconds -#define TclpGetSeconds() \ - ((unsigned long)tclIntStubsPtr->tclpGetSeconds()) -#undef TclGetObjInterpProc2 -#define TclGetObjInterpProc2 TclGetObjInterpProc -#endif - #undef TclUnusedStubEntry #define TclObjInterpProc TclGetObjInterpProc() #define TclObjInterpProc2 TclGetObjInterpProc2() #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLIMPORT #endif /* _TCLINTDECLS */ Index: generic/tclIntPlatDecls.h ================================================================== --- generic/tclIntPlatDecls.h +++ generic/tclIntPlatDecls.h @@ -1,15 +1,26 @@ +/* + * Copyright (c) 1998-1999 by Scriptics Corporation. + * All rights reserved. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclIntPlatDecls.h -- * * This file contains the declarations for all platform dependent * unsupported functions that are exported by the Tcl library. These * interfaces are not guaranteed to remain the same between * versions. Use at your own risk. - * - * Copyright (c) 1998-1999 by Scriptics Corporation. - * All rights reserved. */ #ifndef _TCLINTPLATDECLS #define _TCLINTPLATDECLS @@ -28,496 +39,10 @@ * WARNING: This file is automatically generated by the tools/genStubs.tcl * script. Any modifications to the function declarations below should be made * in the generic/tclInt.decls script. */ -#if TCL_MAJOR_VERSION < 9 - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Exported function declarations: - */ - -#if !defined(_WIN32) && !defined(__CYGWIN__) && !defined(MAC_OSX_TCL) /* UNIX */ -/* 0 */ -EXTERN void TclGetAndDetachPids(Tcl_Interp *interp, - Tcl_Channel chan); -/* 1 */ -EXTERN int TclpCloseFile(TclFile file); -/* 2 */ -EXTERN Tcl_Channel TclpCreateCommandChannel(TclFile readFile, - TclFile writeFile, TclFile errorFile, - int numPids, Tcl_Pid *pidPtr); -/* 3 */ -EXTERN int TclpCreatePipe(TclFile *readPipe, TclFile *writePipe); -/* 4 */ -EXTERN int TclpCreateProcess(Tcl_Interp *interp, int argc, - const char **argv, TclFile inputFile, - TclFile outputFile, TclFile errorFile, - Tcl_Pid *pidPtr); -/* Slot 5 is reserved */ -/* 6 */ -EXTERN TclFile TclpMakeFile(Tcl_Channel channel, int direction); -/* 7 */ -EXTERN TclFile TclpOpenFile(const char *fname, int mode); -/* 8 */ -EXTERN int TclUnixWaitForFile(int fd, int mask, int timeout); -/* 9 */ -EXTERN TclFile TclpCreateTempFile(const char *contents); -/* 10 */ -EXTERN Tcl_DirEntry * TclpReaddir(TclDIR *dir); -/* Slot 11 is reserved */ -/* Slot 12 is reserved */ -/* Slot 13 is reserved */ -/* 14 */ -EXTERN int TclUnixCopyFile(const char *src, const char *dst, - const Tcl_StatBuf *statBufPtr, - int dontCopyAtts); -/* 15 */ -EXTERN int TclMacOSXGetFileAttribute(Tcl_Interp *interp, - int objIndex, Tcl_Obj *fileName, - Tcl_Obj **attributePtrPtr); -/* 16 */ -EXTERN int TclMacOSXSetFileAttribute(Tcl_Interp *interp, - int objIndex, Tcl_Obj *fileName, - Tcl_Obj *attributePtr); -/* 17 */ -EXTERN int TclMacOSXCopyFileAttributes(const char *src, - const char *dst, - const Tcl_StatBuf *statBufPtr); -/* 18 */ -EXTERN int TclMacOSXMatchType(Tcl_Interp *interp, - const char *pathName, const char *fileName, - Tcl_StatBuf *statBufPtr, - Tcl_GlobTypeData *types); -/* 19 */ -EXTERN void TclMacOSXNotifierAddRunLoopMode( - const void *runLoopMode); -/* Slot 20 is reserved */ -/* Slot 21 is reserved */ -/* Slot 22 is reserved */ -/* Slot 23 is reserved */ -/* Slot 24 is reserved */ -/* Slot 25 is reserved */ -/* Slot 26 is reserved */ -/* Slot 27 is reserved */ -/* Slot 28 is reserved */ -/* 29 */ -EXTERN int TclWinCPUID(int index, int *regs); -/* 30 */ -EXTERN int TclUnixOpenTemporaryFile(Tcl_Obj *dirObj, - Tcl_Obj *basenameObj, Tcl_Obj *extensionObj, - Tcl_Obj *resultingNameObj); -#endif /* UNIX */ -#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */ -/* Slot 0 is reserved */ -/* Slot 1 is reserved */ -/* Slot 2 is reserved */ -/* Slot 3 is reserved */ -/* 4 */ -EXTERN HINSTANCE TclWinGetTclInstance(void); -/* 5 */ -EXTERN int TclUnixWaitForFile(int fd, int mask, int timeout); -/* Slot 6 is reserved */ -/* Slot 7 is reserved */ -/* 8 */ -EXTERN Tcl_Size TclpGetPid(Tcl_Pid pid); -/* Slot 9 is reserved */ -/* Slot 10 is reserved */ -/* 11 */ -EXTERN void TclGetAndDetachPids(Tcl_Interp *interp, - Tcl_Channel chan); -/* 12 */ -EXTERN int TclpCloseFile(TclFile file); -/* 13 */ -EXTERN Tcl_Channel TclpCreateCommandChannel(TclFile readFile, - TclFile writeFile, TclFile errorFile, - int numPids, Tcl_Pid *pidPtr); -/* 14 */ -EXTERN int TclpCreatePipe(TclFile *readPipe, TclFile *writePipe); -/* 15 */ -EXTERN int TclpCreateProcess(Tcl_Interp *interp, int argc, - const char **argv, TclFile inputFile, - TclFile outputFile, TclFile errorFile, - Tcl_Pid *pidPtr); -/* 16 */ -EXTERN int TclpIsAtty(int fd); -/* 17 */ -EXTERN int TclUnixCopyFile(const char *src, const char *dst, - const Tcl_StatBuf *statBufPtr, - int dontCopyAtts); -/* 18 */ -EXTERN TclFile TclpMakeFile(Tcl_Channel channel, int direction); -/* 19 */ -EXTERN TclFile TclpOpenFile(const char *fname, int mode); -/* 20 */ -EXTERN void TclWinAddProcess(void *hProcess, Tcl_Size id); -/* Slot 21 is reserved */ -/* 22 */ -EXTERN TclFile TclpCreateTempFile(const char *contents); -/* Slot 23 is reserved */ -/* 24 */ -EXTERN char * TclWinNoBackslash(char *path); -/* Slot 25 is reserved */ -/* Slot 26 is reserved */ -/* 27 */ -EXTERN void TclWinFlushDirtyChannels(void); -/* Slot 28 is reserved */ -/* 29 */ -EXTERN int TclWinCPUID(int index, int *regs); -/* 30 */ -EXTERN int TclUnixOpenTemporaryFile(Tcl_Obj *dirObj, - Tcl_Obj *basenameObj, Tcl_Obj *extensionObj, - Tcl_Obj *resultingNameObj); -#endif /* WIN */ -#ifdef MAC_OSX_TCL /* MACOSX */ -/* 0 */ -EXTERN void TclGetAndDetachPids(Tcl_Interp *interp, - Tcl_Channel chan); -/* 1 */ -EXTERN int TclpCloseFile(TclFile file); -/* 2 */ -EXTERN Tcl_Channel TclpCreateCommandChannel(TclFile readFile, - TclFile writeFile, TclFile errorFile, - int numPids, Tcl_Pid *pidPtr); -/* 3 */ -EXTERN int TclpCreatePipe(TclFile *readPipe, TclFile *writePipe); -/* 4 */ -EXTERN int TclpCreateProcess(Tcl_Interp *interp, int argc, - const char **argv, TclFile inputFile, - TclFile outputFile, TclFile errorFile, - Tcl_Pid *pidPtr); -/* Slot 5 is reserved */ -/* 6 */ -EXTERN TclFile TclpMakeFile(Tcl_Channel channel, int direction); -/* 7 */ -EXTERN TclFile TclpOpenFile(const char *fname, int mode); -/* 8 */ -EXTERN int TclUnixWaitForFile(int fd, int mask, int timeout); -/* 9 */ -EXTERN TclFile TclpCreateTempFile(const char *contents); -/* 10 */ -EXTERN Tcl_DirEntry * TclpReaddir(TclDIR *dir); -/* Slot 13 is reserved */ -/* 14 */ -EXTERN int TclUnixCopyFile(const char *src, const char *dst, - const Tcl_StatBuf *statBufPtr, - int dontCopyAtts); -/* 15 */ -EXTERN int TclMacOSXGetFileAttribute(Tcl_Interp *interp, - int objIndex, Tcl_Obj *fileName, - Tcl_Obj **attributePtrPtr); -/* 16 */ -EXTERN int TclMacOSXSetFileAttribute(Tcl_Interp *interp, - int objIndex, Tcl_Obj *fileName, - Tcl_Obj *attributePtr); -/* 17 */ -EXTERN int TclMacOSXCopyFileAttributes(const char *src, - const char *dst, - const Tcl_StatBuf *statBufPtr); -/* 18 */ -EXTERN int TclMacOSXMatchType(Tcl_Interp *interp, - const char *pathName, const char *fileName, - Tcl_StatBuf *statBufPtr, - Tcl_GlobTypeData *types); -/* 19 */ -EXTERN void TclMacOSXNotifierAddRunLoopMode( - const void *runLoopMode); -/* Slot 20 is reserved */ -/* Slot 21 is reserved */ -/* Slot 22 is reserved */ -/* Slot 23 is reserved */ -/* Slot 24 is reserved */ -/* Slot 25 is reserved */ -/* Slot 26 is reserved */ -/* Slot 27 is reserved */ -/* Slot 28 is reserved */ -/* 29 */ -EXTERN int TclWinCPUID(int index, int *regs); -/* 30 */ -EXTERN int TclUnixOpenTemporaryFile(Tcl_Obj *dirObj, - Tcl_Obj *basenameObj, Tcl_Obj *extensionObj, - Tcl_Obj *resultingNameObj); -#endif /* MACOSX */ - -typedef struct TclIntPlatStubs { - int magic; - void *hooks; - -#if !defined(_WIN32) && !defined(__CYGWIN__) && !defined(MAC_OSX_TCL) /* UNIX */ - void (*tclGetAndDetachPids) (Tcl_Interp *interp, Tcl_Channel chan); /* 0 */ - int (*tclpCloseFile) (TclFile file); /* 1 */ - Tcl_Channel (*tclpCreateCommandChannel) (TclFile readFile, TclFile writeFile, TclFile errorFile, int numPids, Tcl_Pid *pidPtr); /* 2 */ - int (*tclpCreatePipe) (TclFile *readPipe, TclFile *writePipe); /* 3 */ - int (*tclpCreateProcess) (Tcl_Interp *interp, int argc, const char **argv, TclFile inputFile, TclFile outputFile, TclFile errorFile, Tcl_Pid *pidPtr); /* 4 */ - int (*tclUnixWaitForFile_) (int fd, int mask, int timeout); /* 5 */ - TclFile (*tclpMakeFile) (Tcl_Channel channel, int direction); /* 6 */ - TclFile (*tclpOpenFile) (const char *fname, int mode); /* 7 */ - int (*tclUnixWaitForFile) (int fd, int mask, int timeout); /* 8 */ - TclFile (*tclpCreateTempFile) (const char *contents); /* 9 */ - Tcl_DirEntry * (*tclpReaddir) (TclDIR *dir); /* 10 */ - void (*reserved11)(void); - void (*reserved12)(void); - char * (*tclpInetNtoa) (struct in_addr addr); /* 13 */ - int (*tclUnixCopyFile) (const char *src, const char *dst, const Tcl_StatBuf *statBufPtr, int dontCopyAtts); /* 14 */ - int (*tclMacOSXGetFileAttribute) (Tcl_Interp *interp, int objIndex, Tcl_Obj *fileName, Tcl_Obj **attributePtrPtr); /* 15 */ - int (*tclMacOSXSetFileAttribute) (Tcl_Interp *interp, int objIndex, Tcl_Obj *fileName, Tcl_Obj *attributePtr); /* 16 */ - int (*tclMacOSXCopyFileAttributes) (const char *src, const char *dst, const Tcl_StatBuf *statBufPtr); /* 17 */ - int (*tclMacOSXMatchType) (Tcl_Interp *interp, const char *pathName, const char *fileName, Tcl_StatBuf *statBufPtr, Tcl_GlobTypeData *types); /* 18 */ - void (*tclMacOSXNotifierAddRunLoopMode) (const void *runLoopMode); /* 19 */ - void (*reserved20)(void); - void (*reserved21)(void); - TclFile (*tclpCreateTempFile_) (const char *contents); /* 22 */ - void (*reserved23)(void); - void (*reserved24)(void); - void (*reserved25)(void); - void (*reserved26)(void); - void (*reserved27)(void); - void (*reserved28)(void); - int (*tclWinCPUID) (int index, int *regs); /* 29 */ - int (*tclUnixOpenTemporaryFile) (Tcl_Obj *dirObj, Tcl_Obj *basenameObj, Tcl_Obj *extensionObj, Tcl_Obj *resultingNameObj); /* 30 */ -#endif /* UNIX */ -#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */ - void (*tclWinConvertError) (DWORD errCode); /* 0 */ - void (*tclWinConvertWSAError) (DWORD errCode); /* 1 */ - struct servent * (*tclWinGetServByName) (const char *nm, const char *proto); /* 2 */ - int (*tclWinGetSockOpt) (SOCKET s, int level, int optname, char *optval, int *optlen); /* 3 */ - HINSTANCE (*tclWinGetTclInstance) (void); /* 4 */ - int (*tclUnixWaitForFile) (int fd, int mask, int timeout); /* 5 */ - unsigned short (*tclWinNToHS) (unsigned short ns); /* 6 */ - int (*tclWinSetSockOpt) (SOCKET s, int level, int optname, const char *optval, int optlen); /* 7 */ - Tcl_Size (*tclpGetPid) (Tcl_Pid pid); /* 8 */ - int (*tclWinGetPlatformId) (void); /* 9 */ - void *(*tclpReaddir) (void *dir); /* 10 */ - void (*tclGetAndDetachPids) (Tcl_Interp *interp, Tcl_Channel chan); /* 11 */ - int (*tclpCloseFile) (TclFile file); /* 12 */ - Tcl_Channel (*tclpCreateCommandChannel) (TclFile readFile, TclFile writeFile, TclFile errorFile, int numPids, Tcl_Pid *pidPtr); /* 13 */ - int (*tclpCreatePipe) (TclFile *readPipe, TclFile *writePipe); /* 14 */ - int (*tclpCreateProcess) (Tcl_Interp *interp, int argc, const char **argv, TclFile inputFile, TclFile outputFile, TclFile errorFile, Tcl_Pid *pidPtr); /* 15 */ - int (*tclpIsAtty) (int fd); /* 16 */ - int (*tclUnixCopyFile) (const char *src, const char *dst, const Tcl_StatBuf *statBufPtr, int dontCopyAtts); /* 17 */ - TclFile (*tclpMakeFile) (Tcl_Channel channel, int direction); /* 18 */ - TclFile (*tclpOpenFile) (const char *fname, int mode); /* 19 */ - void (*tclWinAddProcess) (void *hProcess, Tcl_Size id); /* 20 */ - char * (*tclpInetNtoa) (struct in_addr addr); /* 21 */ - TclFile (*tclpCreateTempFile) (const char *contents); /* 22 */ - void (*reserved23)(void); - char * (*tclWinNoBackslash) (char *path); /* 24 */ - void (*reserved25)(void); - void (*tclWinSetInterfaces) (int wide); /* 26 */ - void (*tclWinFlushDirtyChannels) (void); /* 27 */ - void (*tclWinResetInterfaces) (void); /* 28 */ - int (*tclWinCPUID) (int index, int *regs); /* 29 */ - int (*tclUnixOpenTemporaryFile) (Tcl_Obj *dirObj, Tcl_Obj *basenameObj, Tcl_Obj *extensionObj, Tcl_Obj *resultingNameObj); /* 30 */ -#endif /* WIN */ -#ifdef MAC_OSX_TCL /* MACOSX */ - void (*tclGetAndDetachPids) (Tcl_Interp *interp, Tcl_Channel chan); /* 0 */ - int (*tclpCloseFile) (TclFile file); /* 1 */ - Tcl_Channel (*tclpCreateCommandChannel) (TclFile readFile, TclFile writeFile, TclFile errorFile, int numPids, Tcl_Pid *pidPtr); /* 2 */ - int (*tclpCreatePipe) (TclFile *readPipe, TclFile *writePipe); /* 3 */ - int (*tclpCreateProcess) (Tcl_Interp *interp, int argc, const char **argv, TclFile inputFile, TclFile outputFile, TclFile errorFile, Tcl_Pid *pidPtr); /* 4 */ - int (*tclUnixWaitForFile_) (int fd, int mask, int timeout); /* 5 */ - TclFile (*tclpMakeFile) (Tcl_Channel channel, int direction); /* 6 */ - TclFile (*tclpOpenFile) (const char *fname, int mode); /* 7 */ - int (*tclUnixWaitForFile) (int fd, int mask, int timeout); /* 8 */ - TclFile (*tclpCreateTempFile) (const char *contents); /* 9 */ - Tcl_DirEntry * (*tclpReaddir) (TclDIR *dir); /* 10 */ - void (*reserved11)(void); - void (*reserved12)(void); - char * (*tclpInetNtoa) (struct in_addr addr); /* 13 */ - int (*tclUnixCopyFile) (const char *src, const char *dst, const Tcl_StatBuf *statBufPtr, int dontCopyAtts); /* 14 */ - int (*tclMacOSXGetFileAttribute) (Tcl_Interp *interp, int objIndex, Tcl_Obj *fileName, Tcl_Obj **attributePtrPtr); /* 15 */ - int (*tclMacOSXSetFileAttribute) (Tcl_Interp *interp, int objIndex, Tcl_Obj *fileName, Tcl_Obj *attributePtr); /* 16 */ - int (*tclMacOSXCopyFileAttributes) (const char *src, const char *dst, const Tcl_StatBuf *statBufPtr); /* 17 */ - int (*tclMacOSXMatchType) (Tcl_Interp *interp, const char *pathName, const char *fileName, Tcl_StatBuf *statBufPtr, Tcl_GlobTypeData *types); /* 18 */ - void (*tclMacOSXNotifierAddRunLoopMode) (const void *runLoopMode); /* 19 */ - void (*reserved20)(void); - void (*reserved21)(void); - TclFile (*tclpCreateTempFile_) (const char *contents); /* 22 */ - void (*reserved23)(void); - void (*reserved24)(void); - void (*reserved25)(void); - void (*reserved26)(void); - void (*reserved27)(void); - void (*reserved28)(void); - int (*tclWinCPUID) (int index, int *regs); /* 29 */ - int (*tclUnixOpenTemporaryFile) (Tcl_Obj *dirObj, Tcl_Obj *basenameObj, Tcl_Obj *extensionObj, Tcl_Obj *resultingNameObj); /* 30 */ -#endif /* MACOSX */ -} TclIntPlatStubs; - -extern const TclIntPlatStubs *tclIntPlatStubsPtr; - -#ifdef __cplusplus -} -#endif - -#if defined(USE_TCL_STUBS) - -/* - * Inline function declarations: - */ - -#if !defined(_WIN32) && !defined(__CYGWIN__) && !defined(MAC_OSX_TCL) /* UNIX */ -#define TclGetAndDetachPids \ - (tclIntPlatStubsPtr->tclGetAndDetachPids) /* 0 */ -#define TclpCloseFile \ - (tclIntPlatStubsPtr->tclpCloseFile) /* 1 */ -#define TclpCreateCommandChannel \ - (tclIntPlatStubsPtr->tclpCreateCommandChannel) /* 2 */ -#define TclpCreatePipe \ - (tclIntPlatStubsPtr->tclpCreatePipe) /* 3 */ -#define TclpCreateProcess \ - (tclIntPlatStubsPtr->tclpCreateProcess) /* 4 */ -/* Slot 5 is reserved */ -#define TclpMakeFile \ - (tclIntPlatStubsPtr->tclpMakeFile) /* 6 */ -#define TclpOpenFile \ - (tclIntPlatStubsPtr->tclpOpenFile) /* 7 */ -#define TclUnixWaitForFile \ - (tclIntPlatStubsPtr->tclUnixWaitForFile) /* 8 */ -#define TclpCreateTempFile \ - (tclIntPlatStubsPtr->tclpCreateTempFile) /* 9 */ -#define TclpReaddir \ - (tclIntPlatStubsPtr->tclpReaddir) /* 10 */ -/* Slot 11 is reserved */ -/* Slot 12 is reserved */ -/* Slot 13 is reserved */ -#define TclUnixCopyFile \ - (tclIntPlatStubsPtr->tclUnixCopyFile) /* 14 */ -#define TclMacOSXGetFileAttribute \ - (tclIntPlatStubsPtr->tclMacOSXGetFileAttribute) /* 15 */ -#define TclMacOSXSetFileAttribute \ - (tclIntPlatStubsPtr->tclMacOSXSetFileAttribute) /* 16 */ -#define TclMacOSXCopyFileAttributes \ - (tclIntPlatStubsPtr->tclMacOSXCopyFileAttributes) /* 17 */ -#define TclMacOSXMatchType \ - (tclIntPlatStubsPtr->tclMacOSXMatchType) /* 18 */ -#define TclMacOSXNotifierAddRunLoopMode \ - (tclIntPlatStubsPtr->tclMacOSXNotifierAddRunLoopMode) /* 19 */ -/* Slot 20 is reserved */ -/* Slot 21 is reserved */ -/* Slot 22 is reserved */ -/* Slot 23 is reserved */ -/* Slot 24 is reserved */ -/* Slot 25 is reserved */ -/* Slot 26 is reserved */ -/* Slot 27 is reserved */ -/* Slot 28 is reserved */ -#define TclWinCPUID \ - (tclIntPlatStubsPtr->tclWinCPUID) /* 29 */ -#define TclUnixOpenTemporaryFile \ - (tclIntPlatStubsPtr->tclUnixOpenTemporaryFile) /* 30 */ -#endif /* UNIX */ -#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */ -/* Slot 0 is reserved */ -/* Slot 1 is reserved */ -/* Slot 2 is reserved */ -/* Slot 3 is reserved */ -#define TclWinGetTclInstance \ - (tclIntPlatStubsPtr->tclWinGetTclInstance) /* 4 */ -#define TclUnixWaitForFile \ - (tclIntPlatStubsPtr->tclUnixWaitForFile) /* 5 */ -/* Slot 6 is reserved */ -/* Slot 7 is reserved */ -#define TclpGetPid \ - (tclIntPlatStubsPtr->tclpGetPid) /* 8 */ -/* Slot 9 is reserved */ -/* Slot 10 is reserved */ -#define TclGetAndDetachPids \ - (tclIntPlatStubsPtr->tclGetAndDetachPids) /* 11 */ -#define TclpCloseFile \ - (tclIntPlatStubsPtr->tclpCloseFile) /* 12 */ -#define TclpCreateCommandChannel \ - (tclIntPlatStubsPtr->tclpCreateCommandChannel) /* 13 */ -#define TclpCreatePipe \ - (tclIntPlatStubsPtr->tclpCreatePipe) /* 14 */ -#define TclpCreateProcess \ - (tclIntPlatStubsPtr->tclpCreateProcess) /* 15 */ -#define TclpIsAtty \ - (tclIntPlatStubsPtr->tclpIsAtty) /* 16 */ -#define TclUnixCopyFile \ - (tclIntPlatStubsPtr->tclUnixCopyFile) /* 17 */ -#define TclpMakeFile \ - (tclIntPlatStubsPtr->tclpMakeFile) /* 18 */ -#define TclpOpenFile \ - (tclIntPlatStubsPtr->tclpOpenFile) /* 19 */ -#define TclWinAddProcess \ - (tclIntPlatStubsPtr->tclWinAddProcess) /* 20 */ -/* Slot 21 is reserved */ -#define TclpCreateTempFile \ - (tclIntPlatStubsPtr->tclpCreateTempFile) /* 22 */ -/* Slot 23 is reserved */ -#define TclWinNoBackslash \ - (tclIntPlatStubsPtr->tclWinNoBackslash) /* 24 */ -/* Slot 25 is reserved */ -/* Slot 26 is reserved */ -#define TclWinFlushDirtyChannels \ - (tclIntPlatStubsPtr->tclWinFlushDirtyChannels) /* 27 */ -/* Slot 28 is reserved */ -#define TclWinCPUID \ - (tclIntPlatStubsPtr->tclWinCPUID) /* 29 */ -#define TclUnixOpenTemporaryFile \ - (tclIntPlatStubsPtr->tclUnixOpenTemporaryFile) /* 30 */ -#endif /* WIN */ -#ifdef MAC_OSX_TCL /* MACOSX */ -#define TclGetAndDetachPids \ - (tclIntPlatStubsPtr->tclGetAndDetachPids) /* 0 */ -#define TclpCloseFile \ - (tclIntPlatStubsPtr->tclpCloseFile) /* 1 */ -#define TclpCreateCommandChannel \ - (tclIntPlatStubsPtr->tclpCreateCommandChannel) /* 2 */ -#define TclpCreatePipe \ - (tclIntPlatStubsPtr->tclpCreatePipe) /* 3 */ -#define TclpCreateProcess \ - (tclIntPlatStubsPtr->tclpCreateProcess) /* 4 */ -/* Slot 5 is reserved */ -#define TclpMakeFile \ - (tclIntPlatStubsPtr->tclpMakeFile) /* 6 */ -#define TclpOpenFile \ - (tclIntPlatStubsPtr->tclpOpenFile) /* 7 */ -#define TclUnixWaitForFile \ - (tclIntPlatStubsPtr->tclUnixWaitForFile) /* 8 */ -#define TclpCreateTempFile \ - (tclIntPlatStubsPtr->tclpCreateTempFile) /* 9 */ -#define TclpReaddir \ - (tclIntPlatStubsPtr->tclpReaddir) /* 10 */ -/* Slot 11 is reserved */ -/* Slot 12 is reserved */ -/* Slot 13 is reserved */ -#define TclUnixCopyFile \ - (tclIntPlatStubsPtr->tclUnixCopyFile) /* 14 */ -#define TclMacOSXGetFileAttribute \ - (tclIntPlatStubsPtr->tclMacOSXGetFileAttribute) /* 15 */ -#define TclMacOSXSetFileAttribute \ - (tclIntPlatStubsPtr->tclMacOSXSetFileAttribute) /* 16 */ -#define TclMacOSXCopyFileAttributes \ - (tclIntPlatStubsPtr->tclMacOSXCopyFileAttributes) /* 17 */ -#define TclMacOSXMatchType \ - (tclIntPlatStubsPtr->tclMacOSXMatchType) /* 18 */ -#define TclMacOSXNotifierAddRunLoopMode \ - (tclIntPlatStubsPtr->tclMacOSXNotifierAddRunLoopMode) /* 19 */ -/* Slot 20 is reserved */ -/* Slot 21 is reserved */ -/* Slot 22 is reserved */ -/* Slot 23 is reserved */ -/* Slot 24 is reserved */ -/* Slot 25 is reserved */ -/* Slot 26 is reserved */ -/* Slot 27 is reserved */ -/* Slot 28 is reserved */ -#define TclWinCPUID \ - (tclIntPlatStubsPtr->tclWinCPUID) /* 29 */ -#define TclUnixOpenTemporaryFile \ - (tclIntPlatStubsPtr->tclUnixOpenTemporaryFile) /* 30 */ -#endif /* MACOSX */ - -#endif /* defined(USE_TCL_STUBS) */ - -#else /* TCL_MAJOR_VERSION > 8 */ /* !BEGIN!: Do not edit below this line. */ #ifdef __cplusplus extern "C" { #endif @@ -686,15 +211,23 @@ (tclIntPlatStubsPtr->tclUnixOpenTemporaryFile) /* 30 */ #endif /* defined(USE_TCL_STUBS) */ /* !END!: Do not edit above this line. */ -#endif /* TCL_MAJOR_VERSION */ #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLIMPORT +#undef TclpLocaltime_unix +#undef TclpGmtime_unix +#undef TclWinConvertWSAError +#define TclWinConvertWSAError TclWinConvertError + +#undef TclpInetNtoa +#define TclpInetNtoa inet_ntoa +#undef TclpCreateTempFile_ +#undef TclUnixWaitForFile_ #ifdef MAC_OSX_TCL /* not accessible on Win32/UNIX */ MODULE_SCOPE int TclMacOSXGetFileAttribute(Tcl_Interp *interp, int objIndex, Tcl_Obj *fileName, Tcl_Obj **attributePtrPtr); /* 16 */ @@ -717,23 +250,18 @@ #undef TclMacOSXMatchType /* 18 */ #undef TclMacOSXNotifierAddRunLoopMode /* 19 */ #endif #if defined(_WIN32) -# if !defined(TCL_NO_DEPRECATED) -# define TclWinConvertError Tcl_WinConvertError -# define TclWinConvertWSAError Tcl_WinConvertError -# define TclWinNToHS ntohs -# define TclpInetNtoa inet_ntoa -# define TclWinGetServByName getservbyname -# define TclWinGetSockOpt getsockopt -# define TclWinSetSockOpt setsockopt -# define TclWinGetPlatformId() (2) /* VER_PLATFORM_WIN32_NT */ -# define TclWinResetInterfaces() /* nop */ -# define TclWinSetInterfaces(dummy) /* nop */ -# endif /* TCL_NO_DEPRECATED */ +# undef TclWinNToHS +# undef TclWinGetServByName +# undef TclWinGetSockOpt +# undef TclWinSetSockOpt +# undef TclWinGetPlatformId +# undef TclWinResetInterfaces +# undef TclWinSetInterfaces #else # undef TclpGetPid -# define TclpGetPid(pid) ((Tcl_Size)(pid)) +# define TclpGetPid(pid) ((size_t)(pid)) #endif #endif /* _TCLINTPLATDECLS */ Index: generic/tclInterp.c ================================================================== --- generic/tclInterp.c +++ generic/tclInterp.c @@ -1,18 +1,29 @@ /* - * tclInterp.c -- - * - * This file implements the "interp" command which allows creation and - * manipulation of Tcl interpreters from within Tcl scripts. - * * Copyright © 1995-1997 Sun Microsystems, Inc. * Copyright © 2004 Donal K. Fellows * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclInterp.c -- + * + * This file implements the "interp" command which allows creation and + * manipulation of Tcl interpreters from within Tcl scripts. + */ + #include "tclInt.h" /* * A pointer to a string that holds an initialization script that if non-NULL * is evaluated in Tcl_Init() prior to the built-in initialization script @@ -623,13 +634,11 @@ "children", "create", "debug", "delete", "eval", "exists", "expose", "hide", "hidden", "issafe", "invokehidden", "limit", "marktrusted", "recursionlimit", "share", -#ifndef TCL_NO_DEPRECATED "slaves", -#endif "target", "transfer", NULL }; static const char *const optionsNoSlaves[] = { "alias", "aliases", "bgerror", "cancel", "children", "create", "debug", "delete", @@ -643,13 +652,11 @@ OPT_ALIAS, OPT_ALIASES, OPT_BGERROR, OPT_CANCEL, OPT_CHILDREN, OPT_CREATE, OPT_DEBUG, OPT_DELETE, OPT_EVAL, OPT_EXISTS, OPT_EXPOSE, OPT_HIDE, OPT_HIDDEN, OPT_ISSAFE, OPT_INVOKEHID, OPT_LIMIT, OPT_MARKTRUSTED, OPT_RECLIMIT, OPT_SHARE, -#ifndef TCL_NO_DEPRECATED OPT_SLAVES, -#endif OPT_TARGET, OPT_TRANSFER } index; if (objc < 2) { Tcl_WrongNumArgs(interp, 1, objv, "cmd ?arg ...?"); @@ -1032,13 +1039,11 @@ childInterp = GetInterp(interp, objv[2]); if (childInterp == NULL) { return TCL_ERROR; } return ChildRecursionLimit(interp, childInterp, objc - 3, objv + 3); -#ifndef TCL_NO_DEPRECATED case OPT_SLAVES: -#endif case OPT_CHILDREN: { InterpInfo *iiPtr; Tcl_Obj *resultPtr; Tcl_HashEntry *hPtr; Tcl_HashSearch hashSearch; Index: generic/tclLink.c ================================================================== --- generic/tclLink.c +++ generic/tclLink.c @@ -1,22 +1,24 @@ /* - * tclLink.c -- - * - * This file implements linked variables (a C variable that is tied to a - * Tcl variable). The idea of linked variables was first suggested by - * Andreas Stolcke and this implementation is based heavily on a - * prototype implementation provided by him. - * * Copyright © 1993 The Regents of the University of California. * Copyright © 1994-1997 Sun Microsystems, Inc. * Copyright © 2008 Rene Zaumseil * Copyright © 2019 Donal K. Fellows * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * tclLink.c -- + * + * This file implements linked variables (a C variable that is tied to a + * Tcl variable). The idea of linked variables was first suggested by + * Andreas Stolcke and this implementation is based heavily on a + * prototype implementation provided by him. + */ + #include "tclInt.h" #include "tclTomMath.h" #include /* @@ -113,11 +115,11 @@ "invalidReal", /* name */ NULL, /* freeIntRepProc */ NULL, /* dupIntRepProc */ NULL, /* updateStringProc */ NULL, /* setFromAnyProc */ - TCL_OBJTYPE_V0 + 0 }; /* * Convenience macro for accessing the value of the C variable pointed to by a * link. Note that this macro produces something that may be regarded as an @@ -521,11 +523,11 @@ { if (Tcl_GetDoubleFromObj(NULL, objPtr, dblPtr) == TCL_OK) { return 0; } else { #ifdef ACCEPT_NAN - Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(objPtr, &tclDoubleType); + Tcl_ObjInternalRep *irPtr = TclFetchInternalRep(objPtr, tclDoubleType); if (irPtr != NULL) { *dblPtr = irPtr->doubleValue; return 0; } Index: generic/tclListObj.c ================================================================== --- generic/tclListObj.c +++ generic/tclListObj.c @@ -1,14 +1,27 @@ +/* + * Copyright © 2022 Ashok P. Nadkarni. All rights reserved. + * Copyright © 2021 - 2024 Nathan Coulter. All rights reserved. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclListObj.c -- * * This file contains functions that implement the Tcl list object type. * - * Copyright © 2022 Ashok P. Nadkarni. All rights reserved. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include #include "tclInt.h" #include "tclTomMath.h" @@ -66,11 +79,11 @@ #endif /* Checks for when caller should have already converted to internal list type */ #define LIST_ASSERT_TYPE(listObj_) \ - LIST_ASSERT(TclHasInternalRep((listObj_), &tclListType)) + LIST_ASSERT(TclHasInternalRep((listObj_), tclListTypePtr)) /* * If ENABLE_LIST_INVARIANTS is enabled (-DENABLE_LIST_INVARIANTS from the * command line), the entire list internal representation is checked for * inconsistencies. This has a non-trivial cost so has to be separately @@ -128,40 +141,96 @@ ListRep *); static void ListRepClone(ListRep *fromRepPtr, ListRep *toRepPtr, int flags); static void ListRepUnsharedFreeUnreferenced(const ListRep *repPtr); static int TclListObjGetRep(Tcl_Interp *, Tcl_Obj *listPtr, ListRep *repPtr); static void ListRepRange(ListRep *srcRepPtr, - Tcl_Size rangeStart, - Tcl_Size rangeEnd, + Tcl_Size fromIdx, + Tcl_Size toIdx, int preserveSrcRep, ListRep *rangeRepPtr); static ListStore *ListStoreReallocate(ListStore *storePtr, Tcl_Size numSlots); static void ListRepValidate(const ListRep *repPtr, const char *file, int lineNum); static void DupListInternalRep(Tcl_Obj *srcPtr, Tcl_Obj *copyPtr); static void FreeListInternalRep(Tcl_Obj *listPtr); static int SetListFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr); static void UpdateStringOfList(Tcl_Obj *listPtr); -static Tcl_Size ListLength(Tcl_Obj *listPtr); +static int ListObjAppendElement(Tcl_Interp *interp, + Tcl_Obj *listPtr, Tcl_Obj *objPtr); +static int ListObjAppendList(Tcl_Interp *interp, + Tcl_Obj *listPtr, Tcl_Obj *elemListPtr); +static int ListObjIndex(tclObjTypeInterfaceArgsListIndex); +static int ListObjInterfaceGetElements(tclObjTypeInterfaceArgsListAll); +static int ListObjInterfaceLength(tclObjTypeInterfaceArgsListLength); +static int ListObjSetElement(tclObjTypeInterfaceArgsListSet); +static int LsetFlat(tclObjTypeInterfaceArgsListSetDeep); +static int ListObjRange(tclObjTypeInterfaceArgsListRange); +static int ListObjReplace(tclObjTypeInterfaceArgsListReplace); +static int ListObjStringIsEmpty(tclObjTypeInterfaceArgsStringIsEmpty); /* * The structure below defines the list Tcl object type by means of functions * that can be invoked by generic object code. * * The internal representation of a list object is ListRep defined in tcl.h. */ -const Tcl_ObjType tclListType = { - "list", /* name */ +static ObjectType tclListObjectType = { + "list", FreeListInternalRep, /* freeIntRepProc */ DupListInternalRep, /* dupIntRepProc */ UpdateStringOfList, /* updateStringProc */ - SetListFromAny, /* setFromAnyProc */ - TCL_OBJTYPE_V1(ListLength) + SetListFromAny, /* setFromAnyProc */ + 2, + NULL }; + +Tcl_ObjType * tclListTypePtr = (Tcl_ObjType *)&tclListObjectType; + + +void TclListInit(void) { + Tcl_ObjInterface *oiPtr; + oiPtr = Tcl_NewObjInterface(); + Tcl_ObjInterfaceSetFnStringIsEmpty(oiPtr ,ListObjStringIsEmpty); + Tcl_ObjInterfaceSetFnListAll(oiPtr ,ListObjInterfaceGetElements); + Tcl_ObjInterfaceSetFnListAppend(oiPtr ,ListObjAppendElement); + Tcl_ObjInterfaceSetFnListAppendList(oiPtr ,ListObjAppendList); + Tcl_ObjInterfaceSetFnListIndex(oiPtr ,ListObjIndex); + Tcl_ObjInterfaceSetFnListLength(oiPtr ,ListObjInterfaceLength); + Tcl_ObjInterfaceSetFnListRange(oiPtr ,ListObjRange); + Tcl_ObjInterfaceSetFnListReplace(oiPtr ,ListObjReplace); + Tcl_ObjInterfaceSetFnListSet(oiPtr ,ListObjSetElement); + Tcl_ObjInterfaceSetFnListSetDeep(oiPtr ,LsetFlat); + Tcl_ObjTypeSetInterface(tclListTypePtr ,oiPtr); + return; +} /* Macros to manipulate the List internal rep */ + +#define ListSetIntRep(objPtr, listRepPtr) \ + do { \ + Tcl_ObjInternalRep ir; \ + ir.twoPtrValue.ptr1 = (listRepPtr); \ + ir.twoPtrValue.ptr2 = NULL; \ + (listRepPtr)->refCount++; \ + Tcl_StoreInternalRep((objPtr), tclListTypePtr, &ir); \ + } while (0) + +#define ListGetIntRep(objPtr, listRepPtr) \ + do { \ + const Tcl_ObjInternalRep *irPtr; \ + irPtr = TclFetchInternalRep((objPtr), tclListTypePtr); \ + (listRepPtr) = irPtr ? (List *)irPtr->twoPtrValue.ptr1 : NULL; \ + } while (0) + +#define ListResetIntRep(objPtr, listRepPtr) \ + TclFetchInternalRep((objPtr), tclListTypePtr)->twoPtrValue.ptr1 = (listRepPtr) + +#ifndef TCL_MIN_ELEMENT_GROWTH +#define TCL_MIN_ELEMENT_GROWTH TCL_MIN_GROWTH/sizeof(Tcl_Obj *) +#endif + #define ListRepIncrRefs(repPtr_) \ do { \ (repPtr_)->storePtr->refCount++; \ if ((repPtr_)->spanPtr) \ (repPtr_)->spanPtr->refCount++; \ @@ -200,11 +269,11 @@ */ #define ListObjStompRep(objPtr_, repPtr_) \ do { \ (objPtr_)->internalRep.twoPtrValue.ptr1 = (repPtr_)->storePtr; \ (objPtr_)->internalRep.twoPtrValue.ptr2 = (repPtr_)->spanPtr; \ - (objPtr_)->typePtr = &tclListType; \ + (objPtr_)->typePtr = tclListTypePtr; \ } while (0) #define ListObjOverwriteRep(objPtr_, repPtr_) \ do { \ ListRepIncrRefs(repPtr_); \ @@ -1245,25 +1314,25 @@ */ static int TclListObjGetRep( Tcl_Interp *interp, /* Used to report errors if not NULL. */ - Tcl_Obj *listObj, /* List object for which an element array is + Tcl_Obj *listPtr, /* List object for which an element array is * to be returned. */ ListRep *repPtr) /* Location to store descriptor */ { - if (!TclHasInternalRep(listObj, &tclListType)) { + if (!TclHasInternalRep(listPtr, tclListTypePtr)) { int result; - result = SetListFromAny(interp, listObj); + result = SetListFromAny(interp, listPtr); if (result != TCL_OK) { /* Init to keep gcc happy wrt uninitialized fields at call site */ repPtr->storePtr = NULL; repPtr->spanPtr = NULL; return result; } } - ListObjGetRep(listObj, repPtr); + ListObjGetRep(listPtr, repPtr); LISTREP_CHECK(repPtr); return TCL_OK; } /* @@ -1313,54 +1382,10 @@ TclFreeInternalRep(objPtr); TclInvalidateStringRep(objPtr); Tcl_InitStringRep(objPtr, NULL, 0); } } - -/* - *---------------------------------------------------------------------- - * - * TclListObjCopy -- - * - * Makes a "pure list" copy of a list value. This provides for the C - * level a counterpart of the [lrange $list 0 end] command, while using - * internals details to be as efficient as possible. - * - * Results: - * Normally returns a pointer to a new Tcl_Obj, that contains the same - * list value as *listPtr does. The returned Tcl_Obj has a refCount of - * zero. If *listPtr does not hold a list, NULL is returned, and if - * interp is non-NULL, an error message is recorded there. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -Tcl_Obj * -TclListObjCopy( - Tcl_Interp *interp, /* Used to report errors if not NULL. */ - Tcl_Obj *listObj) /* List object for which an element array is - * to be returned. */ -{ - Tcl_Obj *copyObj; - - if (!TclHasInternalRep(listObj, &tclListType)) { - if (TclObjTypeHasProc(listObj, lengthProc)) { - return Tcl_DuplicateObj(listObj); - } - if (SetListFromAny(interp, listObj) != TCL_OK) { - return NULL; - } - } - - TclNewObj(copyObj); - TclInvalidateStringRep(copyObj); - DupListInternalRep(listObj, copyObj); - return copyObj; -} /* *------------------------------------------------------------------------ * * ListRepRange -- @@ -1388,12 +1413,12 @@ *------------------------------------------------------------------------ */ static void ListRepRange( ListRep *srcRepPtr, /* Contains source of the range */ - Tcl_Size rangeStart, /* Index of first element to include */ - Tcl_Size rangeEnd, /* Index of last element to include */ + Tcl_Size fromIdx, /* Index of first element to include */ + Tcl_Size toIdx, /* Index of last element to include */ int preserveSrcRep, /* If true, srcRepPtr contents must not be modified (generally because a shared Tcl_Obj references it) */ ListRep *rangeRepPtr) /* Output. Must NOT be == srcRepPtr */ { @@ -1409,23 +1434,23 @@ if (!preserveSrcRep) { /* T:listrep-1.{4,5,8,9},2.{4:7},3.{15:18},4.{7,8} */ ListRepFreeUnreferenced(srcRepPtr); } /* else T:listrep-2.{4.2,4.3,5.2,5.3,6.2,7.2,8.1} */ - if (rangeStart < 0) { - rangeStart = 0; + if (fromIdx < 0) { + fromIdx = 0; } - if (rangeEnd >= numSrcElems) { - rangeEnd = numSrcElems - 1; + if (toIdx >= numSrcElems) { + toIdx = numSrcElems - 1; } - if (rangeStart > rangeEnd) { + if (fromIdx > toIdx) { /* Empty list of capacity 1. */ ListRepInit(1, NULL, LISTREP_PANIC_ON_FAIL, rangeRepPtr); return; } - rangeLen = rangeEnd - rangeStart + 1; + rangeLen = toIdx - fromIdx + 1; /* * We can create a range one of four ways: * (0) Range encapsulates entire list * (1) Special case: deleting in-place from end of an unshared object @@ -1440,24 +1465,24 @@ * * Note: Even if nothing below cause any changes, we still want the * string-canonizing effect of [lrange 0 end] so the Tcl_Obj should not * be returned as is even if the range encompasses the whole list. */ - if (rangeStart == 0 && rangeEnd == (numSrcElems-1)) { + if (fromIdx == 0 && toIdx == (numSrcElems-1)) { /* Option 0 - entire list. This may be used to canonicalize */ /* T:listrep-1.10.1,2.8.1 */ *rangeRepPtr = *srcRepPtr; /* Not ref counts not incremented */ - } else if (rangeStart == 0 && (!preserveSrcRep) + } else if (fromIdx == 0 && (!preserveSrcRep) && (!ListRepIsShared(srcRepPtr) && srcRepPtr->spanPtr == NULL)) { /* Option 1 - Special case unshared, exclude end elements, no span */ LIST_ASSERT(srcRepPtr->storePtr->firstUsed == 0); /* If no span */ ListRepElements(srcRepPtr, numSrcElems, srcElems); - numAfterRangeEnd = numSrcElems - (rangeEnd + 1); - /* Assert: Because numSrcElems > rangeEnd earlier */ + numAfterRangeEnd = numSrcElems - (toIdx + 1); + /* Assert: Because numSrcElems > toIdx earlier */ if (numAfterRangeEnd != 0) { /* T:listrep-1.{8,9} */ - ObjArrayDecrRefs(srcElems, rangeEnd + 1, numAfterRangeEnd); + ObjArrayDecrRefs(srcElems, toIdx + 1, numAfterRangeEnd); } /* srcRepPtr->storePtr->firstUsed,numAllocated unchanged */ srcRepPtr->storePtr->numUsed = rangeLen; srcRepPtr->storePtr->flags = 0; rangeRepPtr->storePtr = srcRepPtr->storePtr; /* Note no incr ref */ @@ -1464,11 +1489,11 @@ rangeRepPtr->spanPtr = NULL; } else if (ListSpanMerited(rangeLen, srcRepPtr->storePtr->numUsed, srcRepPtr->storePtr->numAllocated)) { /* Option 2 - because span would be most efficient */ - Tcl_Size spanStart = ListRepStart(srcRepPtr) + rangeStart; + Tcl_Size spanStart = ListRepStart(srcRepPtr) + fromIdx; if (!preserveSrcRep && srcRepPtr->spanPtr && srcRepPtr->spanPtr->refCount <= 1) { /* If span is not shared reuse it */ /* T:listrep-2.7.3,3.{16,18} */ srcRepPtr->spanPtr->spanStart = spanStart; @@ -1494,11 +1519,11 @@ /* Option 3 - span or modification in place not allowed/desired */ /* T:listrep-2.{4,6} */ ListRepElements(srcRepPtr, numSrcElems, srcElems); /* TODO - allocate extra space? */ ListRepInit(rangeLen, - &srcElems[rangeStart], + &srcElems[fromIdx], LISTREP_PANIC_ON_FAIL, rangeRepPtr); } else { /* * Option 4 - modify in place. Note that because of the invariant @@ -1516,24 +1541,24 @@ LIST_ASSERT(ListRepLength(srcRepPtr) == srcRepPtr->storePtr->numUsed); ListRepElements(srcRepPtr, numSrcElems, srcElems); /* Free leading elements outside range */ - if (rangeStart != 0) { + if (fromIdx != 0) { /* T:listrep-1.4,3.15 */ - ObjArrayDecrRefs(srcElems, 0, rangeStart); + ObjArrayDecrRefs(srcElems, 0, fromIdx); } /* Ditto for trailing */ - numAfterRangeEnd = numSrcElems - (rangeEnd + 1); - /* Assert: Because numSrcElems > rangeEnd earlier */ + numAfterRangeEnd = numSrcElems - (toIdx + 1); + /* Assert: Because numSrcElems > toIdx earlier */ if (numAfterRangeEnd != 0) { /* T:listrep-3.17 */ - ObjArrayDecrRefs(srcElems, rangeEnd + 1, numAfterRangeEnd); + ObjArrayDecrRefs(srcElems, toIdx + 1, numAfterRangeEnd); } memmove(&srcRepPtr->storePtr->slots[0], &srcRepPtr->storePtr - ->slots[srcRepPtr->storePtr->firstUsed + rangeStart], + ->slots[srcRepPtr->storePtr->firstUsed + fromIdx], rangeLen * sizeof(Tcl_Obj *)); srcRepPtr->storePtr->firstUsed = 0; srcRepPtr->storePtr->numUsed = rangeLen; srcRepPtr->storePtr->flags = 0; if (srcRepPtr->spanPtr) { @@ -1571,45 +1596,69 @@ * The possible conversion of the object referenced by listPtr * to a list object. * *---------------------------------------------------------------------- */ +int +TclListObjRange(tclObjTypeInterfaceArgsListRange) +{ + int status; + Tcl_Size length; + status = TclListObjLengthM(interp, listPtr, &length); + if (status != TCL_OK) { + return status; + } + if (fromIdx == TCL_INDEX_NONE) { + fromIdx = 0; + } + if (Tcl_LengthIsFinite(length) && toIdx + 1 >= length + 1) { + toIdx = length-1; + } -Tcl_Obj * -TclListObjRange( - Tcl_Interp *interp, /* May be NULL. Used for error messages */ - Tcl_Obj *listObj, /* List object to take a range from. */ - Tcl_Size rangeStart, /* Index of first element to include. */ - Tcl_Size rangeEnd) /* Index of last element to include. */ + if (fromIdx + 1 > toIdx + 1) { + Tcl_Obj *obj; + TclNewObj(obj); + *resPtrPtr = obj; + return TCL_OK; + } + return TclObjectDispatch(listPtr, ListObjRange, list, + range, interp, listPtr, fromIdx, toIdx, resPtrPtr); +} + + +int +ListObjRange(tclObjTypeInterfaceArgsListRange) { ListRep listRep; ListRep resultRep; - int isShared; - if (TclListObjGetRep(interp, listObj, &listRep) != TCL_OK) - return NULL; + int isShared, status; + status = TclListObjGetRep(interp, listPtr, &listRep); + if (status != TCL_OK) + return status; - isShared = Tcl_IsShared(listObj); + isShared = Tcl_IsShared(listPtr); - ListRepRange(&listRep, rangeStart, rangeEnd, isShared, &resultRep); + ListRepRange(&listRep, fromIdx, toIdx, isShared, &resultRep); if (isShared) { /* T:listrep-1.10.1,2.{4.2,4.3,5.2,5.3,6.2,7.2,8.1} */ - TclNewObj(listObj); + TclNewObj(listPtr); } /* T:listrep-1.{4.3,5.1,5.2} */ - ListObjReplaceRepAndInvalidate(listObj, &resultRep); - return listObj; + ListObjReplaceRepAndInvalidate(listPtr, &resultRep); + *resPtrPtr = listPtr; + return TCL_OK; } /* *---------------------------------------------------------------------- * * TclListObjGetElement -- * * Returns a single element from the array of the elements in a list * object, without doing doing any bounds checking. Caller must ensure - * that ObjPtr of of type 'tclListType' and that index is valid for the + * that ObjPtr of of type 'tclListTypePtr' and that index is valid for the * list. * *---------------------------------------------------------------------- */ @@ -1650,30 +1699,54 @@ * The possible conversion of the object referenced by listPtr * to a list object. * *---------------------------------------------------------------------- */ - +/* + *---------------------------------------------------------------------- + * + * Tcl_ListObjGetElements -- + * + * Returns an (objc,objv) array of the elements in a list + * object. + * + * Results: + * The return value is normally TCL_OK; in this case *objcPtr is set to + * the count of list elements and *objvPtr is set to a pointer to an + * array of (*objcPtr) pointers to each list element. If listPtr does not + * refer to a list object and the object can not be converted to one, + * TCL_ERROR is returned and an error message will be left in the + * interpreter's result if interp is not NULL. + * + * The objects referenced by the returned array should be treated as + * readonly and their ref counts are _not_ incremented; the caller must + * do that if it holds on to a reference. Furthermore, the pointer and + * length returned by this function may change as soon as any function is + * called on the list object; be careful about retaining the pointer in a + * local data structure. + * + * Side effects: + * The possible conversion of the object referenced by listPtr + * to a list object. + * + *---------------------------------------------------------------------- + */ #undef Tcl_ListObjGetElements int -Tcl_ListObjGetElements( - Tcl_Interp *interp, /* Used to report errors if not NULL. */ - Tcl_Obj *objPtr, /* List object for which an element array is - * to be returned. */ - Tcl_Size *objcPtr, /* Where to store the count of objects - * referenced by objv. */ - Tcl_Obj ***objvPtr) /* Where to store the pointer to an array of - * pointers to the list's objects. */ +Tcl_ListObjGetElements(tclObjTypeInterfaceArgsListAll) +{ + return TclObjectDispatch(listPtr, ListObjInterfaceGetElements, + list, all, interp, listPtr, objcPtr, objvPtr); +} + +int +ListObjInterfaceGetElements(tclObjTypeInterfaceArgsListAll) { ListRep listRep; - if (TclObjTypeHasProc(objPtr, getElementsProc)) { - return TclObjTypeGetElements(interp, objPtr, objcPtr, objvPtr); - } - if (TclListObjGetRep(interp, objPtr, &listRep) != TCL_OK) { - return TCL_ERROR; - } + if (TclListObjGetRep(interp, listPtr, &listRep) != TCL_OK) + return TCL_ERROR; ListRepElements(&listRep, *objcPtr, *objvPtr); return TCL_OK; } /* @@ -1697,32 +1770,51 @@ * toObj's old string representation, if any, is invalidated. * *---------------------------------------------------------------------- */ int -Tcl_ListObjAppendList( - Tcl_Interp *interp, /* Used to report errors if not NULL. */ - Tcl_Obj *toObj, /* List object to append elements to. */ - Tcl_Obj *fromObj) /* List obj with elements to append. */ -{ - Tcl_Size objc; - Tcl_Obj **objv; - - if (Tcl_IsShared(toObj)) { +Tcl_ListObjAppendList(tclObjTypeInterfaceArgsListAppendList) +{ + return TclObjectDispatch(listPtr, ListObjAppendList, + list, appendlist, interp, listPtr, elemListPtr); +} + +int +ListObjAppendList(tclObjTypeInterfaceArgsListAppendList) +{ + int status; + if (Tcl_IsShared(listPtr)) { Tcl_Panic("%s called with shared object", "Tcl_ListObjAppendList"); } - if (TclListObjGetElementsM(interp, fromObj, &objc, &objv) != TCL_OK) { - return TCL_ERROR; - } - - /* - * Insert the new elements starting after the lists's last element. - * Delete zero existing elements. - */ - - return TclListObjAppendElements(interp, toObj, objc, objv); + if (TclObjectHasInterface(listPtr, list, replaceList)) { + TclObjectDispatchNoDefault(interp, status, listPtr, list, + replaceList, interp, listPtr, LIST_MAX, 0, elemListPtr); + return status; + } else { + Tcl_Size objc; + Tcl_ListObjLength(interp, elemListPtr, &objc); + if (objc == 1) { + Tcl_Obj *itemObj; + status = Tcl_ListObjIndex(interp, elemListPtr, 0, &itemObj); + if (status != TCL_OK) { + return TCL_ERROR; + } + status = Tcl_ListObjAppendElement(interp, listPtr, itemObj); + return status; + } else { + Tcl_Obj **objv; + /* + * Pull the elements to append from elemListPtr. + */ + + if (TCL_OK != TclListObjGetElementsM(interp, elemListPtr, &objc, &objv)) { + return TCL_ERROR; + } + return TclListObjAppendElements(interp, listPtr, objc, objv); + } + } } /* *------------------------------------------------------------------------ * @@ -1900,10 +1992,24 @@ * *---------------------------------------------------------------------- */ int Tcl_ListObjAppendElement( + Tcl_Interp *interp, + Tcl_Obj *listPtr, + Tcl_Obj *objPtr) +{ + if (Tcl_IsShared(listPtr)) { + Tcl_Panic("%s called with shared object", "Tcl_ListObjAppendElement"); + } + + return TclObjectDispatch(listPtr, ListObjAppendElement, + list, append, interp, listPtr, objPtr); +} + +int +ListObjAppendElement( Tcl_Interp *interp, /* Used to report errors if not NULL. */ Tcl_Obj *toObj, /* List object to append elemObj to. */ Tcl_Obj *elemObj) /* Object to append to toObj's list. */ { /* @@ -1942,37 +2048,36 @@ * *---------------------------------------------------------------------- */ int Tcl_ListObjIndex( - Tcl_Interp *interp, /* Used to report errors if not NULL. */ - Tcl_Obj *listObj, /* List object to index into. */ - Tcl_Size index, /* Index of element to return. */ - Tcl_Obj **objPtrPtr) /* The resulting Tcl_Obj* is stored here. */ + tclObjTypeInterfaceArgsListIndex +) { + return TclObjectDispatch(listPtr, ListObjIndex, + list, index, interp, listPtr, index, resPtrPtr); +} + +int +ListObjIndex(tclObjTypeInterfaceArgsListIndex) { Tcl_Obj **elemObjs; Tcl_Size numElems; /* Empty string => empty list. Avoid unnecessary shimmering */ - if (listObj->bytes == &tclEmptyString) { - *objPtrPtr = NULL; + if (listPtr->bytes == &tclEmptyString) { + *resPtrPtr = NULL; return TCL_OK; } - int hasAbstractList = TclObjTypeHasProc(listObj,indexProc) != 0; - if (hasAbstractList) { - return TclObjTypeIndex(interp, listObj, index, objPtrPtr); - } - - if (TclListObjGetElementsM(interp, listObj, &numElems, &elemObjs) + if (TclListObjGetElementsM(interp, listPtr, &numElems, &elemObjs) != TCL_OK) { return TCL_ERROR; } if ((index < 0) || (index >= numElems)) { - *objPtrPtr = NULL; + *resPtrPtr = NULL; } else { - *objPtrPtr = elemObjs[index]; + *resPtrPtr = elemObjs[index]; } return TCL_OK; } @@ -1979,13 +2084,12 @@ /* *---------------------------------------------------------------------- * * Tcl_ListObjLength -- * - * This function returns the number of elements in a list object. If the - * object is not already a list object, an attempt will be made to - * convert it to one. + * Returns the number of elements in a list object. If the object is not + * already a list object, attempts to convert it to one. * * Results: * The return value is normally TCL_OK; in this case *lenPtr will be set * to the integer count of list elements. If listPtr does not refer to a * list object and the object can not be converted to one, TCL_ERROR is @@ -1995,47 +2099,28 @@ * Side effects: * The possible conversion of the argument object to a list object. * *---------------------------------------------------------------------- */ - #undef Tcl_ListObjLength int -Tcl_ListObjLength( - Tcl_Interp *interp, /* Used to report errors if not NULL. */ - Tcl_Obj *listObj, /* List object whose #elements to return. */ - Tcl_Size *lenPtr) /* The resulting length is stored here. */ +Tcl_ListObjLength(tclObjTypeInterfaceArgsListLength) { + return TclObjectDispatch(listPtr, ListObjInterfaceLength, + list, length, interp, listPtr, lenPtr); +} + +int +ListObjInterfaceLength(tclObjTypeInterfaceArgsListLength) { ListRep listRep; - /* Empty string => empty list. Avoid unnecessary shimmering */ - if (listObj->bytes == &tclEmptyString) { - *lenPtr = 0; - return TCL_OK; - } - - if (TclObjTypeHasProc(listObj, lengthProc)) { - *lenPtr = TclObjTypeLength(listObj); - return TCL_OK; - } - - - if (TclListObjGetRep(interp, listObj, &listRep) != TCL_OK) { + if (TclListObjGetRep(interp, listPtr, &listRep) != TCL_OK) { return TCL_ERROR; } *lenPtr = ListRepLength(&listRep); return TCL_OK; } - -Tcl_Size -ListLength(Tcl_Obj *listPtr) -{ - ListRep listRep; - ListObjGetRep(listPtr, &listRep); - - return ListRepLength(&listRep); -} /* *---------------------------------------------------------------------- * * Tcl_ListObjReplace -- @@ -2071,17 +2156,61 @@ * freed. * *---------------------------------------------------------------------- */ int -Tcl_ListObjReplace( - Tcl_Interp *interp, /* Used for error reporting if not NULL. */ - Tcl_Obj *listObj, /* List object whose elements to replace. */ - Tcl_Size first, /* Index of first element to replace. */ - Tcl_Size numToDelete, /* Number of elements to replace. */ - Tcl_Size numToInsert, /* Number of objects to insert. */ - Tcl_Obj *const insertObjs[])/* Tcl objects to insert */ +Tcl_ListObjReplace(tclObjTypeInterfaceArgsListReplace) +{ + Tcl_Size length, status; + if (Tcl_IsShared(listObj)) { + Tcl_Panic("%s called with shared object", "Tcl_ListObjReplace"); + } + + if (first < 0) { + first = 0; + } + + status = Tcl_ListObjLength(interp, listObj, &length); + if (status != TCL_OK) { + return status; + } + + /* go through the process even in this case to ensure that the result is a + * cononical list + *if (length == 0 && numToInsert == 0) { + * return TCL_OK; + *} + */ + + if (first >= length) { + first = length; /* So we'll insert after last element. */ + } + + if (numToDelete < 0) { + numToDelete = 0; + } else if (first > INT_MAX - numToDelete /* Handle integer overflow */ + || length < first+numToDelete) { + numToDelete = length - first; + } + + if (numToDelete > LIST_MAX - (length - numToDelete)) { + if (interp != NULL) { + Tcl_SetObjResult(interp, Tcl_ObjPrintf( + "max length of a Tcl list (%" TCL_Z_MODIFIER + "u elements) exceeded", LIST_MAX)); + } + return TCL_ERROR; + } + + + return TclObjectDispatch(listObj, ListObjReplace, + list, replace, interp, listObj, first, numToDelete, numToInsert, insertObjs); +} + + +int +ListObjReplace(tclObjTypeInterfaceArgsListReplace) { ListRep listRep; Tcl_Size origListLen; Tcl_Size lenChange; Tcl_Size leadSegmentLen; @@ -2094,15 +2223,10 @@ if (Tcl_IsShared(listObj)) { Tcl_Panic("%s called with shared object", "Tcl_ListObjReplace"); } - if (TclObjTypeHasProc(listObj, replaceProc)) { - return TclObjTypeReplace(interp, listObj, first, - numToDelete, numToInsert, insertObjs); - } - if (TclListObjGetRep(interp, listObj, &listRep) != TCL_OK) return TCL_ERROR; /* Cannot be converted to a list */ /* Make limits sane */ origListLen = ListRepLength(&listRep); @@ -2535,17 +2659,28 @@ LISTREP_CHECK(&listRep); ListObjReplaceRepAndInvalidate(listObj, &listRep); return TCL_OK; } + + +int +ListObjStringIsEmpty(tclObjTypeInterfaceArgsStringIsEmpty) { + int status; + if (!TclHasInternalRep(listPtr, tclListTypePtr)) { + Tcl_Panic("%s called Tcl_Obj whose type is not tclListType", "listObjStringIsEmpty"); + } + status = TclCheckEmptyString(interp, listPtr, res); + return status; +} /* *---------------------------------------------------------------------- * * TclLindexList -- * - * This procedure handles the 'lindex' command when objc==3. + * Handles the 'lindex' command when objc==3. * * Results: * Returns a pointer to the object extracted, or NULL if an error * occurred. The returned object already includes one reference count for * the pointer returned. @@ -2570,48 +2705,59 @@ { Tcl_Size index; /* Index into the list. */ Tcl_Obj *indexListCopy; Tcl_Obj **indexObjs; Tcl_Size numIndexObjs; + int status; /* * Determine whether argPtr designates a list or a single index. We have * to be careful about the order of the checks to avoid repeated * shimmering; if internal rep is already a list do not shimmer it. * see TIP#22 and TIP#33 for the details. */ - if (!TclHasInternalRep(argObj, &tclListType) + if (!TclHasInternalRep(argObj, tclListTypePtr) && TclGetIntForIndexM(NULL, argObj, TCL_SIZE_MAX - 1, &index) == TCL_OK) { /* * argPtr designates a single index. */ return TclLindexFlat(interp, listObj, 1, &argObj); } /* - * Here we make a private copy of the index list argument to avoid any - * shimmering issues that might invalidate the indices array below while - * we are still using it. This is probably unnecessary. It does not appear - * that any damaging shimmering is possible, and no test has been devised - * to show any error when this private copy is not made. But it's cheap, - * and it offers some future-proofing insurance in case the TclLindexFlat - * implementation changes in some unexpected way, or some new form of - * trace or callback permits things to happen that the current - * implementation does not. + * Make a private copy of the index list argument to keep the internal + * representation of the indices array unchanged while it is in use. This + * is probably unnecessary. It does not appear that any damaging change to + * the internal representation is possible, and no test has been devised to + * show any error when this private copy is not made, But it's cheap, and + * it offers some future-proofing insurance in case the TclLindexFlat + * implementation changes in some unexpected way, or some new form of trace + * or callback permits things to happen that the current implementation + * does not. */ - indexListCopy = TclListObjCopy(NULL, argObj); - if (indexListCopy == NULL) { + indexListCopy = TclDuplicatePureObj(interp, argObj, tclListTypePtr); + if (!indexListCopy) { + /* + * The argument is neither an index nor a well-formed list. + * Report the error via TclLindexFlat. + * TODO - This is as original code. why not directly return an error? + */ + return TclLindexFlat(interp, listObj, 1, &argObj); + } + status = TclListObjGetElementsM( + interp, indexListCopy, &numIndexObjs, &indexObjs); + if (status != TCL_OK) { + Tcl_DecrRefCount(indexListCopy); /* * The argument is neither an index nor a well-formed list. * Report the error via TclLindexFlat. * TODO - This is as original code. why not directly return an error? */ return TclLindexFlat(interp, listObj, 1, &argObj); } - TclListObjGetElementsM(interp, indexListCopy, &numIndexObjs, &indexObjs); listObj = TclLindexFlat(interp, listObj, numIndexObjs, indexObjs); Tcl_DecrRefCount(indexListCopy); return listObj; } @@ -2649,34 +2795,10 @@ * represent the indices in the list. */ { int status; Tcl_Size i; - /* Handle AbstractList as special case */ - if (TclObjTypeHasProc(listObj,indexProc)) { - Tcl_Size listLen = TclObjTypeLength(listObj); - Tcl_Size index; - Tcl_Obj *elemObj = NULL; - for (i=0 ; i 0) { - // TODO: support nested lists - Tcl_Obj *e2Obj = TclLindexFlat(interp, elemObj, 1, &indexArray[i]); - Tcl_DecrRefCount(elemObj); - elemObj = e2Obj; - } - } - Tcl_IncrRefCount(elemObj); - return elemObj; - } - Tcl_IncrRefCount(listObj); for (i=0 ; i error. */ + Tcl_Obj* listItem; + if (TclIndexIsFromEnd(index) + && TclObjectHasInterface(listObj, list, indexEnd) + && Tcl_LengthIsFinite(listLen) + ) { + + TclObjectDispatchNoDefault(interp, status, listObj, + list, indexEnd, interp, listObj, index, &listItem); + if (status == TCL_OK) { + Tcl_IncrRefCount(listItem); + Tcl_DecrRefCount(listObj); + listObj = listItem; + } else { + Tcl_DecrRefCount(listObj); + return NULL; + } + } else if (TclObjectHasInterface(listObj, list, index)) { + TclObjectDispatchNoDefault(interp, status, listObj, + list, index, interp, listObj, index, &listItem); + if (status == TCL_OK) { + Tcl_IncrRefCount(listItem); + Tcl_DecrRefCount(listObj); + listObj = listItem; + } else { Tcl_DecrRefCount(listObj); return NULL; } - } - - ListObjGetElements(listObj, listLen, elemPtrs); - /* increment this reference count first before decrementing - * just in case they are the same Tcl_Obj - */ - itemObj = elemPtrs[index]; - Tcl_IncrRefCount(itemObj); - Tcl_DecrRefCount(listObj); - /* Extract the pointer to the appropriate element. */ - listObj = itemObj; + } else { + /* + * Must set the internal rep again because it may have been + * changed by TclGetIntForIndexM. See test lindex-8.4. + */ + if (!TclHasInternalRep(listObj, tclListTypePtr)) { + status = SetListFromAny(interp, listObj); + if (status != TCL_OK) { + /* The list is not a list at all => error. */ + Tcl_DecrRefCount(listObj); + return NULL; + } + } + + ListObjGetElements(listObj, listLen, elemPtrs); + /* increment this reference count first before decrementing + * just in case they are the same Tcl_Obj + */ + Tcl_IncrRefCount(elemPtrs[index]); + Tcl_DecrRefCount(listObj); + /* Extract the pointer to the appropriate element. */ + listObj = elemPtrs[index]; + } } } else { Tcl_DecrRefCount(listObj); listObj = NULL; } @@ -2772,68 +2921,59 @@ Tcl_Obj *indexArgObj, /* Index or index-list arg to 'lset'. */ Tcl_Obj *valueObj) /* Value arg to 'lset' or NULL to 'lpop'. */ { Tcl_Size indexCount = 0; /* Number of indices in the index list. */ Tcl_Obj **indices = NULL; /* Vector of indices in the index list. */ - Tcl_Obj *retValueObj; /* Pointer to the list to be returned. */ + Tcl_Obj *resPtr; /* Pointer to the list to be returned. */ Tcl_Size index; /* Current index in the list - discarded. */ Tcl_Obj *indexListCopy; /* * Determine whether the index arg designates a list or a single index. * We have to be careful about the order of the checks to avoid repeated * shimmering; see TIP #22 and #23 for details. */ - if (!TclHasInternalRep(indexArgObj, &tclListType) - && TclGetIntForIndexM(NULL, indexArgObj, TCL_SIZE_MAX - 1, &index) - == TCL_OK) { - - if (TclObjTypeHasProc(listObj, setElementProc)) { - indices = &indexArgObj; - retValueObj = - TclObjTypeSetElement(interp, listObj, 1, indices, valueObj); - if (retValueObj) Tcl_IncrRefCount(retValueObj); - } else { - /* indexArgPtr designates a single index. */ - /* T:listrep-1.{2.1,12.1,15.1,19.1},2.{2.3,9.3,10.1,13.1,16.1}, 3.{4,5,6}.3 */ - retValueObj = TclLsetFlat(interp, listObj, 1, &indexArgObj, valueObj); - } - - } else { - - indexListCopy = TclListObjCopy(NULL,indexArgObj); - if (!indexListCopy) { - /* - * indexArgPtr designates something that is neither an index nor a - * well formed list. Report the error via TclLsetFlat. - */ - retValueObj = TclLsetFlat(interp, listObj, 1, &indexArgObj, valueObj); - } else { - if (TCL_OK != TclListObjGetElementsM( - interp, indexListCopy, &indexCount, &indices)) { - Tcl_DecrRefCount(indexListCopy); - /* - * indexArgPtr designates something that is neither an index nor a - * well formed list. Report the error via TclLsetFlat. - */ - retValueObj = TclLsetFlat(interp, listObj, 1, &indexArgObj, valueObj); - } else { - - /* - * Let TclLsetFlat perform the actual lset operation. - */ - - retValueObj = TclLsetFlat(interp, listObj, indexCount, indices, valueObj); - if (indexListCopy) { - Tcl_DecrRefCount(indexListCopy); - } - } - } - } - assert (retValueObj==NULL || retValueObj->typePtr || retValueObj->bytes); - return retValueObj; + if (!TclHasInternalRep(indexArgObj, tclListTypePtr) + && TclGetIntForIndexM(NULL, indexArgObj, TCL_SIZE_MAX - 1, &index) + == TCL_OK) { + /* indexArgPtr designates a single index. */ + /* T:listrep-1.{2.1,12.1,15.1,19.1},2.{2.3,9.3,10.1,13.1,16.1}, 3.{4,5,6}.3 */ + + /* to do: have TclLsetList return a standard return value instead */ + TclLsetFlat(interp, listObj, 1, &indexArgObj, valueObj, &resPtr); + return resPtr; + } + + indexListCopy = TclDuplicatePureObj( + interp, indexArgObj, tclListTypePtr); + if (!indexListCopy) { + /* + * indexArgPtr designates something that is neither an index nor a + * well formed list. Report the error via TclLsetFlat. + */ + TclLsetFlat(interp, listObj, 1, &indexArgObj, valueObj, &resPtr); + return resPtr; + } + if (TCL_OK != TclListObjGetElementsM( + interp, indexListCopy, &indexCount, &indices)) { + Tcl_DecrRefCount(indexListCopy); + /* + * indexArgPtr designates something that is neither an index nor a + * well formed list. Report the error via TclLsetFlat. + */ + TclLsetFlat(interp, listObj, 1, &indexArgObj, valueObj, &resPtr); + return resPtr; + } + + /* + * Let TclLsetFlat perform the actual lset operation. + */ + + TclLsetFlat(interp, listObj, indexCount, indices, valueObj, &resPtr); + Tcl_DecrRefCount(indexListCopy); + return resPtr; } /* *---------------------------------------------------------------------- * @@ -2841,48 +2981,35 @@ * * Core engine of the 'lset' command. * It also handles 'lpop' when given a NULL value. * * Results: - * Returns the new value of the list variable, or NULL if an error - * occurred. The returned object includes one reference count for the - * pointer returned. + * Returns a standard Tcl value and stores a pointer to the resulting list + * value in the given address, or stores NULL if an error occurred. * * Side effects: - * On entry, the reference count of the variable value does not reflect - * any references held on the stack. The first action of this function is - * to determine whether the object is shared, and to duplicate it if it - * is. The reference count of the duplicate is incremented. At this - * point, the reference count will be 1 for either case, so that the - * object will appear to be unshared. - * - * If an error occurs, and the object has been duplicated, the reference - * count on the duplicate is decremented so that it is now 0: this - * dismisses any memory that was allocated by this function. - * - * If no error occurs, the reference count of the original object is - * incremented if the object has not been duplicated, and nothing is done - * to a reference count of the duplicate. Now the reference count of an - * unduplicated object is 2 (the returned pointer, plus the one stored in - * the variable). The reference count of a duplicate object is 1, - * reflecting that the returned pointer is the only active reference. The - * caller is expected to store the returned value back in the variable - * and decrement its reference count. (INST_STORE_* does exactly this.) + * If the initial value of the list was shared, and this function must + * modify the value, the result is a new object having a reference count + * of 0. * *---------------------------------------------------------------------- */ -Tcl_Obj * -TclLsetFlat( - Tcl_Interp *interp, /* Tcl interpreter. */ - Tcl_Obj *listObj, /* Pointer to the list being modified. */ - Tcl_Size indexCount, /* Number of index args. */ - Tcl_Obj *const indexArray[], - /* Index args. */ - Tcl_Obj *valueObj) /* Value arg to 'lset' or NULL to 'lpop'. */ +int +TclLsetFlat(tclObjTypeInterfaceArgsListSetDeep) +{ + int status; + status = TclObjectDispatch(listObj, LsetFlat, + list, setDeep, interp, listObj, indexCount, indexArray, valueObj, resPtrPtr); + return status; +} + + +int +LsetFlat(tclObjTypeInterfaceArgsListSetDeep) { Tcl_Size index, len; - int result; + int copied = 0, result; Tcl_Obj *subListObj, *retValueObj; Tcl_Obj *pendingInvalidates[10]; Tcl_Obj **pendingInvalidatesPtr = pendingInvalidates; Tcl_Size numPendingInvalidates = 0; @@ -2891,28 +3018,25 @@ * indices, [lset] is a synonym for [set]. * [lpop] does not use this but protect for NULL valueObj just in case. */ if (indexCount == 0) { - if (valueObj != NULL) { - Tcl_IncrRefCount(valueObj); - } - return valueObj; + *resPtrPtr = valueObj; + return TCL_OK; } /* - * If the list is shared, make a copy we can modify (copy-on-write). We - * use Tcl_DuplicateObj() instead of TclListObjCopy() for a few reasons: - * 1) we have not yet confirmed listObj is actually a list; 2) We make a - * verbatim copy of any existing string rep, and when we combine that with - * the delayed invalidation of string reps of modified Tcl_Obj's - * implemented below, the outcome is that any error condition that causes - * this routine to return NULL, will leave the string rep of listObj and - * all elements to be unchanged. + * If the list is shared, make a copy to modify (copy-on-write). The string + * representation and internal representation of listObj remains unchanged. */ - subListObj = Tcl_IsShared(listObj) ? Tcl_DuplicateObj(listObj) : listObj; + subListObj = Tcl_IsShared(listObj) + ? TclDuplicatePureObj(interp, listObj, tclListTypePtr) : listObj; + if (!subListObj) { + *resPtrPtr = NULL; + return TCL_ERROR; + } /* * Anchor the linked list of Tcl_Obj's whose string reps must be * invalidated if the operation succeeds. */ @@ -2986,14 +3110,13 @@ result = TCL_ERROR; break; } /* - * No error conditions. As long as we're not yet on the last index, - * determine the next sublist for the next pass through the loop, - * and take steps to make sure it is an unshared copy, as we intend - * to modify it. + * No error conditions. If this is not the last index, determine the + * next sublist for the next pass through the loop, and take steps to + * make sure it is unshared in order to modify it. */ if (--indexCount) { parentList = subListObj; if (index == elemCount) { @@ -3000,11 +3123,17 @@ TclNewObj(subListObj); } else { subListObj = elemPtrs[index]; } if (Tcl_IsShared(subListObj)) { - subListObj = Tcl_DuplicateObj(subListObj); + subListObj = TclDuplicatePureObj( + interp, subListObj, tclListTypePtr); + if (!subListObj) { + *resPtrPtr = NULL; + return TCL_ERROR; + } + copied = 1; } /* * Replace the original elemPtr[index] in parentList with a copy * we know to be unshared. This call will also deal with the @@ -3018,11 +3147,22 @@ Tcl_ListObjAppendElement(NULL, parentList, subListObj); } else { TclListObjSetElement(NULL, parentList, index, subListObj); } if (Tcl_IsShared(subListObj)) { - subListObj = Tcl_DuplicateObj(subListObj); + Tcl_Obj * newSubListObj; + newSubListObj = TclDuplicatePureObj( + interp, subListObj, tclListTypePtr); + if (copied) { + Tcl_DecrRefCount(subListObj); + } + if (newSubListObj) { + subListObj = newSubListObj; + } else { + *resPtrPtr = NULL; + return TCL_ERROR; + } TclListObjSetElement(NULL, parentList, index, subListObj); } /* * The TclListObjSetElement() calls do not spoil the string rep @@ -3086,11 +3226,12 @@ */ if (retValueObj != listObj) { Tcl_DecrRefCount(retValueObj); } - return NULL; + *resPtrPtr = NULL; + return result; } /* * Store valueObj in proper sublist and return. The -1 is to avoid a * compiler warning (not a problem because we checked that we have a @@ -3108,12 +3249,12 @@ } else { /* T:listrep-1.{12.1,15.1,19.1},2.{10,13,16}.1 */ TclListObjSetElement(NULL, subListObj, index, valueObj); TclInvalidateStringRep(subListObj); } - Tcl_IncrRefCount(retValueObj); - return retValueObj; + *resPtrPtr = retValueObj; + return TCL_OK; } /* *---------------------------------------------------------------------- * @@ -3138,18 +3279,18 @@ * ref count of the replacement object. * *---------------------------------------------------------------------- */ int -TclListObjSetElement( - Tcl_Interp *interp, /* Tcl interpreter; used for error reporting - * if not NULL. */ - Tcl_Obj *listObj, /* List object in which element should be - * stored. */ - Tcl_Size index, /* Index of element to store. */ - Tcl_Obj *valueObj) /* Tcl object to store in the designated list - * element. */ +TclListObjSetElement(tclObjTypeInterfaceArgsListSet) +{ + return TclObjectDispatch(listObj, ListObjSetElement, + list, set, interp, listObj, index, valueObj); +} + +int +ListObjSetElement(tclObjTypeInterfaceArgsListSet) { ListRep listRep; Tcl_Obj **elemPtrs; /* Pointers to elements of the list. */ Tcl_Size elemCount; /* Number of elements in the list. */ @@ -3202,11 +3343,10 @@ Tcl_DecrRefCount(elemPtrs[index]); elemPtrs[index] = valueObj; /* Internal rep may be cloned so replace */ ListObjReplaceRepAndInvalidate(listObj, &listRep); - return TCL_OK; } /* *---------------------------------------------------------------------- @@ -3301,11 +3441,65 @@ * more directly. Only do this when there's no existing string rep; if * there is, it is the string rep that's authoritative (because it could * describe duplicate keys). */ - if (!TclHasStringRep(objPtr) && TclHasInternalRep(objPtr, &tclDictType)) { + if (TclObjectHasInterface(objPtr, list, index)) { + int status; + Tcl_Size index, length, storeSize, offset; + Tcl_Obj *itemPtr, **lastElemPtr; + status = Tcl_ListObjLength(interp, objPtr, &length); + if (status != TCL_OK) { + return status; + } + storeSize = length; + if (ListRepInitAttempt( + interp, length > 8 ? storeSize : 8, NULL, &listRep) + != TCL_OK) { + return TCL_ERROR; + } + elemPtrs = listRep.storePtr->slots; + lastElemPtr = elemPtrs + listRep.storePtr->numAllocated - 1; + index = 0; + Tcl_IncrRefCount(objPtr); + while (index < length || length < 0) { + TclObjectDispatchNoDefault(interp, status, objPtr, list, + index, interp, objPtr, index, &itemPtr); + if (status != TCL_OK) { + status = Tcl_ListObjLength(interp, objPtr, &length); + if (status != TCL_OK) { + TclUndoRefCount(objPtr); + return status; + } + continue; + } + if (elemPtrs == lastElemPtr) { + ListStore *newStorePtr; + storeSize += storeSize / 2; + offset = elemPtrs - listRep.storePtr->slots; + newStorePtr = ListStoreReallocate(listRep.storePtr, storeSize); + if (newStorePtr == NULL) { + TclUndoRefCount(objPtr); + return MemoryAllocationError(interp, LIST_SIZE(storeSize)); + } + elemPtrs = newStorePtr->slots + offset; + listRep.storePtr = newStorePtr; + lastElemPtr = elemPtrs + listRep.storePtr->numAllocated - 1; + } + listRep.storePtr->numUsed++; + if (itemPtr == objPtr) { + *elemPtrs = Tcl_DuplicateObj(itemPtr); + TclBounceRefCount(itemPtr); + } else { + *elemPtrs = itemPtr; + } + Tcl_IncrRefCount(*elemPtrs); + elemPtrs++; + index++; + } + TclUndoRefCount(objPtr); + } else if (!TclHasStringRep(objPtr) && TclHasInternalRep(objPtr, tclDictTypePtr)) { Tcl_Obj *keyPtr, *valuePtr; Tcl_DictSearch search; int done; Tcl_Size size; @@ -3341,36 +3535,10 @@ *elemPtrs++ = valuePtr; Tcl_IncrRefCount(keyPtr); Tcl_IncrRefCount(valuePtr); Tcl_DictObjNext(&search, &keyPtr, &valuePtr, &done); } - } else if (TclObjTypeHasProc(objPtr,indexProc)) { - Tcl_Size elemCount, i; - - elemCount = TclObjTypeLength(objPtr); - - if (ListRepInitAttempt(interp, elemCount, NULL, &listRep) != TCL_OK) { - return TCL_ERROR; - } - - LIST_ASSERT(listRep.spanPtr == NULL); /* Guard against future changes */ - LIST_ASSERT(listRep.storePtr->firstUsed == 0); - - elemPtrs = listRep.storePtr->slots; - - /* Each iteration, store a list element */ - for (i = 0; i < elemCount; i++) { - if (TclObjTypeIndex(interp, objPtr, i, elemPtrs) != TCL_OK) { - return TCL_ERROR; - } - Tcl_IncrRefCount(*elemPtrs++);/* Since list now holds ref to it. */ - } - - LIST_ASSERT((Tcl_Size)(elemPtrs - listRep.storePtr->slots) == elemCount); - - listRep.storePtr->numUsed = elemCount; - } else { Tcl_Size estCount, length; const char *limit, *nextElem = Tcl_GetStringFromObj(objPtr, &length); /* @@ -3448,11 +3616,11 @@ */ ListRepIncrRefs(&listRep); TclFreeInternalRep(objPtr); objPtr->internalRep.twoPtrValue.ptr1 = listRep.storePtr; objPtr->internalRep.twoPtrValue.ptr2 = listRep.spanPtr; - objPtr->typePtr = &tclListType; + objPtr->typePtr = tclListTypePtr; return TCL_OK; } /* Index: generic/tclLiteral.c ================================================================== --- generic/tclLiteral.c +++ generic/tclLiteral.c @@ -1,19 +1,30 @@ +/* + * Copyright © 1997-1998 Sun Microsystems, Inc. + * Copyright © 2004 Kevin B. Kenny. All rights reserved. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclLiteral.c -- * * Implementation of the global and ByteCode-local literal tables used to * manage the Tcl objects created for literal values during compilation * of Tcl scripts. This implementation borrows heavily from the more * general hashtable implementation of Tcl hash tables that appears in * tclHash.c. - * - * Copyright © 1997-1998 Sun Microsystems, Inc. - * Copyright © 2004 Kevin B. Kenny. All rights reserved. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" #include "tclCompile.h" Index: generic/tclLoad.c ================================================================== --- generic/tclLoad.c +++ generic/tclLoad.c @@ -1,17 +1,28 @@ /* - * tclLoad.c -- - * - * This file provides the generic portion (those that are the same on all - * platforms) of Tcl's dynamic loading facilities. - * * Copyright © 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclLoad.c -- + * + * This file provides the generic portion (those that are the same on all + * platforms) of Tcl's dynamic loading facilities. + */ + #include "tclInt.h" /* * The following structure describes a library that has been loaded either Index: generic/tclLoadNone.c ================================================================== --- generic/tclLoadNone.c +++ generic/tclLoadNone.c @@ -1,17 +1,28 @@ /* - * tclLoadNone.c -- - * - * This procedure provides a version of the TclpDlopen for use in - * systems that don't support dynamic loading; it just returns an error. - * * Copyright © 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclLoadNone.c -- + * + * This procedure provides a version of the TclpDlopen for use in + * systems that don't support dynamic loading; it just returns an error. + */ + #include "tclInt.h" /* *---------------------------------------------------------------------- * Index: generic/tclMain.c ================================================================== --- generic/tclMain.c +++ generic/tclMain.c @@ -1,21 +1,32 @@ +/* + * Copyright © 1988-1994 The Regents of the University of California. + * Copyright © 1994-1997 Sun Microsystems, Inc. + * Copyright © 2000 Ajuba Solutions. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclMain.c -- * * Main program for Tcl shells and other Tcl-based applications. * This file contains a generic main program for Tcl shells and other * Tcl-based applications. It can be used as-is for many applications, * just by supplying a different appInitProc function for each specific * application. Or, it can be used as a template for creating new main * programs for Tcl applications. - * - * Copyright © 1988-1994 The Regents of the University of California. - * Copyright © 1994-1997 Sun Microsystems, Inc. - * Copyright © 2000 Ajuba Solutions. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ /* * On Windows, this file needs to be compiled twice, once with UNICODE and * _UNICODE defined. This way both Tcl_Main and Tcl_MainExW can be Index: generic/tclNamesp.c ================================================================== --- generic/tclNamesp.c +++ generic/tclNamesp.c @@ -1,14 +1,6 @@ /* - * tclNamesp.c -- - * - * Contains support for namespaces, which provide a separate context of - * commands and global variables. The global :: namespace is the - * traditional Tcl "global" scope. Other namespaces are created as - * children of the global namespace. These other namespaces contain - * special-purpose commands and variables for packages. - * * Copyright © 1993-1997 Lucent Technologies. * Copyright © 1997 Sun Microsystems, Inc. * Copyright © 1998-1999 Scriptics Corporation. * Copyright © 2002-2005 Donal K. Fellows. * Copyright © 2006 Neil Madden. @@ -21,10 +13,29 @@ * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclNamesp.c -- + * + * Contains support for namespaces, which provide a separate context of + * commands and global variables. The global :: namespace is the + * traditional Tcl "global" scope. Other namespaces are created as + * children of the global namespace. These other namespaces contain + * special-purpose commands and variables for packages. + */ + #include "tclInt.h" #include "tclCompile.h" /* for TclLogCommandInfo visibility */ #include /* @@ -129,11 +140,11 @@ "nsName", /* the type's name */ FreeNsNameInternalRep, /* freeIntRepProc */ DupNsNameInternalRep, /* dupIntRepProc */ NULL, /* updateStringProc */ SetNsNameFromAny, /* setFromAnyProc */ - TCL_OBJTYPE_V0 + 0 }; #define NsNameSetInternalRep(objPtr, nnPtr) \ do { \ Tcl_ObjInternalRep ir; \ @@ -393,11 +404,11 @@ if (framePtr->varTablePtr != NULL) { TclDeleteVars(iPtr, framePtr->varTablePtr); Tcl_Free(framePtr->varTablePtr); framePtr->varTablePtr = NULL; } - if (framePtr->numCompiledLocals > 0) { + if (framePtr->numCompiledLocals + 1 > 1) { TclDeleteCompiledLocalVars(iPtr, framePtr); if (framePtr->localCachePtr->refCount-- <= 1) { TclFreeLocalCache(interp, framePtr->localCachePtr); } framePtr->localCachePtr = NULL; @@ -3920,10 +3931,11 @@ int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { Tcl_Command cmd, origCmd; Tcl_Obj *resultPtr; + int isEmpty, status; if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "name"); return TCL_ERROR; } @@ -3936,11 +3948,15 @@ if (origCmd == NULL) { origCmd = cmd; } TclNewObj(resultPtr); Tcl_GetCommandFullName(interp, origCmd, resultPtr); - if (TclCheckEmptyString(resultPtr) == TCL_EMPTYSTRING_YES ) { + status = TclCheckEmptyString(interp ,resultPtr, &isEmpty); + if (status) { + return TCL_ERROR; + } + if (isEmpty == TCL_EMPTYSTRING_YES ) { Tcl_DecrRefCount(resultPtr); namespaceOriginError: Tcl_SetObjResult(interp, Tcl_ObjPrintf( "invalid command name \"%s\"", TclGetString(objv[1]))); Tcl_SetErrorCode(interp, "TCL", "LOOKUP", "COMMAND", Index: generic/tclNotify.c ================================================================== --- generic/tclNotify.c +++ generic/tclNotify.c @@ -1,23 +1,34 @@ /* - * tclNotify.c -- - * - * This file implements the generic portion of the Tcl notifier. The - * notifier is lowest-level part of the event system. It manages an event - * queue that holds Tcl_Event structures. The platform specific portion - * of the notifier is defined in the tcl*Notify.c files in each platform - * directory. - * * Copyright © 1995-1997 Sun Microsystems, Inc. * Copyright © 1998 Scriptics Corporation. * Copyright © 2003 Kevin B. Kenny. All rights reserved. * Copyright © 2021 Donal K. Fellows * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclNotify.c -- + * + * This file implements the generic portion of the Tcl notifier. The + * notifier is lowest-level part of the event system. It manages an event + * queue that holds Tcl_Event structures. The platform specific portion + * of the notifier is defined in the tcl*Notify.c files in each platform + * directory. + */ + #include "tclInt.h" /* * Notifier hooks that are checked in the public wrappers for the default * notifier functions (for overriding via Tcl_SetNotifier). Index: generic/tclOO.c ================================================================== --- generic/tclOO.c +++ generic/tclOO.c @@ -1,17 +1,28 @@ /* - * tclOO.c -- - * - * This file contains the object-system core (NB: not Tcl_Obj, but ::oo) - * * Copyright © 2005-2019 Donal K. Fellows * Copyright © 2017 Nathan Coulter * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclOO.c -- + * + * This file contains the object-system core (NB: not Tcl_Obj, but ::oo) + */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "tclInt.h" #include "tclOOInt.h" @@ -136,13 +147,10 @@ * Scripted parts of TclOO. First, the main script (cannot be outside this * file). */ static const char initScript[] = -#ifndef TCL_NO_DEPRECATED -"package ifneeded TclOO " TCLOO_PATCHLEVEL " {# Already present, OK?};" -#endif "package ifneeded tcl::oo " TCLOO_PATCHLEVEL " {# Already present, OK?};" "namespace eval ::oo { variable version " TCLOO_VERSION " };" "namespace eval ::oo { variable patchlevel " TCLOO_PATCHLEVEL " };"; /* "tcl_findLibrary tcloo $oo::version $oo::version" */ /* " tcloo.tcl OO_LIBRARY oo::library;"; */ @@ -258,14 +266,10 @@ if (Tcl_EvalEx(interp, initScript, TCL_INDEX_NONE, 0) != TCL_OK) { return TCL_ERROR; } -#ifndef TCL_NO_DEPRECATED - Tcl_PkgProvideEx(interp, "TclOO", TCLOO_PATCHLEVEL, - &tclOOStubs); -#endif return Tcl_PkgProvideEx(interp, "tcl::oo", TCLOO_PATCHLEVEL, &tclOOStubs); } /* Index: generic/tclOO.decls ================================================================== --- generic/tclOO.decls +++ generic/tclOO.decls @@ -1,16 +1,24 @@ +# Copyright © 2008-2013 Donal K. Fellows. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # tclOO.decls -- # # This file contains the declarations for all supported public functions # that are exported by the TclOO package that is embedded within the Tcl # library via the stubs table. This file is used to generate the # tclOODecls.h, tclOOIntDecls.h and tclOOStubInit.c files. # -# Copyright © 2008-2013 Donal K. Fellows. -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. library tclOO ###################################################################### # Public API, exposed for general users of TclOO. Index: generic/tclOO.h ================================================================== --- generic/tclOO.h +++ generic/tclOO.h @@ -1,17 +1,28 @@ /* - * tclOO.h -- - * - * This file contains the public API definitions and some of the function - * declarations for the object-system (NB: not Tcl_Obj, but ::oo). - * * Copyright (c) 2006-2010 by Donal K. Fellows * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclOO.h -- + * + * This file contains the public API definitions and some of the function + * declarations for the object-system (NB: not Tcl_Obj, but ::oo). + */ + #ifndef TCLOO_H_INCLUDED #define TCLOO_H_INCLUDED /* * Be careful when it comes to versioning; need to make sure that the @@ -60,16 +71,12 @@ * and to allow the attachment of arbitrary data to objects and classes. */ typedef int (Tcl_MethodCallProc)(void *clientData, Tcl_Interp *interp, Tcl_ObjectContext objectContext, int objc, Tcl_Obj *const *objv); -#if TCL_MAJOR_VERSION > 8 typedef int (Tcl_MethodCallProc2)(void *clientData, Tcl_Interp *interp, Tcl_ObjectContext objectContext, Tcl_Size objc, Tcl_Obj *const *objv); -#else -#define Tcl_MethodCallProc2 Tcl_MethodCallProc -#endif typedef void (Tcl_MethodDeleteProc)(void *clientData); typedef int (Tcl_CloneProc)(Tcl_Interp *interp, void *oldClientData, void **newClientData); typedef void (Tcl_ObjectMetadataDeleteProc)(void *clientData); typedef int (Tcl_ObjectMapMethodNameProc)(Tcl_Interp *interp, @@ -96,11 +103,10 @@ Tcl_CloneProc *cloneProc; /* How to copy this method's type-specific * data, or NULL if the type-specific data can * be copied directly. */ } Tcl_MethodType; -#if TCL_MAJOR_VERSION > 8 typedef struct { int version; /* Structure version field. Always to be equal * to TCL_OO_METHOD_VERSION_2 in * declarations. */ const char *name; /* Name of this type of method, mostly for @@ -113,13 +119,10 @@ * does not need deleting. */ Tcl_CloneProc *cloneProc; /* How to copy this method's type-specific * data, or NULL if the type-specific data can * be copied directly. */ } Tcl_MethodType2; -#else -#define Tcl_MethodType2 Tcl_MethodType; -#endif /* * The correct value for the version field of the Tcl_MethodType structure. * This allows new versions of the structure to be introduced without breaking * binary compatibility. Index: generic/tclOOBasic.c ================================================================== --- generic/tclOOBasic.c +++ generic/tclOOBasic.c @@ -1,17 +1,28 @@ /* - * tclOOBasic.c -- - * - * This file contains implementations of the "simple" commands and - * methods from the object-system core. - * * Copyright © 2005-2013 Donal K. Fellows * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclOOBasic.c -- + * + * This file contains implementations of the "simple" commands and + * methods from the object-system core. + */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "tclInt.h" #include "tclOOInt.h" Index: generic/tclOOCall.c ================================================================== --- generic/tclOOCall.c +++ generic/tclOOCall.c @@ -1,16 +1,27 @@ +/* + * Copyright © 2005-2019 Donal K. Fellows + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclOOCall.c -- * * This file contains the method call chain management code for the * object-system core. It also contains everything else that does * inheritance hierarchy traversal. - * - * Copyright © 2005-2019 Donal K. Fellows - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -151,11 +162,11 @@ "TclOO method name", FreeMethodNameRep, DupMethodNameRep, NULL, NULL, - TCL_OBJTYPE_V0 + 0 }; /* * ---------------------------------------------------------------------- Index: generic/tclOODecls.h ================================================================== --- generic/tclOODecls.h +++ generic/tclOODecls.h @@ -1,8 +1,18 @@ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * This file is (mostly) automatically generated from tclOO.decls. */ + #ifndef _TCLOODECLS #define _TCLOODECLS #ifndef TCLAPI @@ -268,16 +278,6 @@ #endif /* defined(USE_TCLOO_STUBS) */ /* !END!: Do not edit above this line. */ -#if TCL_MAJOR_VERSION < 9 - /* TIP #630 for 8.7 */ -# undef Tcl_MethodIsType2 -# define Tcl_MethodIsType2 Tcl_MethodIsType -# undef Tcl_NewInstanceMethod2 -# define Tcl_NewInstanceMethod2 Tcl_NewInstanceMethod -# undef Tcl_NewMethod2 -# define Tcl_NewMethod2 Tcl_NewMethod -#endif - #endif /* _TCLOODECLS */ Index: generic/tclOODefineCmds.c ================================================================== --- generic/tclOODefineCmds.c +++ generic/tclOODefineCmds.c @@ -1,17 +1,28 @@ /* - * tclOODefineCmds.c -- - * - * This file contains the implementation of the ::oo::define command, - * part of the object-system core (NB: not Tcl_Obj, but ::oo). - * * Copyright © 2006-2019 Donal K. Fellows * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclOODefineCmds.c -- + * + * This file contains the implementation of the ::oo::define command, + * part of the object-system core (NB: not Tcl_Obj, but ::oo). + */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "tclInt.h" #include "tclOOInt.h" Index: generic/tclOOInfo.c ================================================================== --- generic/tclOOInfo.c +++ generic/tclOOInfo.c @@ -1,17 +1,28 @@ /* - * tclOODefineCmds.c -- - * - * This file contains the implementation of the ::oo-related [info] - * subcommands. - * * Copyright © 2006-2019 Donal K. Fellows * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclOODefineCmds.c -- + * + * This file contains the implementation of the ::oo-related [info] + * subcommands. + */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "tclInt.h" #include "tclOOInt.h" Index: generic/tclOOInt.h ================================================================== --- generic/tclOOInt.h +++ generic/tclOOInt.h @@ -1,17 +1,28 @@ /* - * tclOOInt.h -- - * - * This file contains the structure definitions and some of the function - * declarations for the object-system (NB: not Tcl_Obj, but ::oo). - * * Copyright (c) 2006-2012 by Donal K. Fellows * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclOOInt.h -- + * + * This file contains the structure definitions and some of the function + * declarations for the object-system (NB: not Tcl_Obj, but ::oo). + */ + #ifndef TCL_OO_INTERNAL_H #define TCL_OO_INTERNAL_H 1 #include "tclInt.h" #include "tclOO.h" Index: generic/tclOOIntDecls.h ================================================================== --- generic/tclOOIntDecls.h +++ generic/tclOOIntDecls.h @@ -1,8 +1,18 @@ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * This file is (mostly) automatically generated from tclOO.decls. */ + #ifndef _TCLOOINTDECLS #define _TCLOOINTDECLS /* !BEGIN!: Do not edit below this line. */ Index: generic/tclOOMethod.c ================================================================== --- generic/tclOOMethod.c +++ generic/tclOOMethod.c @@ -1,16 +1,27 @@ /* - * tclOOMethod.c -- - * - * This file contains code to create and manage methods. - * * Copyright © 2005-2011 Donal K. Fellows * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclOOMethod.c -- + * + * This file contains code to create and manage methods. + */ + #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "tclInt.h" #include "tclOOInt.h" Index: generic/tclOOScript.h ================================================================== --- generic/tclOOScript.h +++ generic/tclOOScript.h @@ -1,20 +1,31 @@ /* - * tclOOScript.h -- - * - * This file contains support scripts for TclOO. They are defined here so - * that the code can be definitely run even in safe interpreters; TclOO's - * core setup is safe. - * * Copyright (c) 2012-2018 Donal K. Fellows * Copyright (c) 2013 Andreas Kupries * Copyright (c) 2017 Gerald Lester * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclOOScript.h -- + * + * This file contains support scripts for TclOO. They are defined here so + * that the code can be definitely run even in safe interpreters; TclOO's + * core setup is safe. + */ + #ifndef TCL_OO_SCRIPT_H #define TCL_OO_SCRIPT_H /* * The scripted part of the definitions of TclOO. Index: generic/tclOOStubInit.c ================================================================== --- generic/tclOOStubInit.c +++ generic/tclOOStubInit.c @@ -1,5 +1,14 @@ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * This file is (mostly) automatically generated from tclOO.decls. * It is compiled and linked in with the tclOO package proper. */ Index: generic/tclOOStubLib.c ================================================================== --- generic/tclOOStubLib.c +++ generic/tclOOStubLib.c @@ -1,5 +1,14 @@ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * ORIGINAL SOURCE: tk/generic/tkStubLib.c, version 1.9 2004/03/17 */ #include "tclOOInt.h" Index: generic/tclObj.c ================================================================== --- generic/tclObj.c +++ generic/tclObj.c @@ -1,33 +1,50 @@ /* - * tclObj.c -- - * - * This file contains Tcl object-related functions that are used by many - * Tcl commands. - * * Copyright © 1995-1997 Sun Microsystems, Inc. * Copyright © 1999 Scriptics Corporation. * Copyright © 2001 ActiveState Corporation. * Copyright © 2005 Kevin B. Kenny. All rights reserved. * Copyright © 2007 Daniel A. Steffen + * Copyright © 2021 Nathan Coulter. All rights reserved. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclObj.c -- + * + * This file contains Tcl object-related functions that are used by many + * Tcl commands. + */ + #include "tclInt.h" #include "tclTomMath.h" #include #include + /* * Table of all object types. */ static Tcl_HashTable typeTable; static int typeTableInitialized = 0; /* 0 means not yet initialized. */ TCL_DECLARE_MUTEX(tableMutex) + +TclObjectTypeType TclObjectTypeType0 = { + (int *)1 +}; /* * Head of the list of free Tcl_Obj structs we maintain. */ @@ -200,10 +217,13 @@ static void FreeBignum(Tcl_Obj *objPtr); static void DupBignum(Tcl_Obj *objPtr, Tcl_Obj *copyPtr); static void UpdateStringOfBignum(Tcl_Obj *objPtr); static int GetBignumFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, int copy, mp_int *bignumValue); +static int SetDuplicatePureObj(Tcl_Interp *interp, + Tcl_Obj *dupPtr, Tcl_Obj *objPtr, + const Tcl_ObjType *typePtr); /* * Prototypes for the array hash key methods. */ @@ -215,50 +235,93 @@ static void DupCmdNameInternalRep(Tcl_Obj *objPtr, Tcl_Obj *copyPtr); static void FreeCmdNameInternalRep(Tcl_Obj *objPtr); static int SetCmdNameFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr); + +static int ScalarObjIndex(tclObjTypeInterfaceArgsListIndex); +static int ScalarObjInterfaceListLength(tclObjTypeInterfaceArgsListLength); +static int ScalarObjRange(tclObjTypeInterfaceArgsListRange); + +ObjInterface tclScalarInterface = { + 1, + {}, + { + NULL, + NULL, /* append */ + NULL, /* appendList */ + NULL, /* contains */ + ScalarObjIndex, /* index */ + NULL, /* indexEnd */ + NULL, /* isSorted */ + ScalarObjInterfaceListLength, /* length */ + ScalarObjRange, /* range */ + NULL, /* rangeEnd */ + NULL, /* replace */ + NULL, /* replaceList */ + NULL, /* reverse */ + NULL, /* set */ + NULL, /* setList */ + }, +}; + /* * The structures below defines the Tcl object types defined in this file by * means of functions that can be invoked by generic object code. See also * tclStringObj.c, tclListObj.c, tclByteCode.c for other type manager * implementations. */ -const Tcl_ObjType tclBooleanType= { +const ObjectType tclBooleanObjType= { "boolean", /* name */ NULL, /* freeIntRepProc */ NULL, /* dupIntRepProc */ NULL, /* updateStringProc */ - TclSetBooleanFromAny, /* setFromAnyProc */ - TCL_OBJTYPE_V1(TclLengthOne) + TclSetBooleanFromAny, /* setFromAnyProc */ + 2, + (Tcl_ObjInterface *)&tclScalarInterface }; -const Tcl_ObjType tclDoubleType= { + + +MODULE_SCOPE const Tcl_ObjType *tclBooleanType = (Tcl_ObjType *)&tclBooleanObjType; + +const ObjectType tclDoubleObjType= { "double", /* name */ NULL, /* freeIntRepProc */ NULL, /* dupIntRepProc */ UpdateStringOfDouble, /* updateStringProc */ SetDoubleFromAny, /* setFromAnyProc */ - TCL_OBJTYPE_V1(TclLengthOne) + 2, + (Tcl_ObjInterface *)&tclScalarInterface }; -const Tcl_ObjType tclIntType = { + +MODULE_SCOPE const Tcl_ObjType *tclDoubleType = (Tcl_ObjType *)&tclDoubleObjType; + +const ObjectType tclIntObjType = { "int", /* name */ NULL, /* freeIntRepProc */ NULL, /* dupIntRepProc */ UpdateStringOfInt, /* updateStringProc */ SetIntFromAny, /* setFromAnyProc */ - TCL_OBJTYPE_V1(TclLengthOne) + 2, + (Tcl_ObjInterface *)&tclScalarInterface }; -const Tcl_ObjType tclBignumType = { + +MODULE_SCOPE const Tcl_ObjType *tclIntType = (Tcl_ObjType *)&tclIntObjType; + +const ObjectType tclBignumObjType = { "bignum", /* name */ FreeBignum, /* freeIntRepProc */ DupBignum, /* dupIntRepProc */ UpdateStringOfBignum, /* updateStringProc */ NULL, /* setFromAnyProc */ - TCL_OBJTYPE_V1(TclLengthOne) + 2, + (Tcl_ObjInterface *)&tclScalarInterface }; + +MODULE_SCOPE const Tcl_ObjType *tclBignumType = (Tcl_ObjType *)&tclBignumObjType; /* * The structure below defines the Tcl obj hash key type. */ @@ -298,11 +361,11 @@ "cmdName", /* name */ FreeCmdNameInternalRep, /* freeIntRepProc */ DupCmdNameInternalRep, /* dupIntRepProc */ NULL, /* updateStringProc */ SetCmdNameFromAny, /* setFromAnyProc */ - TCL_OBJTYPE_V0 + 0 }; /* * Structure containing a cached pointer to a command that is the result of * resolving the command's name in some namespace. It is the internal @@ -375,14 +438,14 @@ Tcl_MutexLock(&tableMutex); typeTableInitialized = 1; Tcl_InitHashTable(&typeTable, TCL_STRING_KEYS); Tcl_MutexUnlock(&tableMutex); - Tcl_RegisterObjType(&tclDoubleType); + Tcl_RegisterObjType(tclDoubleType); Tcl_RegisterObjType(&tclStringType); - Tcl_RegisterObjType(&tclListType); - Tcl_RegisterObjType(&tclDictType); + Tcl_RegisterObjType(tclListTypePtr); + Tcl_RegisterObjType(tclDictTypePtr); Tcl_RegisterObjType(&tclByteCodeType); Tcl_RegisterObjType(&tclCmdNameType); Tcl_RegisterObjType(&tclRegexpType); Tcl_RegisterObjType(&tclProcBodyType); @@ -783,10 +846,23 @@ } Tcl_DeleteHashTable(tsdPtr->lineCLPtr); Tcl_Free(tsdPtr->lineCLPtr); tsdPtr->lineCLPtr = NULL; } + +ObjInterface * +TclObjInterface(Tcl_Obj *objPtr) { + ObjectType *otPtr = (ObjectType *)objPtr->typePtr; + if (!otPtr) { + return NULL; + } + if (otPtr->version < 2) { + return NULL; + } + ObjInterface *ifPtr = (ObjInterface *)otPtr->ifPtr; + return ifPtr; +} /* *-------------------------------------------------------------- * * Tcl_RegisterObjType -- @@ -802,10 +878,29 @@ * type with the same name as in typePtr, it is replaced with the new * type. * *-------------------------------------------------------------- */ + +int TclObjTypeVersion ( + const Tcl_ObjType *typePtr) +{ + ObjectType *otPtr = (ObjectType *)typePtr; + if ((void *)otPtr->name == (void *)&TclObjectTypeType0) { + return otPtr->version; + } + return 1; +} + + +const char *TclObjTypeName( + const Tcl_ObjType *typePtr) +{ + ObjectType *otPtr = (ObjectType *)typePtr; + return otPtr->name; +} + void Tcl_RegisterObjType( const Tcl_ObjType *typePtr) /* Information about object type; storage must * be statically allocated (must live @@ -812,12 +907,13 @@ * forever). */ { int isNew; Tcl_MutexLock(&tableMutex); + const char *name = TclObjTypeName(typePtr); Tcl_SetHashValue( - Tcl_CreateHashEntry(&typeTable, typePtr->name, &isNew), typePtr); + Tcl_CreateHashEntry(&typeTable, name, &isNew), typePtr); Tcl_MutexUnlock(&tableMutex); } /* *---------------------------------------------------------------------- @@ -939,11 +1035,11 @@ if (objPtr->typePtr == typePtr) { return TCL_OK; } /* - * Use the target type's Tcl_SetFromAnyProc to set "objPtr"s internal form + * Use the target type's setFromAnyProc to set "objPtr"s internal form * as appropriate for the target type. This frees the old internal * representation. */ if (typePtr->setFromAnyProc == NULL) { @@ -1514,10 +1610,18 @@ * * Tcl_DuplicateObj -- * * Create and return a new object that is a duplicate of the argument * object. + * + * TclDuplicatePureObj -- + * Like Tcl_DuplicateObj, except that it converts the duplicate to the + * specifid typ, does not duplicate the 'bytes' + * field unless it is necessary, i.e. the duplicated Tcl_Obj provides no + * updateStringProc. This can avoid an expensive memory allocation since + * the data in the 'bytes' field of each Tcl_Obj must reside in allocated + * memory. * * Results: * The return value is a pointer to a newly created Tcl_Obj. This object * has reference count 0 and the same type, if any, as the source object * objPtr. Also: @@ -1565,10 +1669,117 @@ TclNewObj(dupPtr); SetDuplicateObj(dupPtr, objPtr); return dupPtr; } + + +/* + *---------------------------------------------------------------------- + * + * TclDuplicatePureObj -- + * + * Duplicates a Tcl_Obj and converts the internal representation of the + * duplicate to the given type, changing neither the 'bytes' field + * nor the internal representation of the original object, and without + * duplicating the bytes field unless necessary, i.e. unless the + * duplicate provides no updateStringProc after conversion. This can + * avoid an expensive memory allocation since the data in the 'bytes' + * field of each Tcl_Obj must reside in allocated memory. + * + * Results: + * A pointer to a newly-created Tcl_Obj or NULL if there was an error. + * This object has reference count 0. Also: + * + *---------------------------------------------------------------------- + */ +int SetDuplicatePureObj( + Tcl_Interp *interp, + Tcl_Obj *dupPtr, + Tcl_Obj *objPtr, + const Tcl_ObjType *typePtr) +{ + char *bytes = objPtr->bytes; + int status = TCL_OK; + const Tcl_ObjType *useTypePtr = + objPtr->typePtr ? objPtr->typePtr : typePtr; + + TclInvalidateStringRep(dupPtr); + assert(dupPtr->typePtr == NULL); + + if (objPtr->typePtr && objPtr->typePtr->dupIntRepProc) { + objPtr->typePtr->dupIntRepProc(objPtr, dupPtr); + } else { + dupPtr->internalRep = objPtr->internalRep; + dupPtr->typePtr = objPtr->typePtr; + } + + if (typePtr != NULL && dupPtr->typePtr != useTypePtr) { + if (bytes) { + dupPtr->bytes = bytes; + dupPtr->length = objPtr->length; + } + /* borrow bytes from original object */ + status = Tcl_ConvertToType(interp, dupPtr, useTypePtr); + if (bytes) { + dupPtr->bytes = NULL; + dupPtr->length = 0; + } + if (status != TCL_OK) { + return status; + } + } + + /* tclStringType is treated as a special case because a Tcl_Obj having this + * type can not always update the string representation. This happens, for + * example, when Tcl_GetCharLength() converts the internal representation + * to tclStringType in order to store the number of characters, but does + * not store enough information to generate the string representation. + * + * Perhaps in the future this can be remedied and this special treatment + * removed. + */ + + + if (bytes && (dupPtr->typePtr == NULL + || dupPtr->typePtr->updateStringProc == NULL + || useTypePtr == &tclStringType + ) + ) { + if (!TclAttemptInitStringRep(dupPtr, bytes, objPtr->length)) { + if (interp) { + Tcl_SetObjResult(interp, Tcl_NewStringObj( + "insufficient memory to initialize string", -1)); + Tcl_SetErrorCode(interp, "TCL", "MEMORY", NULL); + } + status = TCL_ERROR; + } + } + return status; +} + +Tcl_Obj * +TclDuplicatePureObj( + Tcl_Interp *interp, + Tcl_Obj *objPtr, + const Tcl_ObjType *typePtr +) /* The object to duplicate. */ +{ + int status; + Tcl_Obj *dupPtr; + + TclNewObj(dupPtr); + status = SetDuplicatePureObj(interp, dupPtr, objPtr, typePtr); + if (status == TCL_OK) { + return dupPtr; + } else { + Tcl_DecrRefCount(dupPtr); + return NULL; + } +} + + void TclSetDuplicateObj( Tcl_Obj *dupPtr, Tcl_Obj *objPtr) @@ -1657,56 +1868,10 @@ * representation from the internal representation. * *---------------------------------------------------------------------- */ -#if !defined(TCL_NO_DEPRECATED) -char * -TclGetStringFromObj( - Tcl_Obj *objPtr, /* Object whose string rep byte pointer should - * be returned. */ - void *lengthPtr) /* If non-NULL, the location where the string - * rep's byte array length should * be stored. - * If NULL, no length is stored. */ -{ - if (objPtr->bytes == NULL) { - /* - * Note we do not check for objPtr->typePtr == NULL. An invariant - * of a properly maintained Tcl_Obj is that at least one of - * objPtr->bytes and objPtr->typePtr must not be NULL. If broken - * extensions fail to maintain that invariant, we can crash here. - */ - - if (objPtr->typePtr->updateStringProc == NULL) { - /* - * Those Tcl_ObjTypes which choose not to define an - * updateStringProc must be written in such a way that - * (objPtr->bytes) never becomes NULL. - */ - Tcl_Panic("UpdateStringProc should not be invoked for type %s", - objPtr->typePtr->name); - } - objPtr->typePtr->updateStringProc(objPtr); - if (objPtr->bytes == NULL || objPtr->length == TCL_INDEX_NONE - || objPtr->bytes[objPtr->length] != '\0') { - Tcl_Panic("UpdateStringProc for type '%s' " - "failed to create a valid string rep", - objPtr->typePtr->name); - } - } - if (lengthPtr != NULL) { - if (objPtr->length > INT_MAX) { - Tcl_Panic("Tcl_GetStringFromObj with 'int' lengthPtr" - " cannot handle such long strings. Please use 'Tcl_Size'"); - } - *(int *)lengthPtr = (int)objPtr->length; - } - return objPtr->bytes; -} -#endif /* !defined(TCL_NO_DEPRECATED) */ - -#undef Tcl_GetStringFromObj char * Tcl_GetStringFromObj( Tcl_Obj *objPtr, /* Object whose string rep byte pointer should * be returned. */ Tcl_Size *lengthPtr) /* If non-NULL, the location where the string @@ -1714,11 +1879,11 @@ * If NULL, no length is stored. */ { if (objPtr->bytes == NULL) { /* * Note we do not check for objPtr->typePtr == NULL. An invariant - * of a properly maintained Tcl_Obj is that at least one of + * of a properly maintained Tcl_Obj is that at least one of * objPtr->bytes and objPtr->typePtr must not be NULL. If broken * extensions fail to maintain that invariant, we can crash here. */ if (objPtr->typePtr->updateStringProc == NULL) { @@ -1996,11 +2161,10 @@ * The internalrep of *objPtr may be changed. * *---------------------------------------------------------------------- */ -#undef Tcl_GetBoolFromObj int Tcl_GetBoolFromObj( Tcl_Interp *interp, /* Used for error reporting if not NULL. */ Tcl_Obj *objPtr, /* The object from which to get boolean. */ int flags, @@ -2019,15 +2183,15 @@ Tcl_DecrRefCount(objPtr); } return TCL_ERROR; } do { - if (objPtr->typePtr == &tclIntType || objPtr->typePtr == &tclBooleanType) { + if (objPtr->typePtr == tclIntType || objPtr->typePtr == tclBooleanType) { result = (objPtr->internalRep.wideValue != 0); goto boolEnd; } - if (objPtr->typePtr == &tclDoubleType) { + if (objPtr->typePtr == tclDoubleType) { /* * Caution: Don't be tempted to check directly for the "double" * Tcl_ObjType and then compare the internalrep to 0.0. This isn't * reliable because a "double" Tcl_ObjType can hold the NaN value. * Use the API Tcl_GetDoubleFromObj, which does the checking and @@ -2040,11 +2204,11 @@ return TCL_ERROR; } result = (d != 0.0); goto boolEnd; } - if (objPtr->typePtr == &tclBignumType) { + if (objPtr->typePtr == tclBignumType) { result = 1; boolEnd: if (charPtr != NULL) { flags &= (TCL_NULL_OK-2); if (flags) { @@ -2066,11 +2230,10 @@ TclParseNumber(interp, objPtr, (flags & TCL_NULL_OK) ? "boolean value or \"\"" : "boolean value", NULL,-1,NULL,0))); return TCL_ERROR; } -#undef Tcl_GetBooleanFromObj int Tcl_GetBooleanFromObj( Tcl_Interp *interp, /* Used for error reporting if not NULL. */ Tcl_Obj *objPtr, /* The object from which to get boolean. */ int *intPtr) /* Place to store resulting boolean. */ @@ -2108,22 +2271,22 @@ * whether a boolean conversion is possible without generating the string * rep. */ if (objPtr->bytes == NULL) { - if (objPtr->typePtr == &tclIntType) { + if (objPtr->typePtr == tclIntType) { if ((Tcl_WideUInt)objPtr->internalRep.wideValue < 2) { return TCL_OK; } goto badBoolean; } - if (objPtr->typePtr == &tclBignumType) { + if (objPtr->typePtr == tclBignumType) { goto badBoolean; } - if (objPtr->typePtr == &tclDoubleType) { + if (objPtr->typePtr == tclDoubleType) { goto badBoolean; } } if (ParseBoolean(objPtr) == TCL_OK) { @@ -2250,17 +2413,17 @@ */ goodBoolean: TclFreeInternalRep(objPtr); objPtr->internalRep.wideValue = newBool; - objPtr->typePtr = &tclBooleanType; + objPtr->typePtr = tclBooleanType; return TCL_OK; numericBoolean: TclFreeInternalRep(objPtr); objPtr->internalRep.wideValue = newBool; - objPtr->typePtr = &tclIntType; + objPtr->typePtr = tclIntType; return TCL_OK; } /* *---------------------------------------------------------------------- @@ -2348,11 +2511,11 @@ TclDbNewObj(objPtr, file, line); /* Optimized TclInvalidateStringRep() */ objPtr->bytes = NULL; objPtr->internalRep.doubleValue = dblValue; - objPtr->typePtr = &tclDoubleType; + objPtr->typePtr = tclDoubleType; return objPtr; } #else /* if not TCL_MEM_DEBUG */ @@ -2421,11 +2584,11 @@ Tcl_Interp *interp, /* Used for error reporting if not NULL. */ Tcl_Obj *objPtr, /* The object from which to get a double. */ double *dblPtr) /* Place to store resulting double. */ { do { - if (objPtr->typePtr == &tclDoubleType) { + if (objPtr->typePtr == tclDoubleType) { if (isnan(objPtr->internalRep.doubleValue)) { if (interp != NULL) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "floating point value is Not a Number", -1)); Tcl_SetErrorCode(interp, "TCL", "VALUE", "DOUBLE", "NAN", @@ -2434,15 +2597,15 @@ return TCL_ERROR; } *dblPtr = (double) objPtr->internalRep.doubleValue; return TCL_OK; } - if (objPtr->typePtr == &tclIntType) { + if (objPtr->typePtr == tclIntType) { *dblPtr = (double) objPtr->internalRep.wideValue; return TCL_OK; } - if (objPtr->typePtr == &tclBignumType) { + if (objPtr->typePtr == tclBignumType) { mp_int big; TclUnpackBignum(objPtr, big); *dblPtr = TclBignumToDouble(&big); return TCL_OK; @@ -2566,10 +2729,21 @@ } *intPtr = (int) l; return TCL_OK; #endif } + +int +ScalarObjInterfaceListLength( + TCL_UNUSED(Tcl_Interp *), /* Used to report errors if not NULL. */ \ + TCL_UNUSED(Tcl_Obj *), /* List object whose #elements to return. */ \ + Tcl_Size *lenPtr /* The resulting length is stored here. */ +) +{ + *lenPtr = 1; + return TCL_OK; +} /* *---------------------------------------------------------------------- * @@ -2652,16 +2826,16 @@ Tcl_Obj *objPtr, /* The object from which to get a long. */ long *longPtr) /* Place to store resulting long. */ { do { #ifdef TCL_WIDE_INT_IS_LONG - if (objPtr->typePtr == &tclIntType) { + if (objPtr->typePtr == tclIntType) { *longPtr = objPtr->internalRep.wideValue; return TCL_OK; } #else - if (objPtr->typePtr == &tclIntType) { + if (objPtr->typePtr == tclIntType) { /* * We return any integer in the range LONG_MIN to ULONG_MAX * converted to a long, ignoring overflow. The rule preserves * existing semantics for conversion of integers on input, but * avoids inadvertent demotion of wide integers to 32-bit ones in @@ -2676,20 +2850,20 @@ return TCL_OK; } goto tooLarge; } #endif - if (objPtr->typePtr == &tclDoubleType) { + if (objPtr->typePtr == tclDoubleType) { if (interp != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "expected integer but got \"%s\"", TclGetString(objPtr))); Tcl_SetErrorCode(interp, "TCL", "VALUE", "INTEGER", (void *)NULL); } return TCL_ERROR; } - if (objPtr->typePtr == &tclBignumType) { + if (objPtr->typePtr == tclBignumType) { /* * Must check for those bignum values that can fit in a long, even * when auto-narrowing is enabled. Only those values in the signed * long range get auto-narrowed to tclIntType, while all the * values in the unsigned long range will fit in a long. @@ -2913,24 +3087,24 @@ Tcl_Obj *objPtr, /* Object from which to get a wide int. */ Tcl_WideInt *wideIntPtr) /* Place to store resulting long. */ { do { - if (objPtr->typePtr == &tclIntType) { + if (objPtr->typePtr == tclIntType) { *wideIntPtr = objPtr->internalRep.wideValue; return TCL_OK; } - if (objPtr->typePtr == &tclDoubleType) { + if (objPtr->typePtr == tclDoubleType) { if (interp != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "expected integer but got \"%s\"", TclGetString(objPtr))); Tcl_SetErrorCode(interp, "TCL", "VALUE", "INTEGER", (void *)NULL); } return TCL_ERROR; } - if (objPtr->typePtr == &tclBignumType) { + if (objPtr->typePtr == tclBignumType) { /* * Must check for those bignum values that can fit in a * Tcl_WideInt, even when auto-narrowing is enabled. */ @@ -2998,11 +3172,11 @@ Tcl_Obj *objPtr, /* Object from which to get a wide int. */ Tcl_WideUInt *wideUIntPtr) /* Place to store resulting long. */ { do { - if (objPtr->typePtr == &tclIntType) { + if (objPtr->typePtr == tclIntType) { if (objPtr->internalRep.wideValue < 0) { wideUIntOutOfRange: if (interp != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "expected unsigned integer but got \"%s\"", @@ -3012,14 +3186,14 @@ return TCL_ERROR; } *wideUIntPtr = (Tcl_WideUInt)objPtr->internalRep.wideValue; return TCL_OK; } - if (objPtr->typePtr == &tclDoubleType) { + if (objPtr->typePtr == tclDoubleType) { goto wideUIntOutOfRange; } - if (objPtr->typePtr == &tclBignumType) { + if (objPtr->typePtr == tclBignumType) { /* * Must check for those bignum values that can fit in a * Tcl_WideUInt, even when auto-narrowing is enabled. */ @@ -3082,24 +3256,24 @@ Tcl_Interp *interp, /* Used for error reporting if not NULL. */ Tcl_Obj *objPtr, /* Object from which to get a wide int. */ Tcl_WideInt *wideIntPtr) /* Place to store resulting wide integer. */ { do { - if (objPtr->typePtr == &tclIntType) { + if (objPtr->typePtr == tclIntType) { *wideIntPtr = objPtr->internalRep.wideValue; return TCL_OK; } - if (objPtr->typePtr == &tclDoubleType) { + if (objPtr->typePtr == tclDoubleType) { if (interp != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "expected integer but got \"%s\"", TclGetString(objPtr))); Tcl_SetErrorCode(interp, "TCL", "VALUE", "INTEGER", (void *)NULL); } return TCL_ERROR; } - if (objPtr->typePtr == &tclBignumType) { + if (objPtr->typePtr == tclBignumType) { mp_int big; mp_err err; Tcl_WideUInt value = 0, scratch; size_t numBytes; @@ -3208,11 +3382,11 @@ Tcl_Obj *copyPtr) { mp_int bignumVal; mp_int bignumCopy; - copyPtr->typePtr = &tclBignumType; + copyPtr->typePtr = tclBignumType; TclUnpackBignum(srcPtr, bignumVal); if (mp_init_copy(&bignumCopy, &bignumVal) != MP_OKAY) { Tcl_Panic("initialization failure in DupBignum"); } PACK_BIGNUM(bignumCopy, copyPtr); @@ -3378,11 +3552,11 @@ Tcl_Obj *objPtr, /* Object to read */ int copy, /* Whether to copy the returned bignum value */ mp_int *bignumValue) /* Returned bignum value. */ { do { - if (objPtr->typePtr == &tclBignumType) { + if (objPtr->typePtr == tclBignumType) { if (copy || Tcl_IsShared(objPtr)) { mp_int temp; TclUnpackBignum(objPtr, temp); if (mp_init_copy(bignumValue, &temp) != MP_OKAY) { @@ -3403,18 +3577,18 @@ TclInitEmptyStringRep(objPtr); } } return TCL_OK; } - if (objPtr->typePtr == &tclIntType) { + if (objPtr->typePtr == tclIntType) { if (mp_init_i64(bignumValue, objPtr->internalRep.wideValue) != MP_OKAY) { return TCL_ERROR; } return TCL_OK; } - if (objPtr->typePtr == &tclDoubleType) { + if (objPtr->typePtr == tclDoubleType) { if (interp != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "expected integer but got \"%s\"", TclGetString(objPtr))); Tcl_SetErrorCode(interp, "TCL", "VALUE", "INTEGER", (void *)NULL); @@ -3570,11 +3744,11 @@ TclSetBignumInternalRep( Tcl_Obj *objPtr, void *big) { mp_int *bignumValue = (mp_int *)big; - objPtr->typePtr = &tclBignumType; + objPtr->typePtr = tclBignumType; PACK_BIGNUM(*bignumValue, objPtr); /* * Clear the mp_int value. * @@ -3593,18 +3767,17 @@ * Tcl_GetNumberFromObj -- * * Extracts a number (of any possible numeric type) from an object. * * Results: - * Whether the extraction worked. The type is stored in the variable - * referred to by the typePtr argument, and a pointer to the - * representation is stored in the variable referred to by the - * clientDataPtr. + * A standard Tcl completion code. On success, the type is stored at the + * address given by typePtr, and a pointer to the representation is stored + * at the address given by clientDataPtr. * * Side effects: - * Can allocate thread-specific data for handling the copy-out space for - * bignums; this space is shared within a thread. + * May allocate thread-specific data shared within a thread for handling + * the copy-out space for bignums. * *---------------------------------------------------------------------- */ int @@ -3613,25 +3786,25 @@ Tcl_Obj *objPtr, void **clientDataPtr, int *typePtr) { do { - if (objPtr->typePtr == &tclDoubleType) { + if (objPtr->typePtr == tclDoubleType) { if (isnan(objPtr->internalRep.doubleValue)) { *typePtr = TCL_NUMBER_NAN; } else { *typePtr = TCL_NUMBER_DOUBLE; } *clientDataPtr = &objPtr->internalRep.doubleValue; return TCL_OK; } - if (objPtr->typePtr == &tclIntType) { + if (objPtr->typePtr == tclIntType) { *typePtr = TCL_NUMBER_INT; *clientDataPtr = &objPtr->internalRep.wideValue; return TCL_OK; } - if (objPtr->typePtr == &tclBignumType) { + if (objPtr->typePtr == tclBignumType) { static Tcl_ThreadDataKey bignumKey; mp_int *bigPtr = (mp_int *)Tcl_GetThreadData(&bignumKey, sizeof(mp_int)); TclUnpackBignum(objPtr, *bigPtr); @@ -4470,10 +4643,43 @@ copyPtr->internalRep.twoPtrValue.ptr1 = resPtr; copyPtr->internalRep.twoPtrValue.ptr2 = NULL; resPtr->refCount++; copyPtr->typePtr = &tclCmdNameType; } + + +static int +ScalarObjIndex( + TCL_UNUSED(Tcl_Interp *),/* Used to report errors if not NULL. */ \ + Tcl_Obj *listPtr, /* List object to index into. */ \ + Tcl_Size index, /* Index of element to return. */ \ + Tcl_Obj **resPtrPtr /* The resulting Tcl_Obj* is stored here. */ +) { + if (index == 0) { + *resPtrPtr = listPtr; + } else { + *resPtrPtr = NULL; + } + return TCL_OK; +} + +static int ScalarObjRange( + TCL_UNUSED(Tcl_Interp *),/* Used to report errors */ \ + Tcl_Obj *listPtr, /* List object to take a range from. */ \ + Tcl_Size rangeStart, /* Index of first element to */ \ + /* include. */ \ + Tcl_Size rangeEnd, /* Index of last element to include. */ + Tcl_Obj **resPtrPtr +) +{ + if (rangeEnd >= 0 && rangeEnd >= rangeStart) { + *resPtrPtr = listPtr; + } else { + *resPtrPtr = NULL; + } + return TCL_OK; +} /* *---------------------------------------------------------------------- * * SetCmdNameFromAny -- @@ -4582,17 +4788,18 @@ * Value is a bignum with a refcount of 14, object pointer at 0x12345678, * internal representation 0x45671234:0x98765432, string representation * "1872361827361287" */ + const char *name = objv[1]->typePtr ? TclObjTypeName(objv[1]->typePtr) : "pure string"; descObj = Tcl_ObjPrintf("value is a %s with a refcount of %" TCL_Z_MODIFIER "u," " object pointer at %p", - objv[1]->typePtr ? objv[1]->typePtr->name : "pure string", + name, objv[1]->refCount, objv[1]); if (objv[1]->typePtr) { - if (objv[1]->typePtr == &tclDoubleType) { + if (objv[1]->typePtr == tclDoubleType) { Tcl_AppendPrintfToObj(descObj, ", internal representation %g", objv[1]->internalRep.doubleValue); } else { Tcl_AppendPrintfToObj(descObj, ", internal representation %p:%p", (void *) objv[1]->internalRep.twoPtrValue.ptr1, @@ -4610,10 +4817,36 @@ } Tcl_SetObjResult(interp, descObj); return TCL_OK; } + + +void Tcl_ObjTypeVersion(Tcl_Obj *objPtr, int *version) { + if ((void *)objPtr->typePtr->name == (void *)&TclObjectTypeType0) { + *version = ((ObjectType *)objPtr->typePtr)->version; + } else { + *version = 1; + } + return; +} + + +TclObjectTypeType * TclGetObjectTypeType () { + return &TclObjectTypeType0; +} + + +int (*TclObjInterfaceGetListIndex (Tcl_Obj *objPtr)) +(tclObjTypeInterfaceArgsListIndex) +{ + ObjInterface *ifPtr = TclObjInterface(objPtr); + if (ifPtr->version >= 1) { + return ifPtr->list.index; + } + return NULL; +} /* * Local Variables: * mode: c * c-basic-offset: 4 ADDED generic/tclObjInterface.c Index: generic/tclObjInterface.c ================================================================== --- /dev/null +++ generic/tclObjInterface.c @@ -0,0 +1,349 @@ +/* + * Copyright © 2024 Nathan Coulter. All rights reserved. + * + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + *---------------------------------------------------------------------- + * Tcl_NewObjInterface + *---------------------------------------------------------------------- + */ + +#include "tcl.h" +#include "tclInt.h" + + +Tcl_ObjInterface * +Tcl_NewObjInterface() { + ObjInterface * ifacePtr; + ifacePtr = (ObjInterface *)Tcl_Alloc(sizeof(ObjInterface)); + memset(ifacePtr ,0 ,sizeof(ObjInterface)); + return (Tcl_ObjInterface *)ifacePtr; +} + +Tcl_ObjType * +Tcl_NewObjType( +) { + ObjectType *objTypePtr; + objTypePtr = (ObjectType *)Tcl_Alloc(sizeof(ObjectType)); + return (Tcl_ObjType *)objTypePtr; +} + + +int +Tcl_ObjInterfaceSetFnListAll( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceListAllProc fnPtr +) { + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->list.all = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnListAppend( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceListAppendProc fnPtr) +{ + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->list.append = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnListAppendList( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceListAppendlistProc fnPtr +) { + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->list.appendlist = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnListContains( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceListContainsProc fnPtr +) { + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->list.contains = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnListIndex( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceListIndexProc fnPtr +) { + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->list.index = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnListIndexEnd( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceListIndexEndProc fnPtr +) { + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->list.indexEnd = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnListIsSorted( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceListIsSortedProc fnPtr +) { + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->list.isSorted = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnListLength( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceListlengthProc fnPtr) +{ + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->list.length = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnListRange( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceListRangeProc fnPtr) +{ + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->list.range = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnListRangeEnd( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceListRangeEndProc fnPtr +) { + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->list.rangeEnd = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnListReplace( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceListReplaceProc fnPtr) +{ + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->list.replace = fnPtr; + return TCL_OK; +} + +int Tcl_ObjInterfaceSetFnListReplaceList( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceListReplaceListProc fnPtr) +{ + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->list.replaceList = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnListReverse( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceListReverseProc fnPtr) +{ + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->list.reverse = fnPtr; + return TCL_OK; +} + +int +Tcl_ObjInterfaceSetFnListSet( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceListSetProc fnPtr) +{ + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->list.set = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnListSetDeep( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceListSetDeepProc fnPtr) +{ + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->list.setDeep = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnStringIndex( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceStringIndexProc fnPtr) +{ + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->string.index = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnStringIndexEnd( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceStringIndexEndProc fnPtr) +{ + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->string.indexEnd = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnStringIsEmpty( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceStringIsEmptyProc fnPtr) +{ + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->string.isEmpty = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnStringLength( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceStringLengthProc fnPtr) +{ + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->string.length = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnStringRange( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceStringRangeProc fnPtr) +{ + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->string.range = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetFnStringRangeEnd( + Tcl_ObjInterface *objInterfacePtr + ,Tcl_ObjInterfaceStringRangeEndProc fnPtr) +{ + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->string.rangeEnd = fnPtr; + return TCL_OK; +} + + +int +Tcl_ObjInterfaceSetVersion( + Tcl_ObjInterface *objInterfacePtr + ,int version +) { + ObjInterface *oiPtr = (ObjInterface *)objInterfacePtr; + oiPtr->version = version; + return TCL_OK; +} + + +int +Tcl_ObjTypeSetFreeInternalRepProc( + Tcl_ObjType *otPtr + ,Tcl_FreeInternalRepProc *freeIntRepProc +) { + otPtr->freeIntRepProc = freeIntRepProc; + return TCL_OK; +} + + +int +Tcl_ObjTypeSetDupInternalRepProc( + Tcl_ObjType *otPtr + ,Tcl_DupInternalRepProc *dupIntRepProc) +{ + otPtr->dupIntRepProc = dupIntRepProc; + return TCL_OK; +} + + +int +Tcl_ObjTypeSetInterface( + Tcl_ObjType *objTypePtr + ,Tcl_ObjInterface * objInterfacePtr) +{ + ObjectType *otPtr = (ObjectType *)objTypePtr; + otPtr->ifPtr = objInterfacePtr; + return TCL_OK; +} + + +int +Tcl_ObjTypeSetUpdateStringProc( + Tcl_ObjType *otPtr + ,Tcl_UpdateStringProc *updateStringProc) +{ + otPtr->updateStringProc = updateStringProc; + return TCL_OK; +} + + +int +Tcl_ObjTypeSetSetFromAnyProc( + Tcl_ObjType *otPtr + ,Tcl_SetFromAnyProc *setFromAnyProc) +{ + otPtr->setFromAnyProc = setFromAnyProc; + return TCL_OK; +} + + +int +Tcl_ObjTypeSetName( + Tcl_ObjType *otPtr + ,char *name) +{ + otPtr->name = name; + return TCL_OK; +} + + +int +Tcl_ObjTypeSetVersion( + Tcl_ObjType *otPtr + ,int version) +{ + otPtr->version = version; + return TCL_OK; +} Index: generic/tclOptimize.c ================================================================== --- generic/tclOptimize.c +++ generic/tclOptimize.c @@ -1,16 +1,27 @@ /* - * tclOptimize.c -- - * - * This file contains the bytecode optimizer. - * * Copyright © 2013 Donal Fellows. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclOptimize.c -- + * + * This file contains the bytecode optimizer. + */ + #include "tclInt.h" #include "tclCompile.h" #include /* Index: generic/tclPanic.c ================================================================== --- generic/tclPanic.c +++ generic/tclPanic.c @@ -1,20 +1,31 @@ /* - * tclPanic.c -- - * - * Source code for the "Tcl_Panic" library procedure for Tcl; individual - * applications will probably call Tcl_SetPanicProc() to set an - * application-specific panic procedure. - * * Copyright © 1988-1993 The Regents of the University of California. * Copyright © 1994 Sun Microsystems, Inc. * Copyright © 1998-1999 Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclPanic.c -- + * + * Source code for the "Tcl_Panic" library procedure for Tcl; individual + * applications will probably call Tcl_SetPanicProc() to set an + * application-specific panic procedure. + */ + #include "tclInt.h" #if defined(_WIN32) || defined(__CYGWIN__) MODULE_SCOPE void tclWinDebugPanic(const char *format, ...); #endif Index: generic/tclParse.c ================================================================== --- generic/tclParse.c +++ generic/tclParse.c @@ -1,20 +1,31 @@ /* - * tclParse.c -- - * - * This file contains functions that parse Tcl scripts. They do so in a - * general-purpose fashion that can be used for many different purposes, - * including compilation, direct execution, code analysis, etc. - * * Copyright © 1997 Sun Microsystems, Inc. * Copyright © 1998-2000 Ajuba Solutions. * Contributions from Don Porter, NIST, 2002. (not subject to US copyright) * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclParse.c -- + * + * This file contains functions that parse Tcl scripts. They do so in a + * general-purpose fashion that can be used for many different purposes, + * including compilation, direct execution, code analysis, etc. + */ + #include "tclInt.h" #include "tclParse.h" #include /* Index: generic/tclParse.h ================================================================== --- generic/tclParse.h +++ generic/tclParse.h @@ -1,5 +1,14 @@ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * Minimal set of shared macro definitions and declarations so that multiple * source files can make use of the parsing table in tclParse.c */ Index: generic/tclPathObj.c ================================================================== --- generic/tclPathObj.c +++ generic/tclPathObj.c @@ -1,16 +1,27 @@ +/* + * Copyright © 2003 Vince Darley. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclPathObj.c -- * * This file contains the implementation of Tcl's "path" object type used * to represent and manipulate a general (virtual) filesystem entity in * an efficient manner. - * - * Copyright © 2003 Vince Darley. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" #include "tclFileSystem.h" #include @@ -43,11 +54,11 @@ "path", /* name */ FreeFsPathInternalRep, /* freeIntRepProc */ DupFsPathInternalRep, /* dupIntRepProc */ UpdateStringOfFsPath, /* updateStringProc */ SetFsPathFromAny, /* setFromAnyProc */ - TCL_OBJTYPE_V0 + 0 }; /* * struct FsPath -- * Index: generic/tclPipe.c ================================================================== --- generic/tclPipe.c +++ generic/tclPipe.c @@ -1,17 +1,28 @@ /* - * tclPipe.c -- - * - * This file contains the generic portion of the command channel driver - * as well as various utility routines used in managing subprocesses. - * * Copyright © 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclPipe.c -- + * + * This file contains the generic portion of the command channel driver + * as well as various utility routines used in managing subprocesses. + */ + #include "tclInt.h" /* * A linked list of the following structures is used to keep track of child * processes that have been detached but haven't exited yet, so we can make Index: generic/tclPkg.c ================================================================== --- generic/tclPkg.c +++ generic/tclPkg.c @@ -1,16 +1,32 @@ /* - * tclPkg.c -- - * - * This file implements package and version control for Tcl via the - * "package" command and a few C APIs. - * * Copyright © 1996 Sun Microsystems, Inc. * Copyright © 2006 Andreas Kupries * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * Copyright © 2017 Nathan Coulter + * + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclPkg.c -- + * + * This file implements package and version control for Tcl via the + * "package" command and a few C APIs. + */ + +/* * * TIP #268. * Heavily rewritten to handle the extend version numbers, and extended * package requirements. */ Index: generic/tclPkgConfig.c ================================================================== --- generic/tclPkgConfig.c +++ generic/tclPkgConfig.c @@ -1,17 +1,28 @@ /* - * tclPkgConfig.c -- - * - * This file contains the configuration information to embed into the tcl - * library. - * * Copyright © 2002 Andreas Kupries * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclPkgConfig.c -- + * + * This file contains the configuration information to embed into the tcl + * library. + */ + /* Note, the definitions in this module are influenced by the following C * preprocessor macros: * * OSCMa = shortcut for "old style configuration macro activates" * NSCMdt = shortcut for "new style configuration macro declares that" Index: generic/tclPlatDecls.h ================================================================== --- generic/tclPlatDecls.h +++ generic/tclPlatDecls.h @@ -1,12 +1,23 @@ +/* + * Copyright (c) 1998-1999 by Scriptics Corporation. + * All rights reserved. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclPlatDecls.h -- * * Declarations of platform specific Tcl APIs. - * - * Copyright (c) 1998-1999 by Scriptics Corporation. - * All rights reserved. */ #ifndef _TCLPLATDECLS #define _TCLPLATDECLS @@ -46,97 +57,10 @@ # else # define MODULE_SCOPE extern # endif #endif -#if TCL_MAJOR_VERSION < 9 - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Exported function declarations: - */ - -#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */ -/* 0 */ -EXTERN TCHAR * Tcl_WinUtfToTChar(const char *str, int len, - Tcl_DString *dsPtr); -/* 1 */ -EXTERN char * Tcl_WinTCharToUtf(const TCHAR *str, int len, - Tcl_DString *dsPtr); -/* Slot 2 is reserved */ -/* 3 */ -EXTERN void Tcl_WinConvertError(unsigned errCode); -#endif /* WIN */ -#ifdef MAC_OSX_TCL /* MACOSX */ -/* 0 */ -EXTERN int Tcl_MacOSXOpenBundleResources(Tcl_Interp *interp, - const char *bundleName, int hasResourceFile, - Tcl_Size maxPathLen, char *libraryPath); -/* 1 */ -EXTERN int Tcl_MacOSXOpenVersionedBundleResources( - Tcl_Interp *interp, const char *bundleName, - const char *bundleVersion, - int hasResourceFile, Tcl_Size maxPathLen, - char *libraryPath); -/* 2 */ -EXTERN void Tcl_MacOSXNotifierAddRunLoopMode( - const void *runLoopMode); -#endif /* MACOSX */ - -typedef struct TclPlatStubs { - int magic; - void *hooks; - -#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */ - TCHAR * (*tcl_WinUtfToTChar) (const char *str, int len, Tcl_DString *dsPtr); /* 0 */ - char * (*tcl_WinTCharToUtf) (const TCHAR *str, int len, Tcl_DString *dsPtr); /* 1 */ - void (*reserved2)(void); - void (*tcl_WinConvertError) (unsigned errCode); /* 3 */ -#endif /* WIN */ -#ifdef MAC_OSX_TCL /* MACOSX */ - int (*tcl_MacOSXOpenBundleResources) (Tcl_Interp *interp, const char *bundleName, int hasResourceFile, Tcl_Size maxPathLen, char *libraryPath); /* 0 */ - int (*tcl_MacOSXOpenVersionedBundleResources) (Tcl_Interp *interp, const char *bundleName, const char *bundleVersion, int hasResourceFile, Tcl_Size maxPathLen, char *libraryPath); /* 1 */ - void (*tcl_MacOSXNotifierAddRunLoopMode) (const void *runLoopMode); /* 2 */ -#endif /* MACOSX */ -} TclPlatStubs; - -extern const TclPlatStubs *tclPlatStubsPtr; - -#ifdef __cplusplus -} -#endif - -#if defined(USE_TCL_STUBS) - -/* - * Inline function declarations: - */ - -#if defined(_WIN32) || defined(__CYGWIN__) /* WIN */ -#define Tcl_WinUtfToTChar \ - (tclPlatStubsPtr->tcl_WinUtfToTChar) /* 0 */ -#define Tcl_WinTCharToUtf \ - (tclPlatStubsPtr->tcl_WinTCharToUtf) /* 1 */ -/* Slot 2 is reserved */ -#define Tcl_WinConvertError \ - (tclPlatStubsPtr->tcl_WinConvertError) /* 3 */ -#endif /* WIN */ -#ifdef MAC_OSX_TCL /* MACOSX */ -#define Tcl_MacOSXOpenBundleResources \ - (tclPlatStubsPtr->tcl_MacOSXOpenBundleResources) /* 0 */ -#define Tcl_MacOSXOpenVersionedBundleResources \ - (tclPlatStubsPtr->tcl_MacOSXOpenVersionedBundleResources) /* 1 */ -#define Tcl_MacOSXNotifierAddRunLoopMode \ - (tclPlatStubsPtr->tcl_MacOSXNotifierAddRunLoopMode) /* 2 */ -#endif /* MACOSX */ - -#endif /* defined(USE_TCL_STUBS) */ - -#else /* TCL_MAJOR_VERSION > 8 */ /* !BEGIN!: Do not edit below this line. */ #ifdef __cplusplus extern "C" { @@ -149,12 +73,12 @@ /* Slot 0 is reserved */ /* 1 */ EXTERN int Tcl_MacOSXOpenVersionedBundleResources( Tcl_Interp *interp, const char *bundleName, const char *bundleVersion, - int hasResourceFile, Tcl_Size maxPathLen, - char *libraryPath); + Tcl_Size hasResourceFile, + Tcl_Size maxPathLen, char *libraryPath); /* 2 */ EXTERN void Tcl_MacOSXNotifierAddRunLoopMode( const void *runLoopMode); /* 3 */ EXTERN void Tcl_WinConvertError(unsigned errCode); @@ -162,11 +86,11 @@ typedef struct TclPlatStubs { int magic; void *hooks; void (*reserved0)(void); - int (*tcl_MacOSXOpenVersionedBundleResources) (Tcl_Interp *interp, const char *bundleName, const char *bundleVersion, int hasResourceFile, Tcl_Size maxPathLen, char *libraryPath); /* 1 */ + int (*tcl_MacOSXOpenVersionedBundleResources) (Tcl_Interp *interp, const char *bundleName, const char *bundleVersion, Tcl_Size hasResourceFile, Tcl_Size maxPathLen, char *libraryPath); /* 1 */ void (*tcl_MacOSXNotifierAddRunLoopMode) (const void *runLoopMode); /* 2 */ void (*tcl_WinConvertError) (unsigned errCode); /* 3 */ } TclPlatStubs; extern const TclPlatStubs *tclPlatStubsPtr; @@ -190,13 +114,10 @@ (tclPlatStubsPtr->tcl_WinConvertError) /* 3 */ #endif /* defined(USE_TCL_STUBS) */ /* !END!: Do not edit above this line. */ - -#endif /* TCL_MAJOR_VERSION */ - #ifdef MAC_OSX_TCL /* MACOSX */ #undef Tcl_MacOSXOpenBundleResources #define Tcl_MacOSXOpenBundleResources(a,b,c,d,e) Tcl_MacOSXOpenVersionedBundleResources(a,b,NULL,c,d,e) #endif @@ -211,12 +132,21 @@ #ifndef MAC_OSX_TCL # undef Tcl_MacOSXOpenVersionedBundleResources # undef Tcl_MacOSXNotifierAddRunLoopMode #endif -#if defined(USE_TCL_STUBS) && (defined(_WIN32) || defined(__CYGWIN__))\ - && (defined(TCL_NO_DEPRECATED) || TCL_MAJOR_VERSION > 8) +#ifdef _WIN32 +# undef Tcl_CreateFileHandler +# undef Tcl_DeleteFileHandler +# undef Tcl_GetOpenFile +#endif +#ifndef MAC_OSX_TCL +# undef Tcl_MacOSXOpenVersionedBundleResources +# undef Tcl_MacOSXNotifierAddRunLoopMode +#endif + +#if defined(USE_TCL_STUBS) && (defined(_WIN32) || defined(__CYGWIN__)) #undef Tcl_WinUtfToTChar #undef Tcl_WinTCharToUtf #ifdef _WIN32 #define Tcl_WinUtfToTChar(string, len, dsPtr) (Tcl_DStringInit(dsPtr), \ (TCHAR *)Tcl_UtfToChar16DString((string), (len), (dsPtr))) Index: generic/tclPort.h ================================================================== --- generic/tclPort.h +++ generic/tclPort.h @@ -1,16 +1,27 @@ +/* + * Copyright (c) 1994-1995 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclPort.h -- * * This header file handles porting issues that occur because * of differences between systems. It reads in platform specific * portability files. - * - * Copyright (c) 1994-1995 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #ifndef _TCLPORT #define _TCLPORT Index: generic/tclPosixStr.c ================================================================== --- generic/tclPosixStr.c +++ generic/tclPosixStr.c @@ -1,18 +1,29 @@ /* - * tclPosixStr.c -- - * - * This file contains procedures that generate strings corresponding to - * various POSIX-related codes, such as errno and signals. - * * Copyright © 1991-1994 The Regents of the University of California. * Copyright © 1994-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclPosixStr.c -- + * + * This file contains procedures that generate strings corresponding to + * various POSIX-related codes, such as errno and signals. + */ + #include "tclInt.h" /* *---------------------------------------------------------------------- * Index: generic/tclPreserve.c ================================================================== --- generic/tclPreserve.c +++ generic/tclPreserve.c @@ -1,19 +1,30 @@ /* - * tclPreserve.c -- - * - * This file contains a collection of functions that are used to make - * sure that widget records and other data structures aren't reallocated - * when there are nested functions that depend on their existence. - * * Copyright © 1991-1994 The Regents of the University of California. * Copyright © 1994-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclPreserve.c -- + * + * This file contains a collection of functions that are used to make + * sure that widget records and other data structures aren't reallocated + * when there are nested functions that depend on their existence. + */ + #include "tclInt.h" /* * The following data structure is used to keep track of all the Tcl_Preserve * calls that are still in effect. It grows as needed to accommodate any Index: generic/tclProc.c ================================================================== --- generic/tclProc.c +++ generic/tclProc.c @@ -1,20 +1,31 @@ /* - * tclProc.c -- - * - * This file contains routines that implement Tcl procedures, including - * the "proc" and "uplevel" commands. - * * Copyright © 1987-1993 The Regents of the University of California. * Copyright © 1994-1998 Sun Microsystems, Inc. * Copyright © 2004-2006 Miguel Sofer * Copyright © 2007 Daniel A. Steffen * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclProc.c -- + * + * This file contains routines that implement Tcl procedures, including + * the "proc" and "uplevel" commands. + */ + #include "tclInt.h" #include "tclCompile.h" #include /* @@ -64,11 +75,11 @@ NULL, /* UpdateString function; Tcl_GetString and * Tcl_GetStringFromObj should panic * instead. */ NULL, /* SetFromAny function; Tcl_ConvertToType * should panic instead. */ - TCL_OBJTYPE_V0 + 0 }; #define ProcSetInternalRep(objPtr, procPtr) \ do { \ Tcl_ObjInternalRep ir; \ @@ -93,11 +104,11 @@ * rep; it's just a cache type. */ static const Tcl_ObjType levelReferenceType = { "levelReference", - NULL, NULL, NULL, NULL, TCL_OBJTYPE_V0 + NULL, NULL, NULL, NULL, 0 }; /* * The type of lambdas. Note that every lambda will *always* have a string * representation. @@ -111,11 +122,11 @@ "lambdaExpr", /* name */ FreeLambdaInternalRep, /* freeIntRepProc */ DupLambdaInternalRep, /* dupIntRepProc */ NULL, /* updateStringProc */ SetLambdaFromAny, /* setFromAnyProc */ - TCL_OBJTYPE_V0 + 0 }; #define LambdaSetInternalRep(objPtr, procPtr, nsObjPtr) \ do { \ Tcl_ObjInternalRep ir; \ Index: generic/tclProcess.c ================================================================== --- generic/tclProcess.c +++ generic/tclProcess.c @@ -1,17 +1,28 @@ /* - * tclProcess.c -- - * - * This file implements the "tcl::process" ensemble for subprocess - * management as defined by TIP #462. - * * Copyright © 2017 Frederic Bonnet. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclProcess.c -- + * + * This file implements the "tcl::process" ensemble for subprocess + * management as defined by TIP #462. + */ + #include "tclInt.h" /* * Autopurge flag. Process-global because of the way Tcl manages child * processes (see tclPipe.c). Index: generic/tclRegexp.c ================================================================== --- generic/tclRegexp.c +++ generic/tclRegexp.c @@ -1,18 +1,29 @@ /* - * tclRegexp.c -- - * - * This file contains the public interfaces to the Tcl regular expression - * mechanism. - * * Copyright © 1998 Sun Microsystems, Inc. * Copyright © 1998-1999 Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclRegexp.c -- + * + * This file contains the public interfaces to the Tcl regular expression + * mechanism. + */ + #include "tclInt.h" #include "tclRegexp.h" #include "tclTomMath.h" #include @@ -106,11 +117,11 @@ "regexp", /* name */ FreeRegexpInternalRep, /* freeIntRepProc */ DupRegexpInternalRep, /* dupIntRepProc */ NULL, /* updateStringProc */ SetRegexpFromAny, /* setFromAnyProc */ - TCL_OBJTYPE_V0 + 0 }; #define RegexpSetInternalRep(objPtr, rePtr) \ do { \ Tcl_ObjInternalRep ir; \ Index: generic/tclRegexp.h ================================================================== --- generic/tclRegexp.h +++ generic/tclRegexp.h @@ -1,18 +1,29 @@ /* - * tclRegexp.h -- - * - * This file contains definitions used internally by Henry Spencer's - * regular expression code. - * * Copyright (c) 1998 by Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclRegexp.h -- + * + * This file contains definitions used internally by Henry Spencer's + * regular expression code. + */ + #ifndef _TCLREGEXP #define _TCLREGEXP #include "regex.h" Index: generic/tclResolve.c ================================================================== --- generic/tclResolve.c +++ generic/tclResolve.c @@ -1,17 +1,28 @@ +/* + * Copyright © 1998 Lucent Technologies, Inc. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclResolve.c -- * * Contains hooks for customized command/variable name resolution * schemes. These hooks allow extensions like [incr Tcl] to add their own * name resolution rules to the Tcl language. Rules can be applied to a * particular namespace, to the interpreter as a whole, or both. - * - * Copyright © 1998 Lucent Technologies, Inc. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" /* Index: generic/tclResult.c ================================================================== --- generic/tclResult.c +++ generic/tclResult.c @@ -1,16 +1,27 @@ /* - * tclResult.c -- - * - * This file contains code to manage the interpreter result. - * * Copyright © 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclResult.c -- + * + * This file contains code to manage the interpreter result. + */ + #include "tclInt.h" #include /* * Indices of the standard return options dictionary keys. Index: generic/tclScan.c ================================================================== --- generic/tclScan.c +++ generic/tclScan.c @@ -1,16 +1,27 @@ /* - * tclScan.c -- - * - * This file contains the implementation of the "scan" command. - * * Copyright © 1998 Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclScan.c -- + * + * This file contains the implementation of the "scan" command. + */ + #include "tclInt.h" #include "tclTomMath.h" #include /* @@ -1044,11 +1055,11 @@ } else { double dvalue; if (Tcl_GetDoubleFromObj(NULL, objPtr, &dvalue) != TCL_OK) { #ifdef ACCEPT_NAN const Tcl_ObjInternalRep *irPtr - = TclFetchInternalRep(objPtr, &tclDoubleType); + = TclFetchInternalRep(objPtr, tclDoubleType); if (irPtr) { dvalue = irPtr->doubleValue; } else #endif { Index: generic/tclStrToD.c ================================================================== --- generic/tclStrToD.c +++ generic/tclStrToD.c @@ -1,18 +1,29 @@ +/* + * Copyright © 2005 Kevin B. Kenny. All rights reserved. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclStrToD.c -- * * This file contains a collection of procedures for managing conversions * to/from floating-point in Tcl. They include TclParseNumber, which * parses numbers from strings; TclDoubleDigits, which formats numbers * into strings of digits, and procedures for interconversion among * 'double' and 'mp_int' types. - * - * Copyright © 2005 Kevin B. Kenny. All rights reserved. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" #include "tclTomMath.h" #include @@ -547,15 +558,15 @@ * didn't pass anything else. */ if (bytes == NULL) { if (interp == NULL && endPtrPtr == NULL) { - if (TclHasInternalRep(objPtr, &tclDictType)) { + if (TclHasInternalRep(objPtr, tclDictTypePtr)) { /* A dict can never be a (single) number */ return TCL_ERROR; } - if (TclHasInternalRep(objPtr, &tclListType)) { + if (TclHasInternalRep(objPtr, tclListTypePtr)) { Tcl_Size length; /* A list can only be a (single) number if its length == 1 */ TclListObjLengthM(NULL, objPtr, &length); if (length != 1) { return TCL_ERROR; @@ -1383,11 +1394,11 @@ if ((err == MP_OKAY) && (octalSignificandWide > (MOST_BITS + signum))) { err = mp_init_u64(&octalSignificandBig, octalSignificandWide); octalSignificandOverflow = 1; } else { - objPtr->typePtr = &tclIntType; + objPtr->typePtr = tclIntType; if (signum) { objPtr->internalRep.wideValue = (Tcl_WideInt)(-octalSignificandWide); } else { objPtr->internalRep.wideValue = @@ -1419,11 +1430,11 @@ if ((err == MP_OKAY) && (significandWide > MOST_BITS+signum)) { err = mp_init_u64(&significandBig, significandWide); significandOverflow = 1; } else { - objPtr->typePtr = &tclIntType; + objPtr->typePtr = tclIntType; if (signum) { objPtr->internalRep.wideValue = (Tcl_WideInt)(-significandWide); } else { objPtr->internalRep.wideValue = @@ -1451,11 +1462,11 @@ * to whether 'significandOverflow' is set. The desired floating * point value is significand * 10**k, where * k = numTrailZeros+exponent-numDigitsAfterDp. */ - objPtr->typePtr = &tclDoubleType; + objPtr->typePtr = tclDoubleType; if (exponentSignum) { /* * At this point exponent>=0, so the following calculation * cannot underflow. */ @@ -1502,18 +1513,18 @@ if (signum) { objPtr->internalRep.doubleValue = -HUGE_VAL; } else { objPtr->internalRep.doubleValue = HUGE_VAL; } - objPtr->typePtr = &tclDoubleType; + objPtr->typePtr = tclDoubleType; break; #ifdef IEEE_FLOATING_POINT case sNAN: case sNANFINISH: objPtr->internalRep.doubleValue = MakeNaN(signum, significandWide); - objPtr->typePtr = &tclDoubleType; + objPtr->typePtr = tclDoubleType; break; #endif case INITIAL: /* This case only to silence compiler warning. */ Tcl_Panic("TclParseNumber: state INITIAL can't happen here"); Index: generic/tclStringObj.c ================================================================== --- generic/tclStringObj.c +++ generic/tclStringObj.c @@ -1,5 +1,22 @@ +/* + * Copyright © 1995-1997 Sun Microsystems, Inc. + * Copyright © 1999 Scriptics Corporation. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclStringObj.c -- * * This file contains functions that implement string operations on Tcl * objects. Some string operations work with UTF-8 encoding forms. @@ -22,16 +39,10 @@ * * To allow many appends to be done to an object without constantly * reallocating space, we allocate double the space and use the * internal representation to keep track of how much space is used vs. * allocated. - * - * Copyright © 1995-1997 Sun Microsystems, Inc. - * Copyright © 1999 Scriptics Corporation. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" #include "tclTomMath.h" #include "tclStringRep.h" @@ -57,21 +68,20 @@ static void ExtendUnicodeRepWithString(Tcl_Obj *objPtr, const char *bytes, Tcl_Size numBytes, Tcl_Size numAppendChars); static void FillUnicodeRep(Tcl_Obj *objPtr); static void FreeStringInternalRep(Tcl_Obj *objPtr); +static int GetCharLength(Tcl_Obj *objPtr, Tcl_Size *length); +static int GetRange(tclObjTypeInterfaceArgsStringRange); static void GrowStringBuffer(Tcl_Obj *objPtr, Tcl_Size needed, int flag); static void GrowUnicodeBuffer(Tcl_Obj *objPtr, Tcl_Size needed); static int SetStringFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr); static void SetUnicodeObj(Tcl_Obj *objPtr, const Tcl_UniChar *unicode, Tcl_Size numChars); static Tcl_Size UnicodeLength(const Tcl_UniChar *unicode); static void UpdateStringOfString(Tcl_Obj *objPtr); -#define ISCONTINUATION(bytes) (\ - ((bytes)[0] & 0xC0) == 0x80) - /* * The structure below defines the string Tcl object type by means of * functions that can be invoked by generic object code. */ @@ -79,11 +89,11 @@ "string", /* name */ FreeStringInternalRep, /* freeIntRepPro */ DupStringInternalRep, /* dupIntRepProc */ UpdateStringOfString, /* updateStringProc */ SetStringFromAny, /* setFromAnyProc */ - TCL_OBJTYPE_V0 + 0 }; /* * TCL STRING GROWTH ALGORITHM * @@ -370,15 +380,33 @@ * Frees old internal rep. Allocates memory for new "String" internal * rep. * *---------------------------------------------------------------------- */ - Tcl_Size Tcl_GetCharLength( Tcl_Obj *objPtr) /* The String object to get the num chars * of. */ +{ + int status; + Tcl_Size length; + status = TclObjectDispatch(objPtr, GetCharLength, + string, length, objPtr ,&length); + if (status) { + /* to do + * have Tcl_GetCharLength return a standard result + */ + Tcl_Panic("%s failed", "Tcl_GetCharLength"); + } + return length; +} + +int +GetCharLength( + Tcl_Obj *objPtr + ,Tcl_Size *length +) { String *stringPtr; Tcl_Size numChars = 0; /* @@ -385,11 +413,12 @@ * Quick, no-shimmer return for short string reps. */ if ((objPtr->bytes) && (objPtr->length < 2)) { /* 0 bytes -> 0 chars; 1 byte -> 1 char */ - return objPtr->length; + *length = objPtr->length; + return TCL_OK; } /* * Optimize the case where we're really dealing with a bytearray object; * we don't need to convert to a string to perform the get-length operation. @@ -401,11 +430,12 @@ * because improper bytearrays have worthless internal reps. */ if (TclIsPureByteArray(objPtr)) { (void) Tcl_GetBytesFromObj(NULL, objPtr, &numChars); - return numChars; + *length = numChars; + return TCL_OK; } /* * OK, need to work with the object as a string. */ @@ -420,11 +450,12 @@ if (numChars < 0) { TclNumUtfCharsM(numChars, objPtr->bytes, objPtr->length); stringPtr->numChars = numChars; } - return numChars; + *length = numChars; + return TCL_OK; } Tcl_Size TclGetCharLength( Tcl_Obj *objPtr) /* The String object to get the num chars @@ -479,37 +510,61 @@ * *---------------------------------------------------------------------- */ int TclCheckEmptyString( - Tcl_Obj *objPtr) + Tcl_Interp *interp, + Tcl_Obj *objPtr, + int *res +) { - Tcl_Size length = TCL_INDEX_NONE; + int status; + Tcl_Size length = 0; if (objPtr->bytes == &tclEmptyString) { - return TCL_EMPTYSTRING_YES; + *res = TCL_EMPTYSTRING_YES; + return TCL_OK; } if (TclIsPureByteArray(objPtr) && Tcl_GetCharLength(objPtr) == 0) { - return TCL_EMPTYSTRING_YES; + *res = TCL_EMPTYSTRING_YES; + return TCL_OK; } if (TclListObjIsCanonical(objPtr)) { - TclListObjLengthM(NULL, objPtr, &length); - return length == 0; + status = TclListObjLengthM(interp, objPtr, &length); + if (status) { + return status; + } else { + *res = length == 0; + return TCL_OK; + } } if (TclIsPureDict(objPtr)) { - Tcl_DictObjSize(NULL, objPtr, &length); - return length == 0; + status = Tcl_DictObjSize(interp, objPtr, &length); + if (status) { + return status; + } else { + *res = length == 0; + return TCL_OK; + } } if (objPtr->bytes == NULL) { - return TCL_EMPTYSTRING_UNKNOWN; + if (TclObjectHasInterface(objPtr, string, isEmpty)) { + TclObjectDispatchNoDefault(interp ,status ,objPtr ,string + ,isEmpty ,interp ,objPtr ,res); + return status; + } else { + *res = TCL_EMPTYSTRING_UNKNOWN; + return TCL_OK; + } } - return objPtr->length == 0; + *res = objPtr->length == 0; + return TCL_OK; } /* *---------------------------------------------------------------------- * @@ -644,40 +699,10 @@ * *---------------------------------------------------------------------- */ #undef Tcl_GetUnicodeFromObj -#if !defined(TCL_NO_DEPRECATED) -Tcl_UniChar * -TclGetUnicodeFromObj( - Tcl_Obj *objPtr, /* The object to find the Unicode string - * for. */ - void *lengthPtr) /* If non-NULL, the location where the string - * rep's Tcl_UniChar length should be stored. If - * NULL, no length is stored. */ -{ - String *stringPtr; - - SetStringFromAny(NULL, objPtr); - stringPtr = GET_STRING(objPtr); - - if (stringPtr->hasUnicode == 0) { - FillUnicodeRep(objPtr); - stringPtr = GET_STRING(objPtr); - } - - if (lengthPtr != NULL) { - if (stringPtr->numChars > INT_MAX) { - Tcl_Panic("Tcl_GetUnicodeFromObj with 'int' lengthPtr" - " cannot handle such long strings. Please use 'Tcl_Size'"); - } - *(int *)lengthPtr = (int)stringPtr->numChars; - } - return stringPtr->unicode; -} -#endif /* !defined(TCL_NO_DEPRECATED) */ - Tcl_UniChar * Tcl_GetUnicodeFromObj( Tcl_Obj *objPtr, /* The object to find the unicode string * for. */ Tcl_Size *lengthPtr) /* If non-NULL, the location where the string @@ -720,14 +745,23 @@ *---------------------------------------------------------------------- */ Tcl_Obj * Tcl_GetRange( - Tcl_Obj *objPtr, /* The Tcl object to find the range of. */ - Tcl_Size first, /* First index of the range. */ - Tcl_Size last) /* Last index of the range. */ + Tcl_Obj *objPtr, + Tcl_Size first, + Tcl_Size last) { + Tcl_Obj *resPtr; + TclObjectDispatch(objPtr, GetRange, + string, range, objPtr, first, last, &resPtr); + return resPtr; +} + + +int +GetRange(tclObjTypeInterfaceArgsStringRange) { Tcl_Obj *newObjPtr; /* The Tcl object to find the range of. */ String *stringPtr; Tcl_Size length = 0; if (first < 0) { @@ -745,13 +779,15 @@ if (last < 0 || last >= length) { last = length - 1; } if (last < first) { TclNewObj(newObjPtr); - return newObjPtr; + *resPtrPtr = newObjPtr; + return TCL_OK; } - return Tcl_NewByteArrayObj(bytes + first, last - first + 1); + *resPtrPtr = Tcl_NewByteArrayObj(bytes + first, last - first + 1); + return TCL_OK; } /* * OK, need to work with the object as a string. */ @@ -763,44 +799,52 @@ /* * If numChars is unknown, compute it. */ if (stringPtr->numChars == TCL_INDEX_NONE) { - TclNumUtfCharsM(stringPtr->numChars, objPtr->bytes, objPtr->length); + TclNumUtfCharsM( + stringPtr->numChars, objPtr->bytes, objPtr->length); } if (stringPtr->numChars == objPtr->length) { if (last < 0 || last >= stringPtr->numChars) { last = stringPtr->numChars - 1; } if (last < first) { TclNewObj(newObjPtr); - return newObjPtr; + *resPtrPtr = newObjPtr; + return TCL_OK; } - newObjPtr = Tcl_NewStringObj(objPtr->bytes + first, last - first + 1); + newObjPtr = Tcl_NewStringObj( + objPtr->bytes + first, last - first + 1); /* * Since we know the char length of the result, store it. */ SetStringFromAny(NULL, newObjPtr); stringPtr = GET_STRING(newObjPtr); stringPtr->numChars = newObjPtr->length; - return newObjPtr; + *resPtrPtr = newObjPtr; + return TCL_OK; } FillUnicodeRep(objPtr); stringPtr = GET_STRING(objPtr); } if (last < 0 || last >= stringPtr->numChars) { last = stringPtr->numChars - 1; } if (last < first) { TclNewObj(newObjPtr); - return newObjPtr; + *resPtrPtr = newObjPtr; + return TCL_OK; } - return Tcl_NewUnicodeObj(stringPtr->unicode + first, last - first + 1); + *resPtrPtr = Tcl_NewUnicodeObj( + stringPtr->unicode + first, last - first + 1); + return TCL_OK; } + Tcl_Obj * TclGetRange( Tcl_Obj *objPtr, /* The Tcl object to find the range of. */ Tcl_Size first, /* First index of the range. */ Tcl_Size last) /* Last index of the range. */ @@ -1249,16 +1293,10 @@ } SetStringFromAny(NULL, objPtr); stringPtr = GET_STRING(objPtr); - /* If appended string starts with a continuation byte or a lower surrogate, - * force objPtr to unicode representation. See [7f1162a867] */ - if (bytes && ISCONTINUATION(bytes)) { - Tcl_GetUnicode(objPtr); - stringPtr = GET_STRING(objPtr); - } if (stringPtr->hasUnicode && (stringPtr->numChars) > 0) { AppendUtfToUnicodeRep(objPtr, bytes, toCopy); } else { AppendUtfToUtfRep(objPtr, bytes, toCopy); } @@ -1382,16 +1420,27 @@ { String *stringPtr; Tcl_Size length = 0, numChars; Tcl_Size appendNumChars = TCL_INDEX_NONE; const char *bytes; + int isEmpty, status; - if (TclCheckEmptyString(appendObjPtr) == TCL_EMPTYSTRING_YES) { + status = TclCheckEmptyString(NULL, appendObjPtr, &isEmpty); + /* No way to return an error. Panic. */ + if (status) { + Tcl_Panic("%s: TclCheckEmptyString failed, %s", "Tcl_AppendObjToObj", "appendObjPtr"); + } + + if (isEmpty == TCL_EMPTYSTRING_YES) { return; } - if (TclCheckEmptyString(objPtr) == TCL_EMPTYSTRING_YES) { + status = TclCheckEmptyString(NULL, objPtr, &isEmpty); + if (status) { + Tcl_Panic("%s: TclCheckEmptyString failed, %s", "Tcl_AppendObjToObj", "objPtr"); + } + if (isEmpty == TCL_EMPTYSTRING_YES) { TclSetDuplicateObj(objPtr, appendObjPtr); return; } if ( @@ -1454,17 +1503,10 @@ */ SetStringFromAny(NULL, objPtr); stringPtr = GET_STRING(objPtr); - /* If appended string starts with a continuation byte or a lower surrogate, - * force objPtr to unicode representation. See [7f1162a867] - * This fixes append-3.4, append-3.7 and utf-1.18 testcases. */ - if (ISCONTINUATION(TclGetString(appendObjPtr))) { - Tcl_GetUnicode(objPtr); - stringPtr = GET_STRING(objPtr); - } /* * If objPtr has a valid Unicode rep, then get a Unicode string from * appendObjPtr and append it. */ @@ -3086,11 +3128,11 @@ int flags) { Tcl_Obj *objResultPtr, * const *ov; int binary = 1; Tcl_Size oc, length = 0; - int allowUniChar = 1, requestUniChar = 0, forceUniChar = 0; + int allowUniChar = 1, requestUniChar = 0; Tcl_Size first = objc - 1; /* Index of first value possibly not empty */ Tcl_Size last = 0; /* Index of last value possibly not empty */ int inPlace = (flags & TCL_STRING_IN_PLACE) && !Tcl_IsShared(*objv); /* assert ( objc >= 0 ) */ @@ -3128,13 +3170,11 @@ * Non-empty string rep. Not a pure bytearray, so we won't * create a pure bytearray. */ binary = 0; - if (ov > objv+1 && ISCONTINUATION(TclGetString(objPtr))) { - forceUniChar = 1; - } else if ((objPtr->typePtr) && (objPtr->typePtr != &tclStringType)) { + if ((objPtr->typePtr) && (objPtr->typePtr != &tclStringType)) { /* Prevent shimmer of non-string types. */ allowUniChar = 0; } } } else { @@ -3180,11 +3220,11 @@ } length += numBytes; } } } while (--oc); - } else if ((allowUniChar && requestUniChar) || forceUniChar) { + } else if ((allowUniChar && requestUniChar)) { /* * Result will be pure Tcl_UniChar array. Pre-size it. */ ov = objv; @@ -3218,17 +3258,22 @@ * Loop until a possibly non-empty value is reached. * Keep string rep generation pending when possible. */ do { + int isEmpty, status; /* assert ( pendingPtr == NULL ) */ /* assert ( length == 0 ) */ Tcl_Obj *objPtr = *ov++; + status = TclCheckEmptyString(NULL, objPtr, &isEmpty); + if (status) { + return NULL; + } if (objPtr->bytes == NULL - && TclCheckEmptyString(objPtr) != TCL_EMPTYSTRING_YES) { + && isEmpty != TCL_EMPTYSTRING_YES) { /* No string rep; Take the chance we can avoid making it */ pendingPtr = objPtr; } else { (void)Tcl_GetStringFromObj(objPtr, &length); /* PANIC? */ } @@ -3337,11 +3382,11 @@ unsigned char *src = Tcl_GetBytesFromObj(NULL, objPtr, &more); memcpy(dst, src, more); dst += more; } } - } else if ((allowUniChar && requestUniChar) || forceUniChar) { + } else if ((allowUniChar && requestUniChar)) { /* Efficiently produce a pure Tcl_UniChar array result */ Tcl_UniChar *dst; if (inPlace) { Tcl_Size start; @@ -3476,11 +3521,11 @@ int nocase, /* comparison is not case sensitive */ Tcl_Size reqlength) /* requested length in characters; * TCL_INDEX_NONE to compare whole strings */ { const char *s1, *s2; - int empty, match; + int empty, empty2, match, status; Tcl_Size length, s1len = 0, s2len = 0; memCmpFn_t memCmpFn; if ((reqlength == 0) || (value1Ptr == value2Ptr)) { /* @@ -3547,13 +3592,22 @@ memCmpFn = (memCmpFn_t)(void *)TclUniCharNcmp; } } } } else { - empty = TclCheckEmptyString(value1Ptr); + status = TclCheckEmptyString(NULL, value1Ptr, &empty); + if (status) { + /* No way to report an error */ + Tcl_Panic("TclStringCmp TclCheckEmptyString value1Ptr"); + } + status = TclCheckEmptyString(NULL, value2Ptr, &empty2); + if (status) { + /* No way to report an error */ + Tcl_Panic("TclStringCmp TclCheckEmptyString value2Ptr"); + } if (empty > 0) { - switch (TclCheckEmptyString(value2Ptr)) { + switch (empty2) { case -1: s1 = 0; s1len = 0; s2 = Tcl_GetStringFromObj(value2Ptr, &s2len); break; @@ -3563,11 +3617,11 @@ case 1: default: /* avoid warn: `s2` may be used uninitialized */ match = 0; goto matchdone; } - } else if (TclCheckEmptyString(value2Ptr) > 0) { + } else if (empty2 > 0) { switch (empty) { case -1: s2 = 0; s2len = 0; s1 = Tcl_GetStringFromObj(value1Ptr, &s1len); @@ -3751,10 +3805,36 @@ } firstEnd: TclNewIndexObj(obj, value); return obj; } + +int +TclStringIndexInterface( + Tcl_Interp *interp, Tcl_Obj *objPtr, Tcl_Obj *indexPtr, Tcl_Obj **charPtrPtr) +{ + Tcl_Size index, status; + + status = TclGetIntForIndexM(interp, indexPtr, /*endValue*/ TCL_SIZE_MAX - 1, + &index); + if (status != TCL_OK) { + return status; + } + + if (TclIndexIsFromEnd(index)) { + if (TclObjectInterfaceCall(objPtr, string, indexEnd, + interp, objPtr, index, charPtrPtr) != TCL_OK) { + return TCL_ERROR; + } + } else { + if (TclObjectInterfaceCall(objPtr, string, index, interp, objPtr, + index, charPtrPtr) != TCL_OK) { + return TCL_ERROR; + } + } + return TCL_OK; +} /* *--------------------------------------------------------------------------- * * TclStringLast -- Index: generic/tclStringRep.h ================================================================== --- generic/tclStringRep.h +++ generic/tclStringRep.h @@ -1,20 +1,31 @@ +/* + * Copyright (c) 1995-1997 Sun Microsystems, Inc. + * Copyright (c) 1999 by Scriptics Corporation. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclStringRep.h -- * * This file contains the definition of internal representations of a string * and macros to access it. * * Conceptually, a string is a sequence of Unicode code points. Internally * it may be stored in an encoding form such as a modified version of UTF-8 * or UTF-32. - * - * Copyright (c) 1995-1997 Sun Microsystems, Inc. - * Copyright (c) 1999 by Scriptics Corporation. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #ifndef _TCLSTRINGREP #define _TCLSTRINGREP Index: generic/tclStringTrim.h ================================================================== --- generic/tclStringTrim.h +++ generic/tclStringTrim.h @@ -1,12 +1,6 @@ /* - * tclStringTrim.h -- - * - * This file contains the definition of what characters are to be trimmed - * from a string by [string trim] by default. It's only needed by Tcl's - * implementation; it does not form a public or private API at all. - * * Copyright (c) 1987-1993 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998-2000 Scriptics Corporation. * Copyright (c) 2002 ActiveState Corporation. * Copyright (c) 2003-2013 Donal K. Fellows. @@ -13,10 +7,27 @@ * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclStringTrim.h -- + * + * This file contains the definition of what characters are to be trimmed + * from a string by [string trim] by default. It's only needed by Tcl's + * implementation; it does not form a public or private API at all. + */ + #ifndef TCL_STRING_TRIM_H #define TCL_STRING_TRIM_H /* * Default set of characters to trim in [string trim] and friends. This is a Index: generic/tclStubCall.c ================================================================== --- generic/tclStubCall.c +++ generic/tclStubCall.c @@ -1,12 +1,23 @@ /* - * tclStubCall.c -- - * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclStubCall.c -- + */ + #include "tclInt.h" #ifndef _WIN32 # include #else # define dlopen(a,b) (void *)LoadLibraryW(JOIN(L,a)) Index: generic/tclStubInit.c ================================================================== --- generic/tclStubInit.c +++ generic/tclStubInit.c @@ -1,16 +1,27 @@ /* - * tclStubInit.c -- - * - * This file contains the initializers for the Tcl stub vectors. - * * Copyright © 1998-1999 Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclStubInit.c -- + * + * This file contains the initializers for the Tcl stub vectors. + */ + #include "tclInt.h" #include "tommath_private.h" #include "tclTomMath.h" #ifdef __CYGWIN__ @@ -60,11 +71,17 @@ #undef Tcl_DictObjSize #undef Tcl_SplitList #undef Tcl_SplitPath #undef Tcl_FSSplitPath #undef Tcl_ParseArgsObjv +#undef TclpInetNtoa +#undef TclWinGetServByName +#undef TclWinGetSockOpt +#undef TclWinSetSockOpt +#undef TclWinNToHS #undef TclStaticLibrary +#undef Tcl_BackgroundError #define TclStaticLibrary Tcl_StaticLibrary #undef Tcl_UniCharToUtfDString #undef Tcl_UtfToUniCharDString #undef Tcl_UtfToUniChar #undef Tcl_UniCharLen @@ -71,130 +88,32 @@ #undef TclObjInterpProc #if !defined(_WIN32) && !defined(__CYGWIN__) # undef Tcl_WinConvertError # define Tcl_WinConvertError 0 #endif -#if defined(TCL_NO_DEPRECATED) # undef TclGetStringFromObj # undef TclGetBytesFromObj # undef TclGetUnicodeFromObj # define TclGetStringFromObj 0 # define TclGetBytesFromObj 0 # define TclGetUnicodeFromObj 0 -#endif #undef Tcl_Close #define Tcl_Close 0 #undef Tcl_GetByteArrayFromObj #define Tcl_GetByteArrayFromObj 0 #define TclUnusedStubEntry 0 #define TclUtfCharComplete Tcl_UtfCharComplete #define TclUtfNext Tcl_UtfNext #define TclUtfPrev Tcl_UtfPrev -#if defined(TCL_NO_DEPRECATED) # define TclListObjGetElements 0 # define TclListObjLength 0 # define TclDictObjSize 0 # define TclSplitList 0 # define TclSplitPath 0 # define TclFSSplitPath 0 # define TclParseArgsObjv 0 -#else /* !defined(TCL_NO_DEPRECATED) */ -int TclListObjGetElements(Tcl_Interp *interp, Tcl_Obj *listPtr, - void *objcPtr, Tcl_Obj ***objvPtr) { - Tcl_Size n = TCL_INDEX_NONE; - int result = Tcl_ListObjGetElements(interp, listPtr, &n, objvPtr); - if (objcPtr) { - if ((sizeof(int) != sizeof(size_t)) && (result == TCL_OK) && (n > INT_MAX)) { - if (interp) { - Tcl_AppendResult(interp, "List too large to be processed", (void *)NULL); - } - return TCL_ERROR; - } - *(int *)objcPtr = (int)n; - } - return result; -} -int TclListObjLength(Tcl_Interp *interp, Tcl_Obj *listPtr, - void *lengthPtr) { - Tcl_Size n = TCL_INDEX_NONE; - int result = Tcl_ListObjLength(interp, listPtr, &n); - if (lengthPtr) { - if ((sizeof(int) != sizeof(size_t)) && (result == TCL_OK) && (n > INT_MAX)) { - if (interp) { - Tcl_AppendResult(interp, "List too large to be processed", (void *)NULL); - } - return TCL_ERROR; - } - *(int *)lengthPtr = (int)n; - } - return result; -} -int TclDictObjSize(Tcl_Interp *interp, Tcl_Obj *dictPtr, - void *sizePtr) { - Tcl_Size n = TCL_INDEX_NONE; - int result = Tcl_DictObjSize(interp, dictPtr, &n); - if (sizePtr) { - if ((sizeof(int) != sizeof(size_t)) && (result == TCL_OK) && (n > INT_MAX)) { - if (interp) { - Tcl_AppendResult(interp, "Dict too large to be processed", (void *)NULL); - } - return TCL_ERROR; - } - *(int *)sizePtr = (int)n; - } - return result; -} -int TclSplitList(Tcl_Interp *interp, const char *listStr, void *argcPtr, - const char ***argvPtr) { - Tcl_Size n = TCL_INDEX_NONE; - int result = Tcl_SplitList(interp, listStr, &n, argvPtr); - if (argcPtr) { - if ((sizeof(int) != sizeof(size_t)) && (result == TCL_OK) && (n > INT_MAX)) { - if (interp) { - Tcl_AppendResult(interp, "List too large to be processed", (void *)NULL); - } - Tcl_Free((void *)*argvPtr); - return TCL_ERROR; - } - *(int *)argcPtr = (int)n; - } - return result; -} -void TclSplitPath(const char *path, void *argcPtr, const char ***argvPtr) { - Tcl_Size n = TCL_INDEX_NONE; - Tcl_SplitPath(path, &n, argvPtr); - if (argcPtr) { - if ((sizeof(int) != sizeof(size_t)) && (n > INT_MAX)) { - n = TCL_INDEX_NONE; /* No other way to return an error-situation */ - Tcl_Free((void *)*argvPtr); - *argvPtr = NULL; - } - *(int *)argcPtr = (int)n; - } -} -Tcl_Obj *TclFSSplitPath(Tcl_Obj *pathPtr, void *lenPtr) { - Tcl_Size n = TCL_INDEX_NONE; - Tcl_Obj *result = Tcl_FSSplitPath(pathPtr, &n); - if (lenPtr) { - if ((sizeof(int) != sizeof(size_t)) && result && (n > INT_MAX)) { - Tcl_DecrRefCount(result); - return NULL; - } - *(int *)lenPtr = (int)n; - } - return result; -} -int TclParseArgsObjv(Tcl_Interp *interp, - const Tcl_ArgvInfo *argTable, void *objcPtr, Tcl_Obj *const *objv, - Tcl_Obj ***remObjv) { - Tcl_Size n = (*(int *)objcPtr < 0) ? TCL_INDEX_NONE: (Tcl_Size)*(int *)objcPtr ; - int result = Tcl_ParseArgsObjv(interp, argTable, &n, objv, remObjv); - *(int *)objcPtr = (int)n; - return result; -} -#endif /* !defined(TCL_NO_DEPRECATED) */ #define TclBN_mp_add mp_add #define TclBN_mp_add_d mp_add_d #define TclBN_mp_and mp_and #define TclBN_mp_clamp mp_clamp @@ -1490,8 +1409,39 @@ Tcl_GetWideUIntFromObj, /* 684 */ Tcl_DStringToObj, /* 685 */ 0, /* 686 */ 0, /* 687 */ TclUnusedStubEntry, /* 688 */ + Tcl_NewObjInterface, /* 689 */ + Tcl_NewObjType, /* 690 */ + Tcl_ObjInterfaceSetVersion, /* 691 */ + Tcl_ObjTypeSetFreeInternalRepProc, /* 692 */ + Tcl_ObjTypeSetDupInternalRepProc, /* 693 */ + Tcl_ObjTypeSetUpdateStringProc, /* 694 */ + Tcl_ObjTypeSetSetFromAnyProc, /* 695 */ + Tcl_ObjTypeSetVersion, /* 696 */ + Tcl_ObjInterfaceSetFnListAll, /* 697 */ + Tcl_ObjInterfaceSetFnListAppend, /* 698 */ + Tcl_ObjInterfaceSetFnListAppendList, /* 699 */ + Tcl_ObjInterfaceSetFnListIndex, /* 700 */ + Tcl_ObjInterfaceSetFnListIndexEnd, /* 701 */ + Tcl_ObjInterfaceSetFnListIsSorted, /* 702 */ + Tcl_ObjInterfaceSetFnListLength, /* 703 */ + Tcl_ObjInterfaceSetFnListRange, /* 704 */ + Tcl_ObjInterfaceSetFnListRangeEnd, /* 705 */ + Tcl_ObjInterfaceSetFnListReplace, /* 706 */ + Tcl_ObjInterfaceSetFnListReplaceList, /* 707 */ + Tcl_ObjInterfaceSetFnListReverse, /* 708 */ + Tcl_ObjInterfaceSetFnListSet, /* 709 */ + Tcl_ObjInterfaceSetFnListSetDeep, /* 710 */ + Tcl_ObjInterfaceSetFnStringIndex, /* 711 */ + Tcl_ObjInterfaceSetFnStringIndexEnd, /* 712 */ + Tcl_ObjInterfaceSetFnStringLength, /* 713 */ + Tcl_ObjInterfaceSetFnStringRange, /* 714 */ + Tcl_ObjInterfaceSetFnStringRangeEnd, /* 715 */ + Tcl_ObjTypeSetInterface, /* 716 */ + Tcl_ObjTypeSetName, /* 717 */ + Tcl_ObjInterfaceSetFnStringIsEmpty, /* 718 */ + Tcl_ObjInterfaceSetFnListContains, /* 719 */ }; /* !END!: Do not edit above this line. */ Index: generic/tclStubLib.c ================================================================== --- generic/tclStubLib.c +++ generic/tclStubLib.c @@ -1,18 +1,29 @@ /* - * tclStubLib.c -- - * - * Stub object that will be statically linked into extensions that want - * to access Tcl. - * * Copyright © 1998-1999 Scriptics Corporation. * Copyright © 1998 Paul Duffin. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclStubLib.c -- + * + * Stub object that will be statically linked into extensions that want + * to access Tcl. + */ + #include "tclInt.h" MODULE_SCOPE const TclStubs *tclStubsPtr; MODULE_SCOPE const TclPlatStubs *tclPlatStubsPtr; MODULE_SCOPE const TclIntStubs *tclIntStubsPtr; Index: generic/tclStubLibTbl.c ================================================================== --- generic/tclStubLibTbl.c +++ generic/tclStubLibTbl.c @@ -1,18 +1,29 @@ /* - * tclStubLibTbl.c -- - * - * Stub object that will be statically linked into extensions that want - * to access Tcl. - * * Copyright (c) 1998-1999 by Scriptics Corporation. * Copyright (c) 1998 Paul Duffin. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclStubLibTbl.c -- + * + * Stub object that will be statically linked into extensions that want + * to access Tcl. + */ + #include "tclInt.h" MODULE_SCOPE void *tclStubsHandle; /* Index: generic/tclTest.c ================================================================== --- generic/tclTest.c +++ generic/tclTest.c @@ -1,26 +1,36 @@ /* - * tclTest.c -- - * - * This file contains C command functions for a bunch of additional Tcl - * commands that are used for testing out Tcl's C interfaces. These - * commands are not normally included in Tcl applications; they're only - * used for testing. - * * Copyright © 1993-1994 The Regents of the University of California. * Copyright © 1994-1997 Sun Microsystems, Inc. * Copyright © 1998-2000 Ajuba Solutions. * Copyright © 2003 Kevin B. Kenny. All rights reserved. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ -#define TCL_8_API -#undef BUILD_tcl +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclTest.c -- + * + * This file contains C command functions for a bunch of additional Tcl + * commands that are used for testing out Tcl's C interfaces. These + * commands are not normally included in Tcl applications; they're only + * used for testing. + */ + #undef STATIC_BUILD -#ifndef USE_TCL_STUBS +# undef BUILD_tcl +# ifndef USE_TCL_STUBS # define USE_TCL_STUBS #endif #include "tclInt.h" #ifdef TCL_WITH_EXTERNAL_TOMMATH # include "tommath.h" @@ -511,13 +521,10 @@ ".purify" #endif #ifdef STATIC_BUILD ".static" #endif -#if TCL_UTF_MAX < 4 - ".utf-16" -#endif ; int Tcltest_Init( Tcl_Interp *interp) /* Interpreter for application. */ @@ -542,16 +549,14 @@ if (Tcl_OOInitStubs(interp) == NULL) { return TCL_ERROR; } if (Tcl_GetCommandInfo(interp, "::tcl::build-info", &info)) { -#if TCL_MAJOR_VERSION > 8 if (info.isNativeObjectProc == 2) { Tcl_CreateObjCommand2(interp, "::tcl::test::build-info", info.objProc2, (void *)version, NULL); } else -#endif Tcl_CreateObjCommand(interp, "::tcl::test::build-info", info.objProc, (void *)version, NULL); } if (Tcl_PkgProvideEx(interp, "tcl::test", TCL_PATCH_LEVEL, NULL) == TCL_ERROR) { return TCL_ERROR; @@ -725,10 +730,16 @@ Tcl_CreateObjCommand(interp, "testlutil", TestLutilCmd, NULL, NULL); if (TclObjTest_Init(interp) != TCL_OK) { return TCL_ERROR; + } + if (TcltestObjectInterfaceInit(interp) != TCL_OK) { + return TCL_ERROR; + } + if (TcltestObjectInterfaceListIntegerInit(interp) != TCL_OK) { + return TCL_ERROR; } if (Procbodytest_Init(interp) != TCL_OK) { return TCL_ERROR; } #if TCL_THREADS @@ -808,16 +819,14 @@ if (Tcl_InitStubs(interp, "8.7-", 0) == NULL) { return TCL_ERROR; } if (Tcl_GetCommandInfo(interp, "::tcl::build-info", &info)) { -#if TCL_MAJOR_VERSION > 8 if (info.isNativeObjectProc == 2) { Tcl_CreateObjCommand2(interp, "::tcl::test::build-info", info.objProc2, (void *)version, NULL); } else -#endif Tcl_CreateObjCommand(interp, "::tcl::test::build-info", info.objProc, (void *)version, NULL); } if (Tcl_PkgProvideEx(interp, "tcl::test", TCL_PATCH_LEVEL, NULL) == TCL_ERROR) { return TCL_ERROR; @@ -2057,15 +2066,11 @@ * The procedure below is used as a special freeProc to test how well * Tcl_DStringGetResult handles freeProc's other than free. */ static void SpecialFree( -#if TCL_MAJOR_VERSION > 8 void *blockPtr /* Block to free. */ -#else - char *blockPtr /* Block to free. */ -#endif ) { Tcl_Free(((char *)blockPtr) - 16); } /* @@ -3848,11 +3853,11 @@ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* Argument objects. */ { /* Subcommands supported by this command */ - static const char *const subcommands[] = { + const char* subcommands[] = { "new", "describe", "config", "validate", NULL @@ -5762,28 +5767,29 @@ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ Tcl_Obj *const objv[]) /* The argument objects. */ { struct { -#if !defined(TCL_NO_DEPRECATED) - int n; /* On purpose, not Tcl_Size, in order to demonstrate what happens */ -#else Tcl_Size n; -#endif int m; /* This variable should not be overwritten */ } x = {0, 1}; const char *p; if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "bytearray"); return TCL_ERROR; } + /* Next line produces a "warning: passing argument 3 of ... from incompatible pointer type", + * but that's on purpose: It's exactly what we are testing here */ p = (const char *)Tcl_GetBytesFromObj(interp, objv[1], &x.n); if (p == NULL) { return TCL_ERROR; } +#if !defined(TCL_NO_DEPRECATED) && defined(__clang__) +# pragma clang diagnostic pop +#endif if (x.m != 1) { Tcl_AppendResult(interp, "Tcl_GetBytesFromObj() overwrites variable", (void *)NULL); return TCL_ERROR; } Index: generic/tclTestABSList.c ================================================================== --- generic/tclTestABSList.c +++ generic/tclTestABSList.c @@ -1,6 +1,21 @@ -// Tcl Abstract List test command: "lstring" +/* + * Copyright © 2021, 2024 Nathan Coulter. All rights reserved. + * + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * Functions to test abstract lists. + * + * tclTestABSList.c -- + */ #undef BUILD_tcl #undef STATIC_BUILD #ifndef USE_TCL_STUBS # define USE_TCL_STUBS @@ -14,38 +29,20 @@ */ Tcl_Obj *myNewLStringObj(Tcl_WideInt start, Tcl_WideInt length); static void freeRep(Tcl_Obj* alObj); -static Tcl_Obj* my_LStringObjSetElem(Tcl_Interp *interp, - Tcl_Obj *listPtr, - Tcl_Size numIndcies, - Tcl_Obj *const indicies[], - Tcl_Obj *valueObj); -static void DupLStringRep(Tcl_Obj *srcPtr, Tcl_Obj *copyPtr); -static Tcl_Size my_LStringObjLength(Tcl_Obj *lstringObjPtr); -static int my_LStringObjIndex(Tcl_Interp *interp, - Tcl_Obj *lstringObj, - Tcl_Size index, - Tcl_Obj **charObjPtr); -static int my_LStringObjRange(Tcl_Interp *interp, Tcl_Obj *lstringObj, - Tcl_Size fromIdx, Tcl_Size toIdx, - Tcl_Obj **newObjPtr); -static int my_LStringObjReverse(Tcl_Interp *interp, Tcl_Obj *srcObj, - Tcl_Obj **newObjPtr); -static int my_LStringReplace(Tcl_Interp *interp, - Tcl_Obj *listObj, - Tcl_Size first, - Tcl_Size numToDelete, - Tcl_Size numToInsert, - Tcl_Obj *const insertObjs[]); -static int my_LStringGetElements(Tcl_Interp *interp, - Tcl_Obj *listPtr, - Tcl_Size *objcptr, - Tcl_Obj ***objvptr); +static Tcl_ObjInterfaceListSetDeepProc my_LStringObjSetElemR; +static Tcl_DupInternalRepProc DupLStringRep; +static Tcl_ObjInterfaceListlengthProc my_LStringObjLength; +static Tcl_ObjInterfaceListIndexProc my_LStringObjIndex; +static Tcl_ObjInterfaceListRangeProc my_LStringObjRange; +static Tcl_ObjInterfaceListReverseProc my_LStringObjReverse; +static Tcl_ObjInterfaceListReplaceProc my_LStringReplace; +static Tcl_ObjInterfaceListAllProc my_LStringGetElements; static void lstringFreeElements(Tcl_Obj* lstringObj); -static void UpdateStringOfLString(Tcl_Obj *objPtr); +static Tcl_UpdateStringProc UpdateStringOfLString; /* * Internal Representation of an lstring type value */ @@ -54,190 +51,116 @@ Tcl_Size strlen; // num bytes in string Tcl_Size allocated; // num bytes allocated Tcl_Obj**elements; // elements array, allocated when GetElements is // called } LString; + /* * AbstractList definition of an lstring type */ -static const Tcl_ObjType lstringTypes[11] = { + + +static ObjectType lstringTypes[11] = { {/*0*/ "lstring", freeRep, DupLStringRep, UpdateStringOfLString, NULL, - TCL_OBJTYPE_V2( - my_LStringObjLength, /* Length */ - my_LStringObjIndex, /* Index */ - my_LStringObjRange, /* Slice */ - my_LStringObjReverse, /* Reverse */ - my_LStringGetElements, /* GetElements */ - my_LStringObjSetElem, /* SetElement */ - my_LStringReplace, /* Replace */ - NULL) /* "in" operator */ - }, + 2, + NULL + }, {/*1*/ "lstring", freeRep, DupLStringRep, UpdateStringOfLString, NULL, - TCL_OBJTYPE_V2( - NULL, /* Length */ - my_LStringObjIndex, /* Index */ - my_LStringObjRange, /* Slice */ - my_LStringObjReverse, /* Reverse */ - my_LStringGetElements, /* GetElements */ - my_LStringObjSetElem, /* SetElement */ - my_LStringReplace, /* Replace */ - NULL) /* "in" operator */ + 2, + NULL }, {/*2*/ "lstring", freeRep, DupLStringRep, UpdateStringOfLString, NULL, - TCL_OBJTYPE_V2( - my_LStringObjLength, /* Length */ - NULL, /* Index */ - my_LStringObjRange, /* Slice */ - my_LStringObjReverse, /* Reverse */ - my_LStringGetElements, /* GetElements */ - my_LStringObjSetElem, /* SetElement */ - my_LStringReplace, /* Replace */ - NULL) /* "in" operator */ + 2, + NULL }, {/*3*/ "lstring", freeRep, DupLStringRep, UpdateStringOfLString, NULL, - TCL_OBJTYPE_V2( - my_LStringObjLength, /* Length */ - my_LStringObjIndex, /* Index */ - NULL, /* Slice */ - my_LStringObjReverse, /* Reverse */ - my_LStringGetElements, /* GetElements */ - my_LStringObjSetElem, /* SetElement */ - my_LStringReplace, /* Replace */ - NULL) /* "in" operator */ + 2, + NULL }, {/*4*/ "lstring", freeRep, DupLStringRep, UpdateStringOfLString, NULL, - TCL_OBJTYPE_V2( - my_LStringObjLength, /* Length */ - my_LStringObjIndex, /* Index */ - my_LStringObjRange, /* Slice */ - NULL, /* Reverse */ - my_LStringGetElements, /* GetElements */ - my_LStringObjSetElem, /* SetElement */ - my_LStringReplace, /* Replace */ - NULL) /* "in" operator */ + 2, + NULL }, {/*5*/ "lstring", freeRep, DupLStringRep, UpdateStringOfLString, NULL, - TCL_OBJTYPE_V2( - my_LStringObjLength, /* Length */ - my_LStringObjIndex, /* Index */ - my_LStringObjRange, /* Slice */ - my_LStringObjReverse, /* Reverse */ - NULL, /* GetElements */ - my_LStringObjSetElem, /* SetElement */ - my_LStringReplace, /* Replace */ - NULL) /* "in" operator */ + 2, + NULL }, {/*6*/ "lstring", freeRep, DupLStringRep, UpdateStringOfLString, NULL, - TCL_OBJTYPE_V2( - my_LStringObjLength, /* Length */ - my_LStringObjIndex, /* Index */ - my_LStringObjRange, /* Slice */ - my_LStringObjReverse, /* Reverse */ - my_LStringGetElements, /* GetElements */ - NULL, /* SetElement */ - my_LStringReplace, /* Replace */ - NULL) /* "in" operator */ + 2, + NULL }, {/*7*/ "lstring", freeRep, DupLStringRep, UpdateStringOfLString, NULL, - TCL_OBJTYPE_V2( - my_LStringObjLength, /* Length */ - my_LStringObjIndex, /* Index */ - my_LStringObjRange, /* Slice */ - my_LStringObjReverse, /* Reverse */ - my_LStringGetElements, /* GetElements */ - my_LStringObjSetElem, /* SetElement */ - NULL, /* Replace */ - NULL) /* "in" operator */ + 2, + NULL }, {/*8*/ "lstring", freeRep, DupLStringRep, UpdateStringOfLString, NULL, - TCL_OBJTYPE_V2( - my_LStringObjLength, /* Length */ - my_LStringObjIndex, /* Index */ - my_LStringObjRange, /* Slice */ - my_LStringObjReverse, /* Reverse */ - my_LStringGetElements, /* GetElements */ - my_LStringObjSetElem, /* SetElement */ - my_LStringReplace, /* Replace */ - NULL) /* "in" operator */ + 2, + NULL }, {/*9*/ "lstring", freeRep, DupLStringRep, UpdateStringOfLString, NULL, - TCL_OBJTYPE_V2( - my_LStringObjLength, /* Length */ - my_LStringObjIndex, /* Index */ - my_LStringObjRange, /* Slice */ - my_LStringObjReverse, /* Reverse */ - my_LStringGetElements, /* GetElements */ - my_LStringObjSetElem, /* SetElement */ - my_LStringReplace, /* Replace */ - NULL) /* "in" operator */ + 2, + NULL }, {/*10*/ "lstring", freeRep, DupLStringRep, UpdateStringOfLString, NULL, - TCL_OBJTYPE_V2( - my_LStringObjLength, /* Length */ - my_LStringObjIndex, /* Index */ - my_LStringObjRange, /* Slice */ - my_LStringObjReverse, /* Reverse */ - my_LStringGetElements, /* GetElements */ - my_LStringObjSetElem, /* SetElement */ - my_LStringReplace, /* Replace */ - NULL) /* "in" operator */ + 2, + NULL } }; /* @@ -298,15 +221,16 @@ * None. * *---------------------------------------------------------------------- */ -static Tcl_Size -my_LStringObjLength(Tcl_Obj *lstringObjPtr) +static int +my_LStringObjLength(TCL_UNUSED(Tcl_Interp *), Tcl_Obj *lstringObjPtr, Tcl_Size *lenPtr ) { LString *lstringRepPtr = (LString *)lstringObjPtr->internalRep.twoPtrValue.ptr1; - return lstringRepPtr->strlen; + *lenPtr = lstringRepPtr->strlen; + return TCL_OK; } /* *---------------------------------------------------------------------- @@ -345,11 +269,11 @@ } /* *---------------------------------------------------------------------- * - * my_LStringObjSetElem -- + * my_LStringObjSetElemR -- * * Replace the element value at the given (nested) index with the * valueObj provided. If the lstring obj is shared, a new list is * created conntaining the modifed element. * @@ -362,36 +286,39 @@ * A new obj may be created. * *---------------------------------------------------------------------- */ -static Tcl_Obj* -my_LStringObjSetElem( +static int +my_LStringObjSetElemR( Tcl_Interp *interp, Tcl_Obj *lstringObj, Tcl_Size numIndicies, - Tcl_Obj *const indicies[], - Tcl_Obj *valueObj) + Tcl_Obj *const indices[], + Tcl_Obj *valueObj, + Tcl_Obj **resPtrPtr) { LString *lstringRepPtr = (LString*)lstringObj->internalRep.twoPtrValue.ptr1; Tcl_Size index; int status; - Tcl_Obj *returnObj; + Tcl_Obj *resPtr; if (numIndicies > 1) { Tcl_SetObjResult(interp, - Tcl_ObjPrintf("Multiple indicies not supported by lstring.")); - return NULL; + Tcl_ObjPrintf("Multiple indices not supported by lstring.")); + *resPtrPtr = NULL; + return TCL_ERROR; } - status = Tcl_GetIntForIndex(interp, indicies[0], lstringRepPtr->strlen, &index); + status = Tcl_GetIntForIndex(interp, indices[0], lstringRepPtr->strlen, &index); if (status != TCL_OK) { - return NULL; + resPtrPtr = NULL; + return TCL_ERROR; } - returnObj = Tcl_IsShared(lstringObj) ? Tcl_DuplicateObj(lstringObj) : lstringObj; - lstringRepPtr = (LString*)returnObj->internalRep.twoPtrValue.ptr1; + resPtr = Tcl_IsShared(lstringObj) ? Tcl_DuplicateObj(lstringObj) : lstringObj; + lstringRepPtr = (LString*)resPtr->internalRep.twoPtrValue.ptr1; if (index >= lstringRepPtr->strlen) { index = lstringRepPtr->strlen; lstringRepPtr->strlen++; lstringRepPtr->string = (char*)Tcl_Realloc(lstringRepPtr->string, lstringRepPtr->strlen+1); @@ -407,13 +334,14 @@ lstringRepPtr->strlen--; memmove(sptr, (sptr+1), (lstringRepPtr->strlen - index)); } // else do nothing - Tcl_InvalidateStringRep(returnObj); + Tcl_InvalidateStringRep(resPtr); - return returnObj; + *resPtrPtr = resPtr; + return TCL_OK; } /* *---------------------------------------------------------------------- * @@ -428,32 +356,33 @@ * A new Obj is created. * *---------------------------------------------------------------------- */ -static int my_LStringObjRange( +int my_LStringObjRange( Tcl_Interp *interp, Tcl_Obj *lstringObj, Tcl_Size fromIdx, Tcl_Size toIdx, - Tcl_Obj **newObjPtr) + Tcl_Obj **resPtrPtr) { - Tcl_Obj *rangeObj; + Tcl_Obj *rangeObj, *newObjPtr; LString *lstringRepPtr = (LString*)lstringObj->internalRep.twoPtrValue.ptr1; LString *rangeRep; Tcl_WideInt len = toIdx - fromIdx + 1; if (lstringRepPtr->strlen < fromIdx || lstringRepPtr->strlen < toIdx) { Tcl_SetObjResult(interp, Tcl_ObjPrintf("Range out of bounds ")); + *resPtrPtr = NULL; return TCL_ERROR; } if (len <= 0) { // Return empty value; - *newObjPtr = Tcl_NewObj(); + newObjPtr = Tcl_NewObj(); } else { rangeRep = (LString*)Tcl_Alloc(sizeof(LString)); rangeRep->allocated = len+1; rangeRep->strlen = len; rangeRep->string = (char*)Tcl_Alloc(rangeRep->allocated); @@ -468,12 +397,13 @@ if (rangeRep->strlen > 0) { Tcl_InvalidateStringRep(rangeObj); } else { Tcl_InitStringRep(rangeObj, NULL, 0); } - *newObjPtr = rangeObj; + newObjPtr = rangeObj; } + *resPtrPtr = newObjPtr; return TCL_OK; } /* *---------------------------------------------------------------------- @@ -491,41 +421,30 @@ * *---------------------------------------------------------------------- */ static int -my_LStringObjReverse(Tcl_Interp *interp, Tcl_Obj *srcObj, Tcl_Obj **newObjPtr) +my_LStringObjReverse(Tcl_Interp *interp, Tcl_Obj *srcObj) { LString *srcRep = (LString*)srcObj->internalRep.twoPtrValue.ptr1; - Tcl_Obj *revObj; - LString *revRep = (LString*)Tcl_Alloc(sizeof(LString)); - Tcl_ObjInternalRep itr; Tcl_Size len; - char *srcp, *dstp, *endp; - (void)interp; + char *srcp, *endp; + char temp; + (void)interp; + if (Tcl_IsShared(srcObj)) { + Tcl_Panic("%s called with shared object", "my_LStringObjReverse"); + } + len = srcRep->strlen; - revRep->strlen = len; - revRep->allocated = len+1; - revRep->string = (char*)Tcl_Alloc(revRep->allocated); - revRep->elements = NULL; srcp = srcRep->string; endp = &srcRep->string[len]; - dstp = &revRep->string[len]; - *dstp-- = 0; + endp--; while (srcp < endp) { - *dstp-- = *srcp++; - } - revObj = Tcl_NewObj(); - itr.twoPtrValue.ptr1 = revRep; - itr.twoPtrValue.ptr2 = NULL; - Tcl_StoreInternalRep(revObj, srcObj->typePtr, &itr); - if (revRep->strlen > 0) { - Tcl_InvalidateStringRep(revObj); - } else { - Tcl_InitStringRep(revObj, NULL, 0); - } - *newObjPtr = revObj; + temp = *endp; + *endp-- = *srcp; + *srcp++ = temp; + } return TCL_OK; } /* *---------------------------------------------------------------------- @@ -638,16 +557,16 @@ } static const Tcl_ObjType * my_SetAbstractProc(int ptype) { - const Tcl_ObjType *typePtr = &lstringTypes[0]; /* default value */ + const ObjectType *typePtr = &lstringTypes[0]; /* default value */ if (4 <= ptype && ptype <= 11) { /* Table has no entries for the slots upto setfromany */ typePtr = &lstringTypes[(ptype-3)]; } - return typePtr; + return (Tcl_ObjType *)typePtr; } /* *---------------------------------------------------------------------- @@ -681,11 +600,11 @@ "LENGTH", "INDEX", "SLICE", "REVERSE", "GETELEMENTS", "SETELEMENT", "REPLACE", NULL }; int i = 0; int ptype; - const Tcl_ObjType *lstringTypePtr = &lstringTypes[10]; + const Tcl_ObjType *lstringTypePtr = (Tcl_ObjType *)&lstringTypes[10]; repSize = sizeof(LString); lstringRepPtr = (LString*)Tcl_Alloc(repSize); while (itypePtr; char *p; int bytesNeeded = 0; - int llen, i; + int status; + Tcl_Size i ,llen; /* * Handle empty list case first, so rest of the routine is simpler. */ - llen = typePtr->lengthProc(objPtr); - if (llen <= 0) { + status = my_LStringObjLength(NULL, objPtr, &llen); + if ((status != TCL_OK) || llen <= 0) { Tcl_InitStringRep(objPtr, NULL, 0); return; } /* @@ -858,11 +777,13 @@ for (bytesNeeded = 0, i = 0; i < llen; i++) { Tcl_Obj *elemObj; const char *elemStr; Tcl_Size elemLen; flagPtr[i] = (i ? TCL_DONT_QUOTE_HASH : 0); - typePtr->indexProc(NULL, objPtr, i, &elemObj); + + my_LStringObjIndex(NULL, objPtr, i, &elemObj); + Tcl_IncrRefCount(elemObj); elemStr = Tcl_GetStringFromObj(elemObj, &elemLen); /* Note TclScanElement updates flagPtr[i] */ bytesNeeded += Tcl_ScanCountedElement(elemStr, elemLen, &flagPtr[i]); if (bytesNeeded < 0) { @@ -883,11 +804,11 @@ for (i = 0; i < llen; i++) { Tcl_Obj *elemObj; const char *elemStr; Tcl_Size elemLen; flagPtr[i] |= (i ? TCL_DONT_QUOTE_HASH : 0); - typePtr->indexProc(NULL, objPtr, i, &elemObj); + my_LStringObjIndex(NULL, objPtr, i, &elemObj); Tcl_IncrRefCount(elemObj); elemStr = Tcl_GetStringFromObj(elemObj, &elemLen); p += Tcl_ConvertCountedElement(elemStr, elemLen, p, flagPtr[i]); *p++ = ' '; Tcl_DecrRefCount(elemObj); @@ -993,15 +914,16 @@ } /* * Abstract List Length function */ -static Tcl_Size -lgenSeriesObjLength(Tcl_Obj *objPtr) +static int +lgenSeriesObjLength(TCL_UNUSED(Tcl_Interp *), Tcl_Obj *objPtr, Tcl_Size *lenPtr) { LgenSeries *lgenSeriesRepPtr = (LgenSeries *)objPtr->internalRep.twoPtrValue.ptr1; - return lgenSeriesRepPtr->len; + *lenPtr = lgenSeriesRepPtr->len; + return TCL_OK; } /* * Abstract List Index function */ @@ -1088,27 +1010,24 @@ /* * Abstract List ObjType definition */ -static Tcl_ObjType lgenType = { + +static ObjectType lgenObjectType = { "lgenseries", FreeLgenInternalRep, DupLgenSeriesRep, UpdateStringOfLgen, NULL, /* SetFromAnyProc */ - TCL_OBJTYPE_V2( - lgenSeriesObjLength, - lgenSeriesObjIndex, - NULL, /* slice */ - NULL, /* reverse */ - NULL, /* get elements */ - NULL, /* set element */ - NULL, /* replace */ - NULL) /* "in" operator */ + 0, + NULL }; + +static Tcl_ObjType *lgenTypePtr = (Tcl_ObjType *)&lgenObjectType; + /* * ObjType Duplicate Internal Rep Function */ static void DupLgenSeriesRep( @@ -1122,11 +1041,11 @@ copyLgenSeries->interp = srcLgenSeries->interp; copyLgenSeries->nargs = srcLgenSeries->nargs; copyLgenSeries->len = srcLgenSeries->len; copyLgenSeries->genFnObj = Tcl_DuplicateObj(srcLgenSeries->genFnObj); Tcl_IncrRefCount(copyLgenSeries->genFnObj); - copyPtr->typePtr = &lgenType; + copyPtr->typePtr = lgenTypePtr; copyPtr->internalRep.twoPtrValue.ptr1 = copyLgenSeries; copyPtr->internalRep.twoPtrValue.ptr2 = NULL; return; } @@ -1168,11 +1087,11 @@ // Addd 0 placeholder for index Tcl_ListObjAppendElement(interp, lGenSeriesRepPtr->genFnObj, Tcl_NewIntObj(0)); Tcl_IncrRefCount(lGenSeriesRepPtr->genFnObj); lGenSeriesObj->internalRep.twoPtrValue.ptr1 = lGenSeriesRepPtr; lGenSeriesObj->internalRep.twoPtrValue.ptr2 = NULL; - lGenSeriesObj->typePtr = &lgenType; + lGenSeriesObj->typePtr = lgenTypePtr; if (length > 0) { Tcl_InvalidateStringRep(lGenSeriesObj); } else { Tcl_InitStringRep(lGenSeriesObj, NULL, 0); @@ -1247,10 +1166,94 @@ int Tcl_ABSListTest_Init(Tcl_Interp *interp) { if (Tcl_InitStubs(interp, "8.7-", 0) == NULL) { return TCL_ERROR; } + Tcl_ObjInterface *lgenIfPtr ,*lstringfullPtr ,*lstringNoLengthPtr ,*lstringNoIndexPtr + ,*lstringNoRangePtr ,*lstringNoGetElementsPtr + ,*lstringNoSetElementRPtr ,*lstringNoReplacePtr + ; + + lstringfullPtr = Tcl_NewObjInterface(); + Tcl_ObjInterfaceSetVersion(lstringfullPtr ,1); + Tcl_ObjInterfaceSetFnListAll(lstringfullPtr , my_LStringGetElements); + Tcl_ObjInterfaceSetFnListIndex(lstringfullPtr ,my_LStringObjIndex); + Tcl_ObjInterfaceSetFnListLength(lstringfullPtr ,my_LStringObjLength); + Tcl_ObjInterfaceSetFnListRange(lstringfullPtr ,my_LStringObjRange); + Tcl_ObjInterfaceSetFnListReplace(lstringfullPtr ,my_LStringReplace); + Tcl_ObjInterfaceSetFnListReverse(lstringfullPtr ,my_LStringObjReverse); + Tcl_ObjInterfaceSetFnListSetDeep(lstringfullPtr ,my_LStringObjSetElemR); + Tcl_ObjTypeSetInterface((Tcl_ObjType *)&lstringTypes[0], lstringfullPtr); + Tcl_ObjTypeSetInterface((Tcl_ObjType *)&lstringTypes[4], lstringfullPtr); + Tcl_ObjTypeSetInterface((Tcl_ObjType *)&lstringTypes[8], lstringfullPtr); + Tcl_ObjTypeSetInterface((Tcl_ObjType *)&lstringTypes[9], lstringfullPtr); + Tcl_ObjTypeSetInterface((Tcl_ObjType *)&lstringTypes[10], lstringfullPtr); + + lstringNoLengthPtr = Tcl_NewObjInterface(); + Tcl_ObjInterfaceSetFnListAll(lstringNoLengthPtr , my_LStringGetElements); + Tcl_ObjInterfaceSetFnListIndex(lstringNoLengthPtr ,my_LStringObjIndex); + Tcl_ObjInterfaceSetFnListRange(lstringNoLengthPtr ,my_LStringObjRange); + Tcl_ObjInterfaceSetFnListReplace(lstringNoLengthPtr ,my_LStringReplace); + Tcl_ObjInterfaceSetFnListReverse(lstringNoLengthPtr ,my_LStringObjReverse); + Tcl_ObjInterfaceSetFnListSetDeep(lstringNoLengthPtr ,my_LStringObjSetElemR); + Tcl_ObjTypeSetInterface((Tcl_ObjType *)&lstringTypes[1], lstringNoLengthPtr); + + lstringNoIndexPtr = Tcl_NewObjInterface(); + Tcl_ObjInterfaceSetFnListAll(lstringNoIndexPtr , my_LStringGetElements); + Tcl_ObjInterfaceSetFnListLength(lstringNoIndexPtr ,my_LStringObjLength); + Tcl_ObjInterfaceSetFnListRange(lstringNoIndexPtr ,my_LStringObjRange); + Tcl_ObjInterfaceSetFnListReplace(lstringNoIndexPtr ,my_LStringReplace); + Tcl_ObjInterfaceSetFnListReverse(lstringNoIndexPtr ,my_LStringObjReverse); + Tcl_ObjInterfaceSetFnListSetDeep(lstringNoIndexPtr ,my_LStringObjSetElemR); + Tcl_ObjTypeSetInterface((Tcl_ObjType *)&lstringTypes[2], lstringNoIndexPtr); + + lstringNoRangePtr = Tcl_NewObjInterface(); + Tcl_ObjInterfaceSetFnListAll(lstringNoRangePtr , my_LStringGetElements); + Tcl_ObjInterfaceSetFnListIndex(lstringNoRangePtr ,my_LStringObjIndex); + Tcl_ObjInterfaceSetFnListLength(lstringNoRangePtr ,my_LStringObjLength); + Tcl_ObjInterfaceSetFnListReplace(lstringNoRangePtr ,my_LStringReplace); + Tcl_ObjInterfaceSetFnListReverse(lstringNoRangePtr ,my_LStringObjReverse); + Tcl_ObjInterfaceSetFnListSetDeep(lstringNoRangePtr ,my_LStringObjSetElemR); + Tcl_ObjTypeSetInterface((Tcl_ObjType *)&lstringTypes[3], lstringNoRangePtr); + + lstringNoGetElementsPtr = Tcl_NewObjInterface(); + Tcl_ObjInterfaceSetVersion(lstringNoGetElementsPtr ,1); + Tcl_ObjInterfaceSetFnListIndex(lstringNoGetElementsPtr ,my_LStringObjIndex); + Tcl_ObjInterfaceSetFnListLength(lstringNoGetElementsPtr ,my_LStringObjLength); + Tcl_ObjInterfaceSetFnListRange(lstringNoGetElementsPtr ,my_LStringObjRange); + Tcl_ObjInterfaceSetFnListReplace(lstringNoGetElementsPtr ,my_LStringReplace); + Tcl_ObjInterfaceSetFnListReverse(lstringNoGetElementsPtr ,my_LStringObjReverse); + Tcl_ObjInterfaceSetFnListSetDeep(lstringNoGetElementsPtr ,my_LStringObjSetElemR); + Tcl_ObjTypeSetInterface((Tcl_ObjType *)&lstringTypes[5], lstringNoGetElementsPtr); + + lstringNoSetElementRPtr = Tcl_NewObjInterface(); + Tcl_ObjInterfaceSetVersion(lstringNoSetElementRPtr ,1); + Tcl_ObjInterfaceSetFnListAll(lstringNoSetElementRPtr , my_LStringGetElements); + Tcl_ObjInterfaceSetFnListIndex(lstringNoSetElementRPtr ,my_LStringObjIndex); + Tcl_ObjInterfaceSetFnListLength(lstringNoSetElementRPtr ,my_LStringObjLength); + Tcl_ObjInterfaceSetFnListRange(lstringNoSetElementRPtr ,my_LStringObjRange); + Tcl_ObjInterfaceSetFnListReplace(lstringNoSetElementRPtr ,my_LStringReplace); + Tcl_ObjInterfaceSetFnListReverse(lstringNoSetElementRPtr ,my_LStringObjReverse); + Tcl_ObjTypeSetInterface((Tcl_ObjType *)&lstringTypes[6], lstringfullPtr); + + lstringNoReplacePtr = Tcl_NewObjInterface(); + Tcl_ObjInterfaceSetVersion(lstringNoReplacePtr ,1); + Tcl_ObjInterfaceSetFnListAll(lstringNoReplacePtr , my_LStringGetElements); + Tcl_ObjInterfaceSetFnListIndex(lstringNoReplacePtr ,my_LStringObjIndex); + Tcl_ObjInterfaceSetFnListLength(lstringNoReplacePtr ,my_LStringObjLength); + Tcl_ObjInterfaceSetFnListRange(lstringNoReplacePtr ,my_LStringObjRange); + Tcl_ObjInterfaceSetFnListReverse(lstringNoReplacePtr ,my_LStringObjReverse); + Tcl_ObjInterfaceSetFnListSetDeep(lstringNoReplacePtr ,my_LStringObjSetElemR); + Tcl_ObjTypeSetInterface((Tcl_ObjType *)&lstringTypes[7], lstringNoReplacePtr); + + lgenIfPtr = Tcl_NewObjInterface(); + Tcl_ObjInterfaceSetVersion(lgenIfPtr ,1); + Tcl_ObjInterfaceSetFnListIndex(lgenIfPtr ,lgenSeriesObjIndex); + Tcl_ObjInterfaceSetFnListLength(lgenIfPtr ,lgenSeriesObjLength); + Tcl_ObjTypeSetInterface(lgenTypePtr, lgenIfPtr); + Tcl_CreateObjCommand(interp, "lstring", lLStringObjCmd, NULL, NULL); Tcl_CreateObjCommand(interp, "lgen", lGenObjCmd, NULL, NULL); Tcl_PkgProvide(interp, "abstractlisttest", "1.0.0"); + return TCL_OK; } Index: generic/tclTestObj.c ================================================================== --- generic/tclTestObj.c +++ generic/tclTestObj.c @@ -1,23 +1,34 @@ /* - * tclTestObj.c -- - * - * This file contains C command functions for the additional Tcl commands - * that are used for testing implementations of the Tcl object types. - * These commands are not normally included in Tcl applications; they're - * only used for testing. - * * Copyright © 1995-1998 Sun Microsystems, Inc. * Copyright © 1999 Scriptics Corporation. * Copyright © 2005 Kevin B. Kenny. All rights reserved. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ -#undef BUILD_tcl +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclTestObj.c -- + * + * This file contains procedures for the additional Tcl commands + * that are used for testing implementations of the Tcl_ObjType structs. + * These commands are built into a separate Tcl executable used to run the + * tests. + */ + #ifndef USE_TCL_STUBS +# undef BUILD_tcl # define USE_TCL_STUBS #endif #include "tclInt.h" #ifdef TCL_WITH_EXTERNAL_TOMMATH # include "tommath.h" @@ -43,10 +54,40 @@ static Tcl_ObjCmdProc TestintobjCmd; static Tcl_ObjCmdProc TestlistobjCmd; static Tcl_ObjCmdProc TestobjCmd; static Tcl_ObjCmdProc TeststringobjCmd; static Tcl_ObjCmdProc TestbigdataCmd; + +static int TestStringObjIsEmpty(tclObjTypeInterfaceArgsStringIsEmpty); +static int TestListObjLength(tclObjTypeInterfaceArgsListLength); +static void v2UpdateString(Tcl_Obj *objPtr); + +static ObjectType v2TestListObjectType = { + "testlist", /* name */ + NULL, /* freeIntRepProc */ + NULL, /* dupIntRepProc */ + v2UpdateString, /* updateStringProc */ + NULL, /* setFromAnyProc */ + 2, /* This is a version objType, which doesn't have an StringIsEmpty proc */ + NULL +}; + +Tcl_ObjType *v2TestListTypePtr = (Tcl_ObjType *)&v2TestListObjectType; + +static ObjectType v3TestListObjectType = { + "testlist2", /* name */ + NULL, /* freeIntRepProc */ + NULL, /* dupIntRepProc */ + NULL, /* updateStringProc */ + NULL, /* setFromAnyProc */ + 3, /* This is a version objType, which doesn't have an StringIsEmpty proc */ + NULL +}; +Tcl_ObjType *v3TestListTypePtr = (Tcl_ObjType *)&v3TestListObjectType; + + + #define VARPTR_KEY "TCLOBJTEST_VARPTR" #define NUMBER_OF_OBJECT_VARS 20 static void VarPtrDeleteProc(void *clientData, TCL_UNUSED(Tcl_Interp *)) @@ -69,19 +110,19 @@ /* *---------------------------------------------------------------------- * * TclObjTest_Init -- * - * This function creates additional commands that are used to test the - * Tcl object support. + * Creates additional commands that are used to test + * Tcl_Obj support. * * Results: - * Returns a standard Tcl completion code, and leaves an error - * message in the interp's result if an error occurs. + * Returns a standard Tcl completion code, and if an error occurs, leaves an + * error message in the interp result. * * Side effects: - * Creates and registers several new testing commands. + * Creates new commands used by tests. * *---------------------------------------------------------------------- */ int @@ -102,10 +143,23 @@ } Tcl_SetAssocData(interp, VARPTR_KEY, VarPtrDeleteProc, varPtr); for (i = 0; i < NUMBER_OF_OBJECT_VARS; i++) { varPtr[i] = NULL; } + + + Tcl_ObjInterface * oiPtr = Tcl_NewObjInterface(); + Tcl_ObjInterfaceSetVersion(oiPtr ,2); + Tcl_ObjInterfaceSetFnListLength(oiPtr , TestListObjLength); + Tcl_ObjTypeSetInterface(v2TestListTypePtr ,oiPtr); + + oiPtr = Tcl_NewObjInterface(); + Tcl_ObjInterfaceSetVersion(oiPtr ,3); + Tcl_ObjInterfaceSetFnListLength(oiPtr , TestListObjLength); + Tcl_ObjInterfaceSetFnStringIsEmpty(oiPtr , TestStringObjIsEmpty); + Tcl_ObjTypeSetInterface(v3TestListTypePtr ,oiPtr); + Tcl_CreateObjCommand(interp, "testbignumobj", TestbignumobjCmd, NULL, NULL); Tcl_CreateObjCommand(interp, "testbooleanobj", TestbooleanobjCmd, NULL, NULL); @@ -150,11 +204,11 @@ TCL_UNUSED(void *), Tcl_Interp *interp, /* Tcl interpreter */ int objc, /* Argument count */ Tcl_Obj *const objv[]) /* Argument vector */ { - static const char *const subcmds[] = { + const char *const subcmds[] = { "set", "get", "mult10", "div10", "iseven", "radixsize", NULL }; enum options { BIGNUM_SET, BIGNUM_GET, BIGNUM_MULT10, BIGNUM_DIV10, BIGNUM_ISEVEN, BIGNUM_RADIXSIZE @@ -884,11 +938,11 @@ Tcl_Interp *interp, /* Tcl interpreter */ int objc, /* Number of arguments */ Tcl_Obj *const objv[]) /* Argument objects */ { /* Subcommands supported by this command */ - static const char* const subcommands[] = { + const char* const subcommands[] = { "set", "get", "replace", "indexmemcheck", "getelementsmemcheck", @@ -917,11 +971,11 @@ varPtr = GetVarPtr(interp); if (GetVariableIndex(interp, objv[2], &varIndex) != TCL_OK) { return TCL_ERROR; } if (Tcl_GetIndexFromObj(interp, objv[1], subcommands, "command", - 0, &cmdIndex) != TCL_OK) { + TCL_INDEX_TEMP_TABLE, &cmdIndex) != TCL_OK) { return TCL_ERROR; } switch(cmdIndex) { case LISTOBJ_SET: if ((varPtr[varIndex] != NULL) && !Tcl_IsShared(varPtr[varIndex])) { @@ -975,16 +1029,18 @@ Tcl_Obj *objP; if (Tcl_ListObjIndex(interp, varPtr[varIndex], i, &objP) != TCL_OK) { return TCL_ERROR; } - if (objP->refCount < 0) { - Tcl_SetObjResult(interp, Tcl_NewStringObj( - "Tcl_ListObjIndex returned object with ref count < 0", - TCL_INDEX_NONE)); - /* Keep looping since we are also looping for leaks */ - } + Tcl_IncrRefCount(objP); + Tcl_DecrRefCount(objP); + if (objP->refCount < 0) { + Tcl_SetObjResult(interp, Tcl_NewStringObj( + "Tcl_ListObjIndex returned object with ref count < 0", + TCL_INDEX_NONE)); + /* Keep looping since we are also looping for leaks */ + } Tcl_BounceRefCount(objP); } break; case LISTOBJ_GETELEMENTSMEMCHECK: @@ -1049,36 +1105,40 @@ * Creates and frees objects. * *---------------------------------------------------------------------- */ -static Tcl_Size V1TestListObjLength(TCL_UNUSED(Tcl_Obj *)) { - return 100; +void v2UpdateString(Tcl_Obj *objPtr) { + char *val, *newval; + Tcl_Size size; + val = (char *)"hello"; + size = strlen(val) + 1; + newval = (char *)Tcl_Alloc(size); + strcpy(newval, val); + newval[size] = 0; + objPtr->bytes = newval; + objPtr->length = size; + return; +} + +static int TestListObjLength( + TCL_UNUSED(Tcl_Interp *) + ,TCL_UNUSED(Tcl_Obj *) + ,Tcl_Size *size +) { + *size = 100; + return TCL_OK; } -static int V1TestListObjIndex( - TCL_UNUSED(Tcl_Interp *), - TCL_UNUSED(Tcl_Obj *), - TCL_UNUSED(Tcl_Size), - Tcl_Obj **objPtr) +static int TestStringObjIsEmpty( + TCL_UNUSED(Tcl_Interp *) + ,TCL_UNUSED(Tcl_Obj*) + ,int *res) { - *objPtr = Tcl_NewStringObj("This indexProc should never be accessed (bug: e58d7e19e9)", -1); + *res = 1; return TCL_OK; } - -static const Tcl_ObjType v1TestListType = { - "testlist", /* name */ - NULL, /* freeIntRepProc */ - NULL, /* dupIntRepProc */ - NULL, /* updateStringProc */ - NULL, /* setFromAnyProc */ - offsetof(Tcl_ObjType, indexProc), /* This is a V1 objType, which doesn't have an indexProc */ - V1TestListObjLength, /* always return 100, doesn't really matter */ - V1TestListObjIndex, /* should never be accessed, because this objType = V1*/ - NULL, NULL, NULL, NULL, NULL, NULL -}; - static int TestobjCmd( TCL_UNUSED(void *), Tcl_Interp *interp, /* Current interpreter. */ @@ -1087,11 +1147,11 @@ { Tcl_Size varIndex, destIndex; int i; const Tcl_ObjType *targetType; Tcl_Obj **varPtr; - static const char *const subcommands[] = { + const char *subcommands[] = { "freeallvars", "bug3598580", "buge58d7e19e9", "types", "objtype", "newobj", "set", "assign", "convert", "duplicate", "invalidateStringRep", "refcount", "type", NULL @@ -1142,12 +1202,24 @@ return TCL_OK; case TESTOBJ_BUGE58D7E19E9: if (objc != 3) { goto wrongNumArgs; } else { - Tcl_Obj *listObjPtr = Tcl_NewStringObj(Tcl_GetString(objv[2]), -1); - listObjPtr->typePtr = &v1TestListType; + int v; + Tcl_GetIntFromObj(NULL, objv[2],&v); + Tcl_Obj *listObjPtr = Tcl_NewObj(); + switch (v) { + case 2: + listObjPtr->typePtr = v2TestListTypePtr; + break; + case 3: + listObjPtr->typePtr = v3TestListTypePtr; + break; + default: + return TCL_ERROR; + } + Tcl_InvalidateStringRep(listObjPtr); Tcl_SetObjResult(interp, listObjPtr); } return TCL_OK; case TESTOBJ_TYPES: if (objc != 2) { ADDED generic/tclTestObjInterface.c Index: generic/tclTestObjInterface.c ================================================================== --- /dev/null +++ generic/tclTestObjInterface.c @@ -0,0 +1,540 @@ +/* + * Copyright © 2021 Nathan Coulter + * + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclTestObjInterface.c -- + * + * This file contains C command functions for the additional Tcl commands + * that are used for testing implementations of the Tcl object types. + * These commands are not normally included in Tcl applications; they're + * only used for testing. + */ + +#include "tcl.h" +#include "tclInt.h" + +/* + * Prototypes for functions defined later in this file: + */ +typedef struct indexHex { + int refCount; + Tcl_Size offset; +} indexHex; + + +int TcltestObjectInterfaceInit(Tcl_Interp *interp); + +int NewTestIndexHex ( + ClientData, Tcl_Interp *interp, Tcl_Size argc, Tcl_Obj *const objv[]); +static void DupTestIndexHexInternalRep(Tcl_Obj *srcPtr, Tcl_Obj *copyPtr); +static void FreeTestIndexHexInternalRep(Tcl_Obj *objPtr); +static int SetTestIndexHexFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr); +static void UpdateStringOfTestIndexHex(Tcl_Obj *listPtr); + +static Tcl_ObjInterfaceStringIndexProc indexHexListStringIndex; +static Tcl_ObjInterfaceStringIndexEndProc indexHexListStringIndexEnd; +static Tcl_ObjInterfaceStringLengthProc indexHexListStringLength; +static int indexHexStringListIndexFromStringIndex( + Tcl_Size *index, Tcl_Size *itemchars, Tcl_Size *totalitems); +static Tcl_ObjInterfaceStringRangeProc indexHexListStringRange; +static Tcl_ObjInterfaceStringRangeEndProc indexHexListStringRangeEnd; +static Tcl_ObjInterfaceListAllProc indexHexListObjGetElements; +static Tcl_ObjInterfaceListAppendProc indexHexListObjAppendElement; +static Tcl_ObjInterfaceListAppendlistProc indexHexListObjAppendList; +static Tcl_ObjInterfaceListIndexProc indexHexListObjIndex; +static Tcl_ObjInterfaceListIndexEndProc indexHexListObjIndexEnd; +static Tcl_ObjInterfaceListIsSortedProc indexHexListObjIsSorted; +static Tcl_ObjInterfaceListlengthProc indexHexListObjLength; +static Tcl_ObjInterfaceListRangeProc indexHexListObjRange; +static Tcl_ObjInterfaceListRangeEndProc indexHexListObjRangeEnd; +static Tcl_ObjInterfaceListReplaceProc indexHexListObjReplace; +static Tcl_ObjInterfaceListSetProc indexHexListObjSet; +static Tcl_ObjInterfaceListSetDeepProc indexHexListObjSetDeep; + +static int indexHexListErrorIndeterminate (Tcl_Interp *interp); +static int indexHexListErrorReadOnly (Tcl_Interp *interp); + + +Tcl_ObjType *testIndexHexTypePtr; + + +int TcltestObjectInterfaceInit(Tcl_Interp *interp) { + testIndexHexTypePtr = Tcl_NewObjType(); + Tcl_ObjTypeSetName(testIndexHexTypePtr ,(char *)"testindexHex"); + Tcl_ObjTypeSetFreeInternalRepProc(testIndexHexTypePtr , FreeTestIndexHexInternalRep); + Tcl_ObjTypeSetDupInternalRepProc(testIndexHexTypePtr, DupTestIndexHexInternalRep); + Tcl_ObjTypeSetUpdateStringProc(testIndexHexTypePtr, UpdateStringOfTestIndexHex); + Tcl_ObjTypeSetSetFromAnyProc(testIndexHexTypePtr ,SetTestIndexHexFromAny); + Tcl_ObjTypeSetVersion(testIndexHexTypePtr ,2); + + Tcl_ObjInterface * oiPtr = Tcl_NewObjInterface(); + Tcl_ObjInterfaceSetVersion(oiPtr ,1); + + Tcl_ObjInterfaceSetFnStringIndex(oiPtr ,indexHexListStringIndex); + Tcl_ObjInterfaceSetFnStringIndexEnd(oiPtr ,indexHexListStringIndexEnd); + Tcl_ObjInterfaceSetFnStringLength(oiPtr ,indexHexListStringLength); + Tcl_ObjInterfaceSetFnStringRange(oiPtr ,indexHexListStringRange); + Tcl_ObjInterfaceSetFnStringRangeEnd(oiPtr ,indexHexListStringRangeEnd); + + Tcl_ObjInterfaceSetFnListAll(oiPtr ,indexHexListObjGetElements); + Tcl_ObjInterfaceSetFnListAppend(oiPtr ,indexHexListObjAppendElement); + Tcl_ObjInterfaceSetFnListAppendList(oiPtr ,indexHexListObjAppendList); + Tcl_ObjInterfaceSetFnListIndex(oiPtr ,indexHexListObjIndex); + Tcl_ObjInterfaceSetFnListIndexEnd(oiPtr ,indexHexListObjIndexEnd); + Tcl_ObjInterfaceSetFnListIsSorted(oiPtr ,indexHexListObjIsSorted); + Tcl_ObjInterfaceSetFnListLength(oiPtr ,indexHexListObjLength); + Tcl_ObjInterfaceSetFnListRange(oiPtr ,indexHexListObjRange); + Tcl_ObjInterfaceSetFnListRangeEnd(oiPtr ,indexHexListObjRangeEnd); + Tcl_ObjInterfaceSetFnListReplace(oiPtr ,indexHexListObjReplace); + Tcl_ObjInterfaceSetFnListSet(oiPtr ,indexHexListObjSet); + Tcl_ObjInterfaceSetFnListSetDeep(oiPtr ,indexHexListObjSetDeep); + + Tcl_ObjTypeSetInterface(testIndexHexTypePtr ,oiPtr); + + Tcl_CreateObjCommand2(interp, "testindexhex", NewTestIndexHex, NULL, NULL); + return TCL_OK; +} + + + +int NewTestIndexHex ( + TCL_UNUSED(void *), + Tcl_Interp *interp, + Tcl_Size argc, + Tcl_Obj *const objv[]) +{ + Tcl_WideInt offset; + Tcl_ObjInternalRep intrep; + if (argc > 2) { + if (interp != NULL) { + Tcl_SetObjResult(interp, Tcl_NewStringObj("too many arguments", -1)); + return TCL_ERROR; + } + } + if (argc == 2) { + if (Tcl_GetWideIntFromObj(interp, objv[1], &offset) != TCL_OK) { + return TCL_ERROR; + } + if (offset < 0) { + Tcl_SetObjResult(interp, Tcl_NewStringObj("bad offset", -1)); + return TCL_ERROR; + } + } else { + offset = 0; + } + Tcl_Obj *objPtr = Tcl_NewObj(); + Tcl_InvalidateStringRep(objPtr); + + indexHex *indexHexPtr = (indexHex *)Tcl_Alloc(sizeof(indexHex)); + indexHexPtr->refCount = 1; + indexHexPtr->offset = offset; + intrep.twoPtrValue.ptr1 = indexHexPtr; + Tcl_StoreInternalRep(objPtr, testIndexHexTypePtr, &intrep); + Tcl_SetObjResult(interp, objPtr); + return TCL_OK; +} + + +static void +DupTestIndexHexInternalRep( + TCL_UNUSED(Tcl_Obj *), + TCL_UNUSED(Tcl_Obj *)) +{ + return; +} + + +static void +FreeTestIndexHexInternalRep(Tcl_Obj *objPtr) +{ + indexHex *indexHexPtr = (indexHex *)objPtr->internalRep.twoPtrValue.ptr1; + if (--indexHexPtr->refCount == 0) { + Tcl_Free(indexHexPtr); + } + return; +} + + +static int +SetTestIndexHexFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr) +{ + if (TclHasInternalRep(objPtr, testIndexHexTypePtr)) { + return TCL_OK; + } else { + if (interp != NULL) { + Tcl_SetObjResult(interp, + Tcl_NewStringObj("can not set an existing value to this type", -1)); + } + return TCL_ERROR; + } +} + + +static void +UpdateStringOfTestIndexHex( + TCL_UNUSED(Tcl_Obj *)) +{ + return; +} + + + +static int indexHexListStringIndex(tclObjTypeInterfaceArgsStringIndex) { + Tcl_Obj *hexPtr; + int status; + Tcl_Size itemchars, totalitems; + + status = indexHexStringListIndexFromStringIndex( + &index, &itemchars, &totalitems); + if (status != TCL_OK) { + return TCL_ERROR; + } + + status = indexHexListObjIndex(interp, objPtr, totalitems, &hexPtr); + if (status != TCL_OK) { + return TCL_ERROR; + } + + if (index == itemchars - 1) { + /* index refers to the space delimiter after the item. */ + *resPtrPtr = Tcl_NewStringObj(" ", -1); + } else { + *resPtrPtr = Tcl_GetRange(hexPtr, index, index); + } + Tcl_DecrRefCount(hexPtr); + return status; +} + + +static int indexHexListErrorIndeterminate (Tcl_Interp *interp) { + Tcl_SetObjResult(interp, + Tcl_NewStringObj("list length indeterminate", -1)); + Tcl_SetErrorCode(interp, "TCL", "VALUE", "INDEX", "INDETERMINATE", NULL); + return TCL_ERROR; +} + + +static int indexHexListErrorReadOnly (Tcl_Interp *interp) { + if (interp != NULL) { + Tcl_SetObjResult(interp, + Tcl_NewStringObj("list length indeterminate", -1)); + Tcl_SetErrorCode(interp, "TCL", "VALUE", "INDEX", "INTERFACE", + "READONLY", NULL); + } + return TCL_ERROR; +} + + +static int indexHexStringListIndexFromStringIndex( + Tcl_Size *indexPtr, Tcl_Size *itemcharsPtr, Tcl_Size *totalitemsPtr) +{ + Tcl_Size itemoffset, last = 0, power = 1, lasttotalchars = 0, newitems, + top, totalchars = 0; + + /* add 1 for the space after the item */ + *itemcharsPtr = power + 1; + *totalitemsPtr = 0; + + /* Count the number of characters in the items that contain fewer + * characters than the item containing the requested index. */ + while (1) { + top = 1u << (4 * power); + if (top < 1u << (4 * (power - 1))) { + /* operation wrapped around */ + power -= 1; + break; + } + newitems = top - last; + lasttotalchars = totalchars; + totalchars += newitems * *itemcharsPtr; + last = top; + if (*indexPtr < totalchars) { + break; + } + power += 1; + *itemcharsPtr += 1; + *totalitemsPtr += newitems; + } + + *indexPtr -= lasttotalchars; + /* Determine how many items containing the same number of characters + * precede the requested item. */ + itemoffset = *indexPtr / *itemcharsPtr ; + *indexPtr = *indexPtr % *itemcharsPtr; + /* Add the number of new characters. */ + *totalitemsPtr += itemoffset; + return TCL_OK; +} + + +static int indexHexListStringIndexEnd( + Tcl_Interp *interp, + TCL_UNUSED(Tcl_Obj *), + TCL_UNUSED(Tcl_Size), + TCL_UNUSED(Tcl_Obj **) +) { + return indexHexListErrorIndeterminate(interp); +} + +static int indexHexListStringLength( + TCL_UNUSED(Tcl_Obj *) + ,Tcl_Size *length +) { + *length = -1; + return TCL_ERROR; +} + +static int indexHexListStringRange(tclObjTypeInterfaceArgsStringRange) { + Tcl_Obj *itemPtr, *item2Ptr, *resPtr; + Tcl_Size index = first, status; + Tcl_Size itemchars, needed, rangeLength, newStringLength, + stringLength, totalitems; + + if (last < first) { + *resPtrPtr = Tcl_NewStringObj("", -1); + return TCL_OK; + } + + status = indexHexStringListIndexFromStringIndex( + &index, &itemchars, &totalitems); + if (status != TCL_OK) { + return status; + } + + status = indexHexListObjIndex(NULL, objPtr, totalitems, &itemPtr); + if (status != TCL_OK) { + return status; + } + + rangeLength = last - first + 1; + + resPtr = Tcl_GetRange(itemPtr, index, index + rangeLength - 1); + Tcl_DecrRefCount(itemPtr); + + stringLength = Tcl_GetCharLength(resPtr); + if (stringLength < rangeLength) { + needed = rangeLength - stringLength; + while (needed > 0) { + totalitems++; + status = indexHexListObjIndex(NULL, objPtr, totalitems, &itemPtr); + if (status != TCL_OK) { + return status; + } + Tcl_AppendToObj(resPtr, " ", 1); + stringLength += newStringLength; + needed -= 1; + if (needed > 0) { + newStringLength = Tcl_GetCharLength(itemPtr); + if (newStringLength >= needed) { + item2Ptr = Tcl_GetRange(itemPtr, 0, needed-1); + newStringLength = Tcl_GetCharLength(item2Ptr); + Tcl_AppendObjToObj(resPtr, item2Ptr); + Tcl_DecrRefCount(item2Ptr); + } else { + Tcl_AppendObjToObj(resPtr, itemPtr); + } + stringLength += newStringLength; + needed -= newStringLength; + } + Tcl_DecrRefCount(itemPtr); + } + } + *resPtrPtr = resPtr; + return TCL_OK; +} + +static int indexHexListStringRangeEnd( + TCL_UNUSED(Tcl_Obj *),/* The Tcl object to find the range of. */ + TCL_UNUSED(Tcl_Size),/* First index of the range. */ + TCL_UNUSED(Tcl_Size), /* Last index of the range. */ + Tcl_Obj **resultPtr +) { + *resultPtr = NULL; + return TCL_OK; +} + + + +static int +indexHexListObjGetElements( + Tcl_Interp *interp, /* Used to report errors if not NULL. */ + TCL_UNUSED(Tcl_Obj *),/* List object for which an element array + * is to be returned. */ + TCL_UNUSED(Tcl_Size *),/* Where to store the count of objects + * referenced by objv. */ + TCL_UNUSED(Tcl_Obj ***)/* Where to store the pointer to an + * array of */ +) +{ + if (interp != NULL) { + Tcl_SetObjResult(interp,Tcl_NewStringObj("infinite list", -1)); + } + return TCL_ERROR; +} + + +static int +indexHexListObjAppendElement( + Tcl_Interp *interp, /* Used to report errors if not NULL. */ + TCL_UNUSED(Tcl_Obj *),/* List object to append objPtr to. */ + TCL_UNUSED(Tcl_Obj *)/* Object to append to listPtr's list. */ +) +{ + indexHexListErrorReadOnly(interp); + return TCL_ERROR; +} + + +static int +indexHexListObjAppendList( + Tcl_Interp *interp, /* Used to report errors if not NULL. */ + TCL_UNUSED(Tcl_Obj *), /* List object to append elements to. */ + TCL_UNUSED(Tcl_Obj *) /* List obj with elements to append. */ +) +{ + indexHexListErrorReadOnly(interp); + return TCL_ERROR; +} + + +static int +indexHexListObjIndex( + TCL_UNUSED(Tcl_Interp *),/* Used to report errors if not NULL. */ \ + TCL_UNUSED(Tcl_Obj *), /* List object to index into. */ \ + Tcl_Size index, /* Index of element to return. */ \ + Tcl_Obj **objPtrPtr /* The resulting Tcl_Obj* is stored here. */ +) +{ + Tcl_Obj *resPtr; + resPtr = Tcl_ObjPrintf("%" TCL_T_MODIFIER "x", index); + *objPtrPtr = resPtr; + return TCL_OK; +} + + +static int +indexHexListObjIndexEnd( + Tcl_Interp * interp,/* Used to report errors if not NULL. */ \ + TCL_UNUSED(Tcl_Obj *),/* List object to index into. */ \ + TCL_UNUSED(Tcl_Size),/* Index of element to return. */ \ + TCL_UNUSED(Tcl_Obj **)/* The resulting Tcl_Obj* is stored here. */ +) +{ + return indexHexListErrorIndeterminate(interp); +} + + +static int indexHexListObjIsSorted( + TCL_UNUSED(Tcl_Interp *), /* Used to report errors */ + TCL_UNUSED(Tcl_Obj *), /* The list in question */ + TCL_UNUSED(size_t) /* flags */ +) +{ + return 1; +} + + +static int +indexHexListObjLength( + TCL_UNUSED(Tcl_Interp *), /* Used to report errors if not NULL. */ + TCL_UNUSED(Tcl_Obj *), /* List object whose #elements to return. */ + Tcl_Size *lenPtr /* The resulting length is stored here. */ +) +{ + *lenPtr = -1; + return TCL_OK; +} + + +static int +indexHexListObjRange(tclObjTypeInterfaceArgsListRange) +{ + Tcl_Obj *itemPtr, *resPtr; + Tcl_Size length; + int status; + resPtr = Tcl_NewListObj(0, NULL); + status = Tcl_ListObjLength(interp, listPtr, &length); + if (!status) { + *resPtrPtr = NULL; + return TCL_OK; + } + while (fromIdx <= length && fromIdx <= toIdx) { + indexHexListObjIndex(interp, listPtr, fromIdx, &itemPtr); + if ( + Tcl_ListObjAppendElement(interp, resPtr, itemPtr) != TCL_OK + ) { + Tcl_DecrRefCount(resPtr); + *resPtrPtr = NULL; + return TCL_OK; + } + fromIdx++; + } + *resPtrPtr = resPtr; + return TCL_OK; +} + + +static int +indexHexListObjRangeEnd(tclObjTypeInterfaceArgsListRangeEnd) { + if (fromAnchor == 1 || toAnchor == 1) { + indexHexListErrorIndeterminate(interp); + *resPtrPtr = NULL; + return TCL_OK; + } + return indexHexListObjRange(interp, listPtr, fromIdx, toIdx, resPtrPtr); +} + + +static int +indexHexListObjReplace( + Tcl_Interp *interp, /* Used for error reporting if not NULL. */ \ + TCL_UNUSED(Tcl_Obj *), /* List object whose elements to replace. */ \ + TCL_UNUSED(Tcl_Size), /* Index of first element to replace. */ \ + TCL_UNUSED(Tcl_Size), /* Number of elements to replace. */ \ + TCL_UNUSED(Tcl_Size), /* Number of objects to insert. */ \ + /* An array of objc pointers to Tcl \ + * objects to insert. */ \ + TCL_UNUSEDVAR(Tcl_Obj *const insertObjs[]) +) +{ + indexHexListErrorReadOnly(interp); + return TCL_ERROR; +} + + +static int +indexHexListObjSet( + Tcl_Interp *interp, /* Tcl interpreter; used for error reporting + * if not NULL. */ + TCL_UNUSED(Tcl_Obj *), /* List object in which element should be + * stored. */ + TCL_UNUSED(Tcl_Size), /* Index of element to store. */ + TCL_UNUSED(Tcl_Obj *)/* Tcl object to store in the designated list + * element. */ +) +{ + indexHexListErrorReadOnly(interp); + return TCL_ERROR; +} + + +static int indexHexListObjSetDeep ( + Tcl_Interp *interp, /* Tcl interpreter. */ \ + TCL_UNUSED(Tcl_Obj *), /* Pointer to the list being modified. */ \ + TCL_UNUSED(Tcl_Size), /* Number of index args. */ \ + TCL_UNUSEDVAR(Tcl_Obj *const indexArray[]), /* Index args. */ \ + TCL_UNUSED(Tcl_Obj *), /* Value arg to 'lset' or NULL to 'lpop'. */ + Tcl_Obj **resPtrPtr) +{ + indexHexListErrorReadOnly(interp); + *resPtrPtr = NULL; + return TCL_ERROR; +} ADDED generic/tclTestObjInterfaceInteger.c Index: generic/tclTestObjInterfaceInteger.c ================================================================== --- /dev/null +++ generic/tclTestObjInterfaceInteger.c @@ -0,0 +1,698 @@ +/* + * Copyright © 2021 Nathan Coulter + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclTestObjInterfce.c -- + * + * This file contains C command functions for the additional Tcl commands + * that are used for testing implementations of the Tcl object types. + * These commands are not normally included in Tcl applications; they're + * only used for testing. + */ + +#include "tcl.h" +#include "tclInt.h" + +/* + * Prototypes for functions defined later in this file: + */ +int TestListInteger ( + ClientData, Tcl_Interp *interp, Tcl_Size argc, Tcl_Obj *const objv[]); +static Tcl_Obj* NewTestListInteger(); +static void DupTestListIntegerInternalRep(Tcl_Obj *srcPtr, Tcl_Obj *copyPtr); + +static void FreeTestListIntegerInternalRep(Tcl_Obj *objPtr); +static int SetTestListIntegerFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr); +static void UpdateStringOfTestListInteger(Tcl_Obj *listPtr); + +int TestListIntegerGetElements(TCL_UNUSED(void *), Tcl_Interp *interp, + Tcl_Size argc, Tcl_Obj *const objv[]); + +static Tcl_ObjInterfaceStringIndexProc ListIntegerListStringIndex; +static Tcl_ObjInterfaceStringIndexEndProc ListIntegerListStringIndexEnd; +static Tcl_ObjInterfaceStringLengthProc ListIntegerListStringLength; +/* +static int ListIntegerStringListIndexFromStringIndex( + Tcl_Size *index, Tcl_Size *itemchars, Tcl_Size *totalitems); +*/ +static Tcl_ObjInterfaceStringRangeProc ListIntegerListStringRange; +static Tcl_ObjInterfaceStringRangeEndProc ListIntegerListStringRangeEnd; + +static Tcl_ObjInterfaceListAppendProc ListIntegerListObjAppendElement; +static Tcl_ObjInterfaceListAppendlistProc ListIntegerListObjAppendList; +static Tcl_ObjInterfaceListIndexProc ListIntegerListObjIndex; +static Tcl_ObjInterfaceListIndexEndProc ListIntegerListObjIndexEnd; +static Tcl_ObjInterfaceListIsSortedProc ListIntegerListObjIsSorted; +static Tcl_ObjInterfaceListlengthProc ListIntegerListObjLength; +static Tcl_ObjInterfaceListRangeProc ListIntegerListObjRange; +static Tcl_ObjInterfaceListRangeEndProc ListIntegerListObjRangeEnd; +static Tcl_ObjInterfaceListReplaceProc ListIntegerListObjReplace; +static Tcl_ObjInterfaceListReplaceListProc ListIntegerListObjReplaceList; +static Tcl_ObjInterfaceListSetProc ListIntegerLset; +static Tcl_ObjInterfaceListSetDeepProc ListIntegerListObjSetDeep; + +static int ErrorMaxElementsExceeded(Tcl_Interp *interp); + + +typedef struct ListInteger { + int refCount; + int ownstring; + int size; + int used; + int values[1]; +} ListInteger; + + +static ListInteger* NewTestListIntegerIntrep(); +static ListInteger* ListGetInternalRep(Tcl_Obj *listPtr); +static void ListIntegerDecrRefCount(ListInteger *listIntegerPtr); + +static ObjectType testListIntegerType = { + "testListInteger", + FreeTestListIntegerInternalRep, /* freeIntRepProc */ + DupTestListIntegerInternalRep, /* dupIntRepProc */ + UpdateStringOfTestListInteger, /* updateStringProc */ + SetTestListIntegerFromAny, /* setFromAnyProc */ + 2, + NULL +}; + +Tcl_ObjType *testListIntegerTypePtr = (Tcl_ObjType *)&testListIntegerType; + + + +int TcltestObjectInterfaceListIntegerInit(Tcl_Interp *interp) { + Tcl_ObjInterface *oiPtr; + oiPtr = Tcl_NewObjInterface(); + Tcl_ObjInterfaceSetFnStringIndex(oiPtr ,ListIntegerListStringIndex); + Tcl_ObjInterfaceSetFnStringIndexEnd(oiPtr ,ListIntegerListStringIndexEnd); + Tcl_ObjInterfaceSetFnStringLength(oiPtr ,ListIntegerListStringLength); + Tcl_ObjInterfaceSetFnStringRange(oiPtr ,ListIntegerListStringRange); + Tcl_ObjInterfaceSetFnStringRangeEnd(oiPtr ,ListIntegerListStringRangeEnd); + Tcl_ObjInterfaceSetFnListAppend(oiPtr ,ListIntegerListObjAppendElement); + Tcl_ObjInterfaceSetFnListAppendList(oiPtr ,ListIntegerListObjAppendList); + Tcl_ObjInterfaceSetFnListIndex(oiPtr ,ListIntegerListObjIndex); + Tcl_ObjInterfaceSetFnListIndexEnd(oiPtr ,ListIntegerListObjIndexEnd); + Tcl_ObjInterfaceSetFnListIsSorted(oiPtr ,ListIntegerListObjIsSorted); + Tcl_ObjInterfaceSetFnListLength(oiPtr ,ListIntegerListObjLength); + Tcl_ObjInterfaceSetFnListRange(oiPtr ,ListIntegerListObjRange); + Tcl_ObjInterfaceSetFnListRangeEnd(oiPtr ,ListIntegerListObjRangeEnd); + Tcl_ObjInterfaceSetFnListReplace(oiPtr ,ListIntegerListObjReplace); + Tcl_ObjInterfaceSetFnListReplaceList(oiPtr ,ListIntegerListObjReplaceList); + Tcl_ObjInterfaceSetFnListSet(oiPtr , ListIntegerLset); + Tcl_ObjInterfaceSetFnListSetDeep(oiPtr ,ListIntegerListObjSetDeep); + Tcl_ObjTypeSetInterface(testListIntegerTypePtr,oiPtr); + + + Tcl_CreateObjCommand2(interp, "testlistinteger", TestListInteger, NULL, NULL); + Tcl_CreateObjCommand2(interp, "testlistintegergetelements", TestListIntegerGetElements, NULL, NULL); + return TCL_OK; +} + +int TestListInteger( + TCL_UNUSED(void *), + Tcl_Interp *interp, + Tcl_Size argc, + Tcl_Obj *const objv[]) +{ + int status; + if (argc != 2) { + if (interp != NULL) { + Tcl_SetObjResult(interp, Tcl_NewStringObj("wrong # arguments", -1)); + } + return TCL_ERROR; + } + status = Tcl_ConvertToType(interp, objv[1], testListIntegerTypePtr); + Tcl_SetObjResult(interp, objv[1]); + return status; +} + +int TestListIntegerGetElements( + TCL_UNUSED(void *), + TCL_UNUSED(Tcl_Interp *), + TCL_UNUSED(Tcl_Size), + TCL_UNUSED(Tcl_Obj * const *)) +{ + return 0; +} + + +Tcl_Obj* +NewTestListInteger() { + Tcl_ObjInternalRep intrep; + Tcl_Obj *listPtr = Tcl_NewObj(); + Tcl_InvalidateStringRep(listPtr); + ListInteger *listIntegerPtr = NewTestListIntegerIntrep(); + intrep.twoPtrValue.ptr1 = listIntegerPtr; + Tcl_StoreInternalRep(listPtr, testListIntegerTypePtr, &intrep); + return listPtr; +} + + +ListInteger* +NewTestListIntegerIntrep() { + ListInteger *listIntegerPtr = (ListInteger *)Tcl_Alloc(sizeof(ListInteger)); + listIntegerPtr->refCount = 1; + listIntegerPtr->ownstring = 0; + listIntegerPtr->size = 1; + listIntegerPtr->used = 0; + return listIntegerPtr; +} + +static ListInteger* ListGetInternalRep(Tcl_Obj *listPtr) { + return (ListInteger *)listPtr->internalRep.twoPtrValue.ptr1; +} + + + + +static void DupTestListIntegerInternalRep(Tcl_Obj *srcPtr, Tcl_Obj *copyPtr) { + Tcl_ObjInternalRep intrep; + ListInteger *listRepPtr = ListGetInternalRep(srcPtr); + listRepPtr->refCount++; + intrep.twoPtrValue.ptr1 = listRepPtr; + Tcl_StoreInternalRep(copyPtr, testListIntegerTypePtr, &intrep); + return; +} + +static void FreeTestListIntegerInternalRep(Tcl_Obj *listPtr) { + ListInteger *listRepPtr = ListGetInternalRep(listPtr); + ListIntegerDecrRefCount(listRepPtr); + return; +} + +static int SetTestListIntegerFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr) { + int status; + Tcl_Size i, length; + Tcl_Obj *itemPtr, *listPtr; + Tcl_ObjInternalRep intrep; + ListInteger *listRepPtr; + if (TclHasInternalRep(objPtr, testListIntegerTypePtr)) { + return TCL_OK; + } else { + status = Tcl_ListObjLength(interp, objPtr, &length); + if (status != TCL_OK) { + return TCL_ERROR; + } + listPtr = NewTestListInteger(); + for (i = 0; i < length; i++) { + status = Tcl_ListObjIndex(interp, objPtr, i, &itemPtr); + if (status != TCL_OK) { + Tcl_DecrRefCount(listPtr); + return status; + } + status = ListIntegerListObjReplace(interp, listPtr, i, 0, 1, &itemPtr); + status = TCL_OK; + if (status != TCL_OK) { + Tcl_DecrRefCount(listPtr); + return status; + } + } + listRepPtr = ListGetInternalRep(listPtr); + intrep.twoPtrValue.ptr1 = listRepPtr; + listRepPtr->refCount++; + Tcl_StoreInternalRep(objPtr, testListIntegerTypePtr, &intrep); + Tcl_DecrRefCount(listPtr); + return TCL_OK; + } +} + +static void UpdateStringOfTestListInteger(Tcl_Obj *listPtr) { + ListInteger *listRepPtr = ListGetInternalRep(listPtr); + int i, num, used = listRepPtr->used; + Tcl_Obj *strPtr, *numObjPtr; + if (used > 0) { + strPtr = Tcl_NewObj(); + Tcl_IncrRefCount(strPtr); + num = listRepPtr->values[0]; + numObjPtr = Tcl_NewIntObj(num); + Tcl_IncrRefCount(numObjPtr); + Tcl_AppendFormatToObj(NULL, strPtr, "%d", 1, &numObjPtr); + Tcl_DecrRefCount(numObjPtr); + for (i = 1; i < used; i++) { + num = listRepPtr->values[i]; + numObjPtr = Tcl_NewIntObj(num); + Tcl_IncrRefCount(numObjPtr); + Tcl_AppendFormatToObj(NULL, strPtr, " %d", 1, &numObjPtr); + Tcl_DecrRefCount(numObjPtr); + } + listPtr->bytes = strPtr->bytes; + listPtr->length = strPtr->length; + strPtr->bytes = 0; + strPtr->length = 0; + Tcl_DecrRefCount(strPtr); + } else { + Tcl_InitStringRep(listPtr, NULL, 0); + } + listRepPtr->ownstring = 1; + return; +} + +static void ListIntegerDecrRefCount(ListInteger *listIntegerPtr) { + if (--listIntegerPtr->refCount <= 0) { + Tcl_Free(listIntegerPtr); + } + return; +} + +static int ListIntegerListStringIndex ( + TCL_UNUSED(Tcl_Interp *),/* Used to report errors if not NULL. */ \ + TCL_UNUSED(Tcl_Obj *), /* List object to index into. */ \ + TCL_UNUSED(Tcl_Size), /* Index of element to return. */ \ + TCL_UNUSED(Tcl_Obj **)/* The resulting Tcl_Obj* is stored here. */ +) +{ + return TCL_ERROR; +} + +static int ListIntegerListStringIndexEnd( + TCL_UNUSED(Tcl_Interp *),/* Used to report errors if not NULL. */ \ + TCL_UNUSED(Tcl_Obj *),/* List object to index into. */ \ + TCL_UNUSED(Tcl_Size),/* Index of element to return. */ \ + TCL_UNUSED(Tcl_Obj **)/* The resulting Tcl_Obj* is stored here. */ +) { + return TCL_ERROR; +} + +static int ListIntegerListStringLength( + TCL_UNUSED(Tcl_Obj *) + ,Tcl_Size *lengthPtr +) { + *lengthPtr = -1; + return TCL_ERROR; +} + +/* +static int ListIntegerStringListIndexFromStringIndex( + TCL_UNUSEDVAR(Tcl_Size *index), + TCL_UNUSEDVAR(Tcl_Size *itemchars), + TCL_UNUSEDVAR(Tcl_Size *totalitems) +) { + return TCL_ERROR; +} +*/ + +static int ListIntegerListStringRange( + TCL_UNUSED(Tcl_Obj *), /* The Tcl object to find the range of. */ \ + TCL_UNUSED(Tcl_Size), /* First index of the range. */ \ + TCL_UNUSED(Tcl_Size), /* Last index of the range. */ \ + Tcl_Obj **resPtrPtr /* The resulting Tcl_Obj* is stored here. */ +) { + *resPtrPtr = NULL; + return TCL_OK; +} + +static int ListIntegerListStringRangeEnd( + TCL_UNUSED(Tcl_Obj *), /* The Tcl object to find the range of. */ \ + TCL_UNUSED(Tcl_Size), /* First index of the range. */ \ + TCL_UNUSED(Tcl_Size), /* Last index of the range. */ \ + Tcl_Obj **resPtrPtr /* The resulting Tcl_Obj* is stored here. */) +{ + *resPtrPtr = NULL; + return TCL_OK; +} + + +static int ListIntegerListObjAppendElement(tclObjTypeInterfaceArgsListAppend) { + int status; + Tcl_Size length; + status = Tcl_ListObjLength(interp, listPtr, &length); + if (status != TCL_OK) { + return TCL_ERROR; + } + return ListIntegerListObjReplace(interp, listPtr, length, 0, 1, &objPtr); +} + +static int ListIntegerListObjAppendList( + TCL_UNUSEDVAR(Tcl_Interp *interp), /* Used to report errors if not NULL. */ \ + TCL_UNUSEDVAR(Tcl_Obj *listPtr), /* List object to append elements to. */ \ + TCL_UNUSEDVAR(Tcl_Obj *elemListPtr) /* List obj with elements to append. */ +) { + return TCL_ERROR; +} + +static int ListIntegerListObjIndex( + TCL_UNUSED(Tcl_Interp *),/* Used to report errors if not NULL. */ \ + Tcl_Obj * listObj,/* List object to index into. */ \ + Tcl_Size index, /* Index of element to return. */ \ + Tcl_Obj **objPtrPtr /* The resulting Tcl_Obj* is stored here. */ +) { + ListInteger *listRepPtr = ListGetInternalRep(listObj); + Tcl_Size num; + if (index >= 0 && index < listRepPtr->used) { + num = listRepPtr->values[index]; + *objPtrPtr = Tcl_NewLongObj(num); + } else { + *objPtrPtr = NULL; + } + return TCL_OK; +} + +static int ListIntegerListObjIndexEnd( + TCL_UNUSED(Tcl_Interp *),/* Used to report errors if not NULL. */ \ + TCL_UNUSED(Tcl_Obj *),/* List object to index into. */ \ + TCL_UNUSED(Tcl_Size),/* Index of element to return. */ \ + TCL_UNUSED(Tcl_Obj **)/* The resulting Tcl_Obj* is stored here. */ +) { + return TCL_ERROR; +} + +static int ListIntegerListObjIsSorted( + TCL_UNUSED(Tcl_Interp *), /* Used to report errors */ + TCL_UNUSED(Tcl_Obj *), /* The list in question */ + TCL_UNUSED(size_t) /* flags */ +) { + return TCL_ERROR; +} + +static int ListIntegerListObjLength( + TCL_UNUSED(Tcl_Interp *), /* Used to report errors if not NULL. */ + Tcl_Obj * listObj, /* List object whose #elements to return. */ + Tcl_Size *lenPtr /* The resulting length is stored here. */ +) { + ListInteger *listRepPtr = ListGetInternalRep(listObj); + *lenPtr = listRepPtr->used; + return TCL_OK; +} + +static int ListIntegerListObjRange(tclObjTypeInterfaceArgsListRange) { + ListInteger *listRepPtr = ListGetInternalRep(listPtr); + Tcl_Size i, j, num, used = listRepPtr->used; + Tcl_Obj *numObjPtr, *resPtr; + + if ((fromIdx == 0 && toIdx >= used - 1) || used == 0) { + *resPtrPtr = listPtr; + return TCL_OK; + } + + if (Tcl_IsShared(listPtr) || + ((listRepPtr->refCount > 1))) { + if (fromIdx >= used || toIdx < fromIdx) { + *resPtrPtr = Tcl_NewObj(); + return TCL_OK; + } else { + resPtr = NewTestListInteger(); + for (i = fromIdx, j = 0; i <= toIdx; i++, j++) { + num = listRepPtr->values[i]; + numObjPtr = Tcl_NewIntObj(num); + Tcl_IncrRefCount(numObjPtr); + if (ListIntegerListObjReplace( + interp, resPtr, j , 0 , 1 ,&numObjPtr) != TCL_OK) { + Tcl_DecrRefCount(resPtr); + Tcl_DecrRefCount(numObjPtr); + *resPtrPtr = NULL; + return TCL_OK; + } + Tcl_DecrRefCount(numObjPtr); + } + *resPtrPtr = resPtr; + return TCL_OK; + } + } + *resPtrPtr = NULL; + return TCL_OK; +} + + +static int ListIntegerListObjRangeEnd( + TCL_UNUSEDVAR(Tcl_Interp * interp), /* Used to report errors */ \ + TCL_UNUSEDVAR(Tcl_Obj *listPtr), /* List object to take a range from. */ \ + TCL_UNUSEDVAR(Tcl_Size fromAnchor),/* 0 for start and 1 for end */ \ + TCL_UNUSEDVAR(Tcl_Size fromIdx), /* Index of first element to include. */ \ + TCL_UNUSEDVAR(Tcl_Size toAnchor), /* 0 for start and 1 for end */ \ + TCL_UNUSEDVAR(Tcl_Size toIdx), /* Index of last element to include. */ + Tcl_Obj **resPtrPtr +) { + *resPtrPtr = NULL; + return TCL_OK; +} + + +static int ListIntegerListObjReplace(tclObjTypeInterfaceArgsListReplace) { + int i, status; + Tcl_Obj *tmpListPtr = Tcl_NewObj(); + Tcl_IncrRefCount(tmpListPtr); + for (i = 0; i < numToInsert; i++) { + status = Tcl_ListObjAppendElement(interp, tmpListPtr, insertObjs[i]); + if (status != TCL_OK) { + Tcl_DecrRefCount(tmpListPtr); + return status; + } + } + status = ListIntegerListObjReplaceList( + interp, listObj, first, numToDelete, tmpListPtr); + Tcl_DecrRefCount(tmpListPtr); + return status; +} + + +static int ListIntegerListObjReplaceList(tclObjTypeInterfaceArgsListReplaceList) { + ListInteger *listRepPtr = ListGetInternalRep(listPtr); + ListInteger *newListRepPtr; + int changed = 0, itemInt, status; + Tcl_Size i, index, newmemsize, itemsLength, j, newsize, + newtailindex, newused, size, newtailend, tailindex, tailsize, + used; + Tcl_Obj *itemPtr; + size = listRepPtr->size; + used = listRepPtr->used; + if (first < used) { + tailsize = used - first; + } else { + tailsize = 0; + } + + status = Tcl_ListObjLength(interp, newItemsPtr, &itemsLength); + if (status != TCL_OK) { + return TCL_ERROR; + } + + /* Currently this duplicates checks found in Tcl_ListObjReplace, but + * could be removed in that function in the future. + */ + + if (first >= used) { + first = used; + } else if (first < 0) { + first = 0; + } + + if (count > tailsize) { + count = tailsize; + } + + /* If count == 0 and itemsLength == 0 this routine is logically a no-op, + * but any non-canonical string representation must still be invalidated. + */ + + /* to do: + * Recode this routine to work with incoming of unbounded length + */ + + if (used > 0) { + tailindex = first + count; + newtailindex = first + itemsLength; + if (INT_MAX - tailsize - 1 < newtailindex) { + return ErrorMaxElementsExceeded(interp); + } + newused = newtailindex + tailsize; + if (itemsLength > 0 && INT_MAX - itemsLength < newused) { + return ErrorMaxElementsExceeded(interp); + } + } else { + tailindex = 0; + newtailindex = 0; + newused = itemsLength; + } + + if (newused > size && newused > 1) { + newsize = (newused + newused / 5 + 1); + if (newsize < size) { + return ErrorMaxElementsExceeded(interp); + } + } else { + newsize = size; + } + + if (!listRepPtr->ownstring) { + /* schedule canonicalization of the string rep */ + Tcl_InvalidateStringRep(listPtr); + listRepPtr->ownstring = 1; + } + + if (newused < used) { + Tcl_InvalidateStringRep(listPtr); + } + + + newmemsize = sizeof(ListInteger) + newsize * sizeof(int) - sizeof(int); + if (listRepPtr->refCount > 1) { + Tcl_ObjInternalRep intrep; + /* copy only the structure and the head of the old array */ + int movsize = sizeof(ListInteger) + + ((first + 1) * sizeof(int) - sizeof(int)); + newListRepPtr = (ListInteger *)Tcl_Alloc(newmemsize); + memmove(newListRepPtr, listRepPtr, movsize); + newListRepPtr->size = newsize; + newListRepPtr->refCount = 1; + /* move the tail to its new location to make room for the new additions + */ + memmove(newListRepPtr->values + newtailindex, + listRepPtr->values + tailindex, tailsize * sizeof(int)); + intrep.twoPtrValue.ptr1 = newListRepPtr; + Tcl_StoreInternalRep(listPtr, testListIntegerTypePtr, &intrep); + } else { + if (newsize > size && newused > 1) { + newListRepPtr = (ListInteger *)Tcl_Realloc(listRepPtr, newmemsize); + } else { + newListRepPtr = listRepPtr; + } + newListRepPtr->size = newsize; + if (tailsize > 0 && tailindex != newtailindex) { + /* move the tail to its new location to make room for the new + * additions */ + memmove(newListRepPtr->values + newtailindex, + newListRepPtr->values + tailindex, tailsize); + } + listPtr->internalRep.twoPtrValue.ptr1 = newListRepPtr; + } + + i = -1; + while (1) { + i++; + index = first + i; + status = Tcl_ListObjIndex(interp, newItemsPtr, i, &itemPtr); + if (status != TCL_OK) { + return status; + } + if (itemPtr == NULL) { + break; + } + if (Tcl_GetIntFromObj(interp, itemPtr, &itemInt) + == TCL_OK) { + if (newListRepPtr->values[index] != itemInt) { + changed = 1; + newListRepPtr->values[index] = itemInt; + } + newListRepPtr->values[index] = itemInt; + } else { + Tcl_Obj *realListPtr; + /* Fall back to normal list */ + realListPtr = Tcl_NewListObj(newsize, NULL); + Tcl_IncrRefCount(realListPtr); + + for (j = 0; j < index; j++) { + itemPtr = Tcl_NewIntObj(newListRepPtr->values[j]); + status = Tcl_ListObjAppendElement( + interp, realListPtr, itemPtr); + if (status != TCL_OK) { + Tcl_DecrRefCount(realListPtr); + return status; + } + } + while (1) { + if (itemsLength == TCL_LENGTH_NONE) { + status = Tcl_ListObjLength(interp, newItemsPtr, &itemsLength); + if (status != TCL_OK) { + Tcl_DecrRefCount(realListPtr); + return status; + } + } + if (itemsLength != TCL_LENGTH_NONE && i >= itemsLength) { + break; + } + status = Tcl_ListObjIndex(interp, newItemsPtr, i, &itemPtr); + if (status != TCL_OK) { + Tcl_DecrRefCount(realListPtr); + return status; + } + if (itemPtr == NULL) { + break; + } + status = Tcl_ListObjAppendElement( + interp, realListPtr, itemPtr); + if (status != TCL_OK) { + Tcl_DecrRefCount(realListPtr); + return status; + } + i++; + } + + newtailend = newtailindex + tailsize; + for (i = newtailindex; i < newtailend; i++) { + itemPtr = Tcl_NewIntObj(newListRepPtr->values[i]); + Tcl_ListObjAppendElement(interp, realListPtr, itemPtr); + if (status != TCL_OK) { + Tcl_DecrRefCount(realListPtr); + return status; + } + } + + ListIntegerDecrRefCount(newListRepPtr); + listPtr->internalRep = realListPtr->internalRep; + listPtr->typePtr = realListPtr->typePtr; + realListPtr->typePtr = NULL; + Tcl_DecrRefCount(realListPtr); + /* this might not always be necessary, but probably the best that + * can be done in this case */ + Tcl_InvalidateStringRep(listPtr); + return TCL_OK; + } + } + + if (changed) { + Tcl_InvalidateStringRep(listPtr); + } + + /* To make the operation transactional, update "used" only after all + * elemnts have been succesfully added. + */ + newListRepPtr->used = newused; + return TCL_OK; +} + + +static int ListIntegerListObjSetDeep( + TCL_UNUSED(Tcl_Interp *), /* Tcl interpreter. */ \ + TCL_UNUSED(Tcl_Obj *), /* Pointer to the list being modified. */ \ + TCL_UNUSED(Tcl_Size), /* Number of index args. */ \ + TCL_UNUSED(Tcl_Obj *const *), /* Index args. */ \ + TCL_UNUSED(Tcl_Obj *),/* Value arg to 'lset' or NULL to 'lpop'. */ + Tcl_Obj **resPtrPtr) +{ + *resPtrPtr = NULL; + return TCL_ERROR; +} + + +static int ListIntegerLset( + TCL_UNUSED(Tcl_Interp *), + TCL_UNUSED(Tcl_Obj *), + TCL_UNUSED(Tcl_Size), + TCL_UNUSED(Tcl_Obj *)) +{ + return TCL_ERROR; +} + + +static int ErrorMaxElementsExceeded(Tcl_Interp *interp) { + if (interp != NULL) { + Tcl_SetObjResult(interp, Tcl_ObjPrintf( + "max length of a Tcl list (%" TCL_T_MODIFIER "d elements) exceeded", + LIST_MAX)); + } + return TCL_ERROR; +} Index: generic/tclTestProcBodyObj.c ================================================================== --- generic/tclTestProcBodyObj.c +++ generic/tclTestProcBodyObj.c @@ -1,16 +1,27 @@ +/* + * Copyright © 1998 Scriptics Corporation. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclTestProcBodyObj.c -- * * Implements the "procbodytest" package, which contains commands to test * creation of Tcl procedures whose body argument is a Tcl_Obj of type * "procbody" rather than a string. - * - * Copyright © 1998 Scriptics Corporation. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #undef BUILD_tcl #undef STATIC_BUILD #ifndef USE_TCL_STUBS Index: generic/tclThread.c ================================================================== --- generic/tclThread.c +++ generic/tclThread.c @@ -1,18 +1,29 @@ /* - * tclThread.c -- - * - * This file implements Platform independent thread operations. Most of - * the real work is done in the platform dependent files. - * * Copyright © 1998 Sun Microsystems, Inc. * Copyright © 2008 George Peter Staplin * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclThread.c -- + * + * This file implements Platform independent thread operations. Most of + * the real work is done in the platform dependent files. + */ + #include "tclInt.h" /* * There are three classes of synchronization objects: mutexes, thread data * keys, and condition variables. The following are used to record the memory Index: generic/tclThreadAlloc.c ================================================================== --- generic/tclThreadAlloc.c +++ generic/tclThreadAlloc.c @@ -1,19 +1,30 @@ /* - * tclThreadAlloc.c -- - * - * This is a very fast storage allocator for used with threads (designed - * avoid lock contention). The basic strategy is to allocate memory in - * fixed size blocks from block caches. - * * The Initial Developer of the Original Code is America Online, Inc. * Portions created by AOL are Copyright © 1999 America Online, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclThreadAlloc.c -- + * + * This is a very fast storage allocator for used with threads (designed + * avoid lock contention). The basic strategy is to allocate memory in + * fixed size blocks from block caches. + */ + #include "tclInt.h" #if TCL_THREADS && defined(USE_THREAD_ALLOC) /* * If range checking is enabled, an additional byte will be allocated to store Index: generic/tclThreadJoin.c ================================================================== --- generic/tclThreadJoin.c +++ generic/tclThreadJoin.c @@ -1,17 +1,28 @@ +/* + * Copyright © 2000 Scriptics Corporation + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclThreadJoin.c -- * * This file implements a platform independent emulation layer for the * handling of joinable threads. The Windows platform uses this code to * provide the functionality of joining threads. This code is currently * not necessary on Unix. - * - * Copyright © 2000 Scriptics Corporation - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" #ifdef _WIN32 Index: generic/tclThreadStorage.c ================================================================== --- generic/tclThreadStorage.c +++ generic/tclThreadStorage.c @@ -1,18 +1,29 @@ /* - * tclThreadStorage.c -- - * - * This file implements platform independent thread storage operations to - * work around system limits on the number of thread-specific variables. - * * Copyright © 2003-2004 Joe Mistachkin * Copyright © 2008 George Peter Staplin * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclThreadStorage.c -- + * + * This file implements platform independent thread storage operations to + * work around system limits on the number of thread-specific variables. + */ + #include "tclInt.h" #if TCL_THREADS #include Index: generic/tclThreadTest.c ================================================================== --- generic/tclThreadTest.c +++ generic/tclThreadTest.c @@ -1,18 +1,29 @@ +/* + * Copyright © 1998 Sun Microsystems, Inc. + * Copyright © 2006-2008 Joe Mistachkin. All rights reserved. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclThreadTest.c -- * * This file implements the testthread command. Eventually this should be * tclThreadCmd.c * Some of this code is based on work done by Richard Hipp on behalf of * Conservation Through Innovation, Limited, with their permission. - * - * Copyright © 1998 Sun Microsystems, Inc. - * Copyright © 2006-2008 Joe Mistachkin. All rights reserved. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #undef BUILD_tcl #undef STATIC_BUILD #ifndef USE_TCL_STUBS Index: generic/tclTimer.c ================================================================== --- generic/tclTimer.c +++ generic/tclTimer.c @@ -1,17 +1,28 @@ /* - * tclTimer.c -- - * - * This file provides timer event management facilities for Tcl, - * including the "after" command. - * * Copyright © 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclTimer.c -- + * + * This file provides timer event management facilities for Tcl, + * including the "after" command. + */ + #include "tclInt.h" /* * For each timer callback that's pending there is one record of the following * type. The normal handlers (created by Tcl_CreateTimerHandler) are chained Index: generic/tclTomMath.decls ================================================================== --- generic/tclTomMath.decls +++ generic/tclTomMath.decls @@ -1,18 +1,26 @@ +# Copyright © 2005 Kevin B. Kenny. All rights reserved. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # tclTomMath.decls -- # # This file contains the declarations for the functions in 'libtommath' # that are contained within the Tcl library. This file is used to # generate the 'tclTomMathDecls.h' and 'tclStubInit.c' files. # # If you edit this file, advance the revision number (and the epoch # if the new stubs are not backward compatible) in tclTomMathDecls.h # -# Copyright © 2005 Kevin B. Kenny. All rights reserved. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. library tcl # Define the unsupported generic interfaces. Index: generic/tclTomMath.h ================================================================== --- generic/tclTomMath.h +++ generic/tclTomMath.h @@ -1,5 +1,14 @@ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + #ifndef BN_TCL_H_ #define BN_TCL_H_ #include #if defined(TCL_NO_TOMMATH_H) Index: generic/tclTomMathDecls.h ================================================================== --- generic/tclTomMathDecls.h +++ generic/tclTomMathDecls.h @@ -1,17 +1,28 @@ +/* + * Copyright (c) 2005 by Kevin B. Kenny. All rights reserved. + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* *---------------------------------------------------------------------- * * tclTomMathDecls.h -- * * This file contains the declarations for the 'libtommath' * functions that are exported by the Tcl library. - * - * Copyright (c) 2005 by Kevin B. Kenny. All rights reserved. - * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #ifndef _TCLTOMMATHDECLS #define _TCLTOMMATHDECLS Index: generic/tclTomMathInt.h ================================================================== --- generic/tclTomMathInt.h +++ generic/tclTomMathInt.h @@ -1,3 +1,11 @@ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ #include "tclInt.h" #include "tclTomMath.h" #include "tommath_class.h" Index: generic/tclTomMathInterface.c ================================================================== --- generic/tclTomMathInterface.c +++ generic/tclTomMathInterface.c @@ -1,17 +1,28 @@ +/* + * Copyright © 2005 Kevin B. Kenny. All rights reserved. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* *---------------------------------------------------------------------- * * tclTomMathInterface.c -- * * This file contains procedures that are used as a 'glue' layer between * Tcl and libtommath. - * - * Copyright © 2005 Kevin B. Kenny. All rights reserved. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" #include "tclTomMath.h" Index: generic/tclTomMathStubLib.c ================================================================== --- generic/tclTomMathStubLib.c +++ generic/tclTomMathStubLib.c @@ -1,18 +1,29 @@ /* - * tclTomMathStubLib.c -- - * - * Stub object that will be statically linked into extensions that want - * to access Tcl. - * * Copyright © 1998-1999 Scriptics Corporation. * Copyright © 1998 Paul Duffin. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclTomMathStubLib.c -- + * + * Stub object that will be statically linked into extensions that want + * to access Tcl. + */ + #include "tclInt.h" #include "tclTomMath.h" MODULE_SCOPE const TclTomMathStubs *tclTomMathStubsPtr; Index: generic/tclTrace.c ================================================================== --- generic/tclTrace.c +++ generic/tclTrace.c @@ -1,19 +1,30 @@ /* - * tclTrace.c -- - * - * This file contains code to handle most trace management. - * * Copyright © 1987-1993 The Regents of the University of California. * Copyright © 1994-1997 Sun Microsystems, Inc. * Copyright © 1998-2000 Scriptics Corporation. * Copyright © 2002 ActiveState Corporation. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclTrace.c -- + * + * This file contains code to handle most trace management. + */ + #include "tclInt.h" /* * Structures used to hold information about variable traces: */ Index: generic/tclUniData.c ================================================================== --- generic/tclUniData.c +++ generic/tclUniData.c @@ -1,14 +1,25 @@ +/* + * Copyright © 1998 Scriptics Corporation. + * All rights reserved. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + /* * tclUniData.c -- * * Declarations of Unicode character information tables. This file is * automatically generated by the tools/uniParse.tcl script. Do not * modify this file by hand. - * - * Copyright © 1998 Scriptics Corporation. - * All rights reserved. */ /* * A 16-bit Unicode character is split into two parts in order to index * into the following tables. The lower OFFSET_BITS comprise an offset @@ -193,11 +204,10 @@ 1344, 1344, 1344, 1344, 9888, 1344, 1344, 9920, 3296, 9952, 9984, 10016, 1344, 1344, 10048, 10080, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 10112, 10144, 1344, 10176, 1344, 10208, 10240, 10272, 10304, 10336, 10368, 1344, 1344, 1344, 10400, 10432, 64, 10464, 10496, 10528, 4736, 10560, 10592 -#if TCL_UTF_MAX > 3 || TCL_MAJOR_VERSION > 8 || TCL_MINOR_VERSION > 6 ,10624, 10656, 10688, 3296, 1344, 1344, 1344, 10720, 10752, 10784, 10816, 10848, 10880, 10912, 8032, 10944, 3296, 3296, 3296, 3296, 9216, 1344, 10976, 11008, 1344, 11040, 11072, 11104, 11136, 1344, 11168, 3296, 11200, 11232, 11264, 1344, 11296, 11328, 11360, 11392, 1344, 11424, 1344, 11456, 11488, 11520, 3296, 3296, 1344, 1344, 1344, 1344, @@ -567,11 +577,10 @@ 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 15488 -#endif /* TCL_UTF_MAX > 3 */ }; /* * The groupMap is indexed by combining the alternate page number with * the page offset and returns a group number that identifies a unique @@ -1178,11 +1187,10 @@ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 92, 92, 0, 0, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 0, 0, 0, 4, 4, 7, 11, 14, 4, 4, 0, 14, 7, 7, 7, 7, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 17, 17, 14, 14, 0, 0 -#if TCL_UTF_MAX > 3 || TCL_MAJOR_VERSION > 8 || TCL_MINOR_VERSION > 6 ,15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 15, 15, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 15, 15, 15, 15, 15, 15, 15, @@ -1650,11 +1658,10 @@ 14, 14, 14, 14, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15 -#endif /* TCL_UTF_MAX > 3 */ }; /* * Each group represents a unique set of character attributes. The attributes * are encoded into a 32-bit value as follows: @@ -1698,15 +1705,11 @@ -10830783, -10833599, -10832575, -10830015, -10817983, -10824127, -10818751, 237633, -12223, -10830527, -9058239, 237698, 9949314, 18, 17, 10305, 10370, 10049, 10114, 8769, 8834 }; -#if TCL_UTF_MAX > 3 || TCL_MAJOR_VERSION > 8 || TCL_MINOR_VERSION > 6 -# define UNICODE_OUT_OF_RANGE(ch) (((ch) & 0x1FFFFF) >= 0x323C0) -#else -# define UNICODE_OUT_OF_RANGE(ch) (((ch) & 0x1F0000) != 0) -#endif +# define UNICODE_OUT_OF_RANGE(ch) (((ch) & 0x1FFFFF) >= 0x323C0) /* * The following constants are used to determine the category of a * Unicode character. */ @@ -1757,10 +1760,6 @@ /* * This macro extracts the information about a character from the * Unicode character tables. */ -#if TCL_UTF_MAX > 3 || TCL_MAJOR_VERSION > 8 || TCL_MINOR_VERSION > 6 -# define GetUniCharInfo(ch) (groups[groupMap[pageMap[((ch) & 0x1FFFFF) >> OFFSET_BITS] | ((ch) & ((1 << OFFSET_BITS)-1))]]) -#else -# define GetUniCharInfo(ch) (groups[groupMap[pageMap[((ch) & 0xFFFF) >> OFFSET_BITS] | ((ch) & ((1 << OFFSET_BITS)-1))]]) -#endif +# define GetUniCharInfo(ch) (groups[groupMap[pageMap[((ch) & 0x1FFFFF) >> OFFSET_BITS] | ((ch) & ((1 << OFFSET_BITS)-1))]]) Index: generic/tclUtf.c ================================================================== --- generic/tclUtf.c +++ generic/tclUtf.c @@ -1,16 +1,27 @@ /* - * tclUtf.c -- - * - * Routines for manipulating UTF-8 strings. - * * Copyright © 1997-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclUtf.c -- + * + * Routines for manipulating UTF-8 strings. + */ + #include "tclInt.h" /* * Include the static character classification tables and macros. */ @@ -230,12 +241,13 @@ buf[0] = (char) (0xC0 | (ch >> 6)); return 2; } if (ch <= 0xFFFF) { if ( - (flags & TCL_COMBINE) && - ((ch & 0xF800) == 0xD800)) { + (flags & TCL_COMBINE) && + ((ch & 0xF800) == 0xD800)) { + if (ch & 0x0400) { /* Low surrogate */ if ( (0x80 == (0xC0 & buf[0])) && (0 == (0xCF & buf[1]))) { /* Previous Tcl_UniChar was a high surrogate, so combine */ @@ -1203,12 +1215,12 @@ /* *--------------------------------------------------------------------------- * * Tcl_UtfAtIndex -- * - * Returns a pointer to the specified character (not byte) position in - * the UTF-8 string. + * Returns a pointer to the specified character (not byte) position in the + * UTF-8 string. * * Results: * As above. * * Side effects: Index: generic/tclUtil.c ================================================================== --- generic/tclUtil.c +++ generic/tclUtil.c @@ -1,19 +1,30 @@ /* - * tclUtil.c -- - * - * This file contains utility functions that are used by many Tcl - * commands. - * * Copyright © 1987-1993 The Regents of the University of California. * Copyright © 1994-1998 Sun Microsystems, Inc. * Copyright © 2001 Kevin B. Kenny. All rights reserved. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclUtil.c -- + * + * This file contains utility functions that are used by many Tcl + * commands. + */ + #include #include "tclInt.h" #include "tclParse.h" #include "tclStringTrim.h" #include "tclTomMath.h" @@ -127,19 +138,12 @@ "end-offset", /* name */ NULL, /* freeIntRepProc */ NULL, /* dupIntRepProc */ NULL, /* updateStringProc */ NULL, /* setFromAnyProc */ - TCL_OBJTYPE_V1(TclLengthOne) + 0 }; - -Tcl_Size -TclLengthOne( - TCL_UNUSED(Tcl_Obj *)) -{ - return 1; -} /* * * STRING REPRESENTATION OF LISTS * * * * * The next several routines implement the conversions of strings to and from @@ -1976,11 +1980,11 @@ for (i = 0; i < objc; i++) { Tcl_Size length; objPtr = objv[i]; if (TclListObjIsCanonical(objPtr) || - TclObjTypeHasProc(objPtr,indexProc)) { + TclObjectHasInterface(objPtr,list,index)) { continue; } (void)Tcl_GetStringFromObj(objPtr, &length); if (length > 0) { break; @@ -1989,11 +1993,11 @@ if (i == objc) { resPtr = NULL; for (i = 0; i < objc; i++) { objPtr = objv[i]; if (!TclListObjIsCanonical(objPtr) && - !TclObjTypeHasProc(objPtr,indexProc)) { + !TclObjectHasInterface(objPtr, list, index)) { continue; } if (resPtr) { Tcl_Obj *elemPtr = NULL; @@ -2008,11 +2012,15 @@ Tcl_BounceRefCount(elemPtr); // could be an abstract list element goto slow; } Tcl_BounceRefCount(elemPtr); // could be an an abstract list element } else { - resPtr = TclListObjCopy(NULL, objPtr); + resPtr = TclDuplicatePureObj( + NULL, objPtr, tclListTypePtr); + if (!resPtr) { + return NULL; + } } } if (!resPtr) { TclNewObj(resPtr); } @@ -3515,17 +3523,14 @@ const char *opPtr; int t1 = 0, t2 = 0; /* Value doesn't start with "e" */ - /* If we reach here, the string rep of objPtr exists. */ - /* - * The valid index syntax does not include any value that is - * a list of more than one element. This is necessary so that - * lists of index values can be reliably distinguished from any - * single index value. + * So that lists of index values can be reliably distinguished from + * any single index value, the valid index syntax does not include + * any value that is a list of more than one element. */ /* * Quick scan to see if multi-value list is even possible. * This relies on TclGetString() returning a NUL-terminated string. @@ -3639,10 +3644,11 @@ if ((length < 3) || (length == 4) || (strncmp(bytes, "end", 3) != 0)) { /* Doesn't start with "end" */ goto parseError; } + if (length > 4) { int t; /* Parse for the "end-..." or "end+..." formats */ @@ -3864,11 +3870,11 @@ * valid indices but are not in the encodable range. Thus an * error is raised. On 32-bit systems, indices in that range indicate * the position after the end and so do not raise an error. */ if ((sizeof(int) != sizeof(Tcl_Size)) && - (wide > INT_MAX) && (wide < WIDE_MAX-1)) { + (wide > INT_MAX) && (wide < WIDE_MAX-1)) { /* 2(a,b) on 64-bit systems*/ goto rangeerror; } if (wide > INT_MAX) { /* @@ -3894,11 +3900,11 @@ * the encodable range. Thus an error is raised. On 32-bit systems, * indices in that range indicate the position before the beginning * and so do not raise an error. */ if ((sizeof(int) != sizeof(Tcl_Size)) && - (wide > (ENDVALUE - LIST_MAX)) && (wide <= INT_MAX)) { + (wide > (ENDVALUE - LIST_MAX)) && (wide <= INT_MAX)) { /* 1(c), 4(a,b) on 64-bit systems */ goto rangeerror; } if (wide > ENDVALUE) { /* @@ -3920,14 +3926,14 @@ *indexPtr = idx; return TCL_OK; rangeerror: if (interp) { - Tcl_SetObjResult( - interp, + Tcl_SetObjResult(interp, Tcl_ObjPrintf("index \"%s\" out of range", TclGetString(objPtr))); - Tcl_SetErrorCode(interp, "TCL", "VALUE", "INDEX", "OUTOFRANGE", (void *)NULL); + Tcl_SetErrorCode(interp, + "TCL", "VALUE", "INDEX", "OUTOFRANGE", (void *)NULL); } return TCL_ERROR; } /* @@ -3957,10 +3963,43 @@ if (endValue >= 0) { return endValue; } return TCL_INDEX_NONE; } + +int TclIndexIsFromEnd(Tcl_Size index) { + return index <= 0; +} + +/* + *---------------------------------------------------------------------- + * + * TclIndexLast -- + * + * Determine the last index for an array of length "length", where -1 means N is + * not bounded. + * + *---------------------------------------------------------------------- + */ +Tcl_Size +TclIndexLast (Tcl_Size length) { + return Tcl_LengthIsFinite(length) ? length - 1 : TCL_INDEX_NONE; +} + +/* + *---------------------------------------------------------------------- + * + * Tcl_LengthIsFinite -- + * + * True if length is Finite. + * + *---------------------------------------------------------------------- + */ +int +Tcl_LengthIsFinite(Tcl_Size length) { + return length != TCL_LENGTH_NONE; +} /* *------------------------------------------------------------------------ * * TclIndexInvalidError -- Index: generic/tclVar.c ================================================================== --- generic/tclVar.c +++ generic/tclVar.c @@ -1,14 +1,6 @@ /* - * tclVar.c -- - * - * This file contains routines that implement Tcl variables (both scalars - * and arrays). - * - * The implementation of arrays is modelled after an initial - * implementation by Mark Diekhans and Karl Lehenbauer. - * * Copyright © 1987-1994 The Regents of the University of California. * Copyright © 1994-1997 Sun Microsystems, Inc. * Copyright © 1998-1999 Scriptics Corporation. * Copyright © 2001 Kevin B. Kenny. All rights reserved. * Copyright © 2007 Miguel Sofer @@ -15,10 +7,29 @@ * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclVar.c -- + * + * This file contains routines that implement Tcl variables (both scalars + * and arrays). + * + * The implementation of arrays is modelled after an initial + * implementation by Mark Diekhans and Karl Lehenbauer. + */ + #include "tclInt.h" #include "tclOOInt.h" /* * Prototypes for the variable hash key methods. @@ -247,11 +258,11 @@ */ static const Tcl_ObjType localVarNameType = { "localVarName", FreeLocalVarName, DupLocalVarName, NULL, NULL, - TCL_OBJTYPE_V0 + 0 }; #define LocalSetInternalRep(objPtr, index, namePtr) \ do { \ Tcl_ObjInternalRep ir; \ @@ -271,11 +282,11 @@ } while (0) static const Tcl_ObjType parsedVarNameType = { "parsedVarName", FreeParsedVarName, DupParsedVarName, NULL, NULL, - TCL_OBJTYPE_V0 + 0 }; #define ParsedSetInternalRep(objPtr, arrayPtr, elem) \ do { \ Tcl_ObjInternalRep ir; \ @@ -844,12 +855,12 @@ Tcl_Var var; /* Used to search for global names. */ Var *varPtr; /* Points to the Var structure returned for * the variable. */ Namespace *varNsPtr, *cxtNsPtr, *dummy1Ptr, *dummy2Ptr; ResolverScheme *resPtr; - int isNew, result; - Tcl_Size i, varLen; + int isNew ,result; + Tcl_Size i ,varLen; const char *varName = Tcl_GetStringFromObj(varNamePtr, &varLen); varPtr = NULL; varNsPtr = NULL; /* Set non-NULL if a nonlocal variable. */ *indexPtr = -3; @@ -3133,11 +3144,11 @@ /* * Make sure that these objects (which we need throughout the body of the * loop) don't vanish. */ - varListObj = TclListObjCopy(NULL, objv[1]); + varListObj = TclDuplicatePureObj(interp, objv[1], tclListTypePtr); if (!varListObj) { return TCL_ERROR; } scriptObj = objv[3]; Tcl_IncrRefCount(scriptObj); @@ -4032,11 +4043,11 @@ /* * Install the contents of the dictionary or list into the array. */ arrayElemObj = objv[2]; - if (TclHasInternalRep(arrayElemObj, &tclDictType) && arrayElemObj->bytes == NULL) { + if (TclHasInternalRep(arrayElemObj, tclDictTypePtr) && arrayElemObj->bytes == NULL) { Tcl_Obj *keyPtr, *valuePtr; Tcl_DictSearch search; int done; Tcl_Size size; @@ -4109,11 +4120,12 @@ * We needn't worry about traces invalidating arrayPtr: should that be * the case, TclPtrSetVarIdx will return NULL so that we break out of * the loop and return an error. */ - copyListObj = TclListObjCopy(NULL, arrayElemObj); + copyListObj = + TclDuplicatePureObj(interp, arrayElemObj, tclListTypePtr); if (!copyListObj) { return TCL_ERROR; } for (i=0 ; i * Copyright © 2013-2015 Christian Werner * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclZipfs.c -- + * + * Implementation of the ZIP filesystem used in TIP 430 + * Adapted from the implementation for AndroWish. * * This file is distributed in two ways: * generic/tclZipfs.c file in the TIP430-enabled Tcl cores. * compat/tclZipfs.c file in the tclconfig (TEA) file system, for pre-tip430 * projects. @@ -1376,11 +1387,11 @@ * When "needZip" is zero an embedded ZIP archive in an executable file * is accepted. Note that we do not support ZIP64. * * Results: * TCL_OK on success, TCL_ERROR otherwise with an error message placed - * into the given "interp" if it is not NULL. + * into the given interp if it is not NULL. * * Side effects: * The given ZipFile struct is filled with information about the ZIP * archive file. On error, ZipFSCloseArchive is called on zf but * it is not freed. @@ -1474,11 +1485,11 @@ * In addition, the following consistency checks must be met * (1) cdirZipOffset <= eocdDataOffset (to prevent under flow in computation of (2)) * (2) cdirZipOffset + cdirSize <= eocdDataOffset. Else the CD will be overlapping * the EOCD. Note this automatically means cdirZipOffset+cdirSize < zf->length. */ - if (!(cdirZipOffset <= (size_t)eocdDataOffset && + if (!(cdirZipOffset <= eocdDataOffset && cdirSize <= eocdDataOffset - cdirZipOffset)) { if (!needZip) { /* Simply point to end od data */ zf->directoryOffset = zf->baseOffset = zf->passOffset = zf->length; return TCL_OK; @@ -1579,11 +1590,11 @@ * function to succeed. When "needZip" is zero an embedded ZIP archive in * an executable file is accepted. * * Results: * TCL_OK on success, TCL_ERROR otherwise with an error message placed - * into the given "interp" if it is not NULL. On error, ZipFSCloseArchive + * into the given interp if it is not NULL. On error, ZipFSCloseArchive * is called on zf but it is not freed. * * Side effects: * ZIP archive is memory mapped or read into allocated memory, the given * ZipFile struct is filled with information about the ZIP archive file. @@ -1757,11 +1768,11 @@ /* * Determine the file size. */ zf->length = lseek(fd, 0, SEEK_END); - if (zf->length == (size_t)-1) { + if ((off_t)zf->length == (off_t)-1) { ZIPFS_POSIX_ERROR(interp, "failed to retrieve file size"); return TCL_ERROR; } if (zf->length < ZIP_CENTRAL_END_LEN) { Tcl_SetErrno(EINVAL); @@ -1816,11 +1827,11 @@ * This function generates the root node for a ZIPFS filesystem by * reading the ZIP's central directory. * * Results: * TCL_OK on success, TCL_ERROR otherwise with an error message placed - * into the given "interp" if it is not NULL. On error, frees zf!! + * into the given interp if it is not NULL. On error, frees zf!! * * Side effects: * Will acquire and release the write lock. * *------------------------------------------------------------------------- Index: generic/tclZlib.c ================================================================== --- generic/tclZlib.c +++ generic/tclZlib.c @@ -1,10 +1,6 @@ /* - * tclZlib.c -- - * - * This file provides the interface to the Zlib library. - * * Copyright © 2004-2005 Pascal Scheffers * Copyright © 2005 Unitas Software B.V. * Copyright © 2008-2012 Donal K. Fellows * * Parts written by Jean-Claude Wippler, as part of Tclkit, placed in the @@ -12,10 +8,25 @@ * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. +*/ + +/* + * tclZlib.c -- + * + * This file provides the interface to the Zlib library. + */ + #include "tclInt.h" #ifdef HAVE_ZLIB #include #include "tclIO.h" Index: library/auto.tcl ================================================================== --- library/auto.tcl +++ library/auto.tcl @@ -6,11 +6,17 @@ # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1998 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. # +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. # auto_reset -- # # Destroy all cached information for auto-loading and auto-execution, so that # the information gets recomputed the next time it's needed. Also delete any Index: library/clock.tcl ================================================================== --- library/clock.tcl +++ library/clock.tcl @@ -1,21 +1,23 @@ -#---------------------------------------------------------------------- +# Copyright © 2004-2007 Kevin B. Kenny +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. # +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # clock.tcl -- # # This file implements the portions of the [clock] ensemble that are # coded in Tcl. Refer to the users' manual to see the description of # the [clock] command and its subcommands. # # -#---------------------------------------------------------------------- -# -# Copyright © 2004-2007 Kevin B. Kenny -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. -# -#---------------------------------------------------------------------- # We must have message catalogs that support the root locale, and we need # access to the Registry on Windows systems. uplevel \#0 { Index: library/cookiejar/cookiejar.tcl ================================================================== --- library/cookiejar/cookiejar.tcl +++ library/cookiejar/cookiejar.tcl @@ -1,13 +1,20 @@ +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # cookiejar.tcl -- # # Implementation of an HTTP cookie storage engine using SQLite. The # implementation is done as a TclOO class, and includes a punycode # encoder and decoder (though only the encoder is currently used). -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. # Dependencies package require Tcl 8.6- package require http 2.8.4 package require sqlite3 Index: library/cookiejar/idna.tcl ================================================================== --- library/cookiejar/idna.tcl +++ library/cookiejar/idna.tcl @@ -1,18 +1,25 @@ +# Copyright © 2014 Donal K. Fellows +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # idna.tcl -- # # Implementation of IDNA (Internationalized Domain Names for # Applications) encoding/decoding system, built on a punycode engine # developed directly from the code in RFC 3492, Appendix C (with # substantial modifications). -# -# This implementation includes code from that RFC, translated to Tcl; the -# other parts are: -# Copyright © 2014 Donal K. Fellows -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This implementation includes code from that RFC, translated to Tcl. namespace eval ::tcl::idna { namespace ensemble create -command puny -map { encode punyencode decode punydecode Index: library/history.tcl ================================================================== --- library/history.tcl +++ library/history.tcl @@ -1,13 +1,20 @@ -# history.tcl -- -# -# Implementation of the history command. -# # Copyright © 1997 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# history.tcl -- +# +# Implementation of the history command. # # The tcl::history array holds the history list and some additional # bookkeeping variables. # Index: library/http/http.tcl ================================================================== --- library/http/http.tcl +++ library/http/http.tcl @@ -1,14 +1,21 @@ +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # http.tcl -- # # Client-side HTTP for GET, POST, and HEAD commands. These routines can # be used in untrusted code that uses the Safesock security policy. # These procedures use a callback interface to avoid using vwait, which # is not defined in the safe base. -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. package require Tcl 8.6- # Keep this in sync with pkgIndex.tcl and with the install directories in # Makefiles package provide http 2.10b1 @@ -1782,14 +1789,11 @@ set delay [expr {[clock milliseconds] - $pre}] if {$delay > 3000} { Log socket delay $delay - token $token } fconfigure $sock -translation {auto crlf} \ - -buffersize $state(-blocksize) - if {[package vsatisfies [package provide Tcl] 9.0-]} { - fconfigure $sock -profile replace - } + -buffersize $state(-blocksize) -profile strict ##Log socket opened, DONE fconfigure - token $token } Log "Using $sock for $state(socketinfo) - token $token" \ [expr {$state(-keepalive)?"keepalive":""}] @@ -2203,14 +2207,11 @@ # Send data in cr-lf format, but accept any line terminators. # Initialisation to {auto *} now done in geturl, KeepSocket and DoneRequest. # We are concerned here with the request (write) not the response (read). lassign [fconfigure $sock -translation] trRead trWrite fconfigure $sock -translation [list $trRead crlf] \ - -buffersize $state(-blocksize) - if {[package vsatisfies [package provide Tcl] 9.0-]} { - fconfigure $sock -profile replace - } + -buffersize $state(-blocksize) -profile strict # The following is disallowed in safe interpreters, but the socket is # already in non-blocking mode in that case. catch {fconfigure $sock -blocking off} @@ -2596,14 +2597,11 @@ set sock $state(sock) #Log ---- $state(socketinfo) >> conn to $token for HTTP response lassign [fconfigure $sock -translation] trRead trWrite fconfigure $sock -translation [list auto $trWrite] \ - -buffersize $state(-blocksize) - if {[package vsatisfies [package provide Tcl] 9.0-]} { - fconfigure $sock -profile replace - } + -buffersize $state(-blocksize) -profile strict Log ^D$tk begin receiving response - token $token coroutine ${token}--EventCoroutine http::Event $sock $token if {[info exists state(-handler)] || [info exists state(-progress)]} { fileevent $sock readable [list http::EventGateway $sock $token] @@ -4591,15 +4589,12 @@ # IANA charset. However, we only know how to convert what we have # encodings for. set enc [CharsetToEncoding $state(charset)] if {$enc ne "binary"} { - if {[package vsatisfies [package provide Tcl] 9.0-]} { - set state(body) [encoding convertfrom -profile replace $enc $state(body)] - } else { - set state(body) [encoding convertfrom $enc $state(body)] - } + set state(body) [ + encoding convertfrom -profile strict $enc $state(body)] } # Translate text line endings. set state(body) [string map {\r\n \n \r \n} $state(body)] } @@ -4678,15 +4673,11 @@ } set enc [CharsetToEncoding $res] if {$enc eq "binary"} { return 0 } - if {[package vsatisfies [package provide Tcl] 9.0-]} { - set state(body) [encoding convertfrom -profile replace $enc $state(body)] - } else { - set state(body) [encoding convertfrom $enc $state(body)] - } + set state(body) [encoding convertfrom -profile strict $enc $state(body)] set state(body) [string map {\r\n \n \r \n} $state(body)] set state(type) application/xml set state(binary) 0 set state(charset) $res return 1 @@ -4763,15 +4754,11 @@ # The spec says: "non-alphanumeric characters are replaced by '%HH'". Use # a pre-computed map and [string map] to do the conversion (much faster # than [regsub]/[subst]). [Bug 1020491] - if {[package vsatisfies [package provide Tcl] 9.0-]} { - set string [encoding convertto -profile replace $http(-urlencoding) $string] - } else { - set string [encoding convertto $http(-urlencoding) $string] - } + set string [encoding convertto -profile strict $http(-urlencoding) $string] return [string map $formMap $string] } # http::ProxyRequired -- # Default proxy filter. Index: library/init.tcl ================================================================== --- library/init.tcl +++ library/init.tcl @@ -1,10 +1,5 @@ -# init.tcl -- -# -# Default system startup file for Tcl-based applications. Defines -# "unknown" procedure and auto-load facilities. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # Copyright © 2004 Kevin B. Kenny. # Copyright © 2018 Sean Woods @@ -11,11 +6,22 @@ # # All rights reserved. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# init.tcl -- # +# Default system startup file for Tcl-based applications. Defines +# "unknown" procedure and auto-load facilities. # This test intentionally written in pre-7.5 Tcl if {[info commands package] == ""} { error "version mismatch: library\nscripts expect Tcl version 7.5b1 or later but the loaded version is\nonly [info patchlevel]" } Index: library/install.tcl ================================================================== --- library/install.tcl +++ library/install.tcl @@ -1,5 +1,12 @@ +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + ### # Installer actions built into tclsh and invoked # if the first command line argument is "install" ### if {[llength $argv] < 2} { Index: library/msgcat/msgcat.tcl ================================================================== --- library/msgcat/msgcat.tcl +++ library/msgcat/msgcat.tcl @@ -1,17 +1,24 @@ -# msgcat.tcl -- -# -# This file defines various procedures which implement a -# message catalog facility for Tcl programs. It should be -# loaded with the command "package require msgcat". -# # Copyright © 2010-2018 Harald Oehlmann. # Copyright © 1998-2000 Ajuba Solutions. # Copyright © 1998 Mark Harrison. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# msgcat.tcl -- +# +# This file defines various procedures which implement a +# message catalog facility for Tcl programs. It should be +# loaded with the command "package require msgcat". # We use oo::define::self, which is new in Tcl 8.7 package require Tcl 8.7- # When the version number changes, be sure to update the pkgIndex.tcl file, # and the installation directory in the Makefiles. Index: library/opt/optparse.tcl ================================================================== --- library/opt/optparse.tcl +++ library/opt/optparse.tcl @@ -1,5 +1,12 @@ +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # optparse.tcl -- # # (private) Option parsing package # Primarily used internally by the safe:: code. # Index: library/opt/pkgIndex.tcl ================================================================== --- library/opt/pkgIndex.tcl +++ library/opt/pkgIndex.tcl @@ -1,5 +1,12 @@ +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related Index: library/package.tcl ================================================================== --- library/package.tcl +++ library/package.tcl @@ -6,11 +6,17 @@ # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1998 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. # +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. namespace eval tcl::Pkg {} # ::tcl::Pkg::CompareExtension -- # Index: library/parray.tcl ================================================================== --- library/parray.tcl +++ library/parray.tcl @@ -4,11 +4,17 @@ # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. # +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. proc parray {a {pattern *}} { upvar 1 $a array if {![array exists array]} { return -code error "\"$a\" isn't an array" Index: library/platform/platform.tcl ================================================================== --- library/platform/platform.tcl +++ library/platform/platform.tcl @@ -1,6 +1,12 @@ -# -*- tcl -*- +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # ### ### ### ######### ######### ######### ## Overview # Heuristics to assemble a platform identifier from publicly available # information. The identifier describes the platform of the currently Index: library/platform/shell.tcl ================================================================== --- library/platform/shell.tcl +++ library/platform/shell.tcl @@ -1,7 +1,12 @@ +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. -# -*- tcl -*- # ### ### ### ######### ######### ######### ## Overview # Higher-level commands which invoke the functionality of this package # for an arbitrary tcl shell (tclsh, wish, ...). This is required by a Index: library/safe.tcl ================================================================== --- library/safe.tcl +++ library/safe.tcl @@ -1,25 +1,30 @@ +# Copyright © 1996-1997 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # safe.tcl -- # # This file provide a safe loading/sourcing mechanism for safe interpreters. # It implements a virtual path mecanism to hide the real pathnames from the # child. It runs in a parent interpreter and sets up data structure and # aliases that will be invoked when used from a child interpreter. # # See the safe.n man page for details. -# -# Copyright © 1996-1997 Sun Microsystems, Inc. -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. -# # The implementation is based on namespaces. These naming conventions are # followed: # Private procs starts with uppercase. # Public procs are exported and starts with lowercase -# # Needed utilities package package require opt 0.4.8 # Create the safe namespace Index: library/tcltest/pkgIndex.tcl ================================================================== --- library/tcltest/pkgIndex.tcl +++ library/tcltest/pkgIndex.tcl @@ -1,5 +1,12 @@ +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# # Tcl package index file, version 1.1 # This file is generated by the "pkg_mkIndex -direct" command # and sourced either when an application starts up or # by a "package unknown" script. It invokes the # "package ifneeded" command to set up package-related Index: library/tcltest/tcltest.tcl ================================================================== --- library/tcltest/tcltest.tcl +++ library/tcltest/tcltest.tcl @@ -1,5 +1,18 @@ +# Copyright © 1994-1997 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# Copyright © 2000 Ajuba Solutions +# Contributions from Don Porter, NIST, 2002. (not subject to US copyright) +# All rights reserved. +# +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # tcltest.tcl -- # # This file contains support code for the Tcl test suite. It # defines the tcltest namespace and finds and defines the output # directory, constraints available, output and error channels, @@ -7,16 +20,10 @@ # details. # # This design was based on the Tcl testing approach designed and # initially implemented by Mary Ann May-Pumphrey of Sun # Microsystems. -# -# Copyright © 1994-1997 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# Copyright © 2000 Ajuba Solutions -# Contributions from Don Porter, NIST, 2002. (not subject to US copyright) -# All rights reserved. package require Tcl 8.5- ;# -verbose line uses [info frame] namespace eval tcltest { # When the version number changes, be sure to update the pkgIndex.tcl file, @@ -399,11 +406,11 @@ set outputChannel $filename } default { set outputChannel [open $filename a] if {[package vsatisfies [package provide Tcl] 8.7-]} { - fconfigure $outputChannel -profile tcl8 -encoding utf-8 + fconfigure $outputChannel -encoding utf-8 } set ChannelsWeOpened($outputChannel) 1 # If we created the file in [temporaryDirectory], then # [cleanupTests] will delete it, unless we claim it was @@ -446,11 +453,11 @@ set errorChannel $filename } default { set errorChannel [open $filename a] if {[package vsatisfies [package provide Tcl] 8.7-]} { - fconfigure $errorChannel -profile tcl8 -encoding utf-8 + fconfigure $errorChannel -encoding utf-8 } set ChannelsWeOpened($errorChannel) 1 # If we created the file in [temporaryDirectory], then # [cleanupTests] will delete it, unless we claim it was @@ -791,11 +798,11 @@ proc ReadLoadScript {args} { variable Option if {$Option(-loadfile) eq {}} {return} set tmp [open $Option(-loadfile) r] if {[package vsatisfies [package provide Tcl] 8.7-]} { - fconfigure $tmp -profile tcl8 -encoding utf-8 + fconfigure $tmp -encoding utf-8 } loadScript [read $tmp] close $tmp } Option -loadfile {} { @@ -1132,10 +1139,11 @@ if {[catch {testConstraint $n2 [eval [ConstraintInitializer $n2]]}]} { testConstraint $n2 0 } } } + # tcltest::Asciify -- # # Transforms the passed string to contain only printable ascii characters. # Useful for printing to terminals. Non-printables are mapped to @@ -1371,11 +1379,11 @@ ConstraintInitializer stdio { set code 0 if {![catch {set f [open "|[list [interpreter]]" w]}]} { if {[package vsatisfies [package provide Tcl] 8.7-]} { - fconfigure $f -profile tcl8 -encoding utf-8 + fconfigure $f -encoding utf-8 } if {![catch {puts $f exit}]} { if {![catch {close $f}]} { set code 1 } @@ -2221,11 +2229,11 @@ } else { set testFile [file normalize [uplevel 1 {info script}]] if {[file readable $testFile]} { set testFd [open $testFile r] if {[package vsatisfies [package provide Tcl] 8.7-]} { - fconfigure $testFd -profile tcl8 -encoding utf-8 + fconfigure $testFd -encoding utf-8 } set testLine [expr {[lsearch -regexp \ [split [read $testFd] "\n"] \ "^\[ \t\]*test [string map {. \\.} $name] "] + 1}] close $testFd @@ -2252,15 +2260,11 @@ } if {$processTest && $scriptFailure} { if {$scriptCompare} { puts [outputChannel] "---- Error testing result: $scriptMatch" } else { - if {[catch { - puts [outputChannel] "---- Result was:\n[Asciify $actualAnswer]" - } errMsg]} { - puts [outputChannel] "\n---- Result was:\n" - } + puts [outputChannel] "---- Result was:\n[Asciify $actualAnswer]" puts [outputChannel] "---- Result should have been\ ($match matching):\n[Asciify $result]" } } if {$errorCodeFailure} { @@ -2937,11 +2941,11 @@ set cmd [linsert $childargv 0 | $shell $file] if {[catch { incr numTestFiles set pipeFd [open $cmd "r"] if {[package vsatisfies [package provide Tcl] 8.7-]} { - fconfigure $pipeFd -profile tcl8 -encoding utf-8 + fconfigure $pipeFd -encoding utf-8 } while {[gets $pipeFd line] >= 0} { if {[regexp [join { {^([^:]+):\t} {Total\t([0-9]+)\t} @@ -3137,11 +3141,11 @@ putting ``$contents'' into $fullName" set fd [open $fullName w] fconfigure $fd -translation lf if {[package vsatisfies [package provide Tcl] 8.7-]} { - fconfigure $fd -profile tcl8 -encoding utf-8 + fconfigure $fd -encoding utf-8 } if {[string index $contents end] eq "\n"} { puts -nonewline $fd $contents } else { puts $fd $contents @@ -3288,11 +3292,11 @@ set directory [temporaryDirectory] } set fullName [file join $directory $name] set f [open $fullName] if {[package vsatisfies [package provide Tcl] 8.7-]} { - fconfigure $f -profile tcl8 -encoding utf-8 + fconfigure $f -encoding utf-8 } set data [read -nonewline $f] close $f return $data } Index: library/tm.tcl ================================================================== --- library/tm.tcl +++ library/tm.tcl @@ -1,11 +1,15 @@ -# -*- tcl -*- +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. # +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. # Searching for Tcl Modules. Defines a procedure, declares it as the primary # command for finding packages, however also uses the former 'package unknown' # command as a fallback. -# + # Locates all possible packages in a directory via a less restricted glob. The # targeted directory is derived from the name of the requested package, i.e. # the TM scan will look only at directories which can contain the requested # package. It will register all packages it found in the directory so that # future requests have a higher chance of being fulfilled by the ifneeded Index: library/word.tcl ================================================================== --- library/word.tcl +++ library/word.tcl @@ -1,16 +1,23 @@ -# word.tcl -- -# -# This file defines various procedures for computing word boundaries in -# strings. This file is primarily needed so Tk text and entry widgets behave -# properly for different platforms. -# # Copyright © 1996 Sun Microsystems, Inc. # Copyright © 1998 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# word.tcl -- +# +# This file defines various procedures for computing word boundaries in +# strings. This file is primarily needed so Tk text and entry widgets behave +# properly for different platforms. # The following variables are used to determine which characters are # interpreted as word characters. See bug [f1253530cdd8]. Will # probably be removed in Tcl 9. DELETED libtommath/win32/libtommath.dll Index: libtommath/win32/libtommath.dll ================================================================== --- libtommath/win32/libtommath.dll +++ /dev/null cannot compute difference between binary files Index: libtommath/win64-arm/libtommath.dll ================================================================== --- libtommath/win64-arm/libtommath.dll +++ libtommath/win64-arm/libtommath.dll cannot compute difference between binary files DELETED libtommath/win64/libtommath.dll Index: libtommath/win64/libtommath.dll ================================================================== --- libtommath/win64/libtommath.dll +++ /dev/null cannot compute difference between binary files DELETED libtommath/win64/libtommath.dll.a Index: libtommath/win64/libtommath.dll.a ================================================================== --- libtommath/win64/libtommath.dll.a +++ /dev/null cannot compute difference between binary files Index: macosx/GNUmakefile ================================================================== --- macosx/GNUmakefile +++ macosx/GNUmakefile @@ -1,16 +1,21 @@ -######################################################################################################## -# -# Makefile wrapper to build tcl on Mac OS X in a way compatible with the tk/macosx Xcode buildsystem -# uses the standard Unix build system in tcl/unix (which can be used directly instead of this -# if you are not using the tk/macosx projects). -# # Copyright (c) 2002-2008 Daniel A. Steffen # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. -######################################################################################################## + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Makefile wrapper to build tcl on Mac OS X in a way compatible with the tk/macosx Xcode buildsystem +# uses the standard Unix build system in tcl/unix (which can be used directly instead of this +# if you are not using the tk/macosx projects). +# #------------------------------------------------------------------------------------------------------- # customizable settings DESTDIR ?= Index: macosx/Tcl-Common.xcconfig ================================================================== --- macosx/Tcl-Common.xcconfig +++ macosx/Tcl-Common.xcconfig @@ -1,15 +1,21 @@ -// -// Tcl-Common.xcconfig -- -// -// This file contains the Xcode build settings comon to all -// project configurations in Tcl.xcodeproj. -// // Copyright (c) 2007-2008 Daniel A. Steffen // // See the file "license.terms" for information on usage and redistribution // of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +// You may distribute and/or modify this program under the terms of the GNU +// Affero General Public License as published by the Free Software Foundation, +// either version 3 of the License, or (at your option) any later version. +// +// See the file "COPYING" for information on usage and redistribution +// of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +// Tcl-Common.xcconfig -- +// +// This file contains the Xcode build settings comon to all +// project configurations in Tcl.xcodeproj. HEADER_SEARCH_PATHS = "$(DERIVED_FILE_DIR)/tcl" $(HEADER_SEARCH_PATHS) OTHER_LDFLAGS = -headerpad_max_install_names -sectcreate __TEXT __info_plist "$(DERIVED_FILE_DIR)/tcl/Tclsh-Info.plist" $(OTHER_LDFLAGS) INSTALL_PATH = $(BINDIR) INSTALL_MODE_FLAG = go-w,a+rX Index: macosx/Tcl-Debug.xcconfig ================================================================== --- macosx/Tcl-Debug.xcconfig +++ macosx/Tcl-Debug.xcconfig @@ -1,15 +1,22 @@ +// Copyright (c) 2007 Daniel A. Steffen +// +// See the file "license.terms" for information on usage and redistribution +// of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +// You may distribute and/or modify this program under the terms of the GNU +// Affero General Public License as published by the Free Software Foundation, +// either version 3 of the License, or (at your option) any later version. // +// See the file "COPYING" for information on usage and redistribution +// of this file, and for a DISCLAIMER OF ALL WARRANTIES. + // Tcl-Debug.xcconfig -- // // This file contains the Xcode build settings for all Debug // project configurations in Tcl.xcodeproj. // -// Copyright (c) 2007 Daniel A. Steffen -// -// See the file "license.terms" for information on usage and redistribution -// of this file, and for a DISCLAIMER OF ALL WARRANTIES. #include "Tcl-Common.xcconfig" DEBUG_INFORMATION_FORMAT = dwarf DEAD_CODE_STRIPPING = NO Index: macosx/Tcl-Info.plist.in ================================================================== --- macosx/Tcl-Info.plist.in +++ macosx/Tcl-Info.plist.in @@ -4,10 +4,18 @@ Copyright (c) 2005-2007 Daniel A. Steffen See the file "license.terms" for information on usage and redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. --> + CFBundleDevelopmentRegion English CFBundleExecutable Index: macosx/Tcl-Release.xcconfig ================================================================== --- macosx/Tcl-Release.xcconfig +++ macosx/Tcl-Release.xcconfig @@ -1,15 +1,21 @@ -// -// Tcl-Release.xcconfig -- -// -// This file contains the Xcode build settings for all Release -// project configurations in Tcl.xcodeproj. -// // Copyright (c) 2007 Daniel A. Steffen // // See the file "license.terms" for information on usage and redistribution // of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +// You may distribute and/or modify this program under the terms of the GNU +// Affero General Public License as published by the Free Software Foundation, +// either version 3 of the License, or (at your option) any later version. +// +// See the file "COPYING" for information on usage and redistribution +// of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +// Tcl-Release.xcconfig -- +// +// This file contains the Xcode build settings for all Release +// project configurations in Tcl.xcodeproj. #include "Tcl-Common.xcconfig" DEBUG_INFORMATION_FORMAT = dwarf-with-dsym DEAD_CODE_STRIPPING = YES Index: macosx/Tclsh-Info.plist.in ================================================================== --- macosx/Tclsh-Info.plist.in +++ macosx/Tclsh-Info.plist.in @@ -4,10 +4,18 @@ Copyright (c) 2005-2007 Daniel A. Steffen See the file "license.terms" for information on usage and redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. --> + CFBundleDevelopmentRegion English CFBundleExecutable Index: macosx/tclMacOSXBundle.c ================================================================== --- macosx/tclMacOSXBundle.c +++ macosx/tclMacOSXBundle.c @@ -1,18 +1,29 @@ /* - * tclMacOSXBundle.c -- - * - * This file implements functions that inspect CFBundle structures on - * MacOS X. - * * Copyright © 2001-2009 Apple Inc. * Copyright © 2003-2009 Daniel A. Steffen * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclMacOSXBundle.c -- + * + * This file implements functions that inspect CFBundle structures on + * MacOS X. + */ + #include "tclPort.h" #include "tclInt.h" #ifdef HAVE_COREFOUNDATION #include Index: macosx/tclMacOSXFCmd.c ================================================================== --- macosx/tclMacOSXFCmd.c +++ macosx/tclMacOSXFCmd.c @@ -1,17 +1,28 @@ /* - * tclMacOSXFCmd.c - * - * This file implements the MacOSX specific portion of file manipulation - * subcommands of the "file" command. - * * Copyright © 2003-2007 Daniel A. Steffen * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclMacOSXFCmd.c + * + * This file implements the MacOSX specific portion of file manipulation + * subcommands of the "file" command. + */ + #include "tclInt.h" #ifdef HAVE_GETATTRLIST #include #include @@ -87,11 +98,11 @@ "osType", /* name */ NULL, /* freeIntRepProc */ NULL, /* dupIntRepProc */ UpdateStringOfOSType, /* updateStringProc */ SetOSTypeFromAny, /* setFromAnyProc */ - TCL_OBJTYPE_V0 + 0 }; enum { kIsInvisible = 0x4000, }; Index: macosx/tclMacOSXNotify.c ================================================================== --- macosx/tclMacOSXNotify.c +++ macosx/tclMacOSXNotify.c @@ -1,20 +1,31 @@ /* - * tclMacOSXNotify.c -- - * - * This file contains the implementation of a merged CFRunLoop/select() - * based notifier, which is the lowest-level part of the Tcl event loop. - * This file works together with generic/tclNotify.c. - * * Copyright © 1995-1997 Sun Microsystems, Inc. * Copyright © 2001-2009, Apple Inc. * Copyright © 2005-2009 Daniel A. Steffen * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclMacOSXNotify.c -- + * + * This file contains the implementation of a merged CFRunLoop/select() + * based notifier, which is the lowest-level part of the Tcl event loop. + * This file works together with generic/tclNotify.c. + */ + #include "tclInt.h" /* * In macOS 10.12 the os_unfair_lock was introduced as a replacement for the * OSSpinLock, and the OSSpinLock was deprecated. Index: tests-perf/clock.perf.tcl ================================================================== --- tests-perf/clock.perf.tcl +++ tests-perf/clock.perf.tcl @@ -1,21 +1,28 @@ #!/usr/bin/tclsh + +# Copyright © 2014 Serg G. Brester (aka sebres) +# +# See the file "license.terms" for information on usage and redistribution +# of this file. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # ------------------------------------------------------------------------ # # test-performance.tcl -- # # This file provides common performance tests for comparison of tcl-speed # degradation by switching between branches. # (currently for clock ensemble only) # # ------------------------------------------------------------------------ -# -# Copyright © 2014 Serg G. Brester (aka sebres) -# -# See the file "license.terms" for information on usage and redistribution -# of this file. -# array set in {-time 500} if {[info exists ::argv0] && [file tail $::argv0] eq [file tail [info script]]} { array set in $argv } Index: tests-perf/comparePerf.tcl ================================================================== --- tests-perf/comparePerf.tcl +++ tests-perf/comparePerf.tcl @@ -1,17 +1,25 @@ #!/usr/bin/tclsh + +# See the file "license.terms" for information on usage and redistribution +# of this file. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. + +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # ------------------------------------------------------------------------ # # comparePerf.tcl -- # # Script to compare performance data from multiple runs. # # ------------------------------------------------------------------------ # -# See the file "license.terms" for information on usage and redistribution -# of this file. -# # Usage: # tclsh comparePerf.tcl [--regexp RE] [--ratio time|rate] [--combine] [--base BASELABEL] PERFFILE ... # # The test data from each input file is tabulated so as to compare the results # of test runs. If a PERFFILE does not exist, it is retried by adding the Index: tests-perf/listPerf.tcl ================================================================== --- tests-perf/listPerf.tcl +++ tests-perf/listPerf.tcl @@ -1,18 +1,26 @@ #!/usr/bin/tclsh + +# See the file "license.terms" for information on usage and redistribution +# of this file. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # ------------------------------------------------------------------------ # # listPerf.tcl -- # # This file provides performance tests for list operations. Run # tclsh listPerf.tcl help # for options. # ------------------------------------------------------------------------ # -# See the file "license.terms" for information on usage and redistribution -# of this file. -# # Note: this file does not use the test-performance.tcl framework as we want # more direct control over timerate options. catch {package require twapi} Index: tests-perf/test-performance.tcl ================================================================== --- tests-perf/test-performance.tcl +++ tests-perf/test-performance.tcl @@ -1,5 +1,19 @@ +#! /usr/bin/env tclsh + +# Copyright © 2014 Serg G. Brester (aka sebres) +# +# See the file "license.terms" for information on usage and redistribution +# of this file. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # ------------------------------------------------------------------------ # # test-performance.tcl -- # # This file provides common performance tests for comparison of tcl-speed @@ -6,16 +20,10 @@ # degradation or regression by switching between branches. # # To execute test case evaluate direct corresponding file "tests-perf\*.perf.tcl". # # ------------------------------------------------------------------------ -# -# Copyright © 2014 Serg G. Brester (aka sebres) -# -# See the file "license.terms" for information on usage and redistribution -# of this file. -# namespace eval ::tclTestPerf { # warm-up interpreter compiler env, calibrate timerate measurement functionality: # if no timerate here - import from unsupported: Index: tests-perf/timer-event.perf.tcl ================================================================== --- tests-perf/timer-event.perf.tcl +++ tests-perf/timer-event.perf.tcl @@ -1,22 +1,27 @@ #!/usr/bin/tclsh +# Copyright © 2014 Serg G. Brester (aka sebres) +# +# See the file "license.terms" for information on usage and redistribution +# of this file. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # ------------------------------------------------------------------------ # # timer-event.perf.tcl -- # # This file provides performance tests for comparison of tcl-speed # of timer events (event-driven tcl-handling). # # ------------------------------------------------------------------------ -# -# Copyright © 2014 Serg G. Brester (aka sebres) -# -# See the file "license.terms" for information on usage and redistribution -# of this file. -# - if {![namespace exists ::tclTestPerf]} { source [file join [file dirname [info script]] test-performance.tcl] } Index: tests/aaa_exit.test ================================================================== --- tests/aaa_exit.test +++ tests/aaa_exit.test @@ -1,17 +1,24 @@ -# Commands covered: exit, emphasis on finalization hangs -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: exit, emphasis on finalization hangs +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/abstractlist.test ================================================================== --- tests/abstractlist.test +++ tests/abstractlist.test @@ -1,11 +1,19 @@ -# Exercise AbstractList via the "lstring" command defined in tclTestABSList.c -# # Copyright © 2022 Brian Griffin # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Exercise AbstractList via the "lstring" command defined in tclTestABSList.c + if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } @@ -201,11 +209,11 @@ set l-isa [testobj objtype $l] set m [lset l 2 0 1 k] set m-isa [testobj objtype $m] list $l ${l-isa} $m ${m-isa} [value-cmp l m] } -returnCodes 1 \ - -result {Multiple indicies not supported by lstring.} + -result {Multiple indices not supported by lstring.} # lsort test abstractlist-3.0 {no shimmer llength} {testobj lstring} { set l [lstring -not SLICE $str] @@ -491,19 +499,19 @@ set m [testevalex {lset l 2 k}] set m-isa [testobj objtype $m] list $l ${l-isa} $m ${m-isa} [value-cmp l m] } {{I n k o n c e i v a b l e} lstring {I n k o n c e i v a b l e} lstring 0} -test abstractlist-$not-4.11e {error case lset multiple indicies} \ +test abstractlist-$not-4.11e {error case lset multiple indices} \ -constraints {SetelementShimmer testobj lstring testevalex} -body { set l [lstring Inconceivable] set l-isa [testobj objtype $l] set m [testevalex {lset l 2 0 1 k}] set m-isa [testobj objtype $m] list $l ${l-isa} $m ${m-isa} [value-cmp l m] } -returnCodes 1 \ - -result {Multiple indicies not supported by lstring.} + -result {Multiple indices not supported by lstring.} # lrepeat test abstractlist-$not-4.12 {shimmer lrepeat} -constraints {testobj lstring} -body { set l [lstring {*}$options Inconceivable] set l-isa [testobj objtype $l] Index: tests/all.tcl ================================================================== --- tests/all.tcl +++ tests/all.tcl @@ -1,16 +1,23 @@ -# all.tcl -- -# -# This file contains a top-level script to run all of the Tcl -# tests. Execute it by invoking "source all.tcl" when running tcltest -# in this directory. -# # Copyright © 1998-1999 Scriptics Corporation. # Copyright © 2000 Ajuba Solutions # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# all.tcl -- +# +# This file contains a top-level script to run all of the Tcl +# tests. Execute it by invoking "source all.tcl" when running tcltest +# in this directory. package prefer latest package require tcltest 2.5 namespace import ::tcltest::* Index: tests/append.test ================================================================== --- tests/append.test +++ tests/append.test @@ -1,17 +1,25 @@ -# Commands covered: append lappend -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: append lappend +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. +# if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } @@ -70,19 +78,19 @@ set x \uD83D$x } -result \uD83D\uDE02 test append-3.7 {append \xC0 \x80} -constraints testbytestring -body { set x [testbytestring \xC0] string length [append x [testbytestring \x80]] -} -result 2 +} -result 1 test append-3.8 {append \xC0 \x80} -constraints testbytestring -body { set x [testbytestring \xC0] string length $x[testbytestring \x80] -} -result 2 +} -result 1 test append-3.9 {append \xC0 \x80} -constraints testbytestring -body { set x [testbytestring \x80] string length [testbytestring \xC0]$x -} -result 2 +} -result 1 test append-3.10 {append surrogates} -body { set x \uD83D string range $x 0 end append x \uDE02 } -result [string range \uD83D\uDE02 0 end] Index: tests/appendComp.test ================================================================== --- tests/appendComp.test +++ tests/appendComp.test @@ -1,17 +1,24 @@ -# Commands covered: append lappend -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: append lappend +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/apply.test ================================================================== --- tests/apply.test +++ tests/apply.test @@ -1,18 +1,25 @@ -# Commands covered: apply -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # Copyright © 2005-2006 Miguel Sofer # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: apply +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/assemble.test ================================================================== --- tests/assemble.test +++ tests/assemble.test @@ -1,15 +1,22 @@ -# assemble.test -- -# -# Test suite for the 'tcl::unsupported::assemble' command -# # Copyright © 2010 Ozgur Dogan Ugurlu. # Copyright © 2010 Kevin B. Kenny. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. #----------------------------------------------------------------------------- + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# assemble.test -- +# +# Test suite for the 'tcl::unsupported::assemble' command # Commands covered: assemble if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 Index: tests/assemble1.bench ================================================================== --- tests/assemble1.bench +++ tests/assemble1.bench @@ -1,5 +1,12 @@ +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + proc ulam1 {n} { set max $n while {$n != 1} { if {$n > $max} { set max $n Index: tests/assocd.test ================================================================== --- tests/assocd.test +++ tests/assocd.test @@ -1,17 +1,24 @@ -# This file tests the AssocData facility of Tcl -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1994 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file tests the AssocData facility of Tcl +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/async.test ================================================================== --- tests/async.test +++ tests/async.test @@ -1,17 +1,24 @@ -# Commands covered: none -# -# This file contains a collection of tests for Tcl_AsyncCreate and related -# library procedures. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1993 The Regents of the University of California. # Copyright © 1994-1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: none +# +# This file contains a collection of tests for Tcl_AsyncCreate and related +# library procedures. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/autoMkindex.test ================================================================== --- tests/autoMkindex.test +++ tests/autoMkindex.test @@ -1,15 +1,23 @@ -# Commands covered: auto_mkindex auto_import -# -# This file contains tests related to autoloading and generating the -# autoloading index. -# # Copyright © 1998 Lucent Technologies, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: auto_mkindex auto_import +# +# This file contains tests related to autoloading and generating the +# autoloading index. +# if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/basic.test ================================================================== --- tests/basic.test +++ tests/basic.test @@ -1,5 +1,18 @@ +# Copyright © 1997 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file contains tests for the tclBasic.c source file. Tests appear in # the same order as the C code that they test. The set of tests is # currently incomplete since it currently includes only new tests for # code changed for the addition of Tcl namespaces. Other variable- # related tests appear in several other test files including @@ -6,16 +19,10 @@ # assocd.test, cmdInfo.test, eval.test, expr.test, interp.test, # and trace.test. # # Sourcing this file into Tcl runs the tests and generates output for # errors. No output means no errors were found. -# -# Copyright © 1997 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/bigdata.test ================================================================== --- tests/bigdata.test +++ tests/bigdata.test @@ -1,16 +1,24 @@ -# Test cases for large sized data -# # Copyright © 2023 Ashok P. Nadkarni # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Test cases for large sized data +# # These are very rudimentary tests for large size arguments to commands. # They do not exercise all possible code paths such as shared/unshared Tcl_Objs, # literal/variable arguments etc. # They do however test compiled and uncompiled execution. + if {"::tcltest" ni [namespace children]} { package require tcltest namespace import -force ::tcltest::* Index: tests/binary.test ================================================================== --- tests/binary.test +++ tests/binary.test @@ -1,16 +1,24 @@ -# This file tests the tclBinary.c file and the "binary" Tcl command. -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file tests the tclBinary.c file and the "binary" Tcl command. +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. + if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } @@ -2015,14 +2023,14 @@ set a {1.6 3.4} binary format r1 $a } \xCD\xCC\xCC\x3F test binary-53.20 {Tcl_BinaryObjCmd: float Inf} {} { binary format R Inf -} \x7F\x80\x00\x00 +} \x7f\x80\x00\x00 test binary-53.21 {Tcl_BinaryObjCmd: float Inf} {} { binary format r Inf -} \x00\x00\x80\x7F +} \x00\x00\x80\x7f test binary-53.22 {Binary float Inf round trip} -body { binary scan [binary format R Inf] R inf binary scan [binary format R -Inf] R inf_ list $inf $inf_ } -result {Inf -Inf} Index: tests/chan.test ================================================================== --- tests/chan.test +++ tests/chan.test @@ -1,13 +1,20 @@ -# This file contains a collection of tests for the Tcl built-in 'chan' -# command. Sourcing this file into Tcl runs the tests and generates -# output for errors. No output means no errors were found. -# # Copyright © 2005 Donal K. Fellows # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains a collection of tests for the Tcl built-in 'chan' +# command. Sourcing this file into Tcl runs the tests and generates +# output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } @@ -54,11 +61,11 @@ chan configure stdout -eofchar Ā } -returnCodes error -result {bad value for -eofchar: must be non-NUL ASCII character} test chan-4.3 {chan command: [Bug 800753]} -body { chan configure stdout -eofchar \x00 } -returnCodes error -result {bad value for -eofchar: must be non-NUL ASCII character} -test chan-4.4 {chan command: check valid inValue, no outValue} -constraints deprecated -body { +test chan-4.4 {chan command: check valid inValue, no outValue} -body { chan configure stdout -eofchar [list \x27 {}] } -result {} test chan-4.5 {chan command: check valid inValue, invalid outValue} -body { chan configure stdout -eofchar [list \x27 \x80] } -returnCodes error -result {bad value for -eofchar: must be non-NUL ASCII character} Index: tests/chanio.test ================================================================== --- tests/chanio.test +++ tests/chanio.test @@ -1,19 +1,28 @@ -# -*- tcl -*- -# Functionality covered: operation of all IO commands, and all procedures -# defined in generic/tclIO.c. -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1991-1994 The Regents of the University of California. # Copyright © 1994-1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Functionality covered: operation of all IO commands, and all procedures +# defined in generic/tclIO.c. +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. + +# Functionality covered: operation of all IO commands, and all procedures +# defined in generic/tclIO.c. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } @@ -1090,11 +1099,11 @@ } -cleanup { chan close $f } -result {10 1234567890 0} test chan-io-7.3 {FilterInputBytes: split up character at EOF} -setup { set x "" -} -constraints {testchannel} -body { +} -constraints testchannel -body { set f [open $path(test1) w] chan configure $f -encoding binary chan puts -nonewline $f "1234567890123\x82\x4F\x82\x50\x82" chan close $f set f [open $path(test1)] @@ -5285,21 +5294,21 @@ chan close $s2 } -result {auto crlf} test chan-io-39.22 {Tcl_SetChannelOption, invariance} -setup { file delete $path(test1) set l "" -} -constraints {unix deprecated} -body { +} -constraints unix -body { set f1 [open $path(test1) w+] lappend l [chan configure $f1 -eofchar] chan configure $f1 -eofchar {O {}} lappend l [chan configure $f1 -eofchar] chan configure $f1 -eofchar D lappend l [chan configure $f1 -eofchar] } -cleanup { chan close $f1 } -result {{} O D} -test chan-io-39.22a {Tcl_SetChannelOption, invariance} -constraints deprecated -setup { +test chan-io-39.22a {Tcl_SetChannelOption, invariance} -setup { file delete $path(test1) set l [list] } -body { set f1 [open $path(test1) w+] chan configure $f1 -eofchar {O {}} @@ -6720,18 +6729,19 @@ test chan-io-52.4 {TclCopyChannel} -constraints {fcopy} -setup { file delete $path(test1) } -body { set f1 [open $thisScript] set f2 [open $path(test1) w] - chan configure $f1 -translation lf -blocking 0 - chan configure $f2 -translation cr -blocking 0 + chan configure $f1 -encoding utf-8 -translation lf -blocking 0 + chan configure $f2 -encoding utf-8 -translation cr -blocking 0 chan copy $f1 $f2 -size 40 set result [list [chan configure $f1 -blocking] [chan configure $f2 -blocking]] chan close $f1 chan close $f2 + # the file size is 41 because "©" is encoded in two bytes lappend result [file size $path(test1)] -} -result {0 0 40} +} -result {0 0 41} test chan-io-52.5 {TclCopyChannel, all} -constraints {fcopy} -setup { file delete $path(test1) } -body { set f1 [open $thisScript] set f2 [open $path(test1) w] @@ -6821,27 +6831,28 @@ chan configure $f1 -translation lf chan puts $f1 " chan puts ready chan gets stdin set f1 \[open [list $thisScript] r\] - chan configure \$f1 -translation lf + chan configure \$f1 -encoding utf-8 -translation lf chan puts \[chan read \$f1 100\] chan close \$f1 " chan close $f1 set f1 [openpipe r+ $path(pipe)] - chan configure $f1 -translation lf + chan configure $f1 -encoding utf-8 -translation lf chan gets $f1 chan puts $f1 ready chan flush $f1 set f2 [open $path(test1) w] - chan configure $f2 -translation lf + chan configure $f2 -encoding utf-8 -translation lf set s0 [chan copy $f1 $f2 -size 40] catch {chan close $f1} chan close $f2 + # the file size is 41 because "©" is encoded in two bytes list $s0 [file size $path(test1)] -} -result {40 40} +} -result {40 41} # Empty files, to register them with the test facility set path(kyrillic.txt) [makeFile {} kyrillic.txt] set path(utf8-fcopy.txt) [makeFile {} utf8-fcopy.txt] set path(utf8-rp.txt) [makeFile {} utf8-rp.txt] # Create kyrillic file, use lf translation to avoid os eol issues Index: tests/clock.test ================================================================== --- tests/clock.test +++ tests/clock.test @@ -1,17 +1,25 @@ +# Copyright © 2004 Kevin B. Kenny. All rights reserved. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # clock.test -- # # This test file covers the 'clock' command that manipulates time. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. -# -# Copyright © 2004 Kevin B. Kenny. All rights reserved. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/cmdAH.test ================================================================== --- tests/cmdAH.test +++ tests/cmdAH.test @@ -1,16 +1,24 @@ -# The file tests the tclCmdAH.c file. -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1996-1998 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# The file tests the tclCmdAH.c file. +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. + if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } @@ -314,11 +322,10 @@ encoding system iso8859-1 encoding system } -cleanup { encoding system $system } -result iso8859-1 - # # encoding convertfrom 4.3.* # Odd number of args is always invalid since last two args # are ENCODING DATA and all options take a value Index: tests/cmdIL.test ================================================================== --- tests/cmdIL.test +++ tests/cmdIL.test @@ -1,14 +1,22 @@ -# This file contains a collection of tests for the procedures in the file -# tclCmdIL.c. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains a collection of tests for the procedures in the file +# tclCmdIL.c. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. + if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/cmdInfo.test ================================================================== --- tests/cmdInfo.test +++ tests/cmdInfo.test @@ -1,19 +1,27 @@ +# Copyright © 1993 The Regents of the University of California. +# Copyright © 1994-1996 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: none # # This file contains a collection of tests for Tcl_GetCommandInfo, # Tcl_SetCommandInfo, Tcl_CreateCommand, Tcl_DeleteCommand, and # Tcl_NameOfCommand. Sourcing this file into Tcl runs the tests # and generates output for errors. No output means no errors were # found. # -# Copyright © 1993 The Regents of the University of California. -# Copyright © 1994-1996 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/cmdMZ.test ================================================================== --- tests/cmdMZ.test +++ tests/cmdMZ.test @@ -1,17 +1,24 @@ -# The tests in this file cover the procedures in tclCmdMZ.c. -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# The tests in this file cover the procedures in tclCmdMZ.c. +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/compExpr-old.test ================================================================== --- tests/compExpr-old.test +++ tests/compExpr-old.test @@ -1,18 +1,25 @@ +# Copyright © 1996-1997 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: expr # # This file contains the original set of tests for the compilation (and # indirectly execution) of Tcl's expr command. A new set of tests covering # the new implementation are in the files "parseExpr.test" and # "compExpr.test". Sourcing this file into Tcl runs the tests and generates # output for errors. No output means no errors were found. -# -# Copyright © 1996-1997 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/compExpr.test ================================================================== --- tests/compExpr.test +++ tests/compExpr.test @@ -1,14 +1,21 @@ -# This file contains a collection of tests for the procedures in the file -# tclCompExpr.c. Sourcing this file into Tcl runs the tests and generates -# output for errors. No output means no errors were found. -# # Copyright © 1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains a collection of tests for the procedures in the file +# tclCompExpr.c. Sourcing this file into Tcl runs the tests and generates +# output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/compile.test ================================================================== --- tests/compile.test +++ tests/compile.test @@ -1,17 +1,25 @@ +# Copyright © 1997 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file contains tests for the files tclCompile.c, tclCompCmds.c and # tclLiteral.c # # This file contains a collection of tests for one or more of the Tcl built-in # commands. Sourcing this file into Tcl runs the tests and generates output # for errors. No output means no errors were found. # -# Copyright © 1997 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/concat.test ================================================================== --- tests/concat.test +++ tests/concat.test @@ -1,17 +1,24 @@ -# Commands covered: concat -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: concat +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/config.test ================================================================== --- tests/config.test +++ tests/config.test @@ -1,18 +1,24 @@ -# -*- tcl -*- -# Commands covered: pkgconfig -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: pkgconfig +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/coroutine.test ================================================================== --- tests/coroutine.test +++ tests/coroutine.test @@ -1,15 +1,22 @@ +# Copyright © 2008 Miguel Sofer. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: coroutine, yield, yieldto, [info coroutine] # # This file contains a collection of tests for experimental commands that are # found in ::tcl::unsupported. The tests will migrate to normal test files # if/when the commands find their way into the core. -# -# Copyright © 2008 Miguel Sofer. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/dcall.test ================================================================== --- tests/dcall.test +++ tests/dcall.test @@ -1,17 +1,24 @@ -# Commands covered: none -# -# This file contains a collection of tests for Tcl_CallWhenDeleted. -# Sourcing this file into Tcl runs the tests and generates output for -# errors. No output means no errors were found. -# # Copyright © 1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: none +# +# This file contains a collection of tests for Tcl_CallWhenDeleted. +# Sourcing this file into Tcl runs the tests and generates output for +# errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/dict.test ================================================================== --- tests/dict.test +++ tests/dict.test @@ -1,15 +1,22 @@ +# Copyright © 2003-2009 Donal K. Fellows +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This test file covers the dictionary object type and the dict command used # to work with values of that type. # # This file contains a collection of tests for one or more of the Tcl built-in # commands. Sourcing this file into Tcl runs the tests and generates output # for errors. No output means no errors were found. -# -# Copyright © 2003-2009 Donal K. Fellows -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/dstring.test ================================================================== --- tests/dstring.test +++ tests/dstring.test @@ -1,17 +1,24 @@ -# Commands covered: none -# -# This file contains a collection of tests for Tcl's dynamic string library -# procedures. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: none +# +# This file contains a collection of tests for Tcl's dynamic string library +# procedures. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/encoding.test ================================================================== --- tests/encoding.test +++ tests/encoding.test @@ -1,14 +1,21 @@ -# This file contains a collection of tests for tclEncoding.c -# Sourcing this file into Tcl runs the tests and generates output for errors. -# No output means no errors were found. -# # Copyright © 1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains a collection of tests for tclEncoding.c +# Sourcing this file into Tcl runs the tests and generates output for errors. +# No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } @@ -37,10 +44,11 @@ # Some tests require the testencoding command testConstraint testencoding [llength [info commands testencoding]] testConstraint testbytestring [llength [info commands testbytestring]] testConstraint teststringbytes [llength [info commands teststringbytes]] testConstraint exec [llength [info commands exec]] + # TclInitEncodingSubsystem is tested by the rest of this file # TclFinalizeEncodingSubsystem is not currently tested test encoding-1.1 {Tcl_GetEncoding: system encoding} -setup { @@ -82,11 +90,11 @@ lappend x [catch {encoding convertto shiftjis 乎} msg] $msg } -cleanup { encoding system iso8859-1 encoding dirs $path encoding system $system -} -result "\x8C\xC1 1 {unknown encoding \"shiftjis\"}" +} -result "\x8c\xc1 1 {unknown encoding \"shiftjis\"}" test encoding-3.1 {Tcl_GetEncodingName, NULL} -setup { set old [encoding system] } -body { encoding system shiftjis @@ -188,11 +196,11 @@ } "512 乎" test encoding-8.1 {Tcl_ExternalToUtf} { set f [open [file join [temporaryDirectory] dummy] w] fconfigure $f -translation binary -encoding iso8859-1 - puts -nonewline $f "ab\x8C\xC1g" + puts -nonewline $f "ab\x8c\xc1g" close $f set f [open [file join [temporaryDirectory] dummy] r] fconfigure $f -translation binary -encoding shiftjis set x [read $f] close $f @@ -224,11 +232,11 @@ fconfigure $f -translation binary -encoding iso8859-1 set x [read $f] close $f file delete [file join [temporaryDirectory] dummy] return $x -} "ab\x8C\xC1g" +} "ab\x8c\xc1g" test encoding-11.1 {LoadEncodingFile: unknown encoding} {testencoding} { set system [encoding system] set path [encoding dirs] encoding system iso8859-1 @@ -238,24 +246,24 @@ encoding dirs $path encoding system $system lappend x [encoding convertto jis0208 乎] } {1 {unknown encoding "jis0208"} 8C} test encoding-11.2 {LoadEncodingFile: single-byte} { - encoding convertfrom jis0201 \xA1 + encoding convertfrom jis0201 \xa1 } 。 test encoding-11.3 {LoadEncodingFile: double-byte} { encoding convertfrom jis0208 8C } 乎 test encoding-11.4 {LoadEncodingFile: multi-byte} { - encoding convertfrom shiftjis \x8C\xC1 + encoding convertfrom shiftjis \x8c\xc1 } 乎 test encoding-11.5 {LoadEncodingFile: escape file} { encoding convertto iso2022 乎 -} \x1B\$B8C\x1B(B +} \x1b\$B8C\x1b(B test encoding-11.5.1 {LoadEncodingFile: escape file} { encoding convertto iso2022-jp 乎 -} \x1B\$B8C\x1B(B +} \x1b\$B8C\x1b(B test encoding-11.6 {LoadEncodingFile: invalid file} -constraints {testencoding} -setup { set system [encoding system] set path [encoding dirs] encoding system iso8859-1 } -body { @@ -282,14 +290,14 @@ test encoding-11.9 {encoding: extended Unicode UTF-16} { encoding convertto utf-16be 😹 } Ø=Þ9 test encoding-11.10 {encoding: extended Unicode UTF-32} { encoding convertto utf-32le 😹 -} 9\xF6\x01\x00 +} 9\xf6\x01\x00 test encoding-11.11 {encoding: extended Unicode UTF-32} { encoding convertto utf-32be 😹 -} \x00\x01\xF69 +} \x00\x01\xf69 # OpenEncodingFile is fully tested by the rest of the tests in this file. test encoding-12.1 {LoadTableEncoding: normal encoding} { set x [encoding convertto iso8859-3 Ġ] append x [encoding convertto -profile tcl8 iso8859-3 Õ] @@ -299,12 +307,12 @@ set x [encoding convertto iso8859-3 abĠg] append x [encoding convertfrom iso8859-3 abÕg] } "abÕgabĠg" test encoding-12.3 {LoadTableEncoding: multi-byte encoding} { set x [encoding convertto shiftjis ab乎g] - append x [encoding convertfrom shiftjis ab\x8C\xC1g] -} "ab\x8C\xC1gab乎g" + append x [encoding convertfrom shiftjis ab\x8c\xc1g] +} "ab\x8c\xc1gab乎g" test encoding-12.4 {LoadTableEncoding: double-byte encoding} { set x [encoding convertto jis0208 乎α] append x [encoding convertfrom jis0208 8C&A] } "8C&A乎α" test encoding-12.5 {LoadTableEncoding: symbol encoding} { @@ -313,15 +321,15 @@ append x [encoding convertfrom symbol g] } "ggγ" test encoding-13.1 {LoadEscapeTable} { encoding convertto iso2022 ab乎棙g -} ab\x1B\$B8C\x1B\$\(DD%\x1B(Bg +} ab\x1b\$B8C\x1b\$\(DD%\x1b(Bg test encoding-15.1 {UtfToUtfProc} { encoding convertto utf-8 £ -} "\xC2\xA3" +} "\xc2\xa3" test encoding-15.2 {UtfToUtfProc null character output} testbytestring { binary scan [testbytestring [encoding convertto utf-8 \x00]] H* z set z } 00 test encoding-15.3 {UtfToUtfProc null character input} teststringbytes { @@ -328,84 +336,84 @@ set y [encoding convertfrom utf-8 [encoding convertto utf-8 \x00]] binary scan [teststringbytes $y] H* z set z } c080 test encoding-15.4 {UtfToUtfProc emoji character input} -body { - set x \xED\xA0\xBD\xED\xB8\x82 - set y [encoding convertfrom -profile tcl8 utf-8 \xED\xA0\xBD\xED\xB8\x82] + set x \xed\xa0\xbd\xed\xb8\x82 + set y [encoding convertfrom -profile tcl8 utf-8 \xed\xa0\xbd\xed\xb8\x82] list [string length $x] $y -} -result "6 \uD83D\uDE02" +} -result "6 \ud83d\ude02" test encoding-15.5 {UtfToUtfProc emoji character input} { - set x \xF0\x9F\x98\x82 - set y [encoding convertfrom utf-8 \xF0\x9F\x98\x82] + set x \xf0\x9f\x98\x82 + set y [encoding convertfrom utf-8 \xf0\x9f\x98\x82] list [string length $x] $y } "4 😂" test encoding-15.6 {UtfToUtfProc emoji character output} { - set x \uDE02\uD83D\uDE02\uD83D - set y [encoding convertto -profile tcl8 utf-8 \uDE02\uD83D\uDE02\uD83D] + set x \ude02\ud83d\ude02\ud83d + set y [encoding convertto -profile tcl8 utf-8 \ude02\ud83d\ude02\ud83d] binary scan $y H* z list [string length $y] $z } {12 edb882eda0bdedb882eda0bd} test encoding-15.7 {UtfToUtfProc emoji character output} { - set x \uDE02\uD83D\uD83D - set y [encoding convertto -profile tcl8 utf-8 \uDE02\uD83D\uD83D] + set x \ude02\ud83d\ud83d + set y [encoding convertto -profile tcl8 utf-8 \ude02\ud83d\ud83d] binary scan $y H* z list [string length $x] [string length $y] $z } {3 9 edb882eda0bdeda0bd} test encoding-15.8 {UtfToUtfProc emoji character output} { - set x \uDE02\uD83Dé - set y [encoding convertto -profile tcl8 utf-8 \uDE02\uD83Dé] + set x \ude02\ud83dé + set y [encoding convertto -profile tcl8 utf-8 \ude02\ud83dé] binary scan $y H* z list [string length $x] [string length $y] $z } {3 8 edb882eda0bdc3a9} test encoding-15.9 {UtfToUtfProc emoji character output} { - set x \uDE02\uD83DX - set y [encoding convertto -profile tcl8 utf-8 \uDE02\uD83DX] + set x \ude02\ud83dx + set y [encoding convertto -profile tcl8 utf-8 \ude02\ud83dX] binary scan $y H* z list [string length $x] [string length $y] $z } {3 7 edb882eda0bd58} test encoding-15.10 {UtfToUtfProc high surrogate character output} { - set x \uDE02é - set y [encoding convertto -profile tcl8 utf-8 \uDE02é] + set x \ude02é + set y [encoding convertto -profile tcl8 utf-8 \ude02é] binary scan $y H* z list [string length $x] [string length $y] $z } {2 5 edb882c3a9} test encoding-15.11 {UtfToUtfProc low surrogate character output} { - set x \uDA02é + set x \uda02é set y [encoding convertto -profile tcl8 utf-8 \uDA02é] binary scan $y H* z list [string length $x] [string length $y] $z } {2 5 eda882c3a9} test encoding-15.12 {UtfToUtfProc high surrogate character output} { - set x \uDE02Y - set y [encoding convertto -profile tcl8 utf-8 \uDE02Y] + set x \ude02Y + set y [encoding convertto -profile tcl8 utf-8 \ude02Y] binary scan $y H* z list [string length $x] [string length $y] $z } {2 4 edb88259} test encoding-15.13 {UtfToUtfProc low surrogate character output} { - set x \uDA02Y - set y [encoding convertto -profile tcl8 utf-8 \uDA02Y] + set x \uda02Y + set y [encoding convertto -profile tcl8 utf-8 \uda02Y] binary scan $y H* z list [string length $x] [string length $y] $z } {2 4 eda88259} test encoding-15.14 {UtfToUtfProc high surrogate character output} { - set x \uDE02 - set y [encoding convertto -profile tcl8 utf-8 \uDE02] + set x \ude02 + set y [encoding convertto -profile tcl8 utf-8 \ude02] binary scan $y H* z list [string length $x] [string length $y] $z } {1 3 edb882} test encoding-15.15 {UtfToUtfProc low surrogate character output} { - set x \uDA02 - set y [encoding convertto -profile tcl8 utf-8 \uDA02] + set x \uda02 + set y [encoding convertto -profile tcl8 utf-8 \uda02] binary scan $y H* z list [string length $x] [string length $y] $z } {1 3 eda882} test encoding-15.16 {UtfToUtfProc: Invalid 4-byte UTF-8, see [ed29806ba]} { - set x \xF0\xA0\xA1\xC2 - set y [encoding convertfrom -profile tcl8 utf-8 \xF0\xA0\xA1\xC2] + set x \xf0\xa0\xa1\xc2 + set y [encoding convertfrom -profile tcl8 utf-8 \xf0\xa0\xa1\xc2] list [string length $x] $y -} "4 \xF0\xA0\xA1\xC2" +} "4 \xf0\xa0\xa1\xc2" test encoding-15.17 {UtfToUtfProc emoji character output} { set x 😂 set y [encoding convertto utf-8 😂] binary scan $y H* z list [string length $y] $z @@ -414,21 +422,21 @@ set y [encoding convertto cesu-8 \U10000] binary scan $y H* z list [string length $y] $z } {6 eda080edb080} test encoding-15.19 {UtfToUtfProc CESU-8 upper surrogate} { - set y [encoding convertto cesu-8 \uD800] + set y [encoding convertto cesu-8 \ud800] binary scan $y H* z list [string length $y] $z } {3 eda080} test encoding-15.20 {UtfToUtfProc CESU-8 lower surrogate} { - set y [encoding convertto cesu-8 \uDC00] + set y [encoding convertto cesu-8 \udc00] binary scan $y H* z list [string length $y] $z } {3 edb080} test encoding-15.21 {UtfToUtfProc CESU-8 noncharacter} { - set y [encoding convertto cesu-8 \uFFFF] + set y [encoding convertto cesu-8 \uffff] binary scan $y H* z list [string length $y] $z } {3 efbfbf} test encoding-15.22 {UtfToUtfProc CESU-8 bug [048dd20b4171c8da]} { set y [encoding convertto cesu-8 \x80] @@ -439,56 +447,62 @@ set y [encoding convertto cesu-8 \u100] binary scan $y H* z list [string length $y] $z } {2 c480} test encoding-15.24 {UtfToUtfProc CESU-8 bug [048dd20b4171c8da]} { - set y [encoding convertto cesu-8 \u3FF] + set y [encoding convertto cesu-8 \u3ff] binary scan $y H* z list [string length $y] $z } {2 cfbf} test encoding-15.25 {UtfToUtfProc CESU-8} { encoding convertfrom cesu-8 \x00 } \x00 -test encoding-15.26 {UtfToUtfProc CESU-8} { - encoding convertfrom -profile tcl8 cesu-8 \xC0\x80 +test {encoding-15.26 cesu-8 tclnull default} {UtfToUtfProc CESU-8} -body { + encoding convertfrom cesu-8 \xc0\x80 +} -returnCodes 1 -result {unexpected byte sequence starting at index 0: '\xC0'} +test {encoding-15.26 cesu-8 tclnull strict} {UtfToUtfProc CESU-8} -body { + encoding convertfrom -profile strict cesu-8 \xc0\x80 +} -returnCodes 1 -result {unexpected byte sequence starting at index 0: '\xC0'} +test {encoding-15.26 cesu-8 tclnull tcl8} {UtfToUtfProc CESU-8} { + encoding convertfrom -profile tcl8 cesu-8 \xc0\x80 } \x00 test encoding-15.27 {UtfToUtfProc -profile strict CESU-8} { encoding convertfrom -profile strict cesu-8 \x00 } \x00 test encoding-15.28 {UtfToUtfProc -profile strict CESU-8} -body { - encoding convertfrom -profile strict cesu-8 \xC0\x80 + encoding convertfrom -profile strict cesu-8 \xc0\x80 } -returnCodes 1 -result {unexpected byte sequence starting at index 0: '\xC0'} test encoding-15.29 {UtfToUtfProc CESU-8} { encoding convertto cesu-8 \x00 } \x00 test encoding-15.30 {UtfToUtfProc -profile strict CESU-8} { encoding convertto -profile strict cesu-8 \x00 } \x00 test encoding-15.31 {UtfToUtfProc -profile strict CESU-8 (bytes F0-F4 are invalid)} -body { - encoding convertfrom -profile strict cesu-8 \xF1\x86\x83\x9C + encoding convertfrom -profile strict cesu-8 \xf1\x86\x83\x9c } -returnCodes 1 -result {unexpected byte sequence starting at index 0: '\xF1'} test encoding-16.1 {Utf16ToUtfProc} -body { set val [encoding convertfrom utf-16 NN] list $val [format %x [scan $val %c]] } -result "乎 4e4e" test encoding-16.2 {Utf16ToUtfProc} -body { - set val [encoding convertfrom utf-16 "\xD8\xD8\xDC\xDC"] + set val [encoding convertfrom utf-16 "\xd8\xd8\xdc\xdc"] list $val [format %x [scan $val %c]] -} -result "\U460DC 460dc" +} -result "\U460dc 460dc" test encoding-16.3 {Utf16ToUtfProc} -body { - set val [encoding convertfrom -profile tcl8 utf-16 "\xDC\xDC"] + set val [encoding convertfrom -profile tcl8 utf-16 "\xdc\xdc"] list $val [format %x [scan $val %c]] -} -result "\uDCDC dcdc" +} -result "\udcdc dcdc" test encoding-16.4 {Ucs2ToUtfProc} -body { set val [encoding convertfrom ucs-2 NN] list $val [format %x [scan $val %c]] } -result "乎 4e4e" test encoding-16.5 {Ucs2ToUtfProc} -body { - set val [encoding convertfrom ucs-2 "\xD8\xD8\xDC\xDC"] + set val [encoding convertfrom ucs-2 "\xd8\xd8\xdc\xdc"] list $val [format %x [scan $val %c]] -} -result "\U460DC 460dc" +} -result "\U460dc 460dc" test encoding-16.6 {Utf32ToUtfProc} -body { set val [encoding convertfrom utf-32le NN\0\0] list $val [format %x [scan $val %c]] } -result "乎 4e4e" test encoding-16.7 {Utf32ToUtfProc} -body { @@ -496,45 +510,45 @@ list $val [format %x [scan $val %c]] } -result "乎 4e4e" test encoding-16.8 {Utf32ToUtfProc} -body { set val [encoding convertfrom -profile tcl8 utf-32 \x41\x00\x00\x41] list $val [format %x [scan $val %c]] -} -result "\uFFFD fffd" +} -result "\ufffd fffd" test encoding-16.9 {Utf32ToUtfProc} -body { - encoding convertfrom -profile tcl8 utf-32le \x00\xD8\x00\x00 -} -result \uD800 + encoding convertfrom -profile tcl8 utf-32le \x00\xd8\x00\x00 +} -result \ud800 test encoding-16.10 {Utf32ToUtfProc} -body { - encoding convertfrom -profile tcl8 utf-32le \x00\xDC\x00\x00 -} -result \uDC00 + encoding convertfrom -profile tcl8 utf-32le \x00\xdc\x00\x00 +} -result \udc00 test encoding-16.11 {Utf32ToUtfProc} -body { - encoding convertfrom -profile tcl8 utf-32le \x00\xD8\x00\x00\x00\xDC\x00\x00 -} -result \uD800\uDC00 + encoding convertfrom -profile tcl8 utf-32le \x00\xd8\x00\x00\x00\xdc\x00\x00 +} -result \ud800\udc00 test encoding-16.12 {Utf32ToUtfProc} -body { - encoding convertfrom -profile tcl8 utf-32le \x00\xDC\x00\x00\x00\xD8\x00\x00 -} -result \uDC00\uD800 + encoding convertfrom -profile tcl8 utf-32le \x00\xdc\x00\x00\x00\xd8\x00\x00 +} -result \udc00\ud800 test encoding-16.13 {Utf16ToUtfProc} -body { - encoding convertfrom -profile tcl8 utf-16le \x00\xD8 -} -result \uD800 + encoding convertfrom -profile tcl8 utf-16le \x00\xd8 +} -result \ud800 test encoding-16.14 {Utf16ToUtfProc} -body { - encoding convertfrom -profile tcl8 utf-16le \x00\xDC -} -result \uDC00 + encoding convertfrom -profile tcl8 utf-16le \x00\xdc +} -result \udc00 test encoding-16.15 {Utf16ToUtfProc} -body { - encoding convertfrom utf-16le \x00\xD8\x00\xDC + encoding convertfrom utf-16le \x00\xd8\x00\xdc } -result \U010000 test encoding-16.16 {Utf16ToUtfProc} -body { - encoding convertfrom -profile tcl8 utf-16le \x00\xDC\x00\xD8 -} -result \uDC00\uD800 + encoding convertfrom -profile tcl8 utf-16le \x00\xdc\x00\xd8 +} -result \udc00\ud800 test encoding-16.17 {Utf32ToUtfProc} -body { - list [encoding convertfrom -profile strict -failindex idx utf-32le \x41\x00\x00\x00\x00\xD8\x00\x00\x42\x00\x00\x00] [set idx] + list [encoding convertfrom -profile strict -failindex idx utf-32le \x41\x00\x00\x00\x00\xd8\x00\x00\x42\x00\x00\x00] [set idx] } -result {A 4} test encoding-16.18 { Utf16ToUtfProc, Tcl_UniCharToUtf, surrogate pairs in utf-16 } -body { apply [list {} { - for {set i 0xD800} {$i < 0xDBFF} {incr i} { - for {set j 0xDC00} {$j < 0xDFFF} {incr j} { + for {set i 0xD800} {$i < 0xdbff} {incr i} { + for {set j 0xDC00} {$j < 0xdfff} {incr j} { set string [binary format S2 [list $i $j]] set status [catch { set decoded [encoding convertfrom utf-16be $string] set encoded [encoding convertto utf-16be $decoded] }] @@ -548,75 +562,94 @@ } -result done test encoding-16.19.strict {Utf16ToUtfProc, bug [d19fe0a5b]} -body { encoding convertfrom -profile strict utf-16 "\x41\x41\x41" } -returnCodes 1 -result {unexpected byte sequence starting at index 2: '\x41'} test encoding-16.19.tcl8 {Utf16ToUtfProc, bug [d19fe0a5b]} -body { + encoding convertfrom -profile strict utf-16 "\x41\x41\x41" +} -returnCodes 1 -result {unexpected byte sequence starting at index 2: '\x41'} +test encoding-16.19.tcl8 {Utf16ToUtfProc, bug [d19fe0a5b]} -body { encoding convertfrom -profile tcl8 utf-16 "\x41\x41\x41" -} -result \u4141\uFFFD -test encoding-16.20.tcl8 {Utf16ToUtfProc, bug [d19fe0a5b]} -body { +} -result \u4141\ufffd +test encoding-16.19.strict {Utf16ToUtfProc, bug [d19fe0a5b]} -body { + encoding convertfrom -profile strict utf-16 "\x41\x41\x41" +} -returnCodes 1 -result {unexpected byte sequence starting at index 2: '\x41'} +test encoding-16.20 {utf16ToUtfProc, bug [d19fe0a5b]} -body { + encoding convertfrom utf-16 "\xd8\xd8" +} -returnCodes 1 -result {unexpected byte sequence starting at index 0: '\xD8'} +test encoding-16.20-tcl8 {utf16ToUtfProc, bug [d19fe0a5b]} -body { encoding convertfrom -profile tcl8 utf-16 "\xD8\xD8" } -result \uD8D8 -test encoding-16.20.strict {Utf16ToUtfProc, bug [d19fe0a5b]} -body { - encoding convertfrom -profile strict utf-16 "\xD8\xD8" +test encoding-16.20-strict {utf16ToUtfProc, bug [d19fe0a5b]} -body { + encoding convertfrom -profile strict utf-16 "\xd8\xd8" } -returnCodes 1 -result {unexpected byte sequence starting at index 0: '\xD8'} test encoding-16.21.tcl8 {Utf32ToUtfProc, bug [d19fe0a5b]} -body { encoding convertfrom -profile tcl8 utf-32 "\x00\x00\x00\x00\x41\x41" -} -result \x00\uFFFD +} -result \x00\ufffd test encoding-16.21.strict {Utf32ToUtfProc, bug [d19fe0a5b]} -body { encoding convertfrom -profile strict utf-32 "\x00\x00\x00\x00\x41\x41" } -returnCodes 1 -result {unexpected byte sequence starting at index 4: '\x41'} test encoding-16.22 {Utf16ToUtfProc, strict, bug [db7a085bd9]} -body { - encoding convertfrom -profile strict utf-16le \x00\xD8 + encoding convertfrom -profile strict utf-16le \x00\xd8 } -returnCodes 1 -result {unexpected byte sequence starting at index 0: '\x00'} test encoding-16.23 {Utf16ToUtfProc, strict, bug [db7a085bd9]} -body { - encoding convertfrom -profile strict utf-16le \x00\xDC + encoding convertfrom -profile strict utf-16le \x00\xdc } -returnCodes 1 -result {unexpected byte sequence starting at index 0: '\x00'} -test encoding-16.24 {Utf32ToUtfProc} -body { - encoding convertfrom -profile tcl8 utf-32 "\xFF\xFF\xFF\xFF" -} -result \uFFFD + +test {encoding-16.24 utf-8 invalid default} {Parse invalid utf-8, strict} -body { + string length [encoding convertfrom utf-8 "\xC0\x80"] +} -returnCodes 1 -result {unexpected byte sequence starting at index 0: '\xC0'} +test {encoding-16.24 utf-8 invalid strict} {Parse invalid utf-8, strict} -body { + string length [encoding convertfrom -profile strict utf-8 "\xc0\x80"] +} -returnCodes 1 -result {unexpected byte sequence starting at index 0: '\xC0'} +test {encoding-16.24 utf-8 invalid tcl8} {UtfToUtfProc utf-8} { + encoding convertfrom -profile tcl8 utf-8 \xc0\x80 +} \x00 +test {encoding-16.25 default} {Utf32ToUtfProc} -body { + encoding convertfrom utf-32 "\x01\x00\x00\x01" +} -returnCodes 1 -result {unexpected byte sequence starting at index 0: '\x01'} test encoding-16.25.strict {Utf32ToUtfProc} -body { encoding convertfrom -profile strict utf-32 "\x01\x00\x00\x01" } -returnCodes 1 -result {unexpected byte sequence starting at index 0: '\x01'} test encoding-16.25.tcl8 {Utf32ToUtfProc} -body { encoding convertfrom -profile tcl8 utf-32 "\x01\x00\x00\x01" -} -result \uFFFD +} -result \ufffd test encoding-17.1 {UtfToUtf16Proc} -body { - encoding convertto utf-16 "\U460DC" -} -result "\xD8\xD8\xDC\xDC" + encoding convertto utf-16 "\U460dc" +} -result "\xd8\xd8\xdc\xdc" test encoding-17.2 {UtfToUcs2Proc} -body { - encoding convertfrom utf-16 \xD8\xD8\xDC\xDC -} -result "\U460DC" + encoding convertfrom utf-16 \xd8\xd8\xdc\xdc +} -result "\U460dc" test encoding-17.3 {UtfToUtf16Proc} -body { - encoding convertto -profile tcl8 utf-16be "\uDCDC" -} -result "\xDC\xDC" + encoding convertto -profile tcl8 utf-16be "\udcdc" +} -result "\xdc\xdc" test encoding-17.4 {UtfToUtf16Proc} -body { - encoding convertto -profile tcl8 utf-16le "\uD8D8" -} -result "\xD8\xD8" + encoding convertto -profile tcl8 utf-16le "\ud8d8" +} -result "\xd8\xd8" test encoding-17.5 {UtfToUtf32Proc} -body { - encoding convertto utf-32le "\U460DC" -} -result "\xDC\x60\x04\x00" + encoding convertto utf-32le "\U460dc" +} -result "\xdc\x60\x04\x00" test encoding-17.6 {UtfToUtf32Proc} -body { - encoding convertto utf-32be "\U460DC" + encoding convertto utf-32be "\U460dc" } -result "\x00\x04\x60\xDC" test encoding-17.7 {UtfToUtf16Proc} -body { - encoding convertto -profile strict utf-16be "\uDCDC" + encoding convertto -profile strict utf-16be "\udcdc" } -returnCodes error -result {unexpected character at index 0: 'U+00DCDC'} test encoding-17.8 {UtfToUtf16Proc} -body { - encoding convertto -profile strict utf-16le "\uD8D8" + encoding convertto -profile strict utf-16le "\ud8d8" } -returnCodes error -result {unexpected character at index 0: 'U+00D8D8'} test encoding-17.9 {Utf32ToUtfProc} -body { - encoding convertfrom -profile strict utf-32 "\xFF\xFF\xFF\xFF" + encoding convertfrom -profile strict utf-32 "\xff\xff\xff\xff" } -returnCodes error -result {unexpected byte sequence starting at index 0: '\xFF'} test encoding-17.10 {Utf32ToUtfProc} -body { - encoding convertfrom -profile tcl8 utf-32 "\xFF\xFF\xFF\xFF" -} -result \uFFFD + encoding convertfrom -profile tcl8 utf-32 "\xff\xff\xff\xff" +} -result \ufffd test encoding-17.11 {Utf32ToUtfProc} -body { - encoding convertfrom -profile strict utf-32le "\x00\xD8\x00\x00" + encoding convertfrom -profile strict utf-32le "\x00\xd8\x00\x00" } -returnCodes error -result {unexpected byte sequence starting at index 0: '\x00'} test encoding-17.12 {Utf32ToUtfProc} -body { - encoding convertfrom -profile strict utf-32le "\x00\xDC\x00\x00" + encoding convertfrom -profile strict utf-32le "\x00\xdc\x00\x00" } -returnCodes error -result {unexpected byte sequence starting at index 0: '\x00'} test encoding-18.1 {TableToUtfProc on invalid input} -body { list [catch {encoding convertto -profile tcl8 jis0208 \\} res] $res } -result {0 !)} @@ -663,14 +696,14 @@ test encoding-22.1 {EscapeFromUtfProc} { } {} set iso2022encData "\x1B\$B;d\$I\$b\$G\$O!\"%A%C%W\$49XF~;~\$K\$4EPO?\$\$\$?\$@\$\$\$?\$4=;=j\$r%-%c%C%7%e%\"%&%H\$N:]\$N\x1B(B -\x1B\$B>.@Z.@Z> 8) | 0x80}] [expr {($code & 0xFF) | 0x80}] } proc gen-jisx0208-iso2022-jp {code} { binary format a3cca3 \ - "\x1B\$B" [expr {$code >> 8}] [expr {$code & 0xFF}] "\x1B(B" + "\x1b\$B" [expr {$code >> 8}] [expr {$code & 0xFF}] "\x1b(B" } proc gen-jisx0208-cp932 {code} { set c1 [expr {($code >> 8) | 0x80}] set c2 [expr {($code & 0xff)| 0x80}] if {$c1 % 2} { @@ -1072,34 +1123,34 @@ runtests test encoding-bug-183a1adcc0-1 {Bug [183a1adcc0] Buffer overflow Tcl_UtfToExternal} -constraints { testencoding } -body { - # Note - buffers are initialized to \xFF + # Note - buffers are initialized to \xff list [catch {testencoding Tcl_UtfToExternal utf-16 A {start end} {} 1} result] $result } -result [list 0 [list nospace {} \xFF]] test encoding-bug-183a1adcc0-2 {Bug [183a1adcc0] Buffer overflow Tcl_UtfToExternal} -constraints { testencoding } -body { - # Note - buffers are initialized to \xFF + # Note - buffers are initialized to \xff list [catch {testencoding Tcl_UtfToExternal utf-16 A {start end} {} 0} result] $result } -result [list 0 [list nospace {} {}]] test encoding-bug-183a1adcc0-3 {Bug [183a1adcc0] Buffer overflow Tcl_UtfToExternal} -constraints { testencoding } -body { - # Note - buffers are initialized to \xFF + # Note - buffers are initialized to \xff list [catch {testencoding Tcl_UtfToExternal utf-16 A {start end} {} 2} result] $result } -result [list 0 [list nospace {} \x00\x00]] test encoding-bug-183a1adcc0-4 {Bug [183a1adcc0] Buffer overflow Tcl_UtfToExternal} -constraints { testencoding } -body { - # Note - buffers are initialized to \xFF + # Note - buffers are initialized to \xff list [catch {testencoding Tcl_UtfToExternal utf-16 A {start end} {} 3} result] $result -} -result [list 0 [list nospace {} \x00\x00\xFF]] +} -result [list 0 [list nospace {} \x00\x00\xff]] test encoding-bug-183a1adcc0-5 {Bug [183a1adcc0] Buffer overflow Tcl_UtfToExternal} -constraints { testencoding } -body { list [catch {testencoding Tcl_UtfToExternal utf-16 A {start end} {} 4} result] $result @@ -1120,11 +1171,11 @@ test encoding-30.0 {encoding convertto large strings UINT_MAX} -constraints { perf } -body { # Test to ensure not misinterpreted as -1 - list [string length [set s [string repeat A 0xFFFFFFFF]]] [string equal $s [encoding convertto ascii $s]] + list [string length [set s [string repeat A 0xffffffff]]] [string equal $s [encoding convertto ascii $s]] } -result {4294967295 1} test encoding-30.1 {encoding convertto large strings > 4GB} -constraints { perf } -body { @@ -1133,38 +1184,38 @@ test encoding-30.2 {encoding convertfrom large strings UINT_MAX} -constraints { perf } -body { # Test to ensure not misinterpreted as -1 - list [string length [set s [string repeat A 0xFFFFFFFF]]] [string equal $s [encoding convertfrom ascii $s]] + list [string length [set s [string repeat A 0xffffffff]]] [string equal $s [encoding convertfrom ascii $s]] } -result {4294967295 1} test encoding-30.3 {encoding convertfrom large strings > 4GB} -constraints { perf } -body { list [string length [set s [string repeat A 0x100000000]]] [string equal $s [encoding convertfrom ascii $s]] } -result {4294967296 1} test encoding-bug-6a3e2cb0f0-1 {Bug [6a3e2cb0f0] - invalid bytes in escape encodings} -body { - encoding convertfrom -profile tcl8 iso2022-jp x\x1B\x7Aaby -} -result x\uFFFDy + encoding convertfrom -profile tcl8 iso2022-jp x\x1B\x7aaby +} -result x\ufffdy test encoding-bug-6a3e2cb0f0-2 {Bug [6a3e2cb0f0] - invalid bytes in escape encodings} -body { - encoding convertfrom -profile strict iso2022-jp x\x1B\x7Aaby + encoding convertfrom -profile strict iso2022-jp x\x1b\x7aaby } -returnCodes error -result {unexpected byte sequence starting at index 1: '\x1B'} test encoding-bug-6a3e2cb0f0-3 {Bug [6a3e2cb0f0] - invalid bytes in escape encodings} -body { - encoding convertfrom -profile replace iso2022-jp x\x1B\x7Aaby -} -result x\uFFFDy + encoding convertfrom -profile replace iso2022-jp x\x1b\x7aaby +} -result x\ufffdy test encoding-bug-66ffafd309-1-tcl8 {Bug [66ffafd309] - truncated DBCS} -body { encoding convertfrom -profile tcl8 gb12345 x } -result x test encoding-bug-66ffafd309-1-strict {Bug [66ffafd309] - truncated DBCS} -body { encoding convertfrom -profile strict gb12345 x } -result {unexpected byte sequence starting at index 0: '\x78'} -returnCodes error test encoding-bug-66ffafd309-1-replace {Bug [66ffafd309] - truncated DBCS} -body { encoding convertfrom -profile replace gb12345 x -} -result \uFFFD +} -result \ufffd test encoding-bug-66ffafd309-2-tcl8 {Bug [66ffafd309] - invalid DBCS} -body { # Not truncated but invalid encoding convertfrom -profile tcl8 jis0208 \x78\x79 } -result \x78\x79 test encoding-bug-66ffafd309-2-strict {Bug [66ffafd309] - invalid DBCS} -body { @@ -1172,15 +1223,15 @@ encoding convertfrom -profile strict jis0208 \x78\x79 } -result {unexpected byte sequence starting at index 1: '\x79'} -returnCodes error test encoding-bug-66ffafd309-2-replace {Bug [66ffafd309] - invalid DBCS} -body { # Not truncated but invalid encoding convertfrom -profile replace jis0208 \x78\x79 -} -result \uFFFD\uFFFD +} -result \ufffd\ufffd # cleanup namespace delete ::tcl::test::encoding ::tcltest::cleanupTests return # Local Variables: # mode: tcl # End: Index: tests/encodingVectors.tcl ================================================================== --- tests/encodingVectors.tcl +++ tests/encodingVectors.tcl @@ -1,14 +1,20 @@ +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file contains test vectors for verifying various encodings. They are # stored in a common file so that they can be sourced into the various test # modules that are dependent on encodings. This file contains statically defined # test vectors. In addition, it sources the ICU-generated test vectors from # icuUcmTests.tcl. # # Note that sourcing the file will reinitialize any existing encoding test # vectors. -# # List of defined encoding profiles set encProfiles {tcl8 strict replace} set encDefaultProfile strict; # Should reflect the default from implementation Index: tests/env.test ================================================================== --- tests/env.test +++ tests/env.test @@ -1,17 +1,24 @@ -# Commands covered: none (tests environment variable implementation) -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: none (tests environment variable implementation) +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/error.test ================================================================== --- tests/error.test +++ tests/error.test @@ -1,17 +1,24 @@ -# Commands covered: error, catch, throw, try -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: error, catch, throw, try +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/eval.test ================================================================== --- tests/eval.test +++ tests/eval.test @@ -1,17 +1,24 @@ -# Commands covered: eval -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: eval +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/event.test ================================================================== --- tests/event.test +++ tests/event.test @@ -1,15 +1,22 @@ -# This file contains a collection of tests for the procedures in the file -# tclEvent.c, which includes the "update", and "vwait" Tcl commands. Sourcing -# this file into Tcl runs the tests and generates output for errors. No -# output means no errors were found. -# # Copyright © 1995-1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains a collection of tests for the procedures in the file +# tclEvent.c, which includes the "update", and "vwait" Tcl commands. Sourcing +# this file into Tcl runs the tests and generates output for errors. No +# output means no errors were found. package require tcltest 2.5 namespace import -force ::tcltest::* catch { Index: tests/exec.test ================================================================== --- tests/exec.test +++ tests/exec.test @@ -1,20 +1,27 @@ -# Commands covered: exec -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1991-1994 The Regents of the University of California. # Copyright © 1994-1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. # There is no point in running Valgrind on cases where [exec] forks but then # fails and the child process doesn't go through full cleanup. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: exec +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } @@ -710,39 +717,10 @@ test exec-20.1 {exec .CMD file} -constraints {win} -body { set log [makeFile {} exec201.log] exec [makeFile "echo %1> $log" exec201.CMD] "Testing exec-20.1" viewFile $log } -result "\"Testing exec-20.1\"" - -# Test with encoding mismatches (Bug 0f1ddc0df7fb7) -test exec-21.1 {exec encoding mismatch on stdout} -setup { - set path(script) [makeFile { - fconfigure stdout -translation binary - puts a\xe9b - } script] - set enc [encoding system] - encoding system utf-8 -} -cleanup { - removeFile $path(script) - encoding system $enc -} -body { - exec [info nameofexecutable] $path(script) -} -result a\uFFFDb -test exec-21.2 {exec encoding mismatch on stderr} -setup { - set path(script) [makeFile { - fconfigure stderr -translation binary - puts stderr a\xe9b - } script] - set enc [encoding system] - encoding system utf-8 -} -cleanup { - removeFile $path(script) - encoding system $enc -} -body { - list [catch {exec [info nameofexecutable] $path(script)} r] $r -} -result [list 1 a\uFFFDb] - # ---------------------------------------------------------------------- # cleanup foreach file {gorp.file gorp.file2 echo echo2 cat wc sh sh2 sleep exit err} { Index: tests/execute.test ================================================================== --- tests/execute.test +++ tests/execute.test @@ -1,20 +1,27 @@ +# Copyright © 1997 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file contains tests for the tclExecute.c source file. Tests appear in # the same order as the C code that they test. The set of tests is currently # incomplete since it currently includes only new tests for code changed for # the addition of Tcl namespaces. Other execution-related tests appear in # several other test files including namespace.test, basic.test, eval.test, # for.test, etc. # # Sourcing this file into Tcl runs the tests and generates output for errors. # No output means no errors were found. -# -# Copyright © 1997 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/expr-old.test ================================================================== --- tests/expr-old.test +++ tests/expr-old.test @@ -1,19 +1,27 @@ +# Copyright © 1991-1994 The Regents of the University of California. +# Copyright © 1994-1997 Sun Microsystems, Inc. +# Copyright © 1998-2000 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: expr # # This file contains the original set of tests for Tcl's expr command. # Since the expr command is now compiled, a new set of tests covering # the new implementation are in the files "parseExpr.test" and # "compExpr.test". Sourcing this file into Tcl runs the tests and generates # output for errors. No output means no errors were found. # -# Copyright © 1991-1994 The Regents of the University of California. -# Copyright © 1994-1997 Sun Microsystems, Inc. -# Copyright © 1998-2000 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/expr.test ================================================================== --- tests/expr.test +++ tests/expr.test @@ -1,16 +1,23 @@ -# Commands covered: expr -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1996-1997 Sun Microsystems, Inc. # Copyright © 1998-2000 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: expr +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/fCmd.test ================================================================== --- tests/fCmd.test +++ tests/fCmd.test @@ -1,16 +1,23 @@ -# This file tests the tclFCmd.c file. -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1996-1997 Sun Microsystems, Inc. # Copyright © 1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file tests the tclFCmd.c file. +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/fileName.test ================================================================== --- tests/fileName.test +++ tests/fileName.test @@ -1,16 +1,23 @@ -# This file tests the filename manipulation routines. -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1995-1996 Sun Microsystems, Inc. # Copyright © 1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file tests the filename manipulation routines. +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/fileSystem.test ================================================================== --- tests/fileSystem.test +++ tests/fileSystem.test @@ -1,15 +1,22 @@ +# Copyright © 2002 Vincent Darley. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file tests the filesystem and vfs internals. # # This file contains a collection of tests for one or more of the Tcl built-in # commands. Sourcing this file into Tcl runs the tests and generates output # for errors. No output means no errors were found. -# -# Copyright © 2002 Vincent Darley. -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. namespace eval ::tcl::test::fileSystem { if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 Index: tests/fileSystemEncoding.test ================================================================== --- tests/fileSystemEncoding.test +++ tests/fileSystemEncoding.test @@ -1,8 +1,15 @@ #! /usr/bin/env tclsh -# Copyright © 2019 Poor Yorick +# Copyright © 2019 Nathan Coulter +# +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[string equal $::tcl_platform(os) "Windows NT"]} { return } Index: tests/for-old.test ================================================================== --- tests/for-old.test +++ tests/for-old.test @@ -1,18 +1,25 @@ +# Copyright © 1991-1993 The Regents of the University of California. +# Copyright © 1994-1996 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: for, continue, break # # This file contains the original set of tests for Tcl's for command. # Since the for command is now compiled, a new set of tests covering # the new implementation is in the file "for.test". Sourcing this file # into Tcl runs the tests and generates output for errors. # No output means no errors were found. -# -# Copyright © 1991-1993 The Regents of the University of California. -# Copyright © 1994-1996 Sun Microsystems, Inc. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/for.test ================================================================== --- tests/for.test +++ tests/for.test @@ -1,15 +1,23 @@ +# Copyright © 1996 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: for, continue, break # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. -# -# Copyright © 1996 Sun Microsystems, Inc. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/foreach.test ================================================================== --- tests/foreach.test +++ tests/foreach.test @@ -1,16 +1,23 @@ -# Commands covered: foreach, continue, break -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1997 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: foreach, continue, break +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/format.test ================================================================== --- tests/format.test +++ tests/format.test @@ -1,16 +1,23 @@ -# Commands covered: format -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1994 The Regents of the University of California. # Copyright © 1994-1998 Sun Microsystems, Inc. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: format +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/get.test ================================================================== --- tests/get.test +++ tests/get.test @@ -1,16 +1,23 @@ -# Commands covered: none -# -# This file contains a collection of tests for the procedures in the -# file tclGet.c. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1995-1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: none +# +# This file contains a collection of tests for the procedures in the +# file tclGet.c. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/history.test ================================================================== --- tests/history.test +++ tests/history.test @@ -1,17 +1,24 @@ -# Commands covered: history -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: history +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/http.test ================================================================== --- tests/http.test +++ tests/http.test @@ -1,17 +1,24 @@ -# Commands covered: http::config, http::geturl, http::wait, http::reset -# -# This file contains a collection of tests for the http script library. -# Sourcing this file into Tcl runs the tests and generates output for errors. -# No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1996 Sun Microsystems, Inc. # Copyright © 1998-2000 Ajuba Solutions. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: http::config, http::geturl, http::wait, http::reset +# +# This file contains a collection of tests for the http script library. +# Sourcing this file into Tcl runs the tests and generates output for errors. +# No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/http11.test ================================================================== --- tests/http11.test +++ tests/http11.test @@ -1,13 +1,20 @@ -# http11.test -- -*- tcl-*- -# -# Test HTTP/1.1 features. -# # Copyright © 2009 Pat Thoyts # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# http11.test -- -*- tcl-*- +# +# Test HTTP/1.1 features. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/httpPipeline.test ================================================================== --- tests/httpPipeline.test +++ tests/httpPipeline.test @@ -1,14 +1,21 @@ -# httpPipeline.test -# -# Test HTTP/1.1 concurrent requests including -# queueing, pipelining and retries. -# # Copyright © 2018 Keith Nash # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# httpPipeline.test +# +# Test HTTP/1.1 concurrent requests including +# queueing, pipelining and retries. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/httpProxy.test ================================================================== --- tests/httpProxy.test +++ tests/httpProxy.test @@ -1,18 +1,25 @@ -# Commands covered: http::geturl when using a proxy server. -# -# This file contains a collection of tests for the http script library. -# Sourcing this file into Tcl runs the tests and generates output for errors. -# No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1996 Sun Microsystems, Inc. # Copyright © 1998-2000 Ajuba Solutions. # Copyright © 2022-2023 Keith Nash. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: http::geturl when using a proxy server. +# +# This file contains a collection of tests for the http script library. +# Sourcing this file into Tcl runs the tests and generates output for errors. +# No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/httpTest.tcl ================================================================== --- tests/httpTest.tcl +++ tests/httpTest.tcl @@ -1,14 +1,22 @@ +# Copyright © 2018 Keith Nash +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # httpTest.tcl # # Test HTTP/1.1 concurrent requests including # queueing, pipelining and retries. # -# Copyright © 2018 Keith Nash -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. # ------------------------------------------------------------------------------ # "Package" httpTest for analysis of Log output of http requests. # ------------------------------------------------------------------------------ # This is a specialised test kit for examining the presence, ordering, and Index: tests/httpTestScript.tcl ================================================================== --- tests/httpTestScript.tcl +++ tests/httpTestScript.tcl @@ -1,14 +1,22 @@ +# Copyright © 2018 Keith Nash +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # httpTestScript.tcl # # Test HTTP/1.1 concurrent requests including # queueing, pipelining and retries. # -# Copyright © 2018 Keith Nash -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. # ------------------------------------------------------------------------------ # "Package" httpTestScript for executing test scripts written in a convenient # shorthand. # ------------------------------------------------------------------------------ Index: tests/httpcookie.test ================================================================== --- tests/httpcookie.test +++ tests/httpcookie.test @@ -1,15 +1,22 @@ +# Copyright © 2014 Donal K. Fellows. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: http::cookiejar # # This file contains a collection of tests for the cookiejar package. # Sourcing this file into Tcl runs the tests and generates output for errors. # No output means no errors were found. -# -# Copyright © 2014 Donal K. Fellows. -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/httpd ================================================================== --- tests/httpd +++ tests/httpd @@ -1,14 +1,19 @@ -# -*- tcl -*- -# -# The httpd_ procedures implement a stub http server. -# # Copyright © 1997-1998 Sun Microsystems, Inc. # Copyright © 1999-2000 Scriptics Corporation # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# The httpd_ procedures implement a stub http server. #set httpLog 1 # Do not use [info hostname]. # Name resolution is often a problem on OSX; not focus of HTTP package anyway. Index: tests/httpd11.tcl ================================================================== --- tests/httpd11.tcl +++ tests/httpd11.tcl @@ -1,14 +1,21 @@ -# httpd11.tcl -- -*- tcl -*- -# -# A simple httpd for testing HTTP/1.1 client features. -# Not suitable for use on a internet connected port. -# # Copyright © 2009 Pat Thoyts # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# httpd11.tcl -- -*- tcl -*- +# +# A simple httpd for testing HTTP/1.1 client features. +# Not suitable for use on a internet connected port. package require Tcl proc ::tcl::dict::get? {dict key} { if {[dict exists $dict $key]} { Index: tests/icuUcmTests.tcl ================================================================== --- tests/icuUcmTests.tcl +++ tests/icuUcmTests.tcl @@ -1,5 +1,11 @@ +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. # This file is automatically generated by ucm2tests.tcl. # Edits will be overwritten on next generation. # # Generates tests comparing Tcl encodings to ICU. Index: tests/if-old.test ================================================================== --- tests/if-old.test +++ tests/if-old.test @@ -1,19 +1,26 @@ +# Copyright © 1991-1993 The Regents of the University of California. +# Copyright © 1994-1996 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: if # # This file contains the original set of tests for Tcl's if command. # Since the if command is now compiled, a new set of tests covering # the new implementation is in the file "if.test". Sourcing this file # into Tcl runs the tests and generates output for errors. # No output means no errors were found. -# -# Copyright © 1991-1993 The Regents of the University of California. -# Copyright © 1994-1996 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/if.test ================================================================== --- tests/if.test +++ tests/if.test @@ -1,16 +1,23 @@ -# Commands covered: if -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: if +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/incr-old.test ================================================================== --- tests/incr-old.test +++ tests/incr-old.test @@ -1,19 +1,26 @@ +# Copyright © 1991-1993 The Regents of the University of California. +# Copyright © 1994-1996 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: incr # # This file contains the original set of tests for Tcl's incr command. # Since the incr command is now compiled, a new set of tests covering # the new implementation is in the file "incr.test". Sourcing this file # into Tcl runs the tests and generates output for errors. # No output means no errors were found. -# -# Copyright © 1991-1993 The Regents of the University of California. -# Copyright © 1994-1996 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/incr.test ================================================================== --- tests/incr.test +++ tests/incr.test @@ -1,16 +1,16 @@ +# Copyright © 1996 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: incr # # This file contains a collection of tests for one or more of the Tcl built-in # commands. Sourcing this file into Tcl runs the tests and generates output # for errors. No output means no errors were found. -# -# Copyright © 1996 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/indexObj.test ================================================================== --- tests/indexObj.test +++ tests/indexObj.test @@ -1,14 +1,21 @@ -# This file is a Tcl script to test out the procedures in file -# tkIndexObj.c, which implement indexed table lookups. The tests here are -# organized in the standard fashion for Tcl tests. -# # Copyright © 1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file is a Tcl script to test out the procedures in file +# tkIndexObj.c, which implement indexed table lookups. The tests here are +# organized in the standard fashion for Tcl tests. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/info.test ================================================================== --- tests/info.test +++ tests/info.test @@ -1,19 +1,34 @@ -# -*- tcl -*- -# Commands covered: info -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1994 The Regents of the University of California. # Copyright © 1994-1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # Copyright © 2006 ActiveState # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: info +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. +# +# The tests below hard-code line numbers in this very script in order to test +# for correct reporting of line-numbers. In order to provide at least some +# space where lines may be added without messing up these tests, the last line +# of this comment is used to obtain an offset that is then used to make the +# hard-coded line numbers not sensitive to changes in the number of lines at +# the beginning of this file. When developing/debugging, it can be useful to +# temporarily delete enough lines from the top of this file that the offset +# becomes 0. # # DO NOT DELETE THIS LINE if {{::tcltest} ni [namespace children]} { package require tcltest 2.5 @@ -31,10 +46,20 @@ namespace eval test_ns_info1 { namespace export * proc p {x} {return "x=$x"} proc q {{y 27} {z {}}} {return "y=$y"} } + +set chan [open [info script]] +set thisscript [read $chan] +close $chan +set topcomments [regexp -inline {^.*?DO NOT DELETE THIS LINE\n} $thisscript] +set offset [llength [split $topcomments \n]] +# The original 9 lines in the top comments are already counted in the +# hard-coded values in this file +incr offset -7 + test info-1.1 {info args option} { proc t1 {a bbb c} {return foo} info args t1 } {a bbb c} @@ -746,28 +771,28 @@ catch {info frame 9} msg set msg } {bad level "9"} test info-22.3 {info frame, current, relative} -match glob -body { info frame 0 -} -result {type source line 750 file */info.test cmd {info frame 0} proc ::tcltest::RunTest} +} -result "type source line [expr {$offset + 750}] file */info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-22.4 {info frame, current, relative, nested} -match glob -body { set res [info frame 0] -} -result {type source line 753 file */info.test cmd {info frame 0} proc ::tcltest::RunTest} -cleanup {unset res} +} -result "type source line [expr {$offset + 753}] file */info.test cmd {info frame 0} proc ::tcltest::RunTest" -cleanup {unset res} test info-22.5 {info frame, current, absolute} -constraints {!singleTestInterp} -match glob -body { reduce [info frame 7] -} -result {type source line 756 file info.test cmd {info frame 7} proc ::tcltest::RunTest} +} -result "type source line [expr {$offset + 756}] file info.test cmd {info frame 7} proc ::tcltest::RunTest" test info-22.6 {info frame, global, relative} {!singleTestInterp} { reduce [info frame -6] -} {type source line 758 file info.test cmd test\ info-22.6\ \{info\ frame,\ global,\ relative\}\ \{!singleTestInter level 0} +} "type source line [expr {$offset + 758}] file info.test cmd test\\ info-22.6\\ \\{info\\ frame,\\ global,\\ relative\\}\\ \\{!singleTestInter level 0" test info-22.7 {info frame, global, absolute} {!singleTestInterp} { reduce [info frame 1] -} {type source line 761 file info.test cmd test\ info-22.7\ \{info\ frame,\ global,\ absolute\}\ \{!singleTestInter level 0} +} "type source line [expr {$offset + 761}] file info.test cmd test\\ info-22.7\\ \\{info\\ frame,\\ global,\\ absolute\\}\\ \\{!singleTestInter level 0" test info-22.8 {info frame, basic trace} -match glob -body { join [lrange [etrace] 0 2] \n -} -result {* {type source line 730 file info.test cmd {info frame $level} proc ::etrace level 0} -* {type source line 765 file info.test cmd etrace proc ::tcltest::RunTest} -* {type source line * file tcltest* cmd {uplevel 1 $script} proc ::tcltest::RunTest}} +} -result "* {type source line [expr {$offset + 730}] file info.test cmd {info frame \$level} proc ::etrace level 0} +* {type source line [expr {$offset + 765}] file info.test cmd etrace proc ::tcltest::RunTest} +* {type source line * file tcltest* cmd {uplevel 1 \$script} proc ::tcltest::RunTest}" unset -nocomplain msg @@ -790,11 +815,11 @@ } -setup {interp create i} -cleanup {interp delete i} -result 2 test info-23.3 {eval'd info frame, literal} -match glob -body { eval { info frame 0 } -} -result {type source line 793 file * cmd {info frame 0} proc ::tcltest::RunTest} +} -result "type source line [expr {$offset + 793}] file * cmd {info frame 0} proc ::tcltest::RunTest" test info-23.4 {eval'd info frame, semi-dynamic} { eval info frame 0 } {type eval line 1 cmd {info frame 0} proc ::tcltest::RunTest} test info-23.5 {eval'd info frame, dynamic} -cleanup {unset script} -body { set script {info frame 0} @@ -801,13 +826,13 @@ eval $script } -result {type eval line 1 cmd {info frame 0} proc ::tcltest::RunTest} test info-23.6 {eval'd info frame, trace} -match glob -cleanup {unset script} -body { set script {etrace} join [lrange [eval $script] 0 2] \n -} -result {* {type source line 730 file info.test cmd {info frame $level} proc ::etrace level 0} +} -result "* {type source line [expr {$offset + 730}] file info.test cmd {info frame \$level} proc ::etrace level 0} * {type eval line 1 cmd etrace proc ::tcltest::RunTest} -* {type source line 805 file info.test cmd {eval $script} proc ::tcltest::RunTest}} +* {type source line [expr {$offset + 805}] file info.test cmd {eval \$script} proc ::tcltest::RunTest}" # ------------------------------------------------------------------------- # Procedures defined in scripts which are arguments to control # structures (like 'namespace eval', 'interp eval', 'if', 'while', @@ -827,11 +852,11 @@ test info-24.0 {info frame, interaction, namespace eval} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 825 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 825}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- set flag 1 if {$flag} { @@ -841,11 +866,11 @@ test info-24.1 {info frame, interaction, if} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 839 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 839}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- set flag 1 while {$flag} { @@ -856,11 +881,11 @@ test info-24.2 {info frame, interaction, while} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 853 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 853}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- catch { namespace eval foo {} @@ -869,11 +894,11 @@ test info-24.3 {info frame, interaction, catch} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 867 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 867}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- foreach var val { namespace eval foo {} @@ -883,11 +908,11 @@ test info-24.4 {info frame, interaction, foreach} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 880 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 880}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- for {} {1} {} { namespace eval foo {} @@ -897,11 +922,11 @@ test info-24.5 {info frame, interaction, for} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 894 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 894}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} set x foo @@ -914,11 +939,11 @@ test info-24.6.0 {info frame, interaction, switch, list body} -body { reduce [foo::bar] } -cleanup { namespace delete foo unset x -} -result {type source line 910 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 910}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} set x foo @@ -929,11 +954,11 @@ test info-24.6.1 {info frame, interaction, switch, multi-body} -body { reduce [foo::bar] } -cleanup { namespace delete foo unset x -} -result {type source line 926 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 926}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} set x foo @@ -955,11 +980,11 @@ proc ::foo::bar {} {info frame 0} } test info-24.7 {info frame, interaction, dict for} { reduce [foo::bar] -} {type source line 955 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} "type source line [expr {$offset + 955}] file info.test cmd {info frame 0} proc ::foo::bar level 0" namespace delete foo; unset k v # ------------------------------------------------------------------------- @@ -969,11 +994,11 @@ proc ::foo::bar {} {info frame 0} } test info-24.8 {info frame, interaction, dict with} { reduce [foo::bar] -} {type source line 969 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} "type source line [expr {$offset + 969}] file info.test cmd {info frame 0} proc ::foo::bar level 0" namespace delete foo unset thedict foo # ------------------------------------------------------------------------- @@ -984,11 +1009,11 @@ set x 1 }; unset k v x test info-24.9 {info frame, interaction, dict filter} { reduce [foo::bar] -} {type source line 983 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} "type source line [expr {$offset + 983}] file info.test cmd {info frame 0} proc ::foo::bar level 0" namespace delete foo #unset x # ------------------------------------------------------------------------- @@ -997,18 +1022,18 @@ proc bar {} {info frame 0} } test info-25.0 {info frame, proc in eval} { reduce [bar] -} {type source line 997 file info.test cmd {info frame 0} proc ::bar level 0} +} "type source line [expr {$offset + 997}] file info.test cmd {info frame 0} proc ::bar level 0" # Don't need to clean up yet... proc bar {} {info frame 0} test info-25.1 {info frame, regular proc} { reduce [bar] -} {type source line 1005 file info.test cmd {info frame 0} proc ::bar level 0} +} "type source line [expr {$offset + 1005}] file info.test cmd {info frame 0} proc ::bar level 0" rename bar {} # ------------------------------------------------------------------------- # More info-30.x test cases at the end of the file. @@ -1022,11 +1047,11 @@ # bs+nl combination is subst by the parser before the 'if' # command, and the bcc, see the word. Fixed by recording the # offsets of all bs+nl sequences in literal words, then using the # information in the bcc and other places to bump line numbers when # parsing over the location. Also affected: testcases 22.8 and 23.6. -} -result {type source line 1018 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} -result "type source line [expr {$offset + 1018}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" # ------------------------------------------------------------------------- # See 24.0 - 24.5 for similar situations, using literal scripts. set body {set flag 0 @@ -1116,11 +1141,11 @@ } test info-33.0 {{*}, literal, direct} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 1115 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 1115}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { @@ -1132,11 +1157,11 @@ } test info-33.1 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 1130 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 1130}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace {*}" eval @@ -1143,11 +1168,11 @@ foo {proc bar {} {info frame 0}} " test info-33.2 {{*}, literal, direct} { reduce [foo::bar] -} {type source line 1144 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} "type source line [expr {$offset + 1144}] file info.test cmd {info frame 0} proc ::foo::bar level 0" namespace delete foo # ------------------------------------------------------------------------- @@ -1169,11 +1194,11 @@ {info frame 0} " } test info-33.3 {{*}, literal, simple, bytecompiled} { reduce [foo::bar] -} {type source line 1169 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} "type source line [expr {$offset + 1169}] file info.test cmd {info frame 0} proc ::foo::bar level 0" namespace delete foo # ------------------------------------------------------------------------- @@ -1231,14 +1256,14 @@ {info frame 0} } 0 0 } test info-35.0 {apply, literal} { reduce [foo] -} {type source line 1231 file info.test cmd {info frame 0} lambda { +} "type source line [expr {$offset + 1231}] file info.test cmd {info frame 0} lambda { {x y} {info frame 0} - } level 0} + } level 0" rename foo {} set lambda { {x y} {info frame 0} @@ -1260,11 +1285,11 @@ } set x } test info-36.0 {info frame, dict for, bcc} -body { reduce [foo::bar] -} -result {type source line 1259 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 1259}] file info.test cmd {info frame 0} proc ::foo::bar level 0" namespace delete foo # ------------------------------------------------------------------------- @@ -1277,11 +1302,11 @@ set y } test info-36.1.0 {switch, list literal, bcc} -body { reduce [foo::bar] -} -result {type source line 1275 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 1275}] file info.test cmd {info frame 0} proc ::foo::bar level 0" namespace delete foo # ------------------------------------------------------------------------- @@ -1292,11 +1317,11 @@ set y } test info-36.1.1 {switch, multi-body literals, bcc} -body { reduce [foo::bar] -} -result {type source line 1291 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 1291}] file info.test cmd {info frame 0} proc ::foo::bar level 0" namespace delete foo # ------------------------------------------------------------------------- @@ -1316,13 +1341,13 @@ set res [join [lrange [etrace] 0 2] \n] break }] eval $cmd return $res -} -result {* {type source line 730 file info.test cmd {info frame $level} proc ::etrace level 0} +} -result "* {type source line [expr {$offset + 730}] file info.test cmd {info frame \$level} proc ::etrace level 0} * {type eval line 2 cmd etrace proc ::tcltest::RunTest} -* {type eval line 1 cmd foreac proc ::tcltest::RunTest}} -cleanup {unset foo cmd res b c} +* {type eval line 1 cmd foreac proc ::tcltest::RunTest}" -cleanup {unset foo cmd res b c} # ------------------------------------------------------------------------- # 6 cases. ## DV. direct-var - unchanged @@ -1357,13 +1382,13 @@ set script { set y DV. etrace } join [lrange [uplevel \#0 $script] 0 2] \n -} -result {* {type source line 730 file info.test cmd {info frame $level} proc ::etrace level 0} +} -result "* {type source line [expr {$offset + 730}] file info.test cmd {info frame \$level} proc ::etrace level 0} * {type eval line 3 cmd etrace proc ::tcltest::RunTest} -* {type source line 1361 file info.test cmd {uplevel \\#0 $script} proc ::tcltest::RunTest}} -cleanup {unset script y} +* {type source line [expr {$offset + 1361}] file info.test cmd {uplevel \\\\#0 \$script} proc ::tcltest::RunTest}" -cleanup {unset script y} # 38.2 moved to bottom to not disturb other tests with the necessary changes to this one. @@ -1376,14 +1401,14 @@ set script { set y DPV etrace } join [lrange [control y $script] 0 3] \n -} -result {* {type source line 730 file info.test cmd {info frame $level} proc ::etrace level 0} +} -result "* {type source line [expr {$offset + 730}] file info.test cmd {info frame \$level} proc ::etrace level 0} * {type eval line 3 cmd etrace proc ::control} -* {type source line 1338 file info.test cmd {uplevel 1 $script} proc ::control} -* {type source line 1380 file info.test cmd {control y $script} proc ::tcltest::RunTest}} -cleanup {unset script y} +* {type source line [expr {$offset + 1338}] file info.test cmd {uplevel 1 \$script} proc ::control} +* {type source line [expr {$offset + 1380}] file info.test cmd {control y \$script} proc ::tcltest::RunTest}" -cleanup {unset script y} # 38.4 moved to bottom to not disturb other tests with the necessary changes to this one. @@ -1393,15 +1418,15 @@ test info-38.5 {location information for uplevel, ppv, proc-proc-var} -match glob -body { join [lrange [datav] 0 4] \n -} -result {* {type source line 730 file info.test cmd {info frame $level} proc ::etrace level 0} +} -result "* {type source line [expr {$offset + 730}] file info.test cmd {info frame \$level} proc ::etrace level 0} * {type eval line 3 cmd etrace proc ::control} -* {type source line 1338 file info.test cmd {uplevel 1 $script} proc ::control} -* {type source line 1353 file info.test cmd {control y $script} proc ::datav level 1} -* {type source line 1397 file info.test cmd datav proc ::tcltest::RunTest}} +* {type source line [expr {$offset + 1338}] file info.test cmd {uplevel 1 \$script} proc ::control} +* {type source line [expr {$offset + 1353}] file info.test cmd {control y \$script} proc ::datav level 1} +* {type source line [expr {$offset + 1397}] file info.test cmd datav proc ::tcltest::RunTest}" # 38.6 moved to bottom to not disturb other tests with the necessary changes to this one. @@ -1410,14 +1435,14 @@ testConstraint testevalex [llength [info commands testevalex]] test info-38.7 {location information for arg substitution} -constraints testevalex -match glob -body { join [lrange [testevalex {return -level 0 [etrace]}] 0 3] \n -} -result {* {type source line 730 file info.test cmd {info frame \$level} proc ::etrace level 0} +} -result "* {type source line [expr {$offset + 730}] file info.test cmd {info frame \$level} proc ::etrace level 0} * {type eval line 1 cmd etrace proc ::tcltest::RunTest} -* {type source line 1414 file info.test cmd {testevalex {return -level 0 \[etrace]}} proc ::tcltest::RunTest} -* {type source line * file tcltest* cmd {uplevel 1 $script} proc ::tcltest::RunTest}} +* {type source line [expr {$offset + 1414}] file info.test cmd {testevalex {return -level 0 \\\[etrace]}} proc ::tcltest::RunTest} +* {type source line * file tcltest* cmd {uplevel 1 \$script} proc ::tcltest::RunTest}" # ------------------------------------------------------------------------- # literal sharing test info-39.0 {location information not confused by literal sharing} -body { @@ -1429,13 +1454,13 @@ return $res } set res [::foo::bar] namespace delete ::foo join $res \n -} -cleanup {unset res} -result { -type source line 1427 file info.test cmd {info frame 0} proc ::foo::bar level 0 -type source line 1428 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -cleanup {unset res} -result " +type source line [expr {$offset + 1427}] file info.test cmd {info frame 0} proc ::foo::bar level 0 +type source line [expr {$offset + 1428}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- # Additional tests for info-30.*, handling of continuation lines (bs+nl sequences). test info-30.1 {bs+nl in literal words, procedure body, compiled} -body { @@ -1447,33 +1472,33 @@ } } abra } -cleanup { rename abra {} -} -result {type source line 1446 file info.test cmd {info frame 0} proc ::abra level 0} +} -result "type source line [expr {$offset + 1446}] file info.test cmd {info frame 0} proc ::abra level 0" test info-30.2 {bs+nl in literal words, namespace script} { namespace eval xxx { variable res \ [info frame 0];# line 1457 } return [reduce $xxx::res] -} {type source line 1457 file info.test cmd {info frame 0} level 0} +} "type source line [expr {$offset + 1457}] file info.test cmd {info frame 0} level 0" test info-30.3 {bs+nl in literal words, namespace multi-word script} { namespace eval xxx variable res \ [list [reduce [info frame 0]]];# line 1464 return $xxx::res -} {type source line 1464 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} "type source line [expr {$offset + 1464}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.4 {bs+nl in literal words, eval script} -cleanup {unset res} -body { eval { set ::res \ [reduce [info frame 0]];# line 1471 } return $res -} -result {type source line 1471 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} -result "type source line [expr {$offset + 1471}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.5 {bs+nl in literal words, eval script, with nested words} -body { eval { if {1} \ { @@ -1480,69 +1505,69 @@ set ::res \ [reduce [info frame 0]];# line 1481 } } return $res -} -cleanup {unset res} -result {type source line 1481 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} -cleanup {unset res} -result "type source line [expr {$offset + 1481}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.6 {bs+nl in computed word} -cleanup {unset res} -body { set res "\ [reduce [info frame 0]]";# line 1489 -} -result { type source line 1489 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} -result " type source line [expr {$offset + 1489}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.7 {bs+nl in computed word, in proc} -body { proc abra {} { return "\ [reduce [info frame 0]]";# line 1495 } abra } -cleanup { rename abra {} -} -result { type source line 1495 file info.test cmd {info frame 0} proc ::abra level 0} +} -result " type source line [expr {$offset + 1495}] file info.test cmd {info frame 0} proc ::abra level 0" test info-30.8 {bs+nl in computed word, nested eval} -body { eval { set \ res "\ [reduce [info frame 0]]";# line 1506 } -} -cleanup {unset res} -result { type source line 1506 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} -cleanup {unset res} -result " type source line [expr {$offset + 1506}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.9 {bs+nl in computed word, nested eval} -body { eval { set \ res "\ [reduce \ [info frame 0]]";# line 1515 } -} -cleanup {unset res} -result { type source line 1515 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} -cleanup {unset res} -result " type source line [expr {$offset + 1515}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.10 {bs+nl in computed word, key to array} -body { set tmp([set \ res "\ [reduce \ [info frame 0]]"]) x ; #1523 unset tmp set res -} -cleanup {unset res} -result { type source line 1523 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} -cleanup {unset res} -result " type source line [expr {$offset + 1523}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.11 {bs+nl in subst arguments} -body { subst {[set \ res "\ [reduce \ [info frame 0]]"]} ; #1532 -} -cleanup {unset res} -result { type source line 1532 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} -cleanup {unset res} -result " type source line [expr {$offset + 1532}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.12 {bs+nl in computed word, nested eval} -body { eval { set \ res "\ [set x {}] \ [reduce \ [info frame 0]]";# line 1541 } -} -cleanup {unset res x} -result { type source line 1541 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} -cleanup {unset res x} -result " type source line [expr {$offset + 1541}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.13 {bs+nl in literal words, uplevel script, with nested words} -body { subinterp ; set res [interp eval sub { uplevel #0 { if {1} \ { @@ -1549,11 +1574,11 @@ set ::res \ [reduce [info frame 0]];# line 1550 } } set res }] ; interp delete sub ; set res -} -cleanup {unset res} -result {type source line 1550 file info.test cmd {info frame 0} level 0} +} -cleanup {unset res} -result "type source line [expr {$offset + 1550}] file info.test cmd {info frame 0} level 0" test info-30.14 {bs+nl, literal word, uplevel through proc} { subinterp ; set res [interp eval sub { proc abra {script} { uplevel 1 $script } @@ -1561,11 +1586,11 @@ return "\ [reduce [info frame 0]]";# line 1562 }] rename abra {} set res }] ; interp delete sub ; set res -} { type source line 1562 file info.test cmd {info frame 0} proc ::abra} +} " type source line [expr {$offset + 1562}] file info.test cmd {info frame 0} proc ::abra" test info-30.15 {bs+nl in literal words, nested proc body, compiled} { proc a {} { proc b {} { if {1} \ @@ -1577,11 +1602,11 @@ } a ; set res [b] rename a {} rename b {} set res -} {type source line 1574 file info.test cmd {info frame 0} proc ::b level 0} +} "type source line [expr {$offset + 1574}] file info.test cmd {info frame 0} proc ::b level 0" test info-30.16 {bs+nl in multi-body switch, compiled} { proc a {value} { switch -regexp -- $value \ ^key { info frame 0; # 1587 } \ @@ -1590,20 +1615,20 @@ } set res {} lappend res [reduce [a {key }]] lappend res [reduce [a {1alpha}]] set res "\n[join $res \n]" -} { -type source line 1587 file info.test cmd {info frame 0} proc ::a level 0 -type source line 1589 file info.test cmd {info frame 0} proc ::a level 0} +} " +type source line [expr {$offset + 1587}] file info.test cmd {info frame 0} proc ::a level 0 +type source line [expr {$offset + 1589}] file info.test cmd {info frame 0} proc ::a level 0" test info-30.17 {bs+nl in multi-body switch, direct} { switch -regexp -- {key } \ ^key { reduce [info frame 0] ;# 1601 } \ \t### { } \ {[0-9]*} { } -} {type source line 1601 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} "type source line [expr {$offset + 1601}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.18 {bs+nl, literal word, uplevel through proc, appended, loss of primary tracking data} { proc abra {script} { append script "\n# end of script" uplevel 1 $script @@ -1630,23 +1655,23 @@ } set res {} lappend res [a {key }] lappend res [a {1alpha}] set res "\n[join $res \n]" -} { -type source line 1624 file info.test cmd {info frame 0} proc ::a level 0 -type source line 1628 file info.test cmd {info frame 0} proc ::a level 0} +} " +type source line [expr {$offset + 1624}] file info.test cmd {info frame 0} proc ::a level 0 +type source line [expr {$offset + 1628}] file info.test cmd {info frame 0} proc ::a level 0" test info-30.20 {bs+nl in single-body switch, direct} { switch -regexp -- {key } { \ ^key { reduce \ [info frame 0] } \t### { } {[0-9]*} { } } -} {type source line 1643 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} "type source line [expr {$offset + 1643}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.21 {bs+nl in if, full compiled} { proc a {value} { if {$value} \ {info frame 0} \ @@ -1654,13 +1679,13 @@ } set res {} lappend res [reduce [a 1]] lappend res [reduce [a 0]] set res "\n[join $res \n]" -} { -type source line 1652 file info.test cmd {info frame 0} proc ::a level 0 -type source line 1653 file info.test cmd {info frame 0} proc ::a level 0} +} " +type source line [expr {$offset + 1652}] file info.test cmd {info frame 0} proc ::a level 0 +type source line [expr {$offset + 1653}] file info.test cmd {info frame 0} proc ::a level 0" test info-30.22 {bs+nl in computed word, key to array, compiled} { proc a {} { set tmp([set \ res "\ @@ -1670,11 +1695,11 @@ set res } set res [a] rename a {} set res -} { type source line 1668 file info.test cmd {info frame 0} proc ::a level 0} +} " type source line [expr {$offset + 1668}] file info.test cmd {info frame 0} proc ::a level 0" test info-30.23 {bs+nl in multi-body switch, full compiled} { proc a {value} { switch -exact -- $value \ key { info frame 0; # 1680 } \ @@ -1683,13 +1708,13 @@ } set res {} lappend res [reduce [a key]] lappend res [reduce [a 000]] set res "\n[join $res \n]" -} { -type source line 1680 file info.test cmd {info frame 0} proc ::a level 0 -type source line 1682 file info.test cmd {info frame 0} proc ::a level 0} +} " +type source line [expr {$offset + 1680}] file info.test cmd {info frame 0} proc ::a level 0 +type source line [expr {$offset + 1682}] file info.test cmd {info frame 0} proc ::a level 0" test info-30.24 {bs+nl in single-body switch, full compiled} { proc a {value} { switch -exact -- $value { key { reduce \ @@ -1702,142 +1727,142 @@ } set res {} lappend res [a key] lappend res [a 000] set res "\n[join $res \n]" -} { -type source line 1696 file info.test cmd {info frame 0} proc ::a level 0 -type source line 1700 file info.test cmd {info frame 0} proc ::a level 0} +} " +type source line [expr {$offset + 1696}] file info.test cmd {info frame 0} proc ::a level 0 +type source line [expr {$offset + 1700}] file info.test cmd {info frame 0} proc ::a level 0" test info-30.25 {TIP 280 for compiled [subst]} { subst {[reduce [info frame 0]]} ; # 1712 -} {type source line 1712 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} "type source line [expr {$offset + 1712}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.26 {TIP 280 for compiled [subst]} { subst \ {[reduce [info frame 0]]} ; # 1716 -} {type source line 1716 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} "type source line [expr {$offset + 1716}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.27 {TIP 280 for compiled [subst]} { subst { [reduce [info frame 0]]} ; # 1720 -} { -type source line 1720 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} " +type source line [expr {$offset + 1720}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.28 {TIP 280 for compiled [subst]} { subst {\ [reduce [info frame 0]]} ; # 1725 -} { type source line 1725 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} " type source line [expr {$offset + 1725}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.29 {TIP 280 for compiled [subst]} { subst {foo\ [reduce [info frame 0]]} ; # 1729 -} {foo type source line 1729 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} "foo type source line [expr {$offset + 1729}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.30 {TIP 280 for compiled [subst]} { subst {foo [reduce [info frame 0]]} ; # 1733 -} {foo -type source line 1733 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} "foo +type source line [expr {$offset + 1733}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.31 {TIP 280 for compiled [subst]} { subst {[][reduce [info frame 0]]} ; # 1737 -} {type source line 1737 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} "type source line [expr {$offset + 1737}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.32 {TIP 280 for compiled [subst]} { subst {[\ ][reduce [info frame 0]]} ; # 1741 -} {type source line 1741 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} "type source line [expr {$offset + 1741}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.33 {TIP 280 for compiled [subst]} { subst {[ ][reduce [info frame 0]]} ; # 1745 -} {type source line 1745 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} "type source line [expr {$offset + 1745}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.34 {TIP 280 for compiled [subst]} { subst {[format %s {} ][reduce [info frame 0]]} ; # 1749 -} {type source line 1749 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} "type source line [expr {$offset + 1749}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.35 {TIP 280 for compiled [subst]} { subst {[format %s {} ] [reduce [info frame 0]]} ; # 1754 -} { -type source line 1754 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} " +type source line [expr {$offset + 1754}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.36 {TIP 280 for compiled [subst]} { subst { [format %s {}][reduce [info frame 0]]} ; # 1759 -} { -type source line 1759 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} " +type source line [expr {$offset + 1759}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.37 {TIP 280 for compiled [subst]} { subst { [format %s {}] [reduce [info frame 0]]} ; # 1765 -} { +} " -type source line 1765 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +type source line [expr {$offset + 1765}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.38 {TIP 280 for compiled [subst]} { subst {\ [format %s {}][reduce [info frame 0]]} ; # 1771 -} { type source line 1771 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} " type source line [expr {$offset + 1771}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.39 {TIP 280 for compiled [subst]} { subst {\ [format %s {}]\ [reduce [info frame 0]]} ; # 1776 -} { type source line 1776 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} " type source line [expr {$offset + 1776}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.40 {TIP 280 for compiled [subst]} -setup { unset -nocomplain empty } -body { set empty {} subst {$empty[reduce [info frame 0]]} ; # 1782 } -cleanup { unset empty -} -result {type source line 1782 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} -result "type source line [expr {$offset + 1782}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.41 {TIP 280 for compiled [subst]} -setup { unset -nocomplain empty } -body { set empty {} subst {$empty [reduce [info frame 0]]} ; # 1791 } -cleanup { unset empty -} -result { -type source line 1791 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} -result " +type source line [expr {$offset + 1791}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.42 {TIP 280 for compiled [subst]} -setup { unset -nocomplain empty } -body { set empty {}; subst {$empty\ [reduce [info frame 0]]} ; # 1800 } -cleanup { unset empty -} -result { type source line 1800 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} -result " type source line [expr {$offset + 1800}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.43 {TIP 280 for compiled [subst]} -body { unset -nocomplain a\nb set a\nb {} subst {${a b}[reduce [info frame 0]]} ; # 1808 -} -cleanup {unset a\nb} -result {type source line 1808 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} -cleanup {unset a\nb} -result "type source line [expr {$offset + 1808}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.44 {TIP 280 for compiled [subst]} { unset -nocomplain a set a(\n) {} subst {$a( )[reduce [info frame 0]]} ; # 1814 -} {type source line 1814 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} "type source line [expr {$offset + 1814}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.45 {TIP 280 for compiled [subst]} { unset -nocomplain a set a() {} subst {$a([ return -level 0])[reduce [info frame 0]]} ; # 1820 -} {type source line 1820 file info.test cmd {info frame 0} proc ::tcltest::RunTest} +} "type source line [expr {$offset + 1820}] file info.test cmd {info frame 0} proc ::tcltest::RunTest" test info-30.46 {TIP 280 for compiled [subst]} { unset -nocomplain a - set a(1825) YES; set a(1824) 1824; set a(1826) 1826 + set a([expr {$offset + 1825}]) YES; set a([expr {$offset + 1824}]) [expr {$offset + 1824}]; set a([expr {$offset + 1826}]) [expr {$offset + 1826}] subst {$a([dict get [info frame 0] line])} ; # 1825 } YES test info-30.47 {TIP 280 for compiled [subst]} { unset -nocomplain a - set a(\n1831) YES; set a(\n1830) 1830; set a(\n1832) 1832 + set a(\n[expr {$offset + 1831}]) YES; set a(\n[expr {$offset + 1830}]) 1830; set a(\n[expr {$offset + 1832}]) [expr {$offset + 1832}] subst {$a( [dict get [info frame 0] line])} ; # 1831 } YES unset -nocomplain a test info-30.48 {Bug 2850901} testevalex { testevalex {return -level 0 [format %s {} ][reduce [info frame 0]]} ; # line 2 of the eval -} {type eval line 2 cmd {info frame 0} proc ::tcltest::RunTest} +} "type eval line 2 cmd {info frame 0} proc ::tcltest::RunTest" # ------------------------------------------------------------------------- # literal sharing 2, bug 2933089 @@ -1873,12 +1898,12 @@ } -cleanup { trace remove execution print_one enter get_frame_info rename get_frame_info {} rename test_info_frame {} rename print_one {} -} -result {type source line 1854 file info.test cmd print_one proc ::test_info_frame level 1 -type source line 1859 file info.test cmd print_one proc ::test_info_frame level 1} +} -result "type source line [expr {$offset + 1854}] file info.test cmd print_one proc ::test_info_frame level 1 +type source line [expr {$offset + 1859}] file info.test cmd print_one proc ::test_info_frame level 1" # ------------------------------------------------------------------------- # Tests moved to the end to not disturb other tests and their locations. test info-38.6 {location information for uplevel, ppl, proc-proc-literal} -match glob -setup {subinterp} -body { @@ -1902,15 +1927,15 @@ etrace } } join [lrange [datal] 0 4] \n } -} -result {* {type source line 1890 file info.test cmd {info frame $level} proc ::etrace level 0} -* {type source line 1902 file info.test cmd etrace proc ::control} -* {type source line 1897 file info.test cmd {uplevel 1 $script} proc ::control} -* {type source line 1900 file info.test cmd control proc ::datal level 1} -* {type source line 1905 file info.test cmd datal level 2}} -cleanup {interp delete sub} +} -result "* {type source line [expr {$offset + 1890}] file info.test cmd {info frame \$level} proc ::etrace level 0} +* {type source line [expr {$offset + 1902}] file info.test cmd etrace proc ::control} +* {type source line [expr {$offset + 1897}] file info.test cmd {uplevel 1 \$script} proc ::control} +* {type source line [expr {$offset + 1900}] file info.test cmd control proc ::datal level 1} +* {type source line [expr {$offset + 1905}] file info.test cmd datal level 2}" -cleanup {interp delete sub} test info-38.4 {location information for uplevel, dpv, direct-proc-literal} -match glob -setup {subinterp} -body { interp eval sub { proc etrace {} { set res {} @@ -1928,14 +1953,14 @@ join [lrange [control y { set y DPL etrace }] 0 3] \n } -} -result {* {type source line 1919 file info.test cmd {info frame $level} proc ::etrace level 0} -* {type source line 1930 file info.test cmd etrace proc ::control} -* {type source line 1926 file info.test cmd {uplevel 1 $script} proc ::control} -* {type source line 1928 file info.test cmd control level 1}} -cleanup {interp delete sub} +} -result "* {type source line [expr {$offset + 1919}] file info.test cmd {info frame \$level} proc ::etrace level 0} +* {type source line [expr {$offset + 1930}] file info.test cmd etrace proc ::control} +* {type source line [expr {$offset + 1926}] file info.test cmd {uplevel 1 \$script} proc ::control} +* {type source line [expr {$offset + 1928}] file info.test cmd control level 1}" -cleanup {interp delete sub} test info-38.2 {location information for uplevel, dl, direct-literal} -match glob -setup {subinterp} -body { interp eval sub { proc etrace {} { set res {} @@ -1949,13 +1974,13 @@ join [lrange [uplevel \#0 { set y DL. etrace }] 0 2] \n } -} -result {* {type source line 1944 file info.test cmd {info frame $level} proc ::etrace level 0} -* {type source line 1951 file info.test cmd etrace level 1} -* {type source line 1949 file info.test cmd uplevel\\ \\\\ level 1}} -cleanup {interp delete sub} +} -result "* {type source line [expr {$offset + 1944}] file info.test cmd {info frame \$level} proc ::etrace level 0} +* {type source line [expr {$offset + 1951}] file info.test cmd etrace level 1} +* {type source line [expr {$offset + 1949}] file info.test cmd uplevel\\\\ \\\\\\\\ level 1}" -cleanup {interp delete sub} # This test at the end of this file _only_ to avoid disturbing above line # numbers. It _belongs_ after info-9.12 test info-9.13 {info level option, value in global context} -body { uplevel #0 {info level 2} @@ -1972,11 +1997,11 @@ } test info-33.4 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 1968 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 1968}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { dict for {a b} {c d} {*}{ @@ -1986,11 +2011,11 @@ } test info-33.5 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 1983 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 1983}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { set d {a b} @@ -2001,11 +2026,11 @@ } test info-33.6 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 1998 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 1998}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { set d {} @@ -2016,11 +2041,11 @@ } test info-33.7 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2013 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2013}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { for {*}{ @@ -2031,11 +2056,11 @@ } test info-33.8 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2027 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2027}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { for {*}{ @@ -2046,11 +2071,11 @@ } test info-33.9 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2043 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2043}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { for {*}{ @@ -2061,11 +2086,11 @@ } test info-33.10 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2058 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2058}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { for {*}{ @@ -2076,11 +2101,11 @@ } test info-33.11 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2073 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2073}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { foreach {*}{ @@ -2089,11 +2114,11 @@ } test info-33.12 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2088 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2088}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { foreach {*}{ @@ -2104,11 +2129,11 @@ } test info-33.13 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2101 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2101}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { if {*}{ @@ -2118,11 +2143,11 @@ } test info-33.14 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2115 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2115}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { if 0 {*}{ @@ -2132,11 +2157,11 @@ } test info-33.15 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2130 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2130}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { incr {*}{ @@ -2145,11 +2170,11 @@ } test info-33.16 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2144 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2144}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { info level {*}{ @@ -2157,11 +2182,11 @@ } test info-33.17 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2156 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2156}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { string match {*}{ @@ -2169,11 +2194,11 @@ } test info-33.18 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2168 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2168}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { string match {*}{ @@ -2182,11 +2207,11 @@ } test info-33.19 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2181 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2181}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { string length {*}{ @@ -2194,11 +2219,11 @@ } test info-33.20 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2193 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2193}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { while {*}{ @@ -2207,11 +2232,11 @@ } test info-33.21 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2205 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2205}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { switch -- {*}{ @@ -2220,11 +2245,11 @@ } test info-33.22 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2218 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2218}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { try {*}{ @@ -2234,11 +2259,11 @@ } test info-33.23 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2231 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2231}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { try {*}{ @@ -2248,11 +2273,11 @@ } test info-33.24 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2245 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2245}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { try {*}{ @@ -2262,11 +2287,11 @@ } test info-33.25 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2259 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2259}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { try {*}{ @@ -2276,11 +2301,11 @@ } test info-33.26 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2273 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2273}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { while 1 {*}{ @@ -2289,11 +2314,11 @@ } test info-33.27 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2287 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2287}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { try {} finally {*}{ @@ -2302,11 +2327,11 @@ } test info-33.28 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2300 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2300}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { try {} on ok {} {} finally {*}{ @@ -2315,11 +2340,11 @@ } test info-33.29 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2313 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2313}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { try {} on ok {} {*}{ @@ -2328,11 +2353,11 @@ } test info-33.30 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2326 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2326}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { try {} on ok {} {*}{ @@ -2341,11 +2366,11 @@ } test info-33.31 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2339 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2339}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { binary format {*}{ @@ -2353,11 +2378,11 @@ } test info-33.32 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2352 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2352}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { set format format @@ -2366,11 +2391,11 @@ } test info-33.33 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2365 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2365}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { append x {*}{ @@ -2378,11 +2403,11 @@ } test info-33.34 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2377 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2377}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval foo {} proc foo::bar {} { append {*}{ @@ -2391,11 +2416,11 @@ } test info-33.35 {{*}, literal, simple, bytecompiled} -body { reduce [foo::bar] } -cleanup { namespace delete foo -} -result {type source line 2389 file info.test cmd {info frame 0} proc ::foo::bar level 0} +} -result "type source line [expr {$offset + 2389}] file info.test cmd {info frame 0} proc ::foo::bar level 0" # ------------------------------------------------------------------------- namespace eval ::testinfocmdtype { apply {cmds { foreach c $cmds {rename $c {}} Index: tests/init.test ================================================================== --- tests/init.test +++ tests/init.test @@ -1,16 +1,23 @@ -# Functionality covered: this file contains a collection of tests for the auto -# loading and namespaces. -# -# Sourcing this file into Tcl runs the tests and generates output for errors. -# No output means no errors were found. -# # Copyright © 1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Functionality covered: this file contains a collection of tests for the auto +# loading and namespaces. +# +# Sourcing this file into Tcl runs the tests and generates output for errors. +# No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/internals.tcl ================================================================== --- tests/internals.tcl +++ tests/internals.tcl @@ -1,15 +1,22 @@ +# Copyright © 2020 Sergey G. Brester (sebres). +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file contains internal facilities for Tcl tests. # # Source this file in the related tests to include from tcl-tests: # # source [file join [file dirname [info script]] internals.tcl] -# -# Copyright © 2020 Sergey G. Brester (sebres). -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {[namespace which -command ::tcltest::internals::scriptpath] eq ""} {namespace eval ::tcltest::internals { namespace path ::tcltest Index: tests/interp.test ================================================================== --- tests/interp.test +++ tests/interp.test @@ -1,16 +1,23 @@ -# This file tests the multiple interpreter facility of Tcl -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1995-1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file tests the multiple interpreter facility of Tcl +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } @@ -3337,11 +3344,11 @@ } } msg interp delete $i lappend result $msg } -result {1 {time limit exceeded}} -test interp-34.11 {time limit extension in callbacks} -constraints knownBug -setup { +test interp-34.11 {time limit extension in callbacks} -setup { proc cb1 {i t} { global result lappend result cb1 $i limit time -seconds $t -command cb2 } Index: tests/io.test ================================================================== --- tests/io.test +++ tests/io.test @@ -1,19 +1,25 @@ -# -*- tcl -*- -# Functionality covered: operation of all IO commands, and all procedures -# defined in generic/tclIO.c. -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1994 The Regents of the University of California. # Copyright © 1994-1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Functionality covered: operation of all IO commands, and all procedures +# defined in generic/tclIO.c. +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 } @@ -1187,11 +1193,11 @@ fconfigure $f -encoding shiftjis -profile tcl8 set x [list [gets $f line] $line [eof $f]] close $f set x } [list 10 "1234567890" 0] -test io-7.3 {FilterInputBytes: split up character at EOF} {testchannel} { +test io-7.3 {FilterInputBytes: split up character at EOF} testchannel { set f [open $path(test1) w] fconfigure $f -encoding binary puts -nonewline $f "1234567890123\x82\x4F\x82\x50\x82" close $f set f [open $path(test1)] @@ -1612,50 +1618,76 @@ fconfigure $f -encoding utf-8 -buffersize 10 set in [read $f] close $f scan [string index $in end] %c } 160 -test io-12.9 {ReadChars: multibyte chars split} -body { - set f [open $path(test1) w] - fconfigure $f -translation binary - puts -nonewline $f [string repeat a 9]\xC2 - close $f - set f [open $path(test1)] - fconfigure $f -encoding utf-8 -profile tcl8 -buffersize 10 - set in [read $f] - read $f - scan [string index $in end] %c -} -cleanup { - catch {close $f} -} -result 194 -test io-12.10 {ReadChars: multibyte chars split} -body { - set f [open $path(test1) w] - fconfigure $f -translation binary - puts -nonewline $f [string repeat a 9]\xC2 - close $f - set f [open $path(test1)] - fconfigure $f -encoding utf-8 -profile strict -buffersize 10 - set in [read $f] - close $f - scan [string index $in end] %c -} -cleanup { - catch {close $f} -} -returnCodes 1 -match glob -result {error reading "file*":\ - invalid or incomplete multibyte or wide character} -test io-12.11 {ReadChars: multibyte chars split} -body { - set f [open $path(test1) w] - fconfigure $f -translation binary - puts -nonewline $f [string repeat a 9]\xC2 - close $f - set f [open $path(test1)] - fconfigure $f -encoding utf-8 -profile tcl8 -buffersize 10 - set in [read $f] - close $f - scan [string index $in end] %c -} -cleanup { - catch {close $f} -} -result 194 + + +apply [list {} { + set template { + test {io-12.9 @variant@} {ReadChars: multibyte chars split, default (strict)} -body { + set res {} + set f [open $path(test1) w] + fconfigure $f -translation binary + puts -nonewline $f [string repeat a 9]\xC2 + close $f + set f [open $path(test1)] + fconfigure $f -encoding utf-8 @strict@ -buffersize 10 + set status [catch {read $f} cres copts] + if {$status} { + if {[dict exists $copts -result read]} { + set in [dict get $copts -result read] + } else { + set in {} + } + } else { + set in $cres + } + lappend res $in + lappend res $status $cres + set scan [scan [string index $in end] %c] + lappend res $scan + + set status [catch {read $f} cres copts] + if {$status} { + if {[dict exists $copts -result read]} { + set in [dict get $copts -result read] + } else { + set in {} + } + } else { + set in $cres + } + lappend res $in + lappend res $status $cres + set scan [scan [string index $in end] %c] + lappend res $scan + set res + } -cleanup { + catch {close $f} + } -match glob -result @result@ + } + + set errorres {aaaaaaaaa 1 {error reading "file*":\ + invalid or incomplete multibyte or wide character} 97\ + {} 1 {error reading "file*":\ + invalid or incomplete multibyte or wide character} {}} + + # if default encoding is not currently to strict + # foreach variant {default encodingstrict} strict {{} {-encodingstrict 1}} + foreach variant { + {profile default} {profile strict} {profile tcl8} + } strict {{} {-profile strict} {-profile tcl8}} result [list \ + $errorres $errorres [ + list aaaaaaaaa\xC2 0 aaaaaaaaa\xC2 194 {} 0 {} {}] + ] { + set script [string map [ + list @result@ [list $result] @variant@ $variant @strict@ $strict] $template] + uplevel 1 $script + } +} [namespace current]] + test io-13.1 {TranslateInputEOL: cr mode} {} { set f [open $path(test1) w] fconfigure $f -translation lf puts -nonewline $f "abcd\rdef\r" @@ -5842,11 +5874,11 @@ set modes [fconfigure $s2 -translation] close $s1 close $s2 set modes } {auto crlf} -test io-39.22 {Tcl_SetChannelOption, invariance} -constraints {unix deprecated} -body { +test io-39.22 {Tcl_SetChannelOption, invariance} -constraints unix -body { file delete $path(test1) set f1 [open $path(test1) w+] set l "" lappend l [fconfigure $f1 -eofchar] fconfigure $f1 -eofchar {O {}} @@ -5854,11 +5886,11 @@ fconfigure $f1 -eofchar D lappend l [fconfigure $f1 -eofchar] close $f1 set l } -result {{} O D} -test io-39.22a {Tcl_SetChannelOption, invariance} -constraints deprecated -body { +test io-39.22a {Tcl_SetChannelOption, invariance} -body { file delete $path(test1) set f1 [open $path(test1) w+] set l [list] fconfigure $f1 -eofchar {O {}} lappend l [fconfigure $f1 -eofchar] @@ -7325,12 +7357,12 @@ } {0} test io-52.3 {TclCopyChannel} {fcopy} { file delete $path(test1) set f1 [open $thisScript] set f2 [open $path(test1) w] - fconfigure $f1 -translation lf -encoding iso8859-1 -blocking 0 - fconfigure $f2 -translation cr -encoding iso8859-1 -blocking 0 + fconfigure $f1 -encoding utf-8 -translation lf -encoding iso8859-1 -blocking 0 + fconfigure $f2 -encoding utf-8 -translation cr -encoding iso8859-1 -blocking 0 set s0 [fcopy $f1 $f2] set result [list [fconfigure $f1 -blocking] [fconfigure $f2 -blocking]] close $f1 close $f2 set s1 [file size $thisScript] @@ -7342,30 +7374,32 @@ } {0 0 ok} test io-52.4 {TclCopyChannel} {fcopy} { file delete $path(test1) set f1 [open $thisScript] set f2 [open $path(test1) w] - fconfigure $f1 -translation lf -blocking 0 - fconfigure $f2 -translation cr -blocking 0 + fconfigure $f1 -encoding utf-8 -translation lf -blocking 0 + fconfigure $f2 -encoding utf-8 -translation cr -blocking 0 fcopy $f1 $f2 -size 40 set result [list [fblocked $f1] [fconfigure $f1 -blocking] [fconfigure $f2 -blocking]] close $f1 close $f2 + # the file size is 41 because "©" is encoded in two bytes lappend result [file size $path(test1)] -} {0 0 0 40} +} {0 0 0 41} test io-52.4.1 {TclCopyChannel} {fcopy} { file delete $path(test1) set f1 [open $thisScript] set f2 [open $path(test1) w] - fconfigure $f1 -translation lf -blocking 0 -buffersize 10000000 - fconfigure $f2 -translation cr -blocking 0 + fconfigure $f1 -encoding utf-8 -translation lf -blocking 0 -buffersize 10000000 + fconfigure $f2 -encoding utf-8 -translation cr -blocking 0 fcopy $f1 $f2 -size 40 set result [list [fblocked $f1] [fconfigure $f1 -blocking] [fconfigure $f2 -blocking]] close $f1 close $f2 + # the file size is 41 because "©" is encoded in two bytes lappend result [file size $path(test1)] -} {0 0 0 40} +} {0 0 0 41} test io-52.5 {TclCopyChannel, all} {fcopy} { file delete $path(test1) set f1 [open $thisScript] set f2 [open $path(test1) w] fconfigure $f1 -translation lf -encoding iso8859-1 -blocking 0 @@ -7456,11 +7490,11 @@ fconfigure $f1 -translation lf puts $f1 " puts ready gets stdin set f1 \[open [list $thisScript] r\] - fconfigure \$f1 -translation lf + fconfigure \$f1 -encoding utf-8 -translation lf puts \[read \$f1 100\] close \$f1 " close $f1 set f1 [open "|[list [interpreter] $path(pipe)]" r+] @@ -7467,16 +7501,17 @@ fconfigure $f1 -translation lf gets $f1 puts $f1 ready flush $f1 set f2 [open $path(test1) w] - fconfigure $f2 -translation lf + fconfigure $f2 -encoding utf-8 -translation lf set s0 [fcopy $f1 $f2 -size 40] catch {close $f1} close $f2 + # the file size is 41 because "©" is encoded in two bytes list $s0 [file size $path(test1)] -} {40 40} +} {40 41} # Empty files, to register them with the test facility set path(kyrillic.txt) [makeFile {} kyrillic.txt] set path(utf8-fcopy.txt) [makeFile {} utf8-fcopy.txt] set path(utf8-rp.txt) [makeFile {} utf8-rp.txt] # Create kyrillic file, use lf translation to avoid os eol issues @@ -7716,10 +7751,40 @@ fcopy $in $out } -cleanup { close $in close $out } -returnCodes 1 -match glob -result {error reading "file*": invalid or incomplete multibyte or wide character} + +test io-52.20.1 {TclCopyChannel & read encoding error & tell position, bug [a173f9229]} -setup { + set out [open $path(utf8-fcopy.txt) w] + fconfigure $out -encoding utf-8 -translation lf + puts $out "AÁ" + close $out +} -constraints {fcopy knownBug} -body { + # binary to encoding => the input has to be + # in utf-8 to make sense to the encoder + + set in [open $path(utf8-fcopy.txt) r] + set out [open $path(kyrillic.txt) w] + + # Using "-encoding ascii" means reading the "Á" gives an error + fconfigure $in -encoding ascii -profile strict + fconfigure $out -encoding koi8-r -translation lf + + set l {} + # should fail, so 1 is added + lappend l [catch {fcopy $in $out}] + # should be at position 1, after the first correct byte, so 1 is read. + lappend l [tell $in] + # not sure, if flush required, but anyway + flush $out + # should be at position 1, after the first correct byte, so 1 is written. + lappend l [tell $out] +} -cleanup { + close $in + close $out +} -returnCodes 0 -result {1 1 1} test io-52.20.2 {TclCopyChannel & encoding error on same encoding} -setup { set out [open $path(utf8-fcopy.txt) w] fconfigure $out -encoding utf-8 -translation lf puts $out "AÁ" @@ -9330,11 +9395,33 @@ } -cleanup { close $f removeFile io-75.5 } -result 4181 -test io-75.6 {incomplete utf-8 encoding, blocking gets is not ignored (-profile strict)} -setup { +test io-75.6.read {invalid utf-8 encoding, read is not ignored (-encodingstrict 1)} -setup { + set fn [makeFile {} io-75.6] + set f [open $fn w+] + fconfigure $f -encoding binary + # \x81 is invalid in utf-8 + puts -nonewline $f A\x81 + flush $f + seek $f 0 + fconfigure $f -encoding utf-8 -buffering none -eofchar "" -translation lf \ + -profile strict +} -body { + set status [catch {read $f} cres copts] + set d [dict get $copts -result read] + binary scan $d H* hd + lappend hd $status $cres +} -cleanup { + close $f + removeFile io-75.6 +} -match glob -result {41 1 {error reading "file*":\ + invalid or incomplete multibyte or wide character}} + + +test io-75.6.gets {invalid utf-8 encoding, gets is not ignored (-profile strict)} -setup { set fn [makeFile {} io-75.6] set f [open $fn w+] fconfigure $f -encoding binary # \x81 is an incomplete byte sequence in utf-8 puts -nonewline $f A\x81 @@ -9426,11 +9513,33 @@ close $f removeFile io-75.6.4 } -match glob -returnCodes 1 -result {error reading "file*":\ invalid or incomplete multibyte or wide character} -test io-75.7 { +test io-75.7.gets { + invalid utf-8 encoding gets is not ignored (-profile strict) +} -setup { + set fn [makeFile {} io-75.7] + set f [open $fn w+] + fconfigure $f -encoding binary + # \x81 is invalid in utf-8 + puts -nonewline $f A\x81 + flush $f + seek $f 0 + fconfigure $f -encoding utf-8 -buffering none -eofchar {} -translation lf \ + -profile strict +} -body { + list [catch {gets $f} msg] $msg +} -cleanup { + close $f + removeFile io-75.7 + unset msg f fn +} -match glob -result {1 {error reading "file*":\ + invalid or incomplete multibyte or wide character}} + + +test io-75.7.read { invalid utf-8 encoding read is not ignored (-profile strict) } -setup { set fn [makeFile {} io-75.7] set f [open $fn w+] fconfigure $f -encoding binary @@ -9439,42 +9548,110 @@ flush $f seek $f 0 fconfigure $f -encoding utf-8 -buffering none -eofchar {} -translation lf \ -profile strict } -body { - list [catch {read $f} msg data] $msg [dict get $data -data] + list [catch {read $f} msg data] $msg [dict get $data -result read] } -cleanup { close $f removeFile io-75.7 unset msg data f fn } -match glob -result {1 {error reading "file*":\ invalid or incomplete multibyte or wide character} A} -test io-75.8 {invalid utf-8 encoding eof first handling (-profile strict)} -setup { +test {io-75.8 {invalid input before eof}} {invalid utf-8 before eof (-profile strict)} -setup { + set hd {} + set fn [makeFile {} io-75.7] + set f [open $fn w+] + fconfigure $f -encoding binary + # \xA1 is invalid in utf-8. -eofchar is not detected, because it comes later. + puts -nonewline $f A\xA1\x1A + flush $f + seek $f 0 + fconfigure $f -encoding utf-8 -buffering none -eofchar \x1A \ + -translation lf -profile strict +} -body { + set status [catch {read $f} cres copts] + if {[dict exists $copts -result read]} { + set d [dict get $copts -result read] + } else { + set d {} + } + binary scan $d H* hd + lappend hd [eof $f] + lappend hd $status + lappend hd $cres + fconfigure $f -encoding iso8859-1 + lappend hd [read $f];# We changed encoding, so now we can read the \xA1 + close $f + set hd +} -cleanup { + removeFile io-75.7 +} -match glob -result {41 0 1 {error reading "file*":\ + invalid or incomplete multibyte or wide character} ¡} + + +test {io-75.8 {incomplete input after eof}} { + incomplete utf-8 char after eof char is not an error (-profile strict) +} -setup { + set hd {} set fn [makeFile {} io-75.8] set f [open $fn w+] fconfigure $f -encoding binary - # \x81 is invalid in utf-8, but since \x1A comes first, -eofchar takes - # precedence. + # \x81 is invalid in utf-8, but since the eof character \x1A comes first, + # -eofchar takes precedence. puts -nonewline $f A\x1A\x81 flush $f seek $f 0 fconfigure $f -encoding utf-8 -buffering none -eofchar \x1A \ -translation lf -profile strict } -body { set d [read $f] binary scan $d H* hd lappend hd [eof $f] + # there should be no error on additional reads lappend hd [read $f] set hd } -cleanup { close $f removeFile io-75.8 unset f d hd } -result {41 1 {}} -test io-75.8.eoflater {invalid utf-8 encoding eof after handling (-profile strict)} -setup { + +test {io-75.8 {invalid input after eof}} { + invalid utf-8 after eof char is not an error (-profile strict) +} -setup { + set res {} + set fn [makeFile {} io-75.8] + set f [open $fn w+] + fconfigure $f -encoding binary + # \xc0\x80 is invalid utf-8 data, but because the eof character \x1A + # appears first, it's not an error. + puts -nonewline $f A\x1a\xc0\x80 + flush $f + seek $f 0 + fconfigure $f -encoding utf-8 -buffering none -eofchar \x1A \ + -translation lf -profile strict +} -body { + set d [read $f] + foreach char [split $d {}] { + lappend res [format %x [scan $char %c]] + } + lappend res [eof $f] + # there should be no error on additional reads + lappend res [read $f] + close $f + set res +} -cleanup { + removeFile io-75.8 +} -result {41 1 {}} + + +test {io-75.8 {invalid input before eof}} { + invalid utf-8 encoding eof handling (-profile strict) +} -setup { set fn [makeFile {} io-75.8] set f [open $fn w+] # This also configures the channel encoding profile as strict. fconfigure $f -encoding binary # \x81 is invalid in utf-8. -eofchar is not detected, because it comes later. @@ -9482,15 +9659,26 @@ flush $f seek $f 0 fconfigure $f -encoding utf-8 -buffering none -eofchar \x1A \ -translation lf -profile strict } -body { - set res [list [catch {read $f} msg data] [eof $f] [dict get $data -data]] + set res [list [catch {read $f} msg data] [eof $f]] + if {[dict exists $data -result read]} { + lappend res [dict get $data -result read] + } else { + lappend res {} + } chan configure $f -encoding iso8859-1 lappend res [read $f 1] chan configure $f -encoding utf-8 - lappend res [catch {read $f 1} msg data] $msg [dict get $data -data] + lappend res [catch {read $f 1} msg data] $msg + if {[dict exists $data -result read]} { + lappend res [dict get $data -result read] + } else { + lappend res {} + } + return $res } -cleanup { close $f removeFile io-75.8 unset res msg data fn f } -match glob -result "1 0 A \x81 1 {error reading \"*\":\ @@ -9507,16 +9695,24 @@ puts -nonewline $chan \x81\x1A flush $chan seek $chan 0 chan configure $chan -encoding utf-8 -profile strict } -body { - list [catch {read $chan 1} msg data] $msg [dict get $data -data] + list [catch {read $chan 1} msg data] $msg [if { + [dict exists $data -result read] + } { + dict get $data -result read + } else { + lindex {} + } + ] } -cleanup { close $chan unset msg chan data } -match glob -result {1 {error reading "*":\ invalid or incomplete multibyte or wide character} {}} + test io-75.9 {unrepresentable character write throws error in strict profile} -setup { set fn [makeFile {} io-75.9] set f [open $fn w+] fconfigure $f -encoding iso8859-1 -profile strict @@ -9530,11 +9726,46 @@ removeFile io-75.9 unset f } -match glob -result [list {A} {error writing "*":\ invalid or incomplete multibyte or wide character}] -test io-75.10 { +apply [list {} { + set template { + test {io-75.10 ${mode}} { + incomplete multibyte encoding read is an error + } -setup { + set res {} + set fn [makeFile {} io-75.10] + set f [open $fn w+] + fconfigure $f -encoding binary + puts -nonewline $f A\xC0 + flush $f + seek $f 0 + fconfigure $f -encoding utf-8 -buffering none {*}${option} + } -body { + set status [catch {read $f} cres copts] + set d [dict get $copts -result read] + close $f + binary scan $d H* hd + lappend res $hd + lappend res $status + lappend res $cres + return $res + } -cleanup { + removeFile io-75.10 + } -match glob -result {41 1 {error reading "file*":\ + invalid or incomplete multibyte or wide character}} + } + # the default encoding mode is not currently strict + #foreach mode {default strict} option {{} {-encodingstrict 1}} + foreach mode {{profile strict}} option {{-profile strict}} { + set test [string map [ + list {${mode}} [list $mode] {${option}} [list $option]] $template] + uplevel $test + } +} [namespace current]] +test {io-75.10 {profile tcl8}} { incomplete multibyte encoding read is not ignored because "binary" sets profile to strict } -setup { set res {} set fn [makeFile {} io-75.10] @@ -9577,30 +9808,70 @@ fconfigure $f -encoding shiftjis -blocking 0 -eofchar {} -translation lf \ -profile strict } -body { set d [read $f] binary scan $d H* hd - lappend hd [catch {set d [read $f]} msg data] $msg [dict exists $data -data] + lappend hd [catch {set d [read $f]} msg data] $msg [ + dict exists $data -result read] } -cleanup { close $f removeFile io-75.11 unset d hd msg data f } -match glob -result {41 1 {error reading "file*":\ invalid or incomplete multibyte or wide character} 0} -test io-75.12 { - invalid utf-8 encoding read is not ignored because setting the encoding to - "binary" also set the profile to strict + +apply [list {} { + set template { + test {io-75.12 ${mode}} { + invalid utf-8 encoding read returns an error + } -setup { + set res {} + set fn [makeFile {} io-75.12] + set f [open $fn w+] + fconfigure $f -encoding binary + puts -nonewline $f A\x81 + flush $f + seek $f 0 + fconfigure $f -encoding utf-8 -buffering none -eofchar {} \ + -translation lf {*}${option} + } -body { + set status [catch {read $f} cres copts] + set d [dict get $copts -result read] + close $f + binary scan $d H* hd + lappend res $hd $status $cres + return $res + } -cleanup { + removeFile io-75.12 + } -match glob -result {41 1 {error reading "file*":\ + invalid or incomplete multibyte or wide character}} + } + + # the default encoding mod is not currently strict + #foreach mode {default strict} option {{} {-encodingstrict 1}} + foreach mode {{profile strict}} option {{-profile strict}} { + set test [string map [ + list {${mode}} [list $mode] {${option}} [list $option]] $template] + uplevel $test + } +} [namespace current]] + + +test {io-75.12 {profile tcl8}} { + invalid utf-8 encoding read, is not ignored because setting the encoding to + "binary" also sets the profile to strict } -setup { set res {} set fn [makeFile {} io-75.12] set f [open $fn w+] fconfigure $f -encoding binary puts -nonewline $f A\x81 flush $f seek $f 0 - fconfigure $f -encoding utf-8 -buffering none -eofchar {} -translation lf + fconfigure $f -encoding utf-8 -buffering none -eofchar {} \ + -translation lf } -body { catch {read $f} errmsg lappend res $errmsg chan configure $f -profile tcl8 seek $f 0 @@ -9613,10 +9884,33 @@ removeFile io-75.12 unset res } -match glob -result {{error reading "file*":\ invalid or incomplete multibyte or wide character} 4181} test io-75.13 { + In blocking mode [read] produces an error and leaves the data succesfully + read so far in the return options dictionary. +} -setup { + set fn [makeFile {} io-75.13] + set f [open $fn w+] + fconfigure $f -encoding binary + # \x81 is invalid in utf-8 + puts -nonewline $f A\x81 + flush $f + seek $f 0 + fconfigure $f -encoding utf-8 -eofchar "" -translation lf -profile strict +} -body { + set status [catch {read $f} cres copts] + set d [dict get $copts -result read] + binary scan $d H* hd + lappend hd $status + lappend hd $cres +} -cleanup { + close $f + removeFile io-75.13 +} -match glob -result {41 1 {error reading "file*":\ + invalid or incomplete multibyte or wide character}} +test io-75.13.nonblocking { In nonblocking mode when there is an encoding error the data that has been successfully read so far is returned first and then the error is returned on the next call to [read]. } -setup { set fn [makeFile {} io-75.13] @@ -9629,11 +9923,11 @@ fconfigure $f -encoding utf-8 -blocking 0 -eofchar {} -translation lf \ -profile strict } -body { set d [read $f] binary scan $d H* hd - lappend hd [catch {read $f} msg data] $msg [dict exists $data -data] + lappend hd [catch {read $f} msg data] $msg [dict exists $data -result read] } -cleanup { close $f removeFile io-75.13 unset d hd msg data f fn } -match glob -result {41 1 {error reading "file*":\ @@ -9653,20 +9947,26 @@ fconfigure $chan -encoding utf-8 -buffering none -eofchar {} \ -translation auto -profile strict } -body { set res [gets $chan] lappend res [gets $chan] - lappend res [catch {gets $chan} msg data] $msg [dict exists $data -data] + lappend res [catch {gets $chan} msg data] $msg [ + if {[dict exists $data -result read]} { + dict get $data -result read + } else { + lindex {} + } + ] chan configure $chan -profile tcl8 lappend res [gets $chan] lappend res [gets $chan] return $res } -cleanup { close $chan unset chan res msg data } -match glob -result {a b 1 {error reading "*":\ - invalid or incomplete multibyte or wide character} 0 cÀ d} + invalid or incomplete multibyte or wide character} {} cÀ d} test io-75.15 { invalid utf-8 encoding strict gets does not hang gets succeeds for the first two lines @@ -9680,12 +9980,12 @@ } -body { #Now try to read it with [gets] fconfigure $chan -encoding utf-8 -profile strict lappend res [gets $chan] lappend res [gets $chan] - lappend res [catch {gets $chan} msg data] $msg [dict exists $data -data] - lappend res [catch {gets $chan} msg data] $msg [dict exists $data -data] + lappend res [catch {gets $chan} msg data] $msg [dict exists $data -result read] + lappend res [catch {gets $chan} msg data] $msg [dict exists $data -result read] chan configure $chan -translation binary set data [read $chan 4] foreach char [split $data {}] { scan $char %c ord lappend res [format %x $ord] @@ -9697,10 +9997,72 @@ } -cleanup { close $chan unset chan res msg data } -match glob -result {hello AB 1 {error reading "*": invalid or incomplete multibyte or wide character}\ 0 1 {error reading "*": invalid or incomplete multibyte or wide character} 0 43 44 c0 40 EF GHI} + +test io-75.14 {invalid utf-8 encoding [gets] continues in non-strict mode after error} -setup { + set res {} + set fn [makeFile {} io-75.14] + set f [open $fn w+] + fconfigure $f -encoding binary + # \xc0 is invalid in utf-8 + puts -nonewline $f a\nb\xc0\nc\n + flush $f + seek $f 0 + fconfigure $f -encoding utf-8 -buffering none -eofchar {} -translation lf -profile strict +} -body { + lappend res [gets $f] + set status [catch {gets $f} cres copts] + lappend res $status $cres + chan configure $f -profile tcl8 + lappend res [gets $f] + lappend res [gets $f] + close $f + return $res +} -cleanup { + removeFile io-75.14 +} -match glob -result {a 1 {error reading "file*":\ + invalid or incomplete multibyte or wide character} bÀ c} + + +test io-75.15 {invalid utf-8 encoding strict gets should not hang} -setup { + set res {} + set fn [makeFile {} io-75.15] + set chan [open $fn w+] + fconfigure $chan -encoding binary + # This is not valid UTF-8 + puts $chan hello\nAB\xc0\x40CD\nEFG + close $chan +} -body { + #Now try to read it with [gets] + set chan [open $fn] + fconfigure $chan -encoding utf-8 -profile strict + lappend res [gets $chan] + set status [catch {gets $chan} cres copts] + lappend res $status $cres + set status [catch {gets $chan} cres copts] + lappend res $status $cres + lappend res [ + if {[dict exists $copts -result read]} { + dict get $copts -result read + } else { + lindex {} + } + ] + + chan configure $chan -encoding binary + foreach char [split [read $chan 2] {}] { + lappend res [format %x [scan $char %c]] + } + return $res +} -cleanup { + close $chan + removeFile io-75.15 +} -match glob -result {hello 1 {error reading "file*":\ + invalid or incomplete multibyte or wide character} 1 {error reading "file*":\ + invalid or incomplete multibyte or wide character} {} 41 42} # ### ### ### ######### ######### ######### @@ -9821,43 +10183,10 @@ } -returnCodes error -cleanup { close $f removeFile dummy } -match glob -result {Tcl_RemoveChannelMode error:\ Bad mode, would make channel inacessible. Channel: "*"} - -# Encoding errors on pipeline -# Ensures fix for exec bug [0f1ddc0df7] does not affect open -# It should still fail unless -profile is explicitly set to replace -test io-77.1 {open pipe encoding mismatch} -setup { - set scriptFile [makeFile { - fconfigure stdout -translation binary - puts -nonewline a\xe9b - flush stdout - } script] -} -cleanup { - close $fd - removeFile $scriptFile -} -body { - set fd [open |[list [info nameofexecutable] $scriptFile r+]] - fconfigure $fd -encoding utf-8 - list [catch {read $fd} result opts] [string match {error reading "*": invalid or incomplete multibyte or wide character} $result] [dict get $opts -errorcode] -} -result [list 1 1 {POSIX EILSEQ {invalid or incomplete multibyte or wide character}}] -test io-77.2 {open pipe encoding mismatch - use replace profile} -setup { - set scriptFile [makeFile { - fconfigure stdout -translation binary - puts -nonewline a\xe9b - flush stdout - } script] -} -cleanup { - close $fd - removeFile $scriptFile -} -body { - set fd [open |[list [info nameofexecutable] $scriptFile r+]] - fconfigure $fd -encoding utf-8 -profile replace - read $fd -} -result a\uFFFDb - # cleanup foreach file [list fooBar longfile script2 output test1 pipe my_script \ test2 test3 cat stdout kyrillic.txt utf8-fcopy.txt utf8-rp.txt] { removeFile $file Index: tests/ioCmd.test ================================================================== --- tests/ioCmd.test +++ tests/ioCmd.test @@ -1,20 +1,26 @@ -# -*- tcl -*- -# Commands covered: open, close, gets, read, puts, seek, tell, eof, flush, -# fblocked, fconfigure, open, channel, fcopy, -# readFile, writeFile, foreachLine -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1994 The Regents of the University of California. # Copyright © 1994-1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: open, close, gets, read, puts, seek, tell, eof, flush, +# fblocked, fconfigure, open, channel, fcopy, +# readFile, writFile, foreachLine +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } @@ -1396,11 +1402,11 @@ rename foo {} set res } -result {{-blocking 1 -buffering full -buffersize 4096 -encoding * -eofchar {} -profile * -translation {auto *}}} test iocmd-25.2 {chan configure, cgetall, no options} -match glob -body { set res {} - proc foo args {oninit cget cgetall; onfinal; track; return ""} + proc foo args {oninit cget cgetall; onfinal; track; return {}} set c [chan create {r w} foo] note [fconfigure $c] close $c rename foo {} set res Index: tests/ioTrans.test ================================================================== --- tests/ioTrans.test +++ tests/ioTrans.test @@ -1,17 +1,23 @@ -# -*- tcl -*- -# Functionality covered: operation of the reflected transformation -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 2007 Andreas Kupries # # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Functionality covered: operation of the reflected transformation +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/iogt.test ================================================================== --- tests/iogt.test +++ tests/iogt.test @@ -1,16 +1,23 @@ -# -*- tcl -*- -# Commands covered: transform, and stacking in general +# Copyright © 2000 Ajuba Solutions. +# Copyright © 2000 Andreas Kupries. # -# This file contains a collection of tests for Giot +# All rights reserved. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: transform, and stacking in general # -# Copyright © 2000 Ajuba Solutions. -# Copyright © 2000 Andreas Kupries. -# All rights reserved. +# This file contains a collection of tests for Giot if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/join.test ================================================================== --- tests/join.test +++ tests/join.test @@ -1,17 +1,24 @@ -# Commands covered: join -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: join +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/lindex.test ================================================================== --- tests/lindex.test +++ tests/lindex.test @@ -1,18 +1,25 @@ -# Commands covered: lindex -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # Copyright © 2001 Kevin B. Kenny. All rights reserved. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: lindex +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/link.test ================================================================== --- tests/link.test +++ tests/link.test @@ -1,17 +1,24 @@ -# Commands covered: none -# -# This file contains a collection of tests for Tcl_LinkVar and related library -# procedures. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: none +# +# This file contains a collection of tests for Tcl_LinkVar and related library +# procedures. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/linsert.test ================================================================== --- tests/linsert.test +++ tests/linsert.test @@ -1,119 +1,154 @@ -# Commands covered: linsert -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: linsert +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. + if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } -catch {unset lis} -catch {rename p ""} - -test linsert-1.1 {linsert command} { - linsert {1 2 3 4 5} 0 a -} {a 1 2 3 4 5} -test linsert-1.2 {linsert command} { - linsert {1 2 3 4 5} 1 a -} {1 a 2 3 4 5} -test linsert-1.3 {linsert command} { - linsert {1 2 3 4 5} 2 a -} {1 2 a 3 4 5} -test linsert-1.4 {linsert command} { - linsert {1 2 3 4 5} 3 a -} {1 2 3 a 4 5} -test linsert-1.5 {linsert command} { - linsert {1 2 3 4 5} 4 a -} {1 2 3 4 a 5} -test linsert-1.6 {linsert command} { - linsert {1 2 3 4 5} 5 a -} {1 2 3 4 5 a} -test linsert-1.7 {linsert command} { - linsert {1 2 3 4 5} 2 one two \{three \$four -} {1 2 one two \{three {$four} 3 4 5} -test linsert-1.8 {linsert command} { - linsert {\{one \$two \{three \ four \ five} 2 a b c -} {\{one {$two} a b c \{three { four} { five}} -test linsert-1.9 {linsert command} { - linsert {{1 2} {3 4} {5 6} {7 8}} 2 {x y} {a b} -} {{1 2} {3 4} {x y} {a b} {5 6} {7 8}} -test linsert-1.10 {linsert command} { - linsert {} 2 a b c -} {a b c} -test linsert-1.11 {linsert command} { - linsert {} 2 {} -} {{}} -test linsert-1.12 {linsert command} { - linsert {a b "c c" d e} 3 1 -} {a b {c c} 1 d e} -test linsert-1.13 {linsert command} { - linsert { a b c d} 0 1 2 -} {1 2 a b c d} -test linsert-1.14 {linsert command} { - linsert {a b c {d e f}} 4 1 2 -} {a b c {d e f} 1 2} -test linsert-1.15 {linsert command} { - linsert {a b c \{\ abc} 4 q r -} {a b c \{\ q r abc} -test linsert-1.16 {linsert command} { - linsert {a b c \{ abc} 4 q r -} {a b c \{ q r abc} -test linsert-1.17 {linsert command} { - linsert {a b c} end q r -} {a b c q r} -test linsert-1.18 {linsert command} { - linsert {a} end q r -} {a q r} -test linsert-1.19 {linsert command} { - linsert {} end q r -} {q r} -test linsert-1.20 {linsert command, use of end-int index} { - linsert {a b c d} end-2 e f -} {a b e f c d} - -test linsert-2.1 {linsert errors} { - list [catch linsert msg] $msg -} {1 {wrong # args: should be "linsert list index ?element ...?"}} -test linsert-2.2 {linsert errors} { - list [catch {linsert a b} msg] $msg -} {1 {bad index "b": must be integer?[+-]integer? or end?[+-]integer?}} -test linsert-2.3 {linsert errors} { - list [catch {linsert a 12x 2} msg] $msg -} {1 {bad index "12x": must be integer?[+-]integer? or end?[+-]integer?}} -test linsert-2.4 {linsert errors} { - list [catch {linsert \{ 12 2} msg] $msg -} {1 {unmatched open brace in list}} -test linsert-2.5 {syntax (TIP 323)} { - linsert {a b c} 0 -} [list a b c] -test linsert-2.6 {syntax (TIP 323)} { - linsert "a\nb\nc" 0 -} [list a b c] - -test linsert-3.1 {linsert won't modify shared argument objects} { - proc p {} { - linsert "a b c" 1 "x y" - return "a b c" - } - p -} "a b c" -test linsert-3.2 {linsert won't modify shared argument objects} { - catch {unset lis} - set lis [format "a \"%s\" c" "b"] - linsert $lis 0 [string length $lis] -} "7 a b c" - -# cleanup -catch {unset lis} -catch {rename p ""} -::tcltest::cleanupTests -return +proc newlist list { + return $list +} + +variable tests { + + foreach map { + { + @mode@ compiled + @linsert@ linsert + } + { + @mode@ uncompiled + @linsert@ {[lindex linsert]} + } + } { + set script [string map $map { + catch {unset lis} + catch {rename p ""} + + test linsert-1.1-@mode@ {linsert command} { + @linsert@ [newlist {1 2 3 4 5}] 0 a + } {a 1 2 3 4 5} + test linsert-1.2-@mode@ {linsert command} { + @linsert@ [newlist {1 2 3 4 5}] 1 a + } {1 a 2 3 4 5} + test linsert-1.3-@mode@ {linsert command} { + @linsert@ [newlist {1 2 3 4 5}] 2 a + } {1 2 a 3 4 5} + test linsert-1.4-@mode@ {linsert command} { + @linsert@ [newlist {1 2 3 4 5}] 3 a + } {1 2 3 a 4 5} + test linsert-1.5-@mode@ {linsert command} { + @linsert@ [newlist {1 2 3 4 5}] 4 a + } {1 2 3 4 a 5} + test linsert-1.6-@mode@ {linsert command} { + @linsert@ [newlist {1 2 3 4 5}] 5 a + } {1 2 3 4 5 a} + test linsert-1.7-@mode@ {linsert command} { + @linsert@ [newlist {1 2 3 4 5}] 2 one two \{three \$four + } {1 2 one two \{three {$four} 3 4 5} + test linsert-1.8-@mode@ {linsert command} { + @linsert@ [newlist {\{one \$two \{three \ four \ five}] 2 a b c + } {\{one {$two} a b c \{three { four} { five}} + test linsert-1.9-@mode@ {linsert command} { + @linsert@ [newlist {{1 2} {3 4} {5 6} {7 8}}] 2 {x y} {a b} + } {{1 2} {3 4} {x y} {a b} {5 6} {7 8}} + test linsert-1.10-@mode@ {linsert command} { + @linsert@ [newlist {}] 2 a b c + } {a b c} + test linsert-1.11-@mode@ {linsert command} { + @linsert@ [newlist {}] 2 {} + } {{}} + test linsert-1.12-@mode@ {linsert command} { + @linsert@ [newlist {a b "c c" d e}] 3 1 + } {a b {c c} 1 d e} + test linsert-1.13-@mode@ {linsert command} { + @linsert@ [newlist { a b c d}] 0 1 2 + } {1 2 a b c d} + test linsert-1.14-@mode@ {linsert command} { + @linsert@ [newlist {a b c {d e f}}] 4 1 2 + } {a b c {d e f} 1 2} + test linsert-1.15-@mode@ {linsert command} { + @linsert@ [newlist {a b c \{\ abc}] 4 q r + } {a b c \{\ q r abc} + test linsert-1.16-@mode@ {linsert command} { + @linsert@ [newlist {a b c \{ abc}] 4 q r + } {a b c \{ q r abc} + test linsert-1.17-@mode@ {linsert command} { + @linsert@ [newlist {a b c}] end q r + } {a b c q r} + test linsert-1.18-@mode@ {linsert command} { + @linsert@ [newlist {a}] end q r + } {a q r} + test linsert-1.19-@mode@ {linsert command} { + @linsert@ [newlist {}] end q r + } {q r} + test linsert-1.20-@mode@ {linsert command, use of end-int index} { + @linsert@ [newlist {a b c d}] end-2 e f + } {a b e f c d} + + test linsert-2.1-@mode@ {linsert errors} { + list [catch @linsert@ [newlist msg]] $msg + } {1 {wrong # args: should be "linsert list index ?element ...?"}} + test linsert-2.2-@mode@ {linsert errors} { + list [catch {@linsert@ [newlist a] b} msg] $msg + } {1 {bad index "b": must be integer?[+-]integer? or end?[+-]integer?}} + test linsert-2.3-@mode@ {linsert errors} { + list [catch {@linsert@ [newlist a] 12x 2} msg] $msg + } {1 {bad index "12x": must be integer?[+-]integer? or end?[+-]integer?}} + test linsert-2.4-@mode@ {linsert errors} { + list [catch {@linsert@ [newlist \{] 12 2} msg] $msg + } {1 {unmatched open brace in list}} + test linsert-2.5-@mode@ {syntax (TIP 323)} { + @linsert@ [newlist {a b c}] 0 + } [list a b c] + test linsert-2.6-@mode@ {syntax (TIP 323)} { + @linsert@ [newlist "a\nb\nc"] 0 + } [list a b c] + + test linsert-3.1-@mode@ {linsert won't modify shared argument objects} { + proc p {} { + set list "a b c" + @linsert@ [newlist $list] 1 "x y" + return "a b c" + } + p + } "a b c" + test linsert-3.2-@mode@ {linsert won't modify shared argument objects} { + catch {unset lis} + set lis [format "a \"%s\" c" "b"] + @linsert@ [newlist $lis] 0 [string length $lis] + } "7 a b c" + + # cleanup + catch {unset lis} + catch {rename p ""} + }] + try $script + } +} + + +if {[info exists ::argv0] && [info script] eq $::argv0} { + try $tests + + ::tcltest::cleanupTests + return +} Index: tests/list.test ================================================================== --- tests/list.test +++ tests/list.test @@ -1,17 +1,24 @@ -# Commands covered: list -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: list +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/listObj.test ================================================================== --- tests/listObj.test +++ tests/listObj.test @@ -1,17 +1,24 @@ +# Copyright © 1995-1996 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Functionality covered: operation of the procedures in tclListObj.c that # implement the Tcl type manager for the list object type. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. -# -# Copyright © 1995-1996 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } @@ -221,15 +228,26 @@ } {a f} test listobj-11.1 {Bug 3598580: Tcl_ListObjReplace refcount management} testobj { testobj bug3598580 } 123 -test listobj-11.2 {Bug e58d7e19e9: Upwards compatibility of TclObjTypeHasProc()} testobj { - set l [testobj buge58d7e19e9 "a x c"] - # Since $l is a V1 objType, it's lengthProc will be accessed, but not its indexProc. - list [llength $l] [lindex $l 2] -} {100 c} + +#this test +test listobj-11.2 { + Bug e58d7e19e9: Upwards compatibility of TclObjTypeHasProc() In the + unchained branch the lookup table is private, so the original version of + this test is not applicable. Instead, this test that TclStringCmp uses + StringIsEmpty if it is available. +} testobj { + set res {} + set l [testobj buge58d7e19e9 2] + # Since $l is a V1 objType, it's lengthProc will be accessed, but not its StringIsEmpty proc. + lappend res [llength $l] [expr {$l eq {}}] + set m [testobj buge58d7e19e9 3] + lappend res [llength $m] [after 1000][expr {$m eq {}}] + return $res +} {100 0 100 1} # Stolen from dict.test proc listobjmemcheck script { set end [lindex [split [memory info] \n] 3 3] for {set i 0} {$i < 5} {incr i} { Index: tests/listRep.test ================================================================== --- tests/listRep.test +++ tests/listRep.test @@ -1,12 +1,19 @@ -# This file contains tests that specifically exercise the internal representation -# of a list. -# # Copyright © 2022 Ashok P. Nadkarni # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains tests that specifically exercise the internal representation +# of a list. # Unlike the other files related to list commands which for the most part do # black box testing focusing on functionality, this file does more of white box # testing to exercise code paths that implement different list representations # (with spans, leading free space etc., shared/unshared etc.) In addition to Index: tests/llength.test ================================================================== --- tests/llength.test +++ tests/llength.test @@ -1,17 +1,24 @@ -# Commands covered: llength -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: llength +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/lmap.test ================================================================== --- tests/lmap.test +++ tests/lmap.test @@ -1,20 +1,27 @@ -# Commands covered: lmap, continue, break -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1997 Sun Microsystems, Inc. # Copyright © 2011 Trevor Davel # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. # +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # RCS: @(#) $Id: $ +# Commands covered: lmap, continue, break +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. + if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/load.test ================================================================== --- tests/load.test +++ tests/load.test @@ -1,16 +1,23 @@ -# Commands covered: load -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1995 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: load +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/lpop.test ================================================================== --- tests/lpop.test +++ tests/lpop.test @@ -1,17 +1,24 @@ -# Commands covered: lpop -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: lpop +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/lrange.test ================================================================== --- tests/lrange.test +++ tests/lrange.test @@ -1,17 +1,24 @@ -# Commands covered: lrange -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: lrange +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/lrepeat.test ================================================================== --- tests/lrepeat.test +++ tests/lrepeat.test @@ -1,15 +1,22 @@ +# Copyright © 2003 Simon Geard. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: lrepeat # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. -# -# Copyright © 2003 Simon Geard. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/lreplace.test ================================================================== --- tests/lreplace.test +++ tests/lreplace.test @@ -1,17 +1,24 @@ -# Commands covered: lreplace -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: lreplace +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/lsearch.test ================================================================== --- tests/lsearch.test +++ tests/lsearch.test @@ -1,17 +1,24 @@ -# Commands covered: lsearch -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: lsearch +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/lseq.test ================================================================== --- tests/lseq.test +++ tests/lseq.test @@ -1,15 +1,22 @@ +# Copyright © 2003 Simon Geard. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: lseq # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. -# -# Copyright © 2003 Simon Geard. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } @@ -328,10 +335,11 @@ test lseq-3.14 {array for shimmer} -constraints arithSeriesShimmerOk -body { array set testarray {a Test for This great Function} set vars [lseq 2] set vars-rep [lindex [tcl::unsupported::representation $vars] 3] + after 1 array for $vars testarray { lappend keys $0 lappend vals $1 } # Since hash order is not guaranteed, have to validate content ignoring order Index: tests/lset.test ================================================================== --- tests/lset.test +++ tests/lset.test @@ -1,481 +1,517 @@ -# This file is a -*- tcl -*- test script +# Copyright © 2001 Kevin B. Kenny. All rights reserved. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. # Commands covered: lset # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. -# -# Copyright © 2001 Kevin B. Kenny. All rights reserved. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } ::tcltest::loadTestedCommands catch [list package require -exact tcl::test [info patchlevel]] -proc failTrace {name1 name2 op} { - error "trace failed" -} - testConstraint testevalex [llength [info commands testevalex]] -set noRead {} -trace add variable noRead read failTrace -set noWrite {a b c} -trace add variable noWrite write failTrace - -test lset-1.1 {lset, not compiled, arg count} testevalex { - list [catch {testevalex lset} msg] $msg -} "1 {wrong \# args: should be \"lset listVar ?index? ?index ...? value\"}" -test lset-1.2 {lset, not compiled, no such var} testevalex { - list [catch {testevalex {lset noSuchVar 0 {}}} msg] $msg -} "1 {can't read \"noSuchVar\": no such variable}" -test lset-1.3 {lset, not compiled, var not readable} testevalex { - list [catch {testevalex {lset noRead 0 {}}} msg] $msg -} "1 {can't read \"noRead\": trace failed}" - -test lset-2.1 {lset, not compiled, 3 args, second arg a plain index} testevalex { - set x {0 1 2} - list [testevalex {lset x 0 3}] $x -} {{3 1 2} {3 1 2}} -test lset-2.2 {lset, not compiled, 3 args, second arg neither index nor list} testevalex { - set x {0 1 2} - list [catch { - testevalex {lset x {{bad}1} 3} - } msg] $msg -} {1 {bad index "{bad}1": must be integer?[+-]integer? or end?[+-]integer?}} - -test lset-3.1 {lset, not compiled, 3 args, data duplicated} testevalex { - set x {0 1 2} - list [testevalex {lset x 0 $x}] $x -} {{{0 1 2} 1 2} {{0 1 2} 1 2}} -test lset-3.2 {lset, not compiled, 3 args, data duplicated} testevalex { - set x {0 1} - set y $x - list [testevalex {lset x 0 2}] $x $y -} {{2 1} {2 1} {0 1}} -test lset-3.3 {lset, not compiled, 3 args, data duplicated} testevalex { - set x {0 1} - set y $x - list [testevalex {lset x 0 $x}] $x $y -} {{{0 1} 1} {{0 1} 1} {0 1}} -test lset-3.4 {lset, not compiled, 3 args, data duplicated} testevalex { - set x {0 1 2} - list [testevalex {lset x [list 0] $x}] $x -} {{{0 1 2} 1 2} {{0 1 2} 1 2}} -test lset-3.5 {lset, not compiled, 3 args, data duplicated} testevalex { - set x {0 1} - set y $x - list [testevalex {lset x [list 0] 2}] $x $y -} {{2 1} {2 1} {0 1}} -test lset-3.6 {lset, not compiled, 3 args, data duplicated} testevalex { - set x {0 1} - set y $x - list [testevalex {lset x [list 0] $x}] $x $y -} {{{0 1} 1} {{0 1} 1} {0 1}} - -test lset-4.1 {lset, not compiled, 3 args, not a list} testevalex { - set a "x \{" - list [catch { - testevalex {lset a [list 0] y} - } msg] $msg -} {1 {unmatched open brace in list}} -test lset-4.2 {lset, not compiled, 3 args, bad index} testevalex { - set a {x y z} - list [catch { - testevalex {lset a [list 2a2] w} - } msg] $msg -} {1 {bad index "2a2": must be integer?[+-]integer? or end?[+-]integer?}} -test lset-4.3 {lset, not compiled, 3 args, index out of range} testevalex { - set a {x y z} - list [catch { - testevalex {lset a [list -1] w} - } msg] $msg -} {1 {index "-1" out of range}} -test lset-4.4 {lset, not compiled, 3 args, index out of range} testevalex { - set a {x y z} - list [catch { - testevalex {lset a [list 4] w} - } msg] $msg -} {1 {index "4" out of range}} -test lset-4.5a {lset, not compiled, 3 args, index out of range} testevalex { - set a {x y z} - list [catch { - testevalex {lset a [list end--2] w} - } msg] $msg -} {1 {index "end--2" out of range}} -test lset-4.5b {lset, not compiled, 3 args, index out of range} testevalex { - set a {x y z} - list [catch { - testevalex {lset a [list end+2] w} - } msg] $msg -} {1 {index "end+2" out of range}} -test lset-4.6 {lset, not compiled, 3 args, index out of range} testevalex { - set a {x y z} - list [catch { - testevalex {lset a [list end-3] w} - } msg] $msg -} {1 {index "end-3" out of range}} -test lset-4.7 {lset, not compiled, 3 args, not a list} testevalex { - set a "x \{" - list [catch { - testevalex {lset a 0 y} - } msg] $msg -} {1 {unmatched open brace in list}} -test lset-4.8 {lset, not compiled, 3 args, bad index} testevalex { - set a {x y z} - list [catch { - testevalex {lset a 2a2 w} - } msg] $msg -} {1 {bad index "2a2": must be integer?[+-]integer? or end?[+-]integer?}} -test lset-4.9 {lset, not compiled, 3 args, index out of range} testevalex { - set a {x y z} - list [catch { - testevalex {lset a -1 w} - } msg] $msg -} {1 {index "-1" out of range}} -test lset-4.10 {lset, not compiled, 3 args, index out of range} testevalex { - set a {x y z} - list [catch { - testevalex {lset a 4 w} - } msg] $msg -} {1 {index "4" out of range}} -test lset-4.11a {lset, not compiled, 3 args, index out of range} testevalex { - set a {x y z} - list [catch { - testevalex {lset a end--2 w} - } msg] $msg -} {1 {index "end--2" out of range}} -test lset-4.11 {lset, not compiled, 3 args, index out of range} testevalex { - set a {x y z} - list [catch { - testevalex {lset a end+2 w} - } msg] $msg -} {1 {index "end+2" out of range}} -test lset-4.12 {lset, not compiled, 3 args, index out of range} testevalex { - set a {x y z} - list [catch { - testevalex {lset a end-3 w} - } msg] $msg -} {1 {index "end-3" out of range}} - -test lset-5.1 {lset, not compiled, 3 args, can't set variable} testevalex { - list [catch { - testevalex {lset noWrite 0 d} - } msg] $msg $noWrite -} {1 {can't set "noWrite": trace failed} {d b c}} -test lset-5.2 {lset, not compiled, 3 args, can't set variable} testevalex { - list [catch { - testevalex {lset noWrite [list 0] d} - } msg] $msg $noWrite -} {1 {can't set "noWrite": trace failed} {d b c}} - -test lset-6.1 {lset, not compiled, 3 args, 1-d list basics} testevalex { - set a {x y z} - list [testevalex {lset a 0 a}] $a -} {{a y z} {a y z}} -test lset-6.2 {lset, not compiled, 3 args, 1-d list basics} testevalex { - set a {x y z} - list [testevalex {lset a [list 0] a}] $a -} {{a y z} {a y z}} -test lset-6.3 {lset, not compiled, 1-d list basics} testevalex { - set a {x y z} - list [testevalex {lset a 2 a}] $a -} {{x y a} {x y a}} -test lset-6.4 {lset, not compiled, 1-d list basics} testevalex { - set a {x y z} - list [testevalex {lset a [list 2] a}] $a -} {{x y a} {x y a}} -test lset-6.5 {lset, not compiled, 1-d list basics} testevalex { - set a {x y z} - list [testevalex {lset a end a}] $a -} {{x y a} {x y a}} -test lset-6.6 {lset, not compiled, 1-d list basics} testevalex { - set a {x y z} - list [testevalex {lset a [list end] a}] $a -} {{x y a} {x y a}} -test lset-6.7 {lset, not compiled, 1-d list basics} testevalex { - set a {x y z} - list [testevalex {lset a end-0 a}] $a -} {{x y a} {x y a}} -test lset-6.8 {lset, not compiled, 1-d list basics} testevalex { - set a {x y z} - list [testevalex {lset a [list end-0] a}] $a -} {{x y a} {x y a}} -test lset-6.9 {lset, not compiled, 1-d list basics} testevalex { - set a {x y z} - list [testevalex {lset a end-2 a}] $a -} {{a y z} {a y z}} -test lset-6.10 {lset, not compiled, 1-d list basics} testevalex { - set a {x y z} - list [testevalex {lset a [list end-2] a}] $a -} {{a y z} {a y z}} - -test lset-7.1 {lset, not compiled, data sharing} testevalex { - set a 0 - list [testevalex {lset a $a {gag me}}] $a -} {{{gag me}} {{gag me}}} -test lset-7.2 {lset, not compiled, data sharing} testevalex { - set a [list 0] - list [testevalex {lset a $a {gag me}}] $a -} {{{gag me}} {{gag me}}} -test lset-7.3 {lset, not compiled, data sharing} testevalex { - set a {x y} - list [testevalex {lset a 0 $a}] $a -} {{{x y} y} {{x y} y}} -test lset-7.4 {lset, not compiled, data sharing} testevalex { - set a {x y} - list [testevalex {lset a [list 0] $a}] $a -} {{{x y} y} {{x y} y}} -test lset-7.5 {lset, not compiled, data sharing} testevalex { - set n 0 - set a {x y} - list [testevalex {lset a $n $n}] $a $n -} {{0 y} {0 y} 0} -test lset-7.6 {lset, not compiled, data sharing} testevalex { - set n [list 0] - set a {x y} - list [testevalex {lset a $n $n}] $a $n -} {{0 y} {0 y} 0} -test lset-7.7 {lset, not compiled, data sharing} testevalex { - set n 0 - set a [list $n $n] - list [testevalex {lset a $n 1}] $a $n -} {{1 0} {1 0} 0} -test lset-7.8 {lset, not compiled, data sharing} testevalex { - set n [list 0] - set a [list $n $n] - list [testevalex {lset a $n 1}] $a $n -} {{1 0} {1 0} 0} -test lset-7.9 {lset, not compiled, data sharing} testevalex { - set a 0 - list [testevalex {lset a $a $a}] $a -} {0 0} -test lset-7.10 {lset, not compiled, data sharing} testevalex { - set a [list 0] - list [testevalex {lset a $a $a}] $a -} {0 0} - -test lset-8.1 {lset, not compiled, malformed sublist} testevalex { - set a [list "a \{" b] - list [catch {testevalex {lset a 0 1 c}} msg] $msg -} {1 {unmatched open brace in list}} -test lset-8.2 {lset, not compiled, malformed sublist} testevalex { - set a [list "a \{" b] - list [catch {testevalex {lset a {0 1} c}} msg] $msg -} {1 {unmatched open brace in list}} -test lset-8.3 {lset, not compiled, bad second index} testevalex { - set a {{b c} {d e}} - list [catch {testevalex {lset a 0 2a2 f}} msg] $msg -} {1 {bad index "2a2": must be integer?[+-]integer? or end?[+-]integer?}} -test lset-8.4 {lset, not compiled, bad second index} testevalex { - set a {{b c} {d e}} - list [catch {testevalex {lset a {0 2a2} f}} msg] $msg -} {1 {bad index "2a2": must be integer?[+-]integer? or end?[+-]integer?}} -test lset-8.5 {lset, not compiled, second index out of range} testevalex { - set a {{b c} {d e} {f g}} - list [catch {testevalex {lset a 2 -1 h}} msg] $msg -} {1 {index "-1" out of range}} -test lset-8.6 {lset, not compiled, second index out of range} testevalex { - set a {{b c} {d e} {f g}} - list [catch {testevalex {lset a {2 -1} h}} msg] $msg -} {1 {index "-1" out of range}} -test lset-8.7 {lset, not compiled, second index out of range} testevalex { - set a {{b c} {d e} {f g}} - list [catch {testevalex {lset a 2 3 h}} msg] $msg -} {1 {index "3" out of range}} -test lset-8.8 {lset, not compiled, second index out of range} testevalex { - set a {{b c} {d e} {f g}} - list [catch {testevalex {lset a {2 3} h}} msg] $msg -} {1 {index "3" out of range}} -test lset-8.9a {lset, not compiled, second index out of range} testevalex { - set a {{b c} {d e} {f g}} - list [catch {testevalex {lset a 2 end--2 h}} msg] $msg -} {1 {index "end--2" out of range}} -test lset-8.9b {lset, not compiled, second index out of range} testevalex { - set a {{b c} {d e} {f g}} - list [catch {testevalex {lset a 2 end+2 h}} msg] $msg -} {1 {index "end+2" out of range}} -test lset-8.10a {lset, not compiled, second index out of range} testevalex { - set a {{b c} {d e} {f g}} - list [catch {testevalex {lset a {2 end--2} h}} msg] $msg -} {1 {index "end--2" out of range}} -test lset-8.10b {lset, not compiled, second index out of range} testevalex { - set a {{b c} {d e} {f g}} - list [catch {testevalex {lset a {2 end+2} h}} msg] $msg -} {1 {index "end+2" out of range}} -test lset-8.11 {lset, not compiled, second index out of range} testevalex { - set a {{b c} {d e} {f g}} - list [catch {testevalex {lset a 2 end-2 h}} msg] $msg -} {1 {index "end-2" out of range}} -test lset-8.12 {lset, not compiled, second index out of range} testevalex { - set a {{b c} {d e} {f g}} - list [catch {testevalex {lset a {2 end-2} h}} msg] $msg -} {1 {index "end-2" out of range}} - -test lset-9.1 {lset, not compiled, entire variable} testevalex { - set a x - list [testevalex {lset a y}] $a -} {y y} -test lset-9.2 {lset, not compiled, entire variable} testevalex { - set a x - list [testevalex {lset a {} y}] $a -} {y y} - -test lset-10.1 {lset, not compiled, shared data} testevalex { - set row {p q} - set a [list $row $row] - list [testevalex {lset a 0 0 x}] $a -} {{{x q} {p q}} {{x q} {p q}}} -test lset-10.2 {lset, not compiled, shared data} testevalex { - set row {p q} - set a [list $row $row] - list [testevalex {lset a {0 0} x}] $a -} {{{x q} {p q}} {{x q} {p q}}} -test lset-10.3 {lset, not compiled, shared data, [Bug 1333036]} testevalex { - set a [list [list p q] [list r s]] - set b $a - list [testevalex {lset b {0 0} x}] $a -} {{{x q} {r s}} {{p q} {r s}}} - -test lset-11.1 {lset, not compiled, 2-d basics} testevalex { - set a {{b c} {d e}} - list [testevalex {lset a 0 0 f}] $a -} {{{f c} {d e}} {{f c} {d e}}} -test lset-11.2 {lset, not compiled, 2-d basics} testevalex { - set a {{b c} {d e}} - list [testevalex {lset a {0 0} f}] $a -} {{{f c} {d e}} {{f c} {d e}}} -test lset-11.3 {lset, not compiled, 2-d basics} testevalex { - set a {{b c} {d e}} - list [testevalex {lset a 0 1 f}] $a -} {{{b f} {d e}} {{b f} {d e}}} -test lset-11.4 {lset, not compiled, 2-d basics} testevalex { - set a {{b c} {d e}} - list [testevalex {lset a {0 1} f}] $a -} {{{b f} {d e}} {{b f} {d e}}} -test lset-11.5 {lset, not compiled, 2-d basics} testevalex { - set a {{b c} {d e}} - list [testevalex {lset a 1 0 f}] $a -} {{{b c} {f e}} {{b c} {f e}}} -test lset-11.6 {lset, not compiled, 2-d basics} testevalex { - set a {{b c} {d e}} - list [testevalex {lset a {1 0} f}] $a -} {{{b c} {f e}} {{b c} {f e}}} -test lset-11.7 {lset, not compiled, 2-d basics} testevalex { - set a {{b c} {d e}} - list [testevalex {lset a 1 1 f}] $a -} {{{b c} {d f}} {{b c} {d f}}} -test lset-11.8 {lset, not compiled, 2-d basics} testevalex { - set a {{b c} {d e}} - list [testevalex {lset a {1 1} f}] $a -} {{{b c} {d f}} {{b c} {d f}}} - -test lset-12.0 {lset, not compiled, typical sharing pattern} testevalex { - set zero 0 - set row [list $zero $zero $zero $zero] - set ident [list $row $row $row $row] - for { set i 0 } { $i < 4 } { incr i } { - testevalex {lset ident $i $i 1} - } - set ident -} {{1 0 0 0} {0 1 0 0} {0 0 1 0} {0 0 0 1}} - -test lset-13.0 {lset, not compiled, shimmering hell} testevalex { - set a 0 - list [testevalex {lset a $a $a $a $a {gag me}}] $a -} {{{{{{gag me}}}}} {{{{{gag me}}}}}} -test lset-13.1 {lset, not compiled, shimmering hell} testevalex { - set a [list 0] - list [testevalex {lset a $a $a $a $a {gag me}}] $a -} {{{{{{gag me}}}}} {{{{{gag me}}}}}} -test lset-13.2 {lset, not compiled, shimmering hell} testevalex { - set a [list 0 0 0 0] - list [testevalex {lset a $a {gag me}}] $a -} {{{{{{gag me}}}} 0 0 0} {{{{{gag me}}}} 0 0 0}} - -test lset-14.1 {lset, not compiled, list args, is string rep preserved?} testevalex { - set a { { 1 2 } { 3 4 } } - catch { testevalex {lset a {1 5} 5} } - list $a [lindex $a 1] -} "{ { 1 2 } { 3 4 } } { 3 4 }" -test lset-14.2 {lset, not compiled, flat args, is string rep preserved?} testevalex { - set a { { 1 2 } { 3 4 } } - catch { testevalex {lset a 1 5 5} } - list $a [lindex $a 1] -} "{ { 1 2 } { 3 4 } } { 3 4 }" - -testConstraint testobj [llength [info commands testobj]] -test lset-15.1 {lset: shared internalrep [Bug 1677512]} -setup { - teststringobj set 1 {{1 2} 3} - testobj convert 1 list - testobj duplicate 1 2 - variable x [teststringobj get 1] - variable y [teststringobj get 2] - testobj freeallvars - set l [list $y z] - unset y -} -constraints testobj -body { - lset l 0 0 0 5 - lindex $x 0 0 -} -cleanup { - unset -nocomplain x l -} -result 1 - -test lset-16.1 {lset - grow a variable} testevalex { - set x {} - testevalex {lset x 0 {test 1}} - testevalex {lset x 1 {test 2}} - set x -} {{test 1} {test 2}} -test lset-16.2 {lset - multiple created sublists} testevalex { - set x {} - testevalex {lset x 0 0 {test 1}} -} {{{test 1}}} -test lset-16.3 {lset - sublists 3 deep} testevalex { - set x {} - testevalex {lset x 0 0 0 {test 1}} -} {{{{test 1}}}} -test lset-16.4 {lset - append to inner list} testevalex { - set x {test 1} - testevalex {lset x 1 1 2} - testevalex {lset x 1 2 3} - testevalex {lset x 1 2 1 4} -} {test {1 2 {3 4}}} - -test lset-16.5 {lset - grow a variable} testevalex { - set x {} - testevalex {lset x end+1 {test 1}} - testevalex {lset x end+1 {test 2}} - set x -} {{test 1} {test 2}} -test lset-16.6 {lset - multiple created sublists} testevalex { - set x {} - testevalex {lset x end+1 end+1 {test 1}} -} {{{test 1}}} -test lset-16.7 {lset - sublists 3 deep} testevalex { - set x {} - testevalex {lset x end+1 end+1 end+1 {test 1}} -} {{{{test 1}}}} -test lset-16.8 {lset - append to inner list} testevalex { - set x {test 1} - testevalex {lset x end end+1 2} - testevalex {lset x end end+1 3} - testevalex {lset x end end end+1 4} -} {test {1 2 {3 4}}} - -catch {unset noRead} -catch {unset noWrite} -catch {rename failTrace {}} -catch {unset ::x} -catch {unset ::y} +proc newlist list { + return $list +} + + +variable tests { + foreach map { + { + @mode@ compiled + @lset@ lset + } + { + @mode@ uncompiled + @lset@ {[lindex lset]} + } + } { + set script [string map $map { + + proc failTrace {name1 name2 op} { + error "trace failed" + } + + set noRead {} + trace add variable noRead read failTrace + set noWrite {a b c} + trace add variable noWrite write failTrace + + test lset-1.1-@mode@ {lset, not compiled, arg count} testevalex { + list [catch {testevalex @lset@} msg] $msg + } "1 {wrong \# args: should be \"lset listVar ?index? ?index ...? value\"}" + test lset-1.2-@mode@ {lset, not compiled, no such var} testevalex { + list [catch {testevalex {@lset@ noSuchVar 0 {}}} msg] $msg + } "1 {can't read \"noSuchVar\": no such variable}" + test lset-1.3-@mode@ {lset, not compiled, var not readable} testevalex { + list [catch {testevalex {@lset@ noRead 0 {}}} msg] $msg + } "1 {can't read \"noRead\": trace failed}" + + test lset-2.1-@mode@ {lset, not compiled, 3 args, second arg a plain index} testevalex { + set x {0 1 2} + list [testevalex {@lset@ x 0 3}] $x + } {{3 1 2} {3 1 2}} + test lset-2.2-@mode@ {lset, not compiled, 3 args, second arg neither index nor list} testevalex { + set x {0 1 2} + list [catch { + testevalex {@lset@ x {{bad}1} 3} + } msg] $msg + } {1 {bad index "{bad}1": must be integer?[+-]integer? or end?[+-]integer?}} + + test lset-3.1-@mode@ {lset, not compiled, 3 args, data duplicated} testevalex { + set x {0 1 2} + list [testevalex {@lset@ x 0 $x}] $x + } {{{0 1 2} 1 2} {{0 1 2} 1 2}} + test lset-3.2-@mode@ {lset, not compiled, 3 args, data duplicated} testevalex { + set x {0 1} + set y $x + list [testevalex {@lset@ x 0 2}] $x $y + } {{2 1} {2 1} {0 1}} + test lset-3.3-@mode@ {lset, not compiled, 3 args, data duplicated} testevalex { + set x {0 1} + set y $x + list [testevalex {@lset@ x 0 $x}] $x $y + } {{{0 1} 1} {{0 1} 1} {0 1}} + test lset-3.4-@mode@ {lset, not compiled, 3 args, data duplicated} testevalex { + set x {0 1 2} + list [testevalex {@lset@ x [list 0] $x}] $x + } {{{0 1 2} 1 2} {{0 1 2} 1 2}} + test lset-3.5-@mode@ {lset, not compiled, 3 args, data duplicated} testevalex { + set x {0 1} + set y $x + list [testevalex {@lset@ x [list 0] 2}] $x $y + } {{2 1} {2 1} {0 1}} + test lset-3.6-@mode@ {lset, not compiled, 3 args, data duplicated} testevalex { + set x {0 1} + set y $x + list [testevalex {@lset@ x [list 0] $x}] $x $y + } {{{0 1} 1} {{0 1} 1} {0 1}} + + test lset-4.1-@mode@ {lset, not compiled, 3 args, not a list} testevalex { + set a "x \{" + list [catch { + testevalex {@lset@ a [list 0] y} + } msg] $msg + } {1 {unmatched open brace in list}} + test lset-4.2-@mode@ {lset, not compiled, 3 args, bad index} testevalex { + set a {x y z} + list [catch { + testevalex {@lset@ a [list 2a2] w} + } msg] $msg + } {1 {bad index "2a2": must be integer?[+-]integer? or end?[+-]integer?}} + test lset-4.3-@mode@ {lset, not compiled, 3 args, index out of range} testevalex { + set a {x y z} + list [catch { + testevalex {@lset@ a [list -1] w} + } msg] $msg + } {1 {index "-1" out of range}} + test lset-4.4-@mode@ {lset, not compiled, 3 args, index out of range} testevalex { + set a {x y z} + list [catch { + testevalex {@lset@ a [list 4] w} + } msg] $msg + } {1 {index "4" out of range}} + test lset-4.5a-@mode@ {lset, not compiled, 3 args, index out of range} testevalex { + set a {x y z} + list [catch { + testevalex {@lset@ a [list end--2] w} + } msg] $msg + } {1 {index "end--2" out of range}} + test lset-4.5b-@mode@ {lset, not compiled, 3 args, index out of range} testevalex { + set a {x y z} + list [catch { + testevalex {@lset@ a [list end+2] w} + } msg] $msg + } {1 {index "end+2" out of range}} + test lset-4.6-@mode@ {lset, not compiled, 3 args, index out of range} testevalex { + set a {x y z} + list [catch { + testevalex {@lset@ a [list end-3] w} + } msg] $msg + } {1 {index "end-3" out of range}} + test lset-4.7-@mode@ {lset, not compiled, 3 args, not a list} testevalex { + set a "x \{" + list [catch { + testevalex {@lset@ a 0 y} + } msg] $msg + } {1 {unmatched open brace in list}} + test lset-4.8-@mode@ {lset, not compiled, 3 args, bad index} testevalex { + set a {x y z} + list [catch { + testevalex {@lset@ a 2a2 w} + } msg] $msg + } {1 {bad index "2a2": must be integer?[+-]integer? or end?[+-]integer?}} + test lset-4.9-@mode@ {lset, not compiled, 3 args, index out of range} testevalex { + set a {x y z} + list [catch { + testevalex {@lset@ a -1 w} + } msg] $msg + } {1 {index "-1" out of range}} + test lset-4.10-@mode@ {lset, not compiled, 3 args, index out of range} testevalex { + set a {x y z} + list [catch { + testevalex {@lset@ a 4 w} + } msg] $msg + } {1 {index "4" out of range}} + test lset-4.11a-@mode@ {lset, not compiled, 3 args, index out of range} testevalex { + set a {x y z} + list [catch { + testevalex {@lset@ a end--2 w} + } msg] $msg + } {1 {index "end--2" out of range}} + test lset-4.11-@mode@ {lset, not compiled, 3 args, index out of range} testevalex { + set a {x y z} + list [catch { + testevalex {@lset@ a end+2 w} + } msg] $msg + } {1 {index "end+2" out of range}} + test lset-4.12-@mode@ {lset, not compiled, 3 args, index out of range} testevalex { + set a {x y z} + list [catch { + testevalex {@lset@ a end-3 w} + } msg] $msg + } {1 {index "end-3" out of range}} + + test lset-5.1-@mode@ {lset, not compiled, 3 args, can't set variable} testevalex { + list [catch { + testevalex {@lset@ noWrite 0 d} + } msg] $msg $noWrite + } {1 {can't set "noWrite": trace failed} {d b c}} + test lset-5.2-@mode@ {lset, not compiled, 3 args, can't set variable} testevalex { + list [catch { + testevalex {@lset@ noWrite [list 0] d} + } msg] $msg $noWrite + } {1 {can't set "noWrite": trace failed} {d b c}} + + test lset-6.1-@mode@ {lset, not compiled, 3 args, 1-d list basics} testevalex { + set a {x y z} + list [testevalex {@lset@ a 0 a}] $a + } {{a y z} {a y z}} + test lset-6.2-@mode@ {lset, not compiled, 3 args, 1-d list basics} testevalex { + set a {x y z} + list [testevalex {@lset@ a [list 0] a}] $a + } {{a y z} {a y z}} + test lset-6.3-@mode@ {lset, not compiled, 1-d list basics} testevalex { + set a {x y z} + list [testevalex {@lset@ a 2 a}] $a + } {{x y a} {x y a}} + test lset-6.4-@mode@ {lset, not compiled, 1-d list basics} testevalex { + set a {x y z} + list [testevalex {@lset@ a [list 2] a}] $a + } {{x y a} {x y a}} + test lset-6.5-@mode@ {lset, not compiled, 1-d list basics} testevalex { + set a {x y z} + list [testevalex {@lset@ a end a}] $a + } {{x y a} {x y a}} + test lset-6.6-@mode@ {lset, not compiled, 1-d list basics} testevalex { + set a {x y z} + list [testevalex {@lset@ a [list end] a}] $a + } {{x y a} {x y a}} + test lset-6.7-@mode@ {lset, not compiled, 1-d list basics} testevalex { + set a {x y z} + list [testevalex {@lset@ a end-0 a}] $a + } {{x y a} {x y a}} + test lset-6.8-@mode@ {lset, not compiled, 1-d list basics} testevalex { + set a {x y z} + list [testevalex {@lset@ a [list end-0] a}] $a + } {{x y a} {x y a}} + test lset-6.9-@mode@ {lset, not compiled, 1-d list basics} testevalex { + set a {x y z} + list [testevalex {@lset@ a end-2 a}] $a + } {{a y z} {a y z}} + test lset-6.10-@mode@ {lset, not compiled, 1-d list basics} testevalex { + set a {x y z} + list [testevalex {@lset@ a [list end-2] a}] $a + } {{a y z} {a y z}} + + test lset-7.1-@mode@ {lset, not compiled, data sharing} testevalex { + set a 0 + list [testevalex {@lset@ a $a {gag me}}] $a + } {{{gag me}} {{gag me}}} + test lset-7.2-@mode@ {lset, not compiled, data sharing} testevalex { + set a [list 0] + list [testevalex {@lset@ a $a {gag me}}] $a + } {{{gag me}} {{gag me}}} + test lset-7.3-@mode@ {lset, not compiled, data sharing} testevalex { + set a {x y} + list [testevalex {@lset@ a 0 $a}] $a + } {{{x y} y} {{x y} y}} + test lset-7.4-@mode@ {lset, not compiled, data sharing} testevalex { + set a {x y} + list [testevalex {@lset@ a [list 0] $a}] $a + } {{{x y} y} {{x y} y}} + test lset-7.5-@mode@ {lset, not compiled, data sharing} testevalex { + set n 0 + set a {x y} + list [testevalex {@lset@ a $n $n}] $a $n + } {{0 y} {0 y} 0} + test lset-7.6-@mode@ {lset, not compiled, data sharing} testevalex { + set n [list 0] + set a {x y} + list [testevalex {@lset@ a $n $n}] $a $n + } {{0 y} {0 y} 0} + test lset-7.7-@mode@ {lset, not compiled, data sharing} testevalex { + set n 0 + set a [list $n $n] + list [testevalex {@lset@ a $n 1}] $a $n + } {{1 0} {1 0} 0} + test lset-7.8-@mode@ {lset, not compiled, data sharing} testevalex { + set n [list 0] + set a [list $n $n] + list [testevalex {@lset@ a $n 1}] $a $n + } {{1 0} {1 0} 0} + test lset-7.9-@mode@ {lset, not compiled, data sharing} testevalex { + set a 0 + list [testevalex {@lset@ a $a $a}] $a + } {0 0} + test lset-7.10-@mode@ {lset, not compiled, data sharing} testevalex { + set a [list 0] + list [testevalex {@lset@ a $a $a}] $a + } {0 0} + + test lset-8.1-@mode@ {lset, not compiled, malformed sublist} testevalex { + set a [list "a \{" b] + list [catch {testevalex {@lset@ a 0 1 c}} msg] $msg + } {1 {unmatched open brace in list}} + test lset-8.2-@mode@ {lset, not compiled, malformed sublist} testevalex { + set a [list "a \{" b] + list [catch {testevalex {@lset@ a {0 1} c}} msg] $msg + } {1 {unmatched open brace in list}} + test lset-8.3-@mode@ {lset, not compiled, bad second index} testevalex { + set a {{b c} {d e}} + list [catch {testevalex {@lset@ a 0 2a2 f}} msg] $msg + } {1 {bad index "2a2": must be integer?[+-]integer? or end?[+-]integer?}} + test lset-8.4-@mode@ {lset, not compiled, bad second index} testevalex { + set a {{b c} {d e}} + list [catch {testevalex {@lset@ a {0 2a2} f}} msg] $msg + } {1 {bad index "2a2": must be integer?[+-]integer? or end?[+-]integer?}} + test lset-8.5-@mode@ {lset, not compiled, second index out of range} testevalex { + set a {{b c} {d e} {f g}} + list [catch {testevalex {@lset@ a 2 -1 h}} msg] $msg + } {1 {index "-1" out of range}} + test lset-8.6-@mode@ {lset, not compiled, second index out of range} testevalex { + set a {{b c} {d e} {f g}} + list [catch {testevalex {@lset@ a {2 -1} h}} msg] $msg + } {1 {index "-1" out of range}} + test lset-8.7-@mode@ {lset, not compiled, second index out of range} testevalex { + set a {{b c} {d e} {f g}} + list [catch {testevalex {@lset@ a 2 3 h}} msg] $msg + } {1 {index "3" out of range}} + test lset-8.8-@mode@ {lset, not compiled, second index out of range} testevalex { + set a {{b c} {d e} {f g}} + list [catch {testevalex {@lset@ a {2 3} h}} msg] $msg + } {1 {index "3" out of range}} + test lset-8.9a-@mode@ {lset, not compiled, second index out of range} testevalex { + set a {{b c} {d e} {f g}} + list [catch {testevalex {@lset@ a 2 end--2 h}} msg] $msg + } {1 {index "end--2" out of range}} + test lset-8.9b-@mode@ {lset, not compiled, second index out of range} testevalex { + set a {{b c} {d e} {f g}} + list [catch {testevalex {@lset@ a 2 end+2 h}} msg] $msg + } {1 {index "end+2" out of range}} + test lset-8.10a-@mode@ {lset, not compiled, second index out of range} testevalex { + set a {{b c} {d e} {f g}} + list [catch {testevalex {@lset@ a {2 end--2} h}} msg] $msg + } {1 {index "end--2" out of range}} + test lset-8.10b-@mode@ {lset, not compiled, second index out of range} testevalex { + set a {{b c} {d e} {f g}} + list [catch {testevalex {@lset@ a {2 end+2} h}} msg] $msg + } {1 {index "end+2" out of range}} + test lset-8.11-@mode@ {lset, not compiled, second index out of range} testevalex { + set a {{b c} {d e} {f g}} + list [catch {testevalex {@lset@ a 2 end-2 h}} msg] $msg + } {1 {index "end-2" out of range}} + test lset-8.12-@mode@ {lset, not compiled, second index out of range} testevalex { + set a {{b c} {d e} {f g}} + list [catch {testevalex {@lset@ a {2 end-2} h}} msg] $msg + } {1 {index "end-2" out of range}} + + test lset-9.1-@mode@ {lset, not compiled, entire variable} testevalex { + set a x + list [testevalex {@lset@ a y}] $a + } {y y} + test lset-9.2-@mode@ {lset, not compiled, entire variable} testevalex { + set a x + list [testevalex {@lset@ a {} y}] $a + } {y y} + + test lset-10.1-@mode@ {lset, not compiled, shared data} testevalex { + set row {p q} + set a [list $row $row] + list [testevalex {@lset@ a 0 0 x}] $a + } {{{x q} {p q}} {{x q} {p q}}} + test lset-10.2-@mode@ {lset, not compiled, shared data} testevalex { + set row {p q} + set a [list $row $row] + list [testevalex {@lset@ a {0 0} x}] $a + } {{{x q} {p q}} {{x q} {p q}}} + test lset-10.3-@mode@ {lset, not compiled, shared data, [Bug 1333036]} testevalex { + set a [list [list p q] [list r s]] + set b $a + list [testevalex {@lset@ b {0 0} x}] $a + } {{{x q} {r s}} {{p q} {r s}}} + + test lset-11.1-@mode@ {lset, not compiled, 2-d basics} testevalex { + set a {{b c} {d e}} + list [testevalex {@lset@ a 0 0 f}] $a + } {{{f c} {d e}} {{f c} {d e}}} + test lset-11.2-@mode@ {lset, not compiled, 2-d basics} testevalex { + set a {{b c} {d e}} + list [testevalex {@lset@ a {0 0} f}] $a + } {{{f c} {d e}} {{f c} {d e}}} + test lset-11.3-@mode@ {lset, not compiled, 2-d basics} testevalex { + set a {{b c} {d e}} + list [testevalex {@lset@ a 0 1 f}] $a + } {{{b f} {d e}} {{b f} {d e}}} + test lset-11.4-@mode@ {lset, not compiled, 2-d basics} testevalex { + set a {{b c} {d e}} + list [testevalex {@lset@ a {0 1} f}] $a + } {{{b f} {d e}} {{b f} {d e}}} + test lset-11.5-@mode@ {lset, not compiled, 2-d basics} testevalex { + set a {{b c} {d e}} + list [testevalex {@lset@ a 1 0 f}] $a + } {{{b c} {f e}} {{b c} {f e}}} + test lset-11.6-@mode@ {lset, not compiled, 2-d basics} testevalex { + set a {{b c} {d e}} + list [testevalex {@lset@ a {1 0} f}] $a + } {{{b c} {f e}} {{b c} {f e}}} + test lset-11.7-@mode@ {lset, not compiled, 2-d basics} testevalex { + set a {{b c} {d e}} + list [testevalex {@lset@ a 1 1 f}] $a + } {{{b c} {d f}} {{b c} {d f}}} + test lset-11.8-@mode@ {lset, not compiled, 2-d basics} testevalex { + set a {{b c} {d e}} + list [testevalex {@lset@ a {1 1} f}] $a + } {{{b c} {d f}} {{b c} {d f}}} + + test lset-12.0-@mode@ {lset, not compiled, typical sharing pattern} testevalex { + set zero 0 + set row [list $zero $zero $zero $zero] + set ident [list $row $row $row $row] + for { set i 0 } { $i < 4 } { incr i } { + testevalex {@lset@ ident $i $i 1} + } + set ident + } {{1 0 0 0} {0 1 0 0} {0 0 1 0} {0 0 0 1}} + + test lset-13.0-@mode@ {lset, not compiled, shimmering hell} testevalex { + set a 0 + list [testevalex {@lset@ a $a $a $a $a {gag me}}] $a + } {{{{{{gag me}}}}} {{{{{gag me}}}}}} + test lset-13.1-@mode@ {lset, not compiled, shimmering hell} testevalex { + set a [list 0] + list [testevalex {@lset@ a $a $a $a $a {gag me}}] $a + } {{{{{{gag me}}}}} {{{{{gag me}}}}}} + test lset-13.2-@mode@ {lset, not compiled, shimmering hell} testevalex { + set a [list 0 0 0 0] + list [testevalex {@lset@ a $a {gag me}}] $a + } {{{{{{gag me}}}} 0 0 0} {{{{{gag me}}}} 0 0 0}} + + test lset-14.1-@mode@ {lset, not compiled, list args, is string rep preserved?} testevalex { + set a { { 1 2 } { 3 4 } } + catch { testevalex {@lset@ a {1 5} 5} } + list $a [lindex $a 1] + } "{ { 1 2 } { 3 4 } } { 3 4 }" + test lset-14.2-@mode@ {lset, not compiled, flat args, is string rep preserved?} testevalex { + set a { { 1 2 } { 3 4 } } + catch { testevalex {@lset@ a 1 5 5} } + list $a [lindex $a 1] + } "{ { 1 2 } { 3 4 } } { 3 4 }" + + testConstraint testobj [llength [info commands testobj]] + test lset-15.1-@mode@ {lset: shared internalrep [Bug 1677512]} -setup { + teststringobj set 1 {{1 2} 3} + testobj convert 1 list + testobj duplicate 1 2 + variable x [teststringobj get 1] + variable y [teststringobj get 2] + testobj freeallvars + set l [list $y z] + unset y + } -constraints testobj -body { + @lset@ l 0 0 0 5 + lindex $x 0 0 + } -cleanup { + unset -nocomplain x l + } -result 1 + + test lset-16.1-@mode@ {lset - grow a variable} testevalex { + set x {} + testevalex {@lset@ x 0 {test 1}} + testevalex {lset x 1 {test 2}} + set x + } {{test 1} {test 2}} + test lset-16.2-@mode@ {@lset@ - multiple created sublists} testevalex { + set x {} + testevalex {lset x 0 0 {test 1}} + } {{{test 1}}} + test lset-16.3-@mode@ {@lset@ - sublists 3 deep} testevalex { + set x {} + testevalex {lset x 0 0 0 {test 1}} + } {{{{test 1}}}} + test lset-16.4-@mode@ {@lset@ - append to inner list} testevalex { + set x {test 1} + testevalex {@lset@ x 1 1 2} + testevalex {@lset@ x 1 2 3} + testevalex {@lset@ x 1 2 1 4} + } {test {1 2 {3 4}}} + + test lset-16.5-@mode@ {lset - grow a variable} testevalex { + set x {} + testevalex {@lset@ x end+1 {test 1}} + testevalex {@lset@ x end+1 {test 2}} + set x + } {{test 1} {test 2}} + test lset-16.6-@mode@ {lset - multiple created sublists} testevalex { + set x {} + testevalex {@lset@ x end+1 end+1 {test 1}} + } {{{test 1}}} + test lset-16.7-@mode@ {lset - sublists 3 deep} testevalex { + set x {} + testevalex {@lset@ x end+1 end+1 end+1 {test 1}} + } {{{{test 1}}}} + test lset-16.8-@mode@ {lset - append to inner list} testevalex { + set x {test 1} + testevalex {@lset@ x end end+1 2} + testevalex {@lset@ x end end+1 3} + testevalex {@lset@ x end end end+1 4} + } {test {1 2 {3 4}}} + + catch {unset noRead} + catch {unset noWrite} + catch {rename failTrace {}} + catch {unset ::x} + catch {unset ::y} + }] + try $script + } +} + +try $tests +if {[info exists ::argv0] && [info script] eq $::argv0} { + try $tests + + ::tcltest::cleanupTests + return +} + # cleanup ::tcltest::cleanupTests return Index: tests/lsetComp.test ================================================================== --- tests/lsetComp.test +++ tests/lsetComp.test @@ -1,17 +1,22 @@ -# This file is a -*- tcl -*- test script +# Copyright © 2001 Kevin B. Kenny. All rights reserved. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. # Commands covered: lset # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. -# -# Copyright © 2001 Kevin B. Kenny. All rights reserved. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/macOSXFCmd.test ================================================================== --- tests/macOSXFCmd.test +++ tests/macOSXFCmd.test @@ -1,15 +1,22 @@ +# Copyright © 2003 Tcl Core Team. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file tests the tclMacOSXFCmd.c file. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. -# -# Copyright © 2003 Tcl Core Team. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/macOSXLoad.test ================================================================== --- tests/macOSXLoad.test +++ tests/macOSXLoad.test @@ -1,16 +1,23 @@ -# Commands covered: load unload -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1995 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: load unload +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/main.test ================================================================== --- tests/main.test +++ tests/main.test @@ -1,5 +1,12 @@ +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file contains a collection of tests for generic/tclMain.c. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* Index: tests/mathop.test ================================================================== --- tests/mathop.test +++ tests/mathop.test @@ -1,16 +1,23 @@ -# Commands covered: ::tcl::mathop::... -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 2006 Donal K. Fellows # Copyright © 2006 Peter Spjuth # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: ::tcl::mathop::... +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/misc.test ================================================================== --- tests/misc.test +++ tests/misc.test @@ -1,18 +1,25 @@ -# Commands covered: various -# -# This file contains a collection of miscellaneous Tcl tests that -# don't fit naturally in any of the other test files. Many of these -# tests are pathological cases that caused bugs in earlier Tcl -# releases. -# # Copyright © 1992-1993 The Regents of the University of California. # Copyright © 1994-1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: various +# +# This file contains a collection of miscellaneous Tcl tests that +# don't fit naturally in any of the other test files. Many of these +# tests are pathological cases that caused bugs in earlier Tcl +# releases. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/msgcat.test ================================================================== --- tests/msgcat.test +++ tests/msgcat.test @@ -1,16 +1,23 @@ -# This file contains a collection of tests for the msgcat package. -# Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1998 Mark Harrison. # Copyright © 1998-1999 Scriptics Corporation. # Contributions from Don Porter, NIST, 2002. (not subject to US copyright) # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. # +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains a collection of tests for the msgcat package. +# Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. + # Note that after running these tests, entries will be left behind in the # message catalogs for locales foo, foo_BAR, and foo_BAR_baz. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 Index: tests/namespace-old.test ================================================================== --- tests/namespace-old.test +++ tests/namespace-old.test @@ -1,20 +1,27 @@ +# Copyright © 1997 Sun Microsystems, Inc. +# Copyright © 1997 Lucent Technologies +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Functionality covered: this file contains slightly modified versions of # the original tests written by Mike McLennan of Lucent Technologies for # the procedures in tclNamesp.c that implement Tcl's basic support for # namespaces. Other namespace-related tests appear in namespace.test # and variable.test. # # Sourcing this file into Tcl runs the tests and generates output for # errors. No output means no errors were found. -# -# Copyright © 1997 Sun Microsystems, Inc. -# Copyright © 1997 Lucent Technologies -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/namespace.test ================================================================== --- tests/namespace.test +++ tests/namespace.test @@ -1,18 +1,25 @@ +# Copyright © 1997 Sun Microsystems, Inc. +# Copyright © 1998-2000 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Functionality covered: this file contains a collection of tests for the # procedures in tclNamesp.c and tclEnsemble.c that implement Tcl's basic # support for namespaces. Other namespace-related tests appear in # variable.test. # # Sourcing this file into Tcl runs the tests and generates output for errors. # No output means no errors were found. -# -# Copyright © 1997 Sun Microsystems, Inc. -# Copyright © 1998-2000 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/notify.test ================================================================== --- tests/notify.test +++ tests/notify.test @@ -1,19 +1,24 @@ -# -*- tcl -*- +# Copyright © 2003 Kevin B. Kenny. All rights reserved. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. # +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # notify.test -- # # This file tests several functions in the file, 'generic/tclNotify.c'. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. -# -# Copyright © 2003 Kevin B. Kenny. All rights reserved. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/nre.test ================================================================== --- tests/nre.test +++ tests/nre.test @@ -1,15 +1,22 @@ +# Copyright © 2008 Miguel Sofer. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: proc, apply, [interp alias], [namespce import] # # This file contains a collection of tests for the non-recursive executor that # avoids recursive calls to TEBC. Only the NRE behaviour is tested here, the # actual command functionality is tested in the specific test file. -# -# Copyright © 2008 Miguel Sofer. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/obj.test ================================================================== --- tests/obj.test +++ tests/obj.test @@ -1,17 +1,24 @@ +# Copyright © 1995-1996 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Functionality covered: this file contains a collection of tests for the # procedures in tclObj.c that implement Tcl's basic type support and the # type managers for the types boolean, double, and integer. # # Sourcing this file into Tcl runs the tests and generates output for # errors. No output means no errors were found. -# -# Copyright © 1995-1996 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } ADDED tests/objInterface.test Index: tests/objInterface.test ================================================================== --- /dev/null +++ tests/objInterface.test @@ -0,0 +1,461 @@ +# Copyright © 2021 Nathan Coulter +# +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + + +if {"::tcltest" ni [namespace children]} { + package require tcltest 2.5 + namespace import -force ::tcltest::* +} + +::tcltest::loadTestedCommands +testConstraint testindexhex [expr {[namespace which testindexhex] ne {}}] +testConstraint testlistinteger [expr {[namespace which testlistinteger] ne {}}] + +apply [list {} { + variable list + variable res + + foreach map { + { + @mode@ compiled + @lappend@ lappend + @lindex@ lindex + @linsert@ linsert + @llength@ length + @lrange@ lrange + @lreplace@ lreplace + } + { + @mode@ uncompiled + @lappend@ {[lindex lappend]} + @lindex@ {[lindex lindex]} + @linsert@ {[lindex linsert]} + @llength@ {[lindex llength]} + @lrange@ {[lindex lrange]} + @lreplace@ {[lindex lreplace]} + } + } { + set script [string map $map { + proc data1 iterations { + for {set i 0} {$i < $iterations} {incr i} { + @lappend@ expected [format %x $i] + } + return $expected + } + + + test {indexhex llength @mode@} {INST_LIST_INDEX_IMM} \ + -constraints testindexhex \ + -body { + set list [testindexhex] + llength $list + } -cleanup { + catch {unset list} + } -result -1 + + test {indexhex lindex constant @mode@} {INST_LIST_INDEX_IMM} \ + -constraints testindexhex \ + -body { + set list [testindexhex] + @lindex@ $list 731 + } -cleanup { + catch {unset list} + } -result 2db + + + test {indexhex lindex constant end @mode@} {INST_LIST_INDEX_IMM} \ + -constraints testindexhex \ + -body { + set list [testindexhex] + @lindex@ $list end + } -cleanup { + catch {unset list} + catch {unset res} + } -returnCodes 1 -result {list length indeterminate} + + + + test {indexhex lindex dynamic @mode@} {INST_LIST_INDEX} \ + -constraints testindexhex \ + -body { + set list [testindexhex] + set val [expr {731 + 0}] + @lindex@ $list $val + } -cleanup { + catch {unset list} + } -result 2db + + + test {indexhex lindex dynamic end @mode@} {INST_LIST_INDEX} \ + -constraints testindexhex \ + -body { + set index {} + set list [testindexhex] + append index e n d + @lindex@ $list $index + } -cleanup { + catch {unset index} + catch {unset list} + catch {unset res} + } -returnCodes 1 -result {list length indeterminate} + + + test {indexhex lindex drill @mode@} {} \ + -constraints testindexhex \ + -body { + set list [testindexhex] + @lindex@ $list 731 0 0 0 + } -cleanup { + catch {unset list} + } -result 2db + + + test {indexhex lrange constant @mode@} {} \ + -constraints testindexhex \ + -body { + set list [testindexhex] + @lrange@ $list 10 15 + } -cleanup { + catch {unset list} + } -result {a b c d e f} + + + test {indexhex lrange dynamic @mode@} {} \ + -constraints testindexhex \ + -body { + set list [testindexhex] + set first [expr {10 + 0}] + set last [expr {15 + 0}] + @lrange@ $list $first $last + } -cleanup { + catch {unset list} + } -result {a b c d e f} + + + test {indexhex lrange end constant @mode@} {} \ + -constraints testindexhex \ + -body { + set list [testindexhex] + @lrange@ $list 10 end + } -cleanup { + catch {unset list} + } -returnCodes 1 -result {list length indeterminate} + + + test {indexhex lrange end dynamic @mode@} {} \ + -constraints testindexhex \ + -body { + set list [testindexhex] + set back [expr {-5 + 0}] + @lrange@ $list 10 end-$back + } -cleanup { + catch {unset list} + } -returnCodes 1 -result {list length indeterminate} + + + test {indexhex lrange end minus constant @mode@} {} \ + -constraints testindexhex \ + -body { + set list [testindexhex] + @lrange@ $list 10 end-1 + } -cleanup { + catch {unset list} + } -returnCodes 1 -result {list length indeterminate} + + + test {indexhex lsearch @mode@} {} \ + -constraints testindexhex \ + -body { + set list [testindexhex] + lsearch $list ff + } -cleanup { + catch {unset list} + } -result 255 + + + test {indexhex lsearch sorted @mode@} {} \ + -constraints testindexhex \ + -body { + set list [testindexhex] + lsearch -sorted $list ff + } -cleanup { + catch {unset list} + } -returnCodes 1 -result {sorted list is incoherent} + + + test {indexhex lsearch start @mode@} {} \ + -constraints testindexhex \ + -body { + set list [testindexhex] + lsearch -start 5171 -glob $list a* + } -cleanup { + catch {unset list} + } -result 40960 + + + test {indexhex string index @mode@} {} \ + -constraints testindexhex \ + -body { + set iterations 4097 + set expected [data1 $iterations] + set list [testindexhex] + set progres {} + set iterations [string length $expected] + for {set i 0} {$i < $iterations} {incr i} { + set eitem [string index $expected $i] + set item [string index $list $i] + if {$item ne $eitem} { + error [list {failed at index} $i [ + format %x $i] expected $eitem got $item] + } + @lappend@ progress $item + } + return success + } -cleanup { + catch {unset i} + catch {unset list} + } -result success + + + test {indexhex string index end @mode@} {} \ + -constraints testindexhex \ + -body { + set list [testindexhex] + string index $list end + return success + } -cleanup { + catch {unset list} + } -returnCodes 1 -result {list length indeterminate} + + + test {indexhex string length @mode@} {} \ + -constraints testindexhex \ + -body { + set list [testindexhex] + string length $list + } -cleanup { + catch {unset list} + } -result -1 + + + test {indexhex string range @mode@} {} \ + -constraints testindexhex \ + -body { + set res {} + set iterations 4097 + set data1 [data1 $iterations] + set data1Length [string length $data1] + set list [testindexhex] + for {set first 0} {$first < $data1Length } { + set first [expr {($first + 1) * 2}]} { + + for {set last $first} {$last < $data1Length} { + set last [expr {($last + 1) * 3}]} { + + set expected [string range $data1 $first $last] + set range [string range $list $first $last] + if {$range ne $expected} { + set length [expr { + max([string length $expected], [string length $range]) + }] + for {set i 0} {$i < $length} {incr i} { + set item1 [string index $range $i] + set item2 [string index $expected $i] + if {$item1 ne $item2} { + error [list {failed at} $first $last $i \ + expected $item2 got $item1] + } + } + } + } + } + @lappend@ res success + + # The largest string index currently allowed. + @lappend@ res [string range $list 2147483640 2147483647] + + # This produces an error until index ranges are expanded in some later + # version of Tcl. + set status [catch {string range $list 2147483640 2147483648} cres copts] + + @lappend@ res $status $cres + return $res + } -cleanup { + catch {unset list} + } -result {success {d73ac8f } 1 {}} + + + test {integer lappend @mode@} {} \ + -constraints testlistinteger \ + -body { + set list [testlistinteger {}] + @lappend@ list 8 9 10 + @lappend@ list 11 12 13 + } -cleanup { + catch {unset list} + } -result {8 9 10 11 12 13} + + + test {integer lappend empty @mode@} {} \ + -constraints testlistinteger \ + -body { + set list [testlistinteger {}] + @lappend@ list 8 9 10 + } -cleanup { + catch {unset list} + } -result {8 9 10} + + + test {integer lappend noninteger @mode@} {} \ + -constraints testlistinteger \ + -body { + set list [testlistinteger {}] + @lappend@ list {8 9 10 11 12 13} + } -cleanup { + catch {unset list} + } -result {{8 9 10 11 12 13}} + + + test {integer lindex before before after @mode@} { + This test just tries to trigger a segmentation fault + } \ + -constraints testlistinteger \ + -body { + set list [testlistinteger {}] + @lappend@ list 8 9 10 11 12 13 + @lindex@ $list -1 -1 7 + } -cleanup { + catch {unset list} + } -result {} + + + test {integer lindex middle @mode@} {} \ + -constraints testlistinteger \ + -body { + set list [testlistinteger {}] + @lappend@ list 8 9 10 11 12 13 + @lindex@ $list 3 + } -cleanup { + catch {unset list} + } -result 11 + + + test {integer lindex end @mode@} {} \ + -constraints testlistinteger \ + -body { + set list [testlistinteger {}] + @lappend@ list 8 9 10 11 12 13 + @lindex@ $list end + } -cleanup { + catch {unset list} + } -result 13 + + + apply [list {} { + for {set i 0} {$i < 7} {incr i} { + set items {8 9 10 11 12 13} + set results {13 12 11 10 9 8} + + set comment [list integer lindex end-$i @mode@] + set body [string map {@i@ $i @items@ $items} { + set list [testlistinteger {}] + @lappend@ list {*}$items + @lindex@ $list end-$i + }] + set result [lindex $results $i] + + test $comment {} \ + -constraints testlistinteger \ + -body $body -cleanup { + catch {unset list} + } -result $result + } + unset i + } [namespace current]] + + + test {integer linsert middle one @mode@} {} \ + -constraints testlistinteger \ + -body { + set list [testlistinteger {}] + set res {} + @lappend@ list 8 9 10 12 13 + after 100 + lappend res [@linsert@ $list 3 11] + set representation [::tcl::unsupported::representation $list] + regsub {(value is a testListInteger).*} $representation {\1} representation + lappend res $representation + return $res + } -cleanup { + catch {unset list} + catch {unset res} + catch {unset representation} + } -result {{8 9 10 11 12 13} {value is a testListInteger}} + + + test {integer lrange middle @mode@} {} \ + -constraints testlistinteger \ + -body { + set list [testlistinteger {}] + @lappend@ list 8 9 10 11 12 13 + @lrange@ $list 3 4 + } -cleanup { + catch {unset list} + } -result {11 12} + + + test {integer lreplace prepend @mode@} {} \ + -constraints testlistinteger \ + -body { + set list [testlistinteger {}] + @lappend@ list 8 9 10 11 12 13 + after 100 + @lreplace@ $list -1 -1 7 + } -cleanup { + catch {unset list} + } -result {7 8 9 10 11 12 13} + }] + #try $script + + } + + set suites {linsert lset} + + foreach suite {linsert lset} { + set namespace [list $suite tests] + namespace eval $namespace [list source [ + file join [file dirname [file dirname [ + file normalize [file join [info script] ...]]]] $suite.test]] + namespace eval $namespace { + proc newlist list { + if {[string is list $list]} { + set integer 1 + foreach item $list { + if {![string is integer $item]} { + set integer 0 + break + } + } + if {$integer} { + testlistinteger $list + } + } + return $list + } + try $tests + } + namespace delete $namespace + } + + + # cleanup + ::tcltest::cleanupTests +} [namespace current]] + +return Index: tests/oo.test ================================================================== --- tests/oo.test +++ tests/oo.test @@ -1,13 +1,20 @@ -# This file contains a collection of tests for Tcl's built-in object system. -# Sourcing this file into Tcl runs the tests and generates output for errors. -# No output means no errors were found. -# # Copyright © 2006-2013 Donal K. Fellows # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains a collection of tests for Tcl's built-in object system. +# Sourcing this file into Tcl runs the tests and generates output for errors. +# No output means no errors were found. package require tcl::oo 1.3.0 if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* Index: tests/ooNext2.test ================================================================== --- tests/ooNext2.test +++ tests/ooNext2.test @@ -1,13 +1,20 @@ -# This file contains a collection of tests for Tcl's built-in object system. -# Sourcing this file into Tcl runs the tests and generates output for errors. -# No output means no errors were found. -# # Copyright © 2006-2011 Donal K. Fellows # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains a collection of tests for Tcl's built-in object system. +# Sourcing this file into Tcl runs the tests and generates output for errors. +# No output means no errors were found. package require tcl::oo 1.3.0 if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* Index: tests/ooProp.test ================================================================== --- tests/ooProp.test +++ tests/ooProp.test @@ -1,14 +1,21 @@ -# This file contains a collection of tests for Tcl's built-in object system, -# specifically the parts that support configurable properties on objects. -# Sourcing this file into Tcl runs the tests and generates output for errors. -# No output means no errors were found. -# # Copyright © 2019-2020 Donal K. Fellows # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains a collection of tests for Tcl's built-in object system, +# specifically the parts that support configurable properties on objects. +# Sourcing this file into Tcl runs the tests and generates output for errors. +# No output means no errors were found. package require tcl::oo 1.0.3 package require tcltest 2 if {"::tcltest" in [namespace children]} { namespace import -force ::tcltest::* Index: tests/ooUtil.test ================================================================== --- tests/ooUtil.test +++ tests/ooUtil.test @@ -1,15 +1,22 @@ -# This file contains a collection of tests for functionality originally -# sourced from the ooutil package in Tcllib. Sourcing this file into Tcl runs -# the tests and generates output for errors. No output means no errors were -# found. -# # Copyright © 2014-2016 Andreas Kupries # Copyright © 2018 Donal K. Fellows # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains a collection of tests for functionality originally +# sourced from the ooutil package in Tcllib. Sourcing this file into Tcl runs +# the tests and generates output for errors. No output means no errors were +# found. package require tcl::oo 1.3.0 if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* Index: tests/opt.test ================================================================== --- tests/opt.test +++ tests/opt.test @@ -1,17 +1,24 @@ -# Package covered: opt1.0/optparse.tcl -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Package covered: opt1.0/optparse.tcl +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/package.test ================================================================== --- tests/package.test +++ tests/package.test @@ -1,18 +1,25 @@ -# This file contains tests for the package and ::pkg::* commands. -# Note that the tests are limited to Tcl scripts only, there are no shared -# libraries against which to test. -# -# Sourcing this file into Tcl runs the tests and generates output for errors. -# No output means no errors were found. -# # Copyright © 1995-1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # Copyright © 2011 Donal K. Fellows # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains tests for the package and ::pkg::* commands. +# Note that the tests are limited to Tcl scripts only, there are no shared +# libraries against which to test. +# +# Sourcing this file into Tcl runs the tests and generates output for errors. +# No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/parse.test ================================================================== --- tests/parse.test +++ tests/parse.test @@ -1,14 +1,21 @@ -# This file contains a collection of tests for the procedures in the -# file tclParse.c. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains a collection of tests for the procedures in the +# file tclParse.c. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/parseExpr.test ================================================================== --- tests/parseExpr.test +++ tests/parseExpr.test @@ -1,14 +1,21 @@ -# This file contains a collection of tests for the procedures in the -# file tclCompExpr.c. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains a collection of tests for the procedures in the +# file tclCompExpr.c. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/parseOld.test ================================================================== --- tests/parseOld.test +++ tests/parseOld.test @@ -1,19 +1,26 @@ +# Copyright © 1991-1993 The Regents of the University of California. +# Copyright © 1994-1996 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: set (plus basic command syntax). Also tests the # procedures in the file tclOldParse.c. This set of tests is an old # one that predates the new parser in Tcl 8.1. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. -# -# Copyright © 1991-1993 The Regents of the University of California. -# Copyright © 1994-1996 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/pid.test ================================================================== --- tests/pid.test +++ tests/pid.test @@ -1,17 +1,24 @@ -# Commands covered: pid -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1995 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: pid +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/pkgMkIndex.test ================================================================== --- tests/pkgMkIndex.test +++ tests/pkgMkIndex.test @@ -1,14 +1,21 @@ +# Copyright © 1998-1999 Scriptics Corporation. +# All rights reserved. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file contains tests for the pkg_mkIndex command. # Note that the tests are limited to Tcl scripts only, there are no shared # libraries against which to test. # # Sourcing this file into Tcl runs the tests and generates output for errors. # No output means no errors were found. -# -# Copyright © 1998-1999 Scriptics Corporation. -# All rights reserved. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/platform.test ================================================================== --- tests/platform.test +++ tests/platform.test @@ -1,15 +1,22 @@ +# Copyright © 1999 Scriptics Corporation +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # The file tests the tcl_platform variable and platform package. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. -# -# Copyright © 1999 Scriptics Corporation -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. package require tcltest 2.5 source [file join [file dirname [info script]] tcltests.tcl] namespace eval ::tcl::test::platform { Index: tests/proc-old.test ================================================================== --- tests/proc-old.test +++ tests/proc-old.test @@ -1,20 +1,27 @@ +# Copyright © 1991-1993 The Regents of the University of California. +# Copyright © 1994-1997 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: proc, return, global # # This file, proc-old.test, includes the original set of tests for Tcl's # proc, return, and global commands. There is now a new file proc.test # that contains tests for the tclProc.c source file. # # Sourcing this file into Tcl runs the tests and generates output for # errors. No output means no errors were found. -# -# Copyright © 1991-1993 The Regents of the University of California. -# Copyright © 1994-1997 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/proc.test ================================================================== --- tests/proc.test +++ tests/proc.test @@ -1,19 +1,26 @@ +# Copyright © 1997 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file contains tests for the tclProc.c source file. Tests appear in the # same order as the C code that they test. The set of tests is currently # incomplete since it includes only new tests, in particular tests for code # changed for the addition of Tcl namespaces. Other procedure-related tests # appear in other test files such as proc-old.test. # # Sourcing this file into Tcl runs the tests and generates output for errors. # No output means no errors were found. -# -# Copyright © 1997 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/process.test ================================================================== --- tests/process.test +++ tests/process.test @@ -1,14 +1,21 @@ +# Copyright © 2017 Frederic Bonnet +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # process.test -- # # This file contains a collection of tests for the tcl::process ensemble. # Sourcing this file into Tcl runs the tests and generates output for # errors. No output means no errors were found. -# -# Copyright © 2017 Frederic Bonnet -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/pwd.test ================================================================== --- tests/pwd.test +++ tests/pwd.test @@ -1,17 +1,24 @@ -# Commands covered: pwd -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: pwd +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/reg.test ================================================================== --- tests/reg.test +++ tests/reg.test @@ -1,15 +1,22 @@ +# Copyright © 1998, 1999 Henry Spencer. All rights reserved. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # reg.test -- # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. # (Don't panic if you are seeing this as part of the reg distribution # and aren't using Tcl -- reg's own regression tester also knows how # to read this file, ignoring the Tcl-isms.) -# -# Copyright © 1998, 1999 Henry Spencer. All rights reserved. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/regexp.test ================================================================== --- tests/regexp.test +++ tests/regexp.test @@ -1,17 +1,24 @@ -# Commands covered: regexp, regsub -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1998 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: regexp, regsub +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/regexpComp.test ================================================================== --- tests/regexpComp.test +++ tests/regexpComp.test @@ -1,17 +1,24 @@ -# Commands covered: regexp, regsub -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1998 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: regexp, regsub +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/registry.test ================================================================== --- tests/registry.test +++ tests/registry.test @@ -1,16 +1,23 @@ +# Copyright © 1997 Sun Microsystems, Inc. All rights reserved. +# Copyright © 1998-1999 Scriptics Corporation. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # registry.test -- # # This file contains a collection of tests for the registry command. # Sourcing this file into Tcl runs the tests and generates output for # errors. No output means no errors were found. # # In order for these tests to run, the registry package must be on the # auto_path or the registry package must have been loaded already. -# -# Copyright © 1997 Sun Microsystems, Inc. All rights reserved. -# Copyright © 1998-1999 Scriptics Corporation. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/remote.tcl ================================================================== --- tests/remote.tcl +++ tests/remote.tcl @@ -1,15 +1,22 @@ +# Copyright © 1995-1996 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file contains Tcl code to implement a remote server that can be # used during testing of Tcl socket code. This server is used by some # of the tests in socket.test. # # Source this file in the remote server you are using to test Tcl against. -# -# Copyright © 1995-1996 Sun Microsystems, Inc. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. # Initialize message delimiter # Initialize command array catch {unset command} Index: tests/rename.test ================================================================== --- tests/rename.test +++ tests/rename.test @@ -1,17 +1,24 @@ -# Commands covered: rename -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: rename +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/resolver.test ================================================================== --- tests/resolver.test +++ tests/resolver.test @@ -1,16 +1,23 @@ -# This test collection covers some unwanted interactions between command -# literal sharing and the use of command resolvers (per-interp) which cause -# command literals to be re-used with their command references being invalid -# in the reusing context. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 2011 Gustaf Neumann # Copyright © 2011 Stefan Sobernig # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This test collection covers some unwanted interactions between command +# literal sharing and the use of command resolvers (per-interp) which cause +# command literals to be re-used with their command references being invalid +# in the reusing context. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/result.test ================================================================== --- tests/result.test +++ tests/result.test @@ -1,16 +1,23 @@ -# This file tests the routines in tclResult.c. -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file tests the routines in tclResult.c. +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/safe-stock.test ================================================================== --- tests/safe-stock.test +++ tests/safe-stock.test @@ -1,5 +1,18 @@ +# Copyright © 1995-1996 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # safe-stock.test -- # # This file contains tests for safe Tcl that were previously in the file # safe.test, and use files and packages of stock Tcl 8.7 to perform the tests. # These files may be changed or disappear in future revisions of Tcl, for @@ -19,16 +32,10 @@ # - Tests 7.[124], 9.1[13] use "package require opt". # - Tests 9.1[13] also use "package require tcl::idna". # - The corresponding tests in safe.test use example packages provided in # subdirectory auto0 of the tests directory, which are independent of any # changes made to the packages provided with Tcl. -# -# Copyright © 1995-1996 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/safe-zipfs.test ================================================================== --- tests/safe-zipfs.test +++ tests/safe-zipfs.test @@ -1,19 +1,26 @@ +# Copyright © 1995-1996 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # safe-zipfs.test -- # # This file contains tests for safe Tcl that test its compatibility with the # zipfs facilities introduced in Tcl 8.7. Test numbering is for comparison # with similar tests in safe.test that do not use the zipfs file system. # # Sourcing this file into tcl runs the tests and generates output for errors. # No output means no errors were found. -# -# Copyright © 1995-1996 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. apply [list {} { global auto_path global tcl_library Index: tests/safe.test ================================================================== --- tests/safe.test +++ tests/safe.test @@ -1,5 +1,18 @@ +# Copyright © 1995-1996 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # safe.test -- # # This file contains a collection of tests for safe Tcl, packages loading, and # using safe interpreters. Sourcing this file into tcl runs the tests and # generates output for errors. No output means no errors were found. @@ -11,16 +24,10 @@ # - These are tests 7.1 7.2 7.4 9.11 9.13 17.1 17.2 17.4 # - Tests 5.* test the example packages themselves before they # are used to test Safe Base interpreters. # - Alternative tests using stock packages of Tcl 8.7 are in file # safe-stock.test. -# -# Copyright © 1995-1996 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/scan.test ================================================================== --- tests/scan.test +++ tests/scan.test @@ -1,17 +1,24 @@ -# Commands covered: scan -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1991-1994 The Regents of the University of California. # Copyright © 1994-1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: scan +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/security.test ================================================================== --- tests/security.test +++ tests/security.test @@ -1,16 +1,23 @@ +# Copyright © 1997 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# All rights reserved. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # security.test -- # # Functionality covered: this file contains a collection of tests for the auto # loading and namespaces. # # Sourcing this file into Tcl runs the tests and generates output for errors. # No output means no errors were found. -# -# Copyright © 1997 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# All rights reserved. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/set-old.test ================================================================== --- tests/set-old.test +++ tests/set-old.test @@ -1,19 +1,26 @@ +# Copyright © 1991-1993 The Regents of the University of California. +# Copyright © 1994-1997 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: set, unset, array # # This file includes the original set of tests for Tcl's set command. # Since the set command is now compiled, a new set of tests covering # the new implementation is in the file "set.test". Sourcing this file # into Tcl runs the tests and generates output for errors. # No output means no errors were found. -# -# Copyright © 1991-1993 The Regents of the University of California. -# Copyright © 1994-1997 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/set.test ================================================================== --- tests/set.test +++ tests/set.test @@ -1,16 +1,23 @@ -# Commands covered: set -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: set +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/socket.test ================================================================== --- tests/socket.test +++ tests/socket.test @@ -1,16 +1,24 @@ +# Copyright © 1994-1996 Sun Microsystems, Inc. +# Copyright © 1998-2000 Ajuba Solutions. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands tested in this file: socket. # # This file contains a collection of tests for one or more of the Tcl built-in # commands. Sourcing this file into Tcl runs the tests and generates output # for errors. No output means no errors were found. # -# Copyright © 1994-1996 Sun Microsystems, Inc. -# Copyright © 1998-2000 Ajuba Solutions. -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. # Running socket tests with a remote server: # ------------------------------------------ # # Some tests in socket.test depend on the existence of a remote server to Index: tests/source.test ================================================================== --- tests/source.test +++ tests/source.test @@ -1,18 +1,25 @@ -# Commands covered: source -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1996 Sun Microsystems, Inc. # Copyright © 1998-2000 Scriptics Corporation. # Contributions from Don Porter, NIST, 2003. (not subject to US copyright) # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: source +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {[catch {package require tcltest 2.5}]} { puts stderr "Skipping tests in [info script]. tcltest 2.5 required." return } Index: tests/split.test ================================================================== --- tests/split.test +++ tests/split.test @@ -1,17 +1,24 @@ -# Commands covered: split -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994-1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: split +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/stack.test ================================================================== --- tests/stack.test +++ tests/stack.test @@ -1,15 +1,22 @@ +# Copyright © 1998-2000 Ajuba Solutions. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Tests that the stack size is big enough for the application. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. -# -# Copyright © 1998-2000 Ajuba Solutions. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/string.test ================================================================== --- tests/string.test +++ tests/string.test @@ -1,18 +1,25 @@ -# Commands covered: string -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # Copyright © 2001 Kevin B. Kenny. All rights reserved. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: string +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/stringObj.test ================================================================== --- tests/stringObj.test +++ tests/stringObj.test @@ -1,18 +1,25 @@ +# Copyright © 1995-1997 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: none # # This file contains tests for the procedures in tclStringObj.c that implement # the Tcl type manager for the string type. # # Sourcing this file into Tcl runs the tests and generates output for errors. # No output means no errors were found. -# -# Copyright © 1995-1997 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/subst.test ================================================================== --- tests/subst.test +++ tests/subst.test @@ -1,17 +1,24 @@ -# Commands covered: subst -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1994 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-2000 Ajuba Solutions. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: subst +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/switch.test ================================================================== --- tests/switch.test +++ tests/switch.test @@ -1,17 +1,24 @@ -# Commands covered: switch -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: switch +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/tailcall.test ================================================================== --- tests/tailcall.test +++ tests/tailcall.test @@ -1,15 +1,22 @@ +# Copyright © 2008 Miguel Sofer. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: tailcall # # This file contains a collection of tests for experimental commands that are # found in ::tcl::unsupported. The tests will migrate to normal test files # if/when the commands find their way into the core. -# -# Copyright © 2008 Miguel Sofer. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/tcltest.test ================================================================== --- tests/tcltest.test +++ tests/tcltest.test @@ -1,12 +1,19 @@ -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1998-1999 Scriptics Corporation. # Copyright © 2000 Ajuba Solutions # All rights reserved. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. # Note that there are several places where the value of # tcltest::currentFailure is stored/reset in the -setup/-cleanup # of a test that has a body that runs [test] that will fail. # This is a workaround of using the same tcltest code that we are @@ -13,11 +20,10 @@ # testing to run the test itself. Ditto on things like [verbose]. # # It would be better to have the -body of the tests run the tcltest # commands in a child interp so the [test] being tested would not # interfere with the [test] doing the testing. -# if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/tcltests.tcl ================================================================== --- tests/tcltests.tcl +++ tests/tcltests.tcl @@ -1,14 +1,20 @@ #! /usr/bin/env tclsh +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Don't overwrite tcltests facilities already present if {[package provide tcltests] ne {}} return package require tcltest 2.5 namespace import ::tcltest::* testConstraint exec [llength [info commands exec]] -testConstraint deprecated [expr {![tcl::build-info no-deprecate]}] testConstraint debug [tcl::build-info debug] testConstraint purify [tcl::build-info purify] testConstraint debugpurify [ expr { ![tcl::build-info memdebug] Index: tests/thread.test ================================================================== --- tests/thread.test +++ tests/thread.test @@ -1,17 +1,24 @@ -# Commands covered: (test)thread -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # Copyright © 2006-2008 Joe Mistachkin. All rights reserved. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: (test)thread +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/timer.test ================================================================== --- tests/timer.test +++ tests/timer.test @@ -1,19 +1,26 @@ +# Copyright © 1997 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file contains a collection of tests for the procedures in the # file tclTimer.c, which includes the "after" Tcl command. Sourcing # this file into Tcl runs the tests and generates output for errors. # No output means no errors were found. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. -# -# Copyright © 1997 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/tm.test ================================================================== --- tests/tm.test +++ tests/tm.test @@ -1,12 +1,19 @@ +# Copyright © 2004 Donal K. Fellows. +# All rights reserved. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file contains tests for the ::tcl::tm::* commands. # # Sourcing this file into Tcl runs the tests and generates output for # errors. No output means no errors were found. -# -# Copyright © 2004 Donal K. Fellows. -# All rights reserved. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/trace.test ================================================================== --- tests/trace.test +++ tests/trace.test @@ -1,17 +1,24 @@ -# Commands covered: trace -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: trace +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/unixFCmd.test ================================================================== --- tests/unixFCmd.test +++ tests/unixFCmd.test @@ -1,15 +1,22 @@ +# Copyright © 1996 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file tests the tclUnixFCmd.c file. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. -# -# Copyright © 1996 Sun Microsystems, Inc. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/unixFile.test ================================================================== --- tests/unixFile.test +++ tests/unixFile.test @@ -1,15 +1,22 @@ +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file contains tests for the routines in the file tclUnixFile.c # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. -# -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/unixForkEvent.test ================================================================== --- tests/unixForkEvent.test +++ tests/unixForkEvent.test @@ -1,14 +1,21 @@ -# This file contains a collection of tests for the procedures in the file -# tclUnixNotify.c. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1995-1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains a collection of tests for the procedures in the file +# tclUnixNotify.c. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/unixInit.test ================================================================== --- tests/unixInit.test +++ tests/unixInit.test @@ -1,16 +1,23 @@ -# The file tests the functions in the tclUnixInit.c file. -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# The file tests the functions in the tclUnixInit.c file. +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/unixNotfy.test ================================================================== --- tests/unixNotfy.test +++ tests/unixNotfy.test @@ -1,16 +1,23 @@ -# This file contains tests for tclUnixNotfy.c. -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains tests for tclUnixNotfy.c. +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/unknown.test ================================================================== --- tests/unknown.test +++ tests/unknown.test @@ -1,17 +1,24 @@ -# Commands covered: unknown -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: unknown +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/unload.test ================================================================== --- tests/unload.test +++ tests/unload.test @@ -1,17 +1,24 @@ -# Commands covered: unload -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1995 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # Copyright © 2003-2004 Georgios Petasis # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: unload +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/uplevel.test ================================================================== --- tests/uplevel.test +++ tests/uplevel.test @@ -1,17 +1,24 @@ -# Commands covered: uplevel -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: uplevel +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/upvar.test ================================================================== --- tests/upvar.test +++ tests/upvar.test @@ -1,17 +1,24 @@ -# Commands covered: 'upvar', 'namespace upvar' -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1991-1993 The Regents of the University of California. # Copyright © 1994 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: 'upvar', 'namespace upvar' +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/utf.test ================================================================== --- tests/utf.test +++ tests/utf.test @@ -1,14 +1,21 @@ -# This file contains a collection of tests for tclUtf.c -# Sourcing this file into Tcl runs the tests and generates output for -# errors. No output means no errors were found. -# # Copyright © 1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains a collection of tests for tclUtf.c +# Sourcing this file into Tcl runs the tests and generates output for +# errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } @@ -77,15 +84,15 @@ return $hi\uDE02 } \uD83D\uDE02 test utf-1.16 {Tcl_UniCharToUtf: \xC0 + \x80} testbytestring { set lo [testbytestring \x80] string length [testbytestring \xC0]$lo -} 2 +} 1 test utf-1.17 {Tcl_UniCharToUtf: \xC0 + \x80} testbytestring { set hi [testbytestring \xC0] string length $hi[testbytestring \x80] -} 2 +} 1 test utf-1.18 {Tcl_UniCharToUtf: surrogate pairs from concat} { string cat \uD83D \uDE02 } \uD83D\uDE02 test utf-2.1 {Tcl_UtfToUniChar: low ascii} { Index: tests/utfext.test ================================================================== --- tests/utfext.test +++ tests/utfext.test @@ -1,13 +1,21 @@ -# This file contains a collection of tests for Tcl_UtfToExternal and -# Tcl_UtfToExternal. Sourcing this file into Tcl runs the tests and generates -# errors. No output means no errors found. -# # Copyright (c) 2023 Ashok P. Nadkarni +# Copyright (c) 2024 Nathan Coulter # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file contains a collection of tests for Tcl_UtfToExternal and +# Tcl_UtfToExternal. Sourcing this file into Tcl runs the tests and generates +# errors. No output means no errors found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } @@ -72,11 +80,18 @@ # Another bug - char limit not obeyed # % set cv 2 # % testencoding Tcl_ExternalToUtf utf-8 abcdefgh {start end noterminate charlimit} {} 20 rv wv cv # nospace {} abcÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ -test TableToUtf-bug-5be203d6ca {Bug 5be203d6ca - truncated prefix in table encoding} -body { +test TableToUtf-bug-5be203d6ca-profilestrict {Bug 5be203d6ca - truncated prefix in table encoding} -body { + set src \x82\x4F\x82\x50\x82 + lassign [testencoding Tcl_ExternalToUtf shiftjis $src {start profilestrict} 0 16 srcRead dstWritten charsWritten] buf + set result [list [testencoding Tcl_ExternalToUtf shiftjis $src {start profilestrict} 0 16 srcRead dstWritten charsWritten] $srcRead $dstWritten $charsWritten] + lappend result {*}[list [testencoding Tcl_ExternalToUtf shiftjis [string range $src $srcRead end] {end profiletcl8} 0 10 srcRead dstWritten charsWritten] $srcRead $dstWritten $charsWritten] +} -result [list [list multibyte 0 \xEF\xBC\x90\xEF\xBC\x91\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF] 4 6 2 [list ok 0 \xC2\x82\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF] 1 2 1] + +test TableToUtf-bug-5be203d6ca-profiletcl8 {Bug 5be203d6ca - truncated prefix in table encoding} -body { set src \x82\x4F\x82\x50\x82 lassign [testencoding Tcl_ExternalToUtf shiftjis $src {start profiletcl8} 0 16 srcRead dstWritten charsWritten] buf set result [list [testencoding Tcl_ExternalToUtf shiftjis $src {start profiletcl8} 0 16 srcRead dstWritten charsWritten] $srcRead $dstWritten $charsWritten] lappend result {*}[list [testencoding Tcl_ExternalToUtf shiftjis [string range $src $srcRead end] {end profiletcl8} 0 10 srcRead dstWritten charsWritten] $srcRead $dstWritten $charsWritten] } -result [list [list multibyte 0 \xEF\xBC\x90\xEF\xBC\x91\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF] 4 6 2 [list ok 0 \xC2\x82\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF] 1 2 1] -constraints testencoding Index: tests/util.test ================================================================== --- tests/util.test +++ tests/util.test @@ -1,13 +1,20 @@ -# This file is a Tcl script to test the code in the file tclUtil.c. -# This file is organized in the standard fashion for Tcl tests. -# # Copyright © 1995-1998 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file is a Tcl script to test the code in the file tclUtil.c. +# This file is organized in the standard fashion for Tcl tests. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/var.test ================================================================== --- tests/var.test +++ tests/var.test @@ -1,20 +1,27 @@ +# Copyright © 1997 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file contains tests for the tclVar.c source file. Tests appear in the # same order as the C code that they test. The set of tests is currently # incomplete since it currently includes only new tests for code changed for # the addition of Tcl namespaces. Other variable-related tests appear in # several other test files including namespace.test, set.test, trace.test, and # upvar.test. # # Sourcing this file into Tcl runs the tests and generates output for errors. # No output means no errors were found. -# -# Copyright © 1997 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/while-old.test ================================================================== --- tests/while-old.test +++ tests/while-old.test @@ -1,19 +1,26 @@ +# Copyright © 1991-1993 The Regents of the University of California. +# Copyright © 1994-1996 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # Commands covered: while # # This file contains the original set of tests for Tcl's while command. # Since the while command is now compiled, a new set of tests covering # the new implementation is in the file "while.test". Sourcing this file # into Tcl runs the tests and generates output for errors. # No output means no errors were found. -# -# Copyright © 1991-1993 The Regents of the University of California. -# Copyright © 1994-1996 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/while.test ================================================================== --- tests/while.test +++ tests/while.test @@ -1,16 +1,23 @@ -# Commands covered: while -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1996 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Commands covered: while +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/winConsole.test ================================================================== --- tests/winConsole.test +++ tests/winConsole.test @@ -1,15 +1,22 @@ +# Copyright © 1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file tests the tclWinConsole.c file. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. -# -# Copyright © 1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/winDde.test ================================================================== --- tests/winDde.test +++ tests/winDde.test @@ -1,15 +1,22 @@ +# Copyright © 1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file tests the tclWinDde.c file. # # This file contains a collection of tests for one or more of the Tcl # built-in commands. Sourcing this file into Tcl runs the tests and # generates output for errors. No output means no errors were found. -# -# Copyright © 1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/winFCmd.test ================================================================== --- tests/winFCmd.test +++ tests/winFCmd.test @@ -1,16 +1,23 @@ -# This file tests the tclWinFCmd.c file. -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1996-1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file tests the tclWinFCmd.c file. +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/winFile.test ================================================================== --- tests/winFile.test +++ tests/winFile.test @@ -1,16 +1,23 @@ -# This file tests the tclWinFile.c file. -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file tests the tclWinFile.c file. +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/winNotify.test ================================================================== --- tests/winNotify.test +++ tests/winNotify.test @@ -1,16 +1,23 @@ -# This file tests the tclWinNotify.c file. -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file tests the tclWinNotify.c file. +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/winPipe.test ================================================================== --- tests/winPipe.test +++ tests/winPipe.test @@ -1,18 +1,24 @@ +# Copyright © 1996 Sun Microsystems, Inc. +# Copyright © 1998-1999 Scriptics Corporation. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. # +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # winPipe.test -- # # This file contains a collection of tests for tclWinPipe.c # # Sourcing this file into Tcl runs the tests and generates output for errors. # No output (except for one message) means no errors were found. -# -# Copyright © 1996 Sun Microsystems, Inc. -# Copyright © 1998-1999 Scriptics Corporation. -# -# See the file "license.terms" for information on usage and redistribution of -# this file, and for a DISCLAIMER OF ALL WARRANTIES. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/winTime.test ================================================================== --- tests/winTime.test +++ tests/winTime.test @@ -1,16 +1,23 @@ -# This file tests the tclWinTime.c file. -# -# This file contains a collection of tests for one or more of the Tcl -# built-in commands. Sourcing this file into Tcl runs the tests and -# generates output for errors. No output means no errors were found. -# # Copyright © 1997 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file tests the tclWinTime.c file. +# +# This file contains a collection of tests for one or more of the Tcl +# built-in commands. Sourcing this file into Tcl runs the tests and +# generates output for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/zipfs.test ================================================================== --- tests/zipfs.test +++ tests/zipfs.test @@ -1,18 +1,24 @@ -# The file tests the tclZlib.c file. -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1996-1998 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # Copyright © 2023 Ashok P. Nadkarni # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# The file tests the tclZlib.c file. # +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tests/zlib.test ================================================================== --- tests/zlib.test +++ tests/zlib.test @@ -1,16 +1,23 @@ -# The file tests the tclZlib.c file. -# -# This file contains a collection of tests for one or more of the Tcl built-in -# commands. Sourcing this file into Tcl runs the tests and generates output -# for errors. No output means no errors were found. -# # Copyright © 1996-1998 Sun Microsystems, Inc. # Copyright © 1998-1999 Scriptics Corporation. # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# The file tests the tclZlib.c file. +# +# This file contains a collection of tests for one or more of the Tcl built-in +# commands. Sourcing this file into Tcl runs the tests and generates output +# for errors. No output means no errors were found. if {"::tcltest" ni [namespace children]} { package require tcltest 2.5 namespace import -force ::tcltest::* } Index: tools/checkLibraryDoc.tcl ================================================================== --- tools/checkLibraryDoc.tcl +++ tools/checkLibraryDoc.tcl @@ -1,5 +1,15 @@ +# Copyright © 1998-1999 Scriptics Corporation. +# All rights reserved. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # checkLibraryDoc.tcl -- # # This script attempts to determine what APIs exist in the source base that # have not been documented. By grepping through all of the doc/*.3 man # pages, looking for "Pkg_*" (e.g., Tcl_ or Tk_), and comparing this list @@ -13,13 +23,11 @@ # 6) Proc pointers (e.g., Tcl_CloseProc.) # # Note: Each list is "a best guess" approximation. If developers write # non-standard code, this script will produce erroneous results. Each # list should be carefully checked for accuracy. -# -# Copyright © 1998-1999 Scriptics Corporation. -# All rights reserved. + lappend auto_path "c:/program\ files/tclpro1.2/win32-ix86/bin" #lappend auto_path "/home/surles/cvs/tclx8.0/tcl/unix" if {[catch {package require Tclx}]} { Index: tools/encoding/Makefile ================================================================== --- tools/encoding/Makefile +++ tools/encoding/Makefile @@ -1,15 +1,5 @@ -# -# This file is a Makefile to compile all the encoding files. -# -# Run "make" to compile all the encoding files (*.txt,*.esc) into the -# format that Tcl can use (*.enc). It is your responsibility to move the -# encoding files to the appropriate place ($TCL_ROOT/library/encoding -# -# The .txt files in this directory come from the Unicode CD and are covered -# by the following copyright notice: -# #--------------------------------------------------------------------------- # # Copyright (c) 1996 Unicode, Inc. All Rights reserved. # # This file is provided as-is by Unicode, Inc. (The Unicode Consortium). @@ -28,12 +18,34 @@ # # In other words: Don't put this file on the Internet. People who want to # get it over the Internet should do so directly from ftp://unicode.org. They # can therefore be assured of getting the most recent and accurate version. # -#---------------------------------------------------------------------------- + +# Copyright (c) 1998 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +# +# SCCS: @(#) Makefile 1.1 98/01/28 11:41:36 + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# This file is a Makefile to compile all the encoding files. +# +# Run "make" to compile all the encoding files (*.txt,*.esc) into the +# format that Tcl can use (*.enc). It is your responsibility to move the +# encoding files to the appropriate place ($TCL_ROOT/library/encoding # +# The .txt files in this directory come from the Unicode CD and are covered +# by the following copyright notice: + # The txt2enc program built by this makefile is used to compile individual # .txt files into .enc files, the format that Tcl understands for encoding # files. This compilation to a different format is allowed by the above # restriction. # @@ -42,18 +54,11 @@ # 0x815F in these two Japanese encodings was being mapped to Unicode 005C # (REVERSE SOLIDUS), the normal backslash character. They have been # changed to map 0x815F to Unicode FF3C (FULLWIDTH REVERSE SOLIDUS) and let # the regular backslash character map to itself. This follows how cp932 # behaves. -# -# Copyright (c) 1998 Sun Microsystems, Inc. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. -# -# SCCS: @(#) Makefile 1.1 98/01/28 11:41:36 -# + EUC_ENCODINGS = euc-cn.txt euc-kr.txt euc-jp.txt encodings: clean txt2enc $(EUC_ENCODINGS) @echo Compiling encoding files. Index: tools/encoding/txt2enc.c ================================================================== --- tools/encoding/txt2enc.c +++ tools/encoding/txt2enc.c @@ -1,20 +1,31 @@ /* - * txt2enc.c -- - * - * Simple program to compile up the encodings tables from the CD that - * came with "The Unicode Standard, Version 2.0" into a form that can - * be quickly loaded into Tcl. - * * Copyright (c) 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * SCCS: @(#) txt2enc.c 1.1 98/01/28 11:42:09 */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * txt2enc.c -- + * + * Simple program to compile up the encodings tables from the CD that + * came with "The Unicode Standard, Version 2.0" into a form that can + * be quickly loaded into Tcl. + */ + #include #include #include #include #include Index: tools/findBadExternals.tcl ================================================================== --- tools/findBadExternals.tcl +++ tools/findBadExternals.tcl @@ -1,5 +1,17 @@ +# Copyright © 2005 George Peter Staplin and Kevin Kenny +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # findBadExternals.tcl -- # # This script scans the Tcl load library for exported symbols # that do not begin with 'Tcl' or 'tcl'. It reports them on the # standard output. It is used to make sure that the library does @@ -7,16 +19,10 @@ # other code. # # Usage: # # tclsh findBadExternals.tcl /path/to/tclXX.so-or-.dll -# -# Copyright © 2005 George Peter Staplin and Kevin Kenny -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. -#---------------------------------------------------------------------- proc main {argc argv} { if {$argc != 1} { puts stderr "syntax is: [info script] libtcl" Index: tools/genStubs.tcl ================================================================== --- tools/genStubs.tcl +++ tools/genStubs.tcl @@ -1,16 +1,22 @@ -# genStubs.tcl -- -# -# This script generates a set of stub files for a given -# interface. -# -# # Copyright © 1998-1999 Scriptics Corporation. # Copyright © 2007 Daniel A. Steffen # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# genStubs.tcl -- +# +# This script generates a set of stub files for a given +# interface. namespace eval genStubs { # libraryName -- # # The name of the entire library. This value is used to compute Index: tools/index.tcl ================================================================== --- tools/index.tcl +++ tools/index.tcl @@ -1,15 +1,22 @@ +# Copyright © 1996 Sun Microsystems, Inc. +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # index.tcl -- # # This file defines procedures that are used during the first pass of # the man page conversion. It is used to extract information used to # generate a table of contents and a keyword list. -# -# Copyright © 1996 Sun Microsystems, Inc. -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. # Global variables used by these scripts: # # state - state variable that controls action of text proc. # Index: tools/installData.tcl ================================================================== --- tools/installData.tcl +++ tools/installData.tcl @@ -1,22 +1,27 @@ -#!/bin/sh -#\ -exec tclsh "$0" ${1+"$@"} +#! /usr/bin/env tclsh + +# Copyright © 2004 Kevin B. Kenny. All rights reserved. +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. +#---------------------------------------------------------------------- + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. #---------------------------------------------------------------------- # # installData.tcl -- # # This file installs a hierarchy of data found in the directory # specified by its first argument into the directory specified # by its second. # -#---------------------------------------------------------------------- -# -# Copyright © 2004 Kevin B. Kenny. All rights reserved. -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. #---------------------------------------------------------------------- proc copyDir {d1 d2} { puts [format {%*sCreating %s} [expr {4 * [info level]}] {} \ Index: tools/installVfs.tcl ================================================================== --- tools/installVfs.tcl +++ tools/installVfs.tcl @@ -1,20 +1,24 @@ -#!/bin/sh -#\ -exec tclsh "$0" ${1+"$@"} +#! /usr/bin/env tclsh + +# Copyright © 2018 Sean Woods. All rights reserved. +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. #---------------------------------------------------------------------- # # installVfs.tcl -- # # This file wraps the /library file system around a binary # -#---------------------------------------------------------------------- -# -# Copyright © 2018 Sean Woods. All rights reserved. -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. #---------------------------------------------------------------------- proc mapDir {resultvar prefix filepath} { upvar 1 $resultvar result if {![info exists result]} { Index: tools/loadICU.tcl ================================================================== --- tools/loadICU.tcl +++ tools/loadICU.tcl @@ -1,6 +1,19 @@ -#---------------------------------------------------------------------- +#! /usr/bin/env tclsh + +# Copyright © 2004 Kevin B. Kenny. All rights reserved. +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +#--------------------------------------------------------------------- # # loadICU,tcl -- # # Extracts locale strings from a distribution of ICU # (http://oss.software.ibm.com/developerworks/opensource/icu/project/) @@ -18,15 +31,10 @@ # None. # # Side effects: # Creates the message catalogs. # -#---------------------------------------------------------------------- -# -# Copyright © 2004 Kevin B. Kenny. All rights reserved. -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. #---------------------------------------------------------------------- puts stdout "TODO: output in UTF-8 in stead of using \\uhhhh sequences" exit; # Remove those two lines after modifying this tool. Index: tools/makeHeader.tcl ================================================================== --- tools/makeHeader.tcl +++ tools/makeHeader.tcl @@ -1,14 +1,22 @@ +# Copyright © 2018 Donal K. Fellows +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # makeHeader.tcl -- # # This script generates embeddable C source (in a .h file) from a .tcl # script. # -# Copyright © 2018 Donal K. Fellows -# -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. package require Tcl 8.6- namespace eval makeHeader { Index: tools/makeTestCases.tcl ================================================================== --- tools/makeTestCases.tcl +++ tools/makeTestCases.tcl @@ -1,5 +1,13 @@ +#! /usr/bin/env tclsh + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. # TODO - When integrating this with the Core, path names will need to be # swizzled here. package require msgcat set d [file dirname [file dirname [info script]]] Index: tools/mkVfs.tcl ================================================================== --- tools/mkVfs.tcl +++ tools/mkVfs.tcl @@ -1,5 +1,12 @@ +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + proc cat fname { set fname [open $fname r] set data [read $fname] close $fname return $data Index: tools/mkdepend.tcl ================================================================== --- tools/mkdepend.tcl +++ tools/mkdepend.tcl @@ -1,9 +1,6 @@ #============================================================================== -# -# mkdepend : generate dependency information from C/C++ files -# # Copyright © 1998, Nat Pryce # # Permission is hereby granted, without written agreement and without # license or royalty fees, to use, copy, modify, and distribute this # software and its documentation for any purpose, provided that the @@ -18,16 +15,26 @@ # THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A # PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" # BASIS, AND THE AUTHOR HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, # UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + #============================================================================== # # Modified heavily by David Gravereaux about 9/17/2006. # Original can be found @ # http://web.archive.org/web/20070616205924/http://www.doc.ic.ac.uk/~np2/software/mkdepend.html #============================================================================== + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# mkdepend : generate dependency information from C/C++ files array set mode_data {} set mode_data(vc32) {cl -nologo -E} set source_extensions [list .c .cpp .cxx .cc] Index: tools/regexpTestLib.tcl ================================================================== --- tools/regexpTestLib.tcl +++ tools/regexpTestLib.tcl @@ -1,12 +1,19 @@ +# Copyright © 1996 Sun Microsystems, Inc. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # regexpTestLib.tcl -- # # This file contains tcl procedures used by spencer2testregexp.tcl and # spencer2regexp.tcl, which are programs written to convert Henry # Spencer's test suite to tcl test files. -# -# Copyright © 1996 Sun Microsystems, Inc. proc readInputFile {} { global inFileName global lineArray Index: tools/tclOOScript.tcl ================================================================== --- tools/tclOOScript.tcl +++ tools/tclOOScript.tcl @@ -1,17 +1,24 @@ -# tclOOScript.h -- -# -# This file contains support scripts for TclOO. They are defined here so -# that the code can be definitely run even in safe interpreters; TclOO's -# core setup is safe. -# # Copyright © 2012-2019 Donal K. Fellows # Copyright © 2013 Andreas Kupries # Copyright © 2017 Gerald Lester # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# tclOOScript.h -- +# +# This file contains support scripts for TclOO. They are defined here so +# that the code can be definitely run even in safe interpreters; TclOO's +# core setup is safe. ::namespace eval ::oo { ::namespace path {} # Index: tools/tclZIC.tcl ================================================================== --- tools/tclZIC.tcl +++ tools/tclZIC.tcl @@ -1,5 +1,16 @@ +# Copyright © 2004 Kevin B. Kenny. All rights reserved. +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + #---------------------------------------------------------------------- # # tclZIC.tcl -- # # Take the time zone data source files from Arthur Olson's @@ -21,15 +32,10 @@ # # This program parses the timezone data in a means analogous to the # 'zic' command, and produces Tcl time zone information files suitable # for loading into the 'clock' namespace. # -#---------------------------------------------------------------------- -# -# Copyright © 2004 Kevin B. Kenny. All rights reserved. -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. #---------------------------------------------------------------------- # Define the names of the Olson files that we need to load. # We avoid the solar time files and the leap seconds. Index: tools/tcltk-man2html-utils.tcl ================================================================== --- tools/tcltk-man2html-utils.tcl +++ tools/tcltk-man2html-utils.tcl @@ -1,12 +1,18 @@ -## -## Utility functions for Man->HTML converter. Note that these -## functions are specifically intended to work with the format as used -## by Tcl and Tk; they do not cope with arbitrary nroff markup. -## -## Copyright © 1995-1997 Roger E. Critchlow Jr -## Copyright © 2004-2011 Donal K. Fellows +# Copyright © 1995-1997 Roger E. Critchlow Jr +# Copyright © 2004-2011 Donal K. Fellows + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# Utility functions for Man->HTML converter. Note that these +# functions are specifically intended to work with the format as used +# by Tcl and Tk; they do not cope with arbitrary nroff markup. set ::manual(report-level) 1 proc manerror {msg} { global manual Index: tools/tcltk-man2html.tcl ================================================================== --- tools/tcltk-man2html.tcl +++ tools/tcltk-man2html.tcl @@ -1,7 +1,17 @@ #!/usr/bin/env tclsh +# Copyright © 1995-1997 Roger E. Critchlow Jr +# Copyright © 2004-2010 Donal K. Fellows + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + if {[catch {package require Tcl 8.6-} msg]} { puts stderr "ERROR: $msg" puts stderr "If running this script from 'make html', set the\ NATIVE_TCLSH environment\nvariable to point to an installed\ tclsh8.6 (or the equivalent tclsh86.exe\non Windows)." @@ -16,13 +26,10 @@ # engineering. In that sense it's probably a good example of things # that a scripting language, like Tcl, can do well. It is offered as # an example of how someone might convert a specific set of man pages # into hypertext, not as a general solution to the problem. If you # try to use this, you'll be very much on your own. -# -# Copyright © 1995-1997 Roger E. Critchlow Jr -# Copyright © 2004-2010 Donal K. Fellows set ::Version "50/9.0" set ::CSSFILE "docs.css" ## Index: tools/tsdPerf.c ================================================================== --- tools/tsdPerf.c +++ tools/tsdPerf.c @@ -1,5 +1,14 @@ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + #include extern DLLEXPORT Tcl_LibraryInitProc Tsdperf_Init; static Tcl_ThreadDataKey key; Index: tools/tsdPerf.tcl ================================================================== --- tools/tsdPerf.tcl +++ tools/tsdPerf.tcl @@ -1,5 +1,13 @@ +#! /usr/bin/env tclsh + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. package require Thread set ::tids [list] for {set i 0} {$i < 4} {incr i} { Index: tools/uniClass.tcl ================================================================== --- tools/uniClass.tcl +++ tools/uniClass.tcl @@ -1,18 +1,21 @@ -#!/bin/sh -# The next line is executed by /bin/sh, but not tcl \ -exec tclsh "$0" ${1+"$@"} +#! /usr/bin/env tclsh +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. # +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # uniClass.tcl -- # # Generates the character ranges and singletons that are used in # generic/regc_locale.c for translation of character classes. # This file must be generated using a tclsh that contains the # correct corresponding tclUniData.c file (generated by uniParse.tcl) # in order for the class ranges to match. -# proc emitRange {first last} { global ranges numranges chars numchars extchars extranges if {$first < ($last-1)} { Index: tools/uniParse.tcl ================================================================== --- tools/uniParse.tcl +++ tools/uniParse.tcl @@ -1,15 +1,24 @@ +#! /usr/bin/env tclsh + +# Copyright © 1998-1999 Scriptics Corporation. +# All rights reserved. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # uniParse.tcl -- # # This program parses the UnicodeData file and generates the # corresponding tclUniData.c file with compressed character # data tables. The input to this program should be the latest # UnicodeData file from: # ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt -# -# Copyright © 1998-1999 Scriptics Corporation. -# All rights reserved. namespace eval uni { set shift 5; # number of bits of data within a page # This value can be adjusted to find the @@ -210,11 +219,10 @@ if {$i == [expr {0x10000 >> $shift}]} { set line [string trimright $line " \t,"] puts $f $line set lastpage [expr {[lindex $line end] >> $shift}] puts stdout "lastpage: $lastpage" - puts $f "#if TCL_UTF_MAX > 3 || TCL_MAJOR_VERSION > 8 || TCL_MINOR_VERSION > 6" set line " ," } append line [lindex $pMap $i] if {$i != $last} { append line ", " @@ -223,11 +231,10 @@ puts $f [string trimright $line] set line " " } } puts $f $line - puts $f "#endif /* TCL_UTF_MAX > 3 */" puts $f "}; /* * The groupMap is indexed by combining the alternate page number with * the page offset and returns a group number that identifies a unique @@ -240,11 +247,10 @@ for {set i 0} {$i <= $lasti} {incr i} { set page [lindex $pages $i] set lastj [expr {[llength $page] - 1}] if {$i == ($lastpage + 1)} { puts $f [string trimright $line " \t,"] - puts $f "#if TCL_UTF_MAX > 3 || TCL_MAJOR_VERSION > 8 || TCL_MINOR_VERSION > 6" set line " ," } for {set j 0} {$j <= $lastj} {incr j} { append line [lindex $page $j] if {$j != $lastj || $i != $lasti} { @@ -255,11 +261,10 @@ set line " " } } } puts $f $line - puts $f "#endif /* TCL_UTF_MAX > 3 */" puts $f "}; /* * Each group represents a unique set of character attributes. The attributes * are encoded into a 32-bit value as follows: @@ -340,15 +345,11 @@ } } puts $f $line puts -nonewline $f "}; -#if TCL_UTF_MAX > 3 || TCL_MAJOR_VERSION > 8 || TCL_MINOR_VERSION > 6 -# define UNICODE_OUT_OF_RANGE(ch) (((ch) & 0x1FFFFF) >= [format 0x%X $next]) -#else -# define UNICODE_OUT_OF_RANGE(ch) (((ch) & 0x1F0000) != 0) -#endif +#define UNICODE_OUT_OF_RANGE(ch) (((ch) & 0x1FFFFF) >= [format 0x%X $next]) /* * The following constants are used to determine the category of a * Unicode character. */ @@ -399,18 +400,14 @@ /* * This macro extracts the information about a character from the * Unicode character tables. */ -#if TCL_UTF_MAX > 3 || TCL_MAJOR_VERSION > 8 || TCL_MINOR_VERSION > 6 -# define GetUniCharInfo(ch) (groups\[groupMap\[pageMap\[((ch) & 0x1FFFFF) >> OFFSET_BITS\] | ((ch) & ((1 << OFFSET_BITS)-1))\]\]) -#else -# define GetUniCharInfo(ch) (groups\[groupMap\[pageMap\[((ch) & 0xFFFF) >> OFFSET_BITS\] | ((ch) & ((1 << OFFSET_BITS)-1))\]\]) -#endif +#define GetUniCharInfo(ch) (groups\[groupMap\[pageMap\[((ch) & 0x1FFFFF) >> OFFSET_BITS\] | ((ch) & ((1 << OFFSET_BITS)-1))\]\]) " close $f } uni::main return Index: tools/valgrind_check_success ================================================================== --- tools/valgrind_check_success +++ tools/valgrind_check_success @@ -1,7 +1,15 @@ #! /usr/bin/env tclsh +# Copyright © 2021 Nathan Coulter + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. proc main {sourcetype source} { switch $sourcetype { file { set chan [open $source] Index: unix/Makefile.in ================================================================== --- unix/Makefile.in +++ unix/Makefile.in @@ -1,6 +1,12 @@ +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. # +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file is a Makefile for Tcl. If it has the name "Makefile.in" then it is # a template for a Makefile; to generate the actual Makefile, run # "./configure", which is a configuration script generated by the "autoconf" # program (constructs like "@foo@" will get replaced in the actual Makefile. @@ -134,15 +140,10 @@ STUB_LIB_FILE = ${TCL_STUB_LIB_FILE} TCL_STUB_LIB_FLAG = @TCL_STUB_LIB_FLAG@ #TCL_STUB_LIB_FLAG = -ltclstub -# To compile without backward compatibility and deprecated code uncomment the -# following -NO_DEPRECATED_FLAGS = -#NO_DEPRECATED_FLAGS = -DTCL_NO_DEPRECATED - # Some versions of make, like SGI's, use the following variable to determine # which shell to use for executing commands: SHELL = @MAKEFILE_SHELL@ # Tcl used to let the configure script choose which program to use for @@ -291,15 +292,17 @@ ${AC_FLAGS} ${EXTRA_CFLAGS} @EXTRA_CC_SWITCHES@ TCLSH_OBJS = tclAppInit.o TCLTEST_OBJS = tclTestInit.o tclTest.o tclTestObj.o tclTestProcBodyObj.o \ - tclThreadTest.o tclUnixTest.o tclTestABSList.o + tclThreadTest.o tclUnixTest.o tclTestObjInterface.o \ + tclTestObjInterfaceInteger.o tclTestABSList.o -XTTEST_OBJS = xtTestInit.o tclTest.o tclTestObj.o tclTestProcBodyObj.o \ - tclThreadTest.o tclUnixTest.o tclXtNotify.o tclXtTest.o \ - tclTestABSList.o +XTTEST_OBJS = xtTestInit.o tclTest.o tclTestObj.o tclTestObjInterface.o \ + tclTestObjInterfaceInteger.o tclTestABSList.o\ + tclTestProcBodyObj.o tclThreadTest.o tclUnixTest.o tclXtNotify.o \ + tclXtTest.o GENERIC_OBJS = regcomp.o regexec.o regfree.o regerror.o tclAlloc.o \ tclArithSeries.o tclAssembly.o tclAsync.o tclBasic.o tclBinary.o \ tclCkalloc.o tclClock.o tclCmdAH.o tclCmdIL.o tclCmdMZ.o \ tclCompCmds.o tclCompCmdsGR.o tclCompCmdsSZ.o tclCompExpr.o \ @@ -308,12 +311,12 @@ tclEnv.o tclEvent.o tclExecute.o tclFCmd.o tclFileName.o tclGet.o \ tclHash.o tclHistory.o tclIndexObj.o tclInterp.o tclIO.o tclIOCmd.o \ tclIORChan.o tclIORTrans.o tclIOGT.o tclIOSock.o tclIOUtil.o \ tclLink.o tclListObj.o \ tclLiteral.o tclLoad.o tclMain.o tclNamesp.o tclNotify.o \ - tclObj.o tclOptimize.o tclPanic.o tclParse.o tclPathObj.o tclPipe.o \ - tclPkg.o tclPkgConfig.o tclPosixStr.o \ + tclObj.o tclObjInterface.o tclOptimize.o tclPanic.o tclParse.o \ + tclPathObj.o tclPipe.o tclPkg.o tclPkgConfig.o tclPosixStr.o \ tclPreserve.o tclProc.o tclProcess.o tclRegexp.o \ tclResolve.o tclResult.o tclScan.o tclStringObj.o \ tclStrToD.o tclThread.o \ tclThreadAlloc.o tclThreadJoin.o tclThreadStorage.o tclStubInit.o \ tclTimer.o tclTrace.o tclUtf.o tclUtil.o tclVar.o tclZlib.o \ @@ -448,10 +451,11 @@ $(GENERIC_DIR)/tclLoad.c \ $(GENERIC_DIR)/tclMain.c \ $(GENERIC_DIR)/tclNamesp.c \ $(GENERIC_DIR)/tclNotify.c \ $(GENERIC_DIR)/tclObj.c \ + $(GENERIC_DIR)/tclObjInterface.c \ $(GENERIC_DIR)/tclOptimize.c \ $(GENERIC_DIR)/tclParse.c \ $(GENERIC_DIR)/tclPathObj.c \ $(GENERIC_DIR)/tclPipe.c \ $(GENERIC_DIR)/tclPkg.c \ @@ -468,10 +472,12 @@ $(GENERIC_DIR)/tclStringObj.c \ $(GENERIC_DIR)/tclStrToD.c \ $(GENERIC_DIR)/tclTest.c \ $(GENERIC_DIR)/tclTestABSList.c \ $(GENERIC_DIR)/tclTestObj.c \ + $(GENERIC_DIR)/tclTestObjInterface.c \ + $(GENERIC_DIR)/tclTestObjInterfaceInteger \ $(GENERIC_DIR)/tclTestProcBodyObj.c \ $(GENERIC_DIR)/tclThread.c \ $(GENERIC_DIR)/tclThreadAlloc.c \ $(GENERIC_DIR)/tclThreadJoin.c \ $(GENERIC_DIR)/tclThreadStorage.c \ @@ -1411,10 +1417,13 @@ $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclLiteral.c tclObj.o: $(GENERIC_DIR)/tclObj.c $(COMPILEHDR) $(MATHHDRS) $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclObj.c +tclObjInterface.o: $(GENERIC_DIR)/tclObjInterface.c $(COMPILEHDR) $(MATHHDRS) + $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclObjInterface.c + tclOptimize.o: $(GENERIC_DIR)/tclOptimize.c $(COMPILEHDR) $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclOptimize.c tclLoad.o: $(GENERIC_DIR)/tclLoad.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclLoad.c @@ -1573,10 +1582,17 @@ $(CC) -c $(APP_CC_SWITCHES) $(GENERIC_DIR)/tclTestABSList.c tclTestObj.o: $(GENERIC_DIR)/tclTestObj.c $(MATHHDRS) $(CC) -c $(APP_CC_SWITCHES) $(GENERIC_DIR)/tclTestObj.c +tclTestObjInterface.o: $(GENERIC_DIR)/tclTestObjInterface.c $(MATHHDRS) + $(CC) -c $(APP_CC_SWITCHES) $(GENERIC_DIR)/tclTestObjInterface.c + +tclTestObjInterfaceInteger.o: $(GENERIC_DIR)/tclTestObjInterfaceInteger.c \ + $(MATHHDRS) + $(CC) -c $(APP_CC_SWITCHES) $(GENERIC_DIR)/tclTestObjInterfaceInteger.c + tclTestProcBodyObj.o: $(GENERIC_DIR)/tclTestProcBodyObj.c $(CC) -c $(APP_CC_SWITCHES) $(GENERIC_DIR)/tclTestProcBodyObj.c tclTimer.o: $(GENERIC_DIR)/tclTimer.c $(CC) -c $(CC_SWITCHES) $(GENERIC_DIR)/tclTimer.c DELETED unix/configure Index: unix/configure ================================================================== --- unix/configure +++ /dev/null @@ -1,12251 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for tcl 9.0. -# -# -# Copyright (C) 1992-1996, 1998-2017, 2020-2021 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 -as_nop=: -if test ${ZSH_VERSION+y} && (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 $as_nop - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - - -# Reset variables that may have inherited troublesome values from -# the environment. - -# IFS needs to be set, to space, tab, and newline, in precisely that order. -# (If _AS_PATH_WALK were called with IFS unset, it would have the -# side effect of setting IFS to empty, thus disabling word splitting.) -# Quoting is to prevent editors from complaining about space-tab. -as_nl=' -' -export as_nl -IFS=" "" $as_nl" - -PS1='$ ' -PS2='> ' -PS4='+ ' - -# Ensure predictable behavior from utilities with locale-dependent output. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# We cannot yet rely on "unset" to work, but we need these variables -# to be unset--not just set to an empty or harmless value--now, to -# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct -# also avoids known problems related to "unset" and subshell syntax -# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). -for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH -do eval test \${$as_var+y} \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done - -# Ensure that fds 0, 1, and 2 are open. -if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi -if (exec 3>&2) ; then :; else exec 2>/dev/null; fi - -# The user is always right. -if ${PATH_SEPARATOR+false} :; 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 - - -# 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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 - printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - - -# 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'. -printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 -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="as_nop=: -if test \${ZSH_VERSION+y} && (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 \$as_nop - 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 \$as_nop - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1 -blah=\$(echo \$(echo blah)) -test x\"\$blah\" = xblah || 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 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null -then : - as_have_required=yes -else $as_nop - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null -then : - -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null -then : - CONFIG_SHELL=$as_shell as_have_required=yes - if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null -then : - break 2 -fi -fi - done;; - esac - as_found=false -done -IFS=$as_save_IFS -if $as_found -then : - -else $as_nop - if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null -then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi -fi - - - 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'. -printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno -then : - printf "%s\n" "$0: This script requires a shell more modern than all" - printf "%s\n" "$0: the shells that I found on your system." - if test ${ZSH_VERSION+y} ; then - printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" - printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." - else - printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a 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_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop - -# 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=`printf "%s\n" "$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 || -printf "%s\n" 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_nop - 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_nop - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop - -# 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 - printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - printf "%s\n" "$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 || -printf "%s\n" 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" || - { printf "%s\n" "$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 -} - - -# Determine whether it's possible to make 'echo' print without a newline. -# These variables are no longer used directly by Autoconf, but are AC_SUBSTed -# for compatibility with existing Makefiles. -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 - -# For backward compatibility with old third-party macros, we provide -# the shell variables $as_echo and $as_echo_n. New code should use -# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. -as_echo='printf %s\n' -as_echo_n='printf %s' - - -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='tcl' -PACKAGE_TARNAME='tcl' -PACKAGE_VERSION='9.0' -PACKAGE_STRING='tcl 9.0' -PACKAGE_BUGREPORT='' -PACKAGE_URL='' - -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_STDIO_H -# include -#endif -#ifdef HAVE_STDLIB_H -# include -#endif -#ifdef HAVE_STRING_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_header_c_list= -ac_subst_vars='DLTEST_SUFFIX -DLTEST_LD -EXTRA_TCLSH_LIBS -EXTRA_BUILD_HTML -EXTRA_INSTALL_BINARIES -EXTRA_INSTALL -EXTRA_APP_CC_SWITCHES -EXTRA_CC_SWITCHES -PACKAGE_DIR -HTML_DIR -PRIVATE_INCLUDE_DIR -TCL_LIBRARY -TCL_MODULE_PATH -TCL_PACKAGE_PATH -BUILD_DLTEST -MAKEFILE_SHELL -DTRACE_OBJ -DTRACE_HDR -DTRACE_SRC -INSTALL_TZDATA -TCL_HAS_LONGLONG -TCL_UNSHARED_LIB_SUFFIX -TCL_SHARED_LIB_SUFFIX -TCL_LIB_VERSIONS_OK -TCL_BUILD_LIB_SPEC -LD_LIBRARY_PATH_VAR -TCL_SHARED_BUILD -CFG_TCL_UNSHARED_LIB_SUFFIX -CFG_TCL_SHARED_LIB_SUFFIX -TCL_SRC_DIR -TCL_BUILD_STUB_LIB_PATH -TCL_BUILD_STUB_LIB_SPEC -TCL_INCLUDE_SPEC -TCL_STUB_LIB_PATH -TCL_STUB_LIB_SPEC -TCL_STUB_LIB_FLAG -TCL_STUB_LIB_FILE -TCL_LIB_SPEC -TCL_LIB_FLAG -TCL_LIB_FILE -PKG_CFG_ARGS -TCL_YEAR -TCL_PATCH_LEVEL -TCL_MINOR_VERSION -TCL_MAJOR_VERSION -TCL_VERSION -TCL_BUILDTIME_LIBRARY -INSTALL_MSGS -INSTALL_LIBRARIES -TCL_ZIP_FILE -ZIPFS_BUILD -ZIP_INSTALL_OBJS -ZIP_PROG_VFSSEARCH -ZIP_PROG_OPTIONS -ZIP_PROG -MACHER_PROG -EXEEXT_FOR_BUILD -CC_FOR_BUILD -DTRACE -LDFLAGS_DEFAULT -CFLAGS_DEFAULT -INSTALL_STUB_LIB -DLL_INSTALL_DIR -INSTALL_LIB -MAKE_STUB_LIB -MAKE_LIB -SHLIB_SUFFIX -SHLIB_CFLAGS -SHLIB_LD_LIBS -TK_SHLIB_LD_EXTRAS -TCL_SHLIB_LD_EXTRAS -SHLIB_LD -STLIB_LD -LD_SEARCH_FLAGS -CC_SEARCH_FLAGS -LDFLAGS_OPTIMIZE -LDFLAGS_DEBUG -CFLAGS_NOLTO -CFLAGS_WARNING -CFLAGS_OPTIMIZE -CFLAGS_DEBUG -LDAIX_SRC -PLAT_SRCS -PLAT_OBJS -DL_OBJS -DL_LIBS -TCL_LIBS -LIBOBJS -AR -RANLIB -TOMMATH_INCLUDE -TOMMATH_SRCS -TOMMATH_OBJS -TCL_PC_CFLAGS -TCL_PC_REQUIRES_PRIVATE -ZLIB_INCLUDE -ZLIB_SRCS -ZLIB_OBJS -TCLSH_PROG -SHARED_BUILD -EGREP -GREP -CPP -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -MAN_FLAGS -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 -runstatedir -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 -OBJEXT_FOR_BUILD' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_man_symlinks -enable_man_compression -enable_man_suffix -with_encoding -enable_shared -with_system_libtommath -enable_64bit -enable_64bit_vis -enable_rpath -enable_corefoundation -enable_load -enable_symbols -enable_langinfo -enable_dll_unloading -with_tzdata -enable_dtrace -enable_framework -enable_zipfs -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP' - - -# 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' -runstatedir='${localstatedir}/run' -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 - - 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=`printf "%s\n" "$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=`printf "%s\n" "$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 ;; - - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - - -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=`printf "%s\n" "$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=`printf "%s\n" "$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. - printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - printf "%s\n" "$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" ;; - *) printf "%s\n" "$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 runstatedir -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 || -printf "%s\n" 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 tcl 9.0 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] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] - --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/tcl] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of tcl 9.0:";; - 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-man-symlinks use symlinks for the manpages (default: off) - --enable-man-compression=PROG - compress the manpages with PROG (default: off) - --enable-man-suffix=STRING - use STRING as a suffix to manpage file names - (default: no, tcl if enabled without - specifying STRING) - --enable-shared build and link with shared libraries (default: on) - --enable-64bit enable 64bit support (default: off) - --enable-64bit-vis enable 64bit Sparc VIS support (default: off) - --disable-rpath disable rpath support (default: on) - --enable-corefoundation use CoreFoundation API on MacOSX (default: on) - --enable-load allow dynamic loading and "load" command (default: - on) - --enable-symbols build with debugging symbols (default: off) - --enable-langinfo use nl_langinfo if possible to determine encoding at - startup, otherwise use old heuristic (default: on) - --enable-dll-unloading enable the 'unload' command (default: on) - --enable-dtrace build with DTrace support (default: off) - --enable-framework package shared libraries in MacOSX frameworks - (default: off) - --enable-zipfs build with Zipfs support (default: on) - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-encoding encoding for configuration values (default: utf-8) - --with-system-libtommath - use external libtommath (default: true if available, - false otherwise) - --with-tzdata install timezone data (default: autodetect) - -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 - CPP C preprocessor - -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 the package provider. -_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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`printf "%s\n" "$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 configure.gnu first; this name is used for a wrapper for - # Metaconfig's "Configure" on case-insensitive file systems. - 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 - printf "%s\n" "$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 -tcl configure 9.0 -generated by GNU Autoconf 2.71 - -Copyright (C) 2021 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 conftest.beam - 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\"" -printf "%s\n" "$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 - printf "%s\n" "$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_nop - printf "%s\n" "$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_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - eval "$3=yes" -else $as_nop - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 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 - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - } -then : - ac_retval=0 -else $as_nop - printf "%s\n" "$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_cpp - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext - 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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link") 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 - printf "%s\n" "$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_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - } -then : - ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. */ - -#include -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main (void) -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - eval "$3=yes" -else $as_nop - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func - -# ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR -# ------------------------------------------------------------------ -# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR -# accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR. -ac_fn_check_decl () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - as_decl_name=`echo $2|sed 's/ *(.*//'` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -printf %s "checking whether $as_decl_name is declared... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop - as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - eval ac_save_FLAGS=\$$6 - as_fn_append $6 " $5" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main (void) -{ -#ifndef $as_decl_name -#ifdef __cplusplus - (void) $as_decl_use; -#else - (void) $as_decl_name; -#endif -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - eval "$3=yes" -else $as_nop - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - eval $6=\$ac_save_FLAGS - -fi -eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_check_decl - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main (void) -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main (void) -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - -else $as_nop - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_type - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that -# executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - 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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } -then : - ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: program exited with status $ac_status" >&5 - printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run - -# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES -# ---------------------------------------------------- -# Tries to find if the field MEMBER exists in type AGGR, after including -# INCLUDES, setting cache variable VAR accordingly. -ac_fn_c_check_member () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 -printf %s "checking for $2.$3... " >&6; } -if eval test \${$4+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main (void) -{ -static $2 ac_aggr; -if (ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - eval "$4=yes" -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$5 -int -main (void) -{ -static $2 ac_aggr; -if (sizeof ac_aggr.$3) -return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - eval "$4=yes" -else $as_nop - eval "$4=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -eval ac_res=\$$4 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_member -ac_configure_args_raw= -for ac_arg -do - case $ac_arg in - *\'*) - ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append ac_configure_args_raw " '$ac_arg'" -done - -case $ac_configure_args_raw in - *$as_nl*) - ac_safe_unquote= ;; - *) - ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. - ac_unsafe_a="$ac_unsafe_z#~" - ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" - ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; -esac - -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 tcl $as_me 9.0, which was -generated by GNU Autoconf 2.71. Invocation command line was - - $ $0$ac_configure_args_raw - -_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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - printf "%s\n" "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=`printf "%s\n" "$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=$? - # Sanitize IFS. - IFS=" "" $as_nl" - # Save into config.log some information that might help in debugging. - { - echo - - printf "%s\n" "## ---------------- ## -## 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_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -printf "%s\n" "$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 - - printf "%s\n" "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - printf "%s\n" "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - printf "%s\n" "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - printf "%s\n" "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - printf "%s\n" "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - printf "%s\n" "$as_me: caught signal $ac_signal" - printf "%s\n" "$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 - -printf "%s\n" "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h - -printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h - -printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h - -printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h - -printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h - -printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -if test -n "$CONFIG_SITE"; then - ac_site_files="$CONFIG_SITE" -elif test "x$prefix" != xNONE; then - ac_site_files="$prefix/share/config.site $prefix/etc/config.site" -else - ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" -fi - -for ac_site_file in $ac_site_files -do - case $ac_site_file in #( - */*) : - ;; #( - *) : - ac_site_file=./$ac_site_file ;; -esac - if test -f "$ac_site_file" && test -r "$ac_site_file"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -printf "%s\n" "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -printf "%s\n" "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Test code for whether the C compiler supports C89 (global declarations) -ac_c_conftest_c89_globals=' -/* Does the compiler advertise C89 conformance? - Do not test the value of __STDC__, because some compilers set it to 0 - while being otherwise adequately conformant. */ -#if !defined __STDC__ -# error "Compiler does not advertise C89 conformance" -#endif - -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ -struct buf { int x; }; -struct buf * (*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 do not provoke an error unfortunately, instead are silently treated - as an "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 is necessary to write \x00 == 0 to get something - that is 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 **, int *(*)(struct buf *, struct stat *, int), - int, int);' - -# Test code for whether the C compiler supports C89 (body of main). -ac_c_conftest_c89_main=' -ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); -' - -# Test code for whether the C compiler supports C99 (global declarations) -ac_c_conftest_c99_globals=' -// Does the compiler advertise C99 conformance? -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L -# error "Compiler does not advertise C99 conformance" -#endif - -#include -extern int puts (const char *); -extern int printf (const char *, ...); -extern int dprintf (int, const char *, ...); -extern void *malloc (size_t); - -// Check varargs macros. These examples are taken from C99 6.10.3.5. -// dprintf is used instead of fprintf to avoid needing to declare -// FILE and stderr. -#define debug(...) dprintf (2, __VA_ARGS__) -#define showlist(...) puts (#__VA_ARGS__) -#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) -static void -test_varargs_macros (void) -{ - int x = 1234; - int y = 5678; - debug ("Flag"); - debug ("X = %d\n", x); - showlist (The first, second, and third items.); - report (x>y, "x is %d but y is %d", x, y); -} - -// Check long long types. -#define BIG64 18446744073709551615ull -#define BIG32 4294967295ul -#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) -#if !BIG_OK - #error "your preprocessor is broken" -#endif -#if BIG_OK -#else - #error "your preprocessor is broken" -#endif -static long long int bignum = -9223372036854775807LL; -static unsigned long long int ubignum = BIG64; - -struct incomplete_array -{ - int datasize; - double data[]; -}; - -struct named_init { - int number; - const wchar_t *name; - double average; -}; - -typedef const char *ccp; - -static inline int -test_restrict (ccp restrict text) -{ - // See if C++-style comments work. - // Iterate through items via the restricted pointer. - // Also check for declarations in for loops. - for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) - continue; - return 0; -} - -// Check varargs and va_copy. -static bool -test_varargs (const char *format, ...) -{ - va_list args; - va_start (args, format); - va_list args_copy; - va_copy (args_copy, args); - - const char *str = ""; - int number = 0; - float fnumber = 0; - - while (*format) - { - switch (*format++) - { - case '\''s'\'': // string - str = va_arg (args_copy, const char *); - break; - case '\''d'\'': // int - number = va_arg (args_copy, int); - break; - case '\''f'\'': // float - fnumber = va_arg (args_copy, double); - break; - default: - break; - } - } - va_end (args_copy); - va_end (args); - - return *str && number && fnumber; -} -' - -# Test code for whether the C compiler supports C99 (body of main). -ac_c_conftest_c99_main=' - // Check bool. - _Bool success = false; - success |= (argc != 0); - - // Check restrict. - if (test_restrict ("String literal") == 0) - success = true; - char *restrict newvar = "Another string"; - - // Check varargs. - success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); - test_varargs_macros (); - - // Check flexible array members. - struct incomplete_array *ia = - malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); - ia->datasize = 10; - for (int i = 0; i < ia->datasize; ++i) - ia->data[i] = i * 1.234; - - // Check named initializers. - struct named_init ni = { - .number = 34, - .name = L"Test wide string", - .average = 543.34343, - }; - - ni.number = 58; - - int dynamic_array[ni.number]; - dynamic_array[0] = argv[0][0]; - dynamic_array[ni.number - 1] = 543; - - // work around unused variable warnings - ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' - || dynamic_array[ni.number - 1] != 543); -' - -# Test code for whether the C compiler supports C11 (global declarations) -ac_c_conftest_c11_globals=' -// Does the compiler advertise C11 conformance? -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L -# error "Compiler does not advertise C11 conformance" -#endif - -// Check _Alignas. -char _Alignas (double) aligned_as_double; -char _Alignas (0) no_special_alignment; -extern char aligned_as_int; -char _Alignas (0) _Alignas (int) aligned_as_int; - -// Check _Alignof. -enum -{ - int_alignment = _Alignof (int), - int_array_alignment = _Alignof (int[100]), - char_alignment = _Alignof (char) -}; -_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); - -// Check _Noreturn. -int _Noreturn does_not_return (void) { for (;;) continue; } - -// Check _Static_assert. -struct test_static_assert -{ - int x; - _Static_assert (sizeof (int) <= sizeof (long int), - "_Static_assert does not work in struct"); - long int y; -}; - -// Check UTF-8 literals. -#define u8 syntax error! -char const utf8_literal[] = u8"happens to be ASCII" "another string"; - -// Check duplicate typedefs. -typedef long *long_ptr; -typedef long int *long_ptr; -typedef long_ptr long_ptr; - -// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. -struct anonymous -{ - union { - struct { int i; int j; }; - struct { int k; long int l; } w; - }; - int m; -} v1; -' - -# Test code for whether the C compiler supports C11 (body of main). -ac_c_conftest_c11_main=' - _Static_assert ((offsetof (struct anonymous, i) - == offsetof (struct anonymous, w.k)), - "Anonymous union alignment botch"); - v1.i = 2; - v1.w.k = 5; - ok |= v1.i != 5; -' - -# Test code for whether the C compiler supports C11 (complete). -ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} -${ac_c_conftest_c99_globals} -${ac_c_conftest_c11_globals} - -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - ${ac_c_conftest_c99_main} - ${ac_c_conftest_c11_main} - return ok; -} -" - -# Test code for whether the C compiler supports C99 (complete). -ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} -${ac_c_conftest_c99_globals} - -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - ${ac_c_conftest_c99_main} - return ok; -} -" - -# Test code for whether the C compiler supports C89 (complete). -ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} - -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - return ok; -} -" - -as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" -as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" -as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" -as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" -as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" -as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" -as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" -as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" -as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" -as_fn_append ac_header_c_list " sys/time.h sys_time_h HAVE_SYS_TIME_H" -# 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,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -printf "%s\n" "$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=`printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`${MAKE-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 - - - - - - -TCL_VERSION=9.0 -TCL_MAJOR_VERSION=9 -TCL_MINOR_VERSION=0 -TCL_PATCH_LEVEL="a4" -VERSION=${TCL_VERSION} - -EXTRA_INSTALL_BINARIES=${EXTRA_INSTALL_BINARIES:-"@:"} -EXTRA_BUILD_HTML=${EXTRA_BUILD_HTML:-"@:"} - -#------------------------------------------------------------------------ -# Setup configure arguments for bundled packages -#------------------------------------------------------------------------ - -PKG_CFG_ARGS="$ac_configure_args ${PKG_CFG_ARGS}" - -if test -r "$cache_file" -a -f "$cache_file"; then - case $cache_file in - [\\/]* | ?:[\\/]* ) pkg_cache_file=$cache_file ;; - *) pkg_cache_file=../../$cache_file ;; - esac - PKG_CFG_ARGS="${PKG_CFG_ARGS} --cache-file=$pkg_cache_file" -fi - -#------------------------------------------------------------------------ -# Empty slate for bundled packages, to avoid stale configuration -#------------------------------------------------------------------------ -#rm -Rf pkgs -if test -f Makefile; then - make distclean-packages -fi - -#------------------------------------------------------------------------ -# Handle the --prefix=... option -#------------------------------------------------------------------------ - -if test "${prefix}" = "NONE"; then - prefix=/usr/local -fi -if test "${exec_prefix}" = "NONE"; then - exec_prefix=$prefix -fi -# Make sure srcdir is fully qualified! -srcdir="`cd "$srcdir" ; pwd`" -TCL_SRC_DIR="`cd "$srcdir"/..; pwd`" - -#------------------------------------------------------------------------ -# Compress and/or soft link the manpages? -#------------------------------------------------------------------------ - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use symlinks for manpages" >&5 -printf %s "checking whether to use symlinks for manpages... " >&6; } - # Check whether --enable-man-symlinks was given. -if test ${enable_man_symlinks+y} -then : - enableval=$enable_man_symlinks; test "$enableval" != "no" && MAN_FLAGS="$MAN_FLAGS --symlinks" -else $as_nop - enableval="no" -fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enableval" >&5 -printf "%s\n" "$enableval" >&6; } - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to compress the manpages" >&5 -printf %s "checking whether to compress the manpages... " >&6; } - # Check whether --enable-man-compression was given. -if test ${enable_man_compression+y} -then : - enableval=$enable_man_compression; case $enableval in - yes) as_fn_error $? "missing argument to --enable-man-compression" "$LINENO" 5;; - no) ;; - *) MAN_FLAGS="$MAN_FLAGS --compress $enableval";; - esac -else $as_nop - enableval="no" -fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enableval" >&5 -printf "%s\n" "$enableval" >&6; } - if test "$enableval" != "no"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compressed file suffix" >&5 -printf %s "checking for compressed file suffix... " >&6; } - touch TeST - $enableval TeST - Z=`ls TeST* | sed 's/^....//'` - rm -f TeST* - MAN_FLAGS="$MAN_FLAGS --extension $Z" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $Z" >&5 -printf "%s\n" "$Z" >&6; } - fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to add a package name suffix for the manpages" >&5 -printf %s "checking whether to add a package name suffix for the manpages... " >&6; } - # Check whether --enable-man-suffix was given. -if test ${enable_man_suffix+y} -then : - enableval=$enable_man_suffix; case $enableval in - yes) enableval="tcl" MAN_FLAGS="$MAN_FLAGS --suffix $enableval";; - no) ;; - *) MAN_FLAGS="$MAN_FLAGS --suffix $enableval";; - esac -else $as_nop - enableval="no" -fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enableval" >&5 -printf "%s\n" "$enableval" >&6; } - - - - -#------------------------------------------------------------------------ -# Standard compiler checks -#------------------------------------------------------------------------ - -# If the user did not set CFLAGS, set it now to keep -# the AC_PROG_CC macro from adding "-g -O2". -if test "${CFLAGS+set}" != "set" ; then - CFLAGS="" -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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "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:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. -set dummy ${ac_tool_prefix}clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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}clang" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "clang", so it can be a program name with args. -set dummy clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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="clang" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$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 - -fi - - -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$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. -printf "%s\n" "$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 -version; 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\"" -printf "%s\n" "$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 - printf "%s\n" "$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 (void) -{ - - ; - 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. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -printf %s "checking whether the C compiler works... " >&6; } -ac_link_default=`printf "%s\n" "$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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - printf "%s\n" "$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+y} && 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 $as_nop - ac_file='' -fi -if test -z "$ac_file" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$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_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -printf %s "checking for C compiler default output file name... " >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -printf "%s\n" "$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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -printf %s "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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - printf "%s\n" "$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_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -printf "%s\n" "$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 (void) -{ -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. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -printf %s "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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - printf "%s\n" "$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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - printf "%s\n" "$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 - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -printf "%s\n" "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -printf %s "checking for suffix of object files... " >&6; } -if test ${ac_cv_objext+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - ; - 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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - printf "%s\n" "$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_nop - printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -printf "%s\n" "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 -printf %s "checking whether the compiler supports GNU C... " >&6; } -if test ${ac_cv_c_compiler_gnu+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+y} -ac_save_CFLAGS=$CFLAGS -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -printf %s "checking whether $CC accepts -g... " >&6; } -if test ${ac_cv_prog_cc_g+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_g=yes -else $as_nop - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - -else $as_nop - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - ; - 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.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -printf "%s\n" "$ac_cv_prog_cc_g" >&6; } -if test $ac_test_CFLAGS; 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 -ac_prog_cc_stdc=no -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 -printf %s "checking for $CC option to enable C11 features... " >&6; } -if test ${ac_cv_prog_cc_c11+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c11_program -_ACEOF -for ac_arg in '' -std=gnu11 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c11=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c11" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi - -if test "x$ac_cv_prog_cc_c11" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 -printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 -printf %s "checking for $CC option to enable C99 features... " >&6; } -if test ${ac_cv_prog_cc_c99+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c99_program -_ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c99=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c99" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi - -if test "x$ac_cv_prog_cc_c99" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 -printf %s "checking for $CC option to enable C89 features... " >&6; } -if test ${ac_cv_prog_cc_c89+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c89_program -_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 conftest.beam - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi - -if test "x$ac_cv_prog_cc_c89" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 -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 - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 -printf %s "checking for inline... " >&6; } -if test ${ac_cv_c_inline+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_inline=no -for ac_kw in inline __inline__ __inline; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __cplusplus -typedef int foo_t; -static $ac_kw foo_t static_foo (void) {return 0; } -$ac_kw foo_t foo (void) {return 0; } -#endif - -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_c_inline=$ac_kw -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - test "$ac_cv_c_inline" != no && break -done - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 -printf "%s\n" "$ac_cv_c_inline" >&6; } - -case $ac_cv_c_inline in - inline | yes) ;; - *) - case $ac_cv_c_inline in - no) ac_val=;; - *) ac_val=$ac_cv_c_inline;; - esac - cat >>confdefs.h <<_ACEOF -#ifndef __cplusplus -#define inline $ac_val -#endif -_ACEOF - ;; -esac - - - -#-------------------------------------------------------------------- -# Supply substitutes for missing POSIX header files. Special notes: -# - stdlib.h doesn't define strtol or strtoul in some versions -# of SunOS -# - some versions of string.h don't declare procedures such -# as strstr -# Do this early, otherwise an autoconf bug throws errors on configure -#-------------------------------------------------------------------- - -ac_header= ac_cache= -for ac_item in $ac_header_c_list -do - if test $ac_cache; then - ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" - if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then - printf "%s\n" "#define $ac_item 1" >> confdefs.h - fi - ac_header= ac_cache= - elif test $ac_header; then - ac_cache=$ac_item - else - ac_header=$ac_item - fi -done - - - - - - - - -if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes -then : - -printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h - -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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -printf %s "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test ${ac_cv_prog_CPP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - # Double quotes because $CC needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : - -else $as_nop - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : - # Broken: success on invalid input. -continue -else $as_nop - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok -then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -printf "%s\n" "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : - -else $as_nop - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : - # Broken: success on invalid input. -continue -else $as_nop - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok -then : - -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -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 - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -printf %s "checking for grep that handles long lines and -e... " >&6; } -if test ${ac_cv_path_GREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in grep ggrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -printf "%s\n" "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -printf %s "checking for egrep... " >&6; } -if test ${ac_cv_path_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in egrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -printf "%s\n" "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - - - ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" -if test "x$ac_cv_header_string_h" = xyes -then : - tcl_ok=1 -else $as_nop - tcl_ok=0 -fi - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "strstr" >/dev/null 2>&1 -then : - -else $as_nop - tcl_ok=0 -fi -rm -rf conftest* - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "strerror" >/dev/null 2>&1 -then : - -else $as_nop - tcl_ok=0 -fi -rm -rf conftest* - - - # See also memmove check below for a place where NO_STRING_H can be - # set and why. - - if test $tcl_ok = 0; then - -printf "%s\n" "#define NO_STRING_H 1" >>confdefs.h - - fi - - ac_fn_c_check_header_compile "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_wait_h" = xyes -then : - -else $as_nop - -printf "%s\n" "#define NO_SYS_WAIT_H 1" >>confdefs.h - -fi - - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" -if test "x$ac_cv_header_dlfcn_h" = xyes -then : - -else $as_nop - -printf "%s\n" "#define NO_DLFCN_H 1" >>confdefs.h - -fi - - - # OS/390 lacks sys/param.h (and doesn't need it, by chance). - ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_param_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_PARAM_H 1" >>confdefs.h - -fi - - - -#-------------------------------------------------------------------- -# Determines the correct executable file extension (.exe) -#-------------------------------------------------------------------- - - - -#------------------------------------------------------------------------ -# If we're using GCC, see if the compiler understands -pipe. If so, use it. -# It makes compiling go faster. (This is only a performance feature.) -#------------------------------------------------------------------------ - -if test -z "$no_pipe" && test -n "$GCC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the compiler understands -pipe" >&5 -printf %s "checking if the compiler understands -pipe... " >&6; } -if test ${tcl_cv_cc_pipe+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -pipe" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_cc_pipe=yes -else $as_nop - tcl_cv_cc_pipe=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CFLAGS=$hold_cflags -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_pipe" >&5 -printf "%s\n" "$tcl_cv_cc_pipe" >&6; } - if test $tcl_cv_cc_pipe = yes; then - CFLAGS="$CFLAGS -pipe" - fi -fi - -#------------------------------------------------------------------------ -# Embedded configuration information, encoding to use for the values, TIP #59 -#------------------------------------------------------------------------ - - - -# Check whether --with-encoding was given. -if test ${with_encoding+y} -then : - withval=$with_encoding; with_tcencoding=${withval} -fi - - - if test x"${with_tcencoding}" != x ; then - -printf "%s\n" "#define TCL_CFGVAL_ENCODING \"${with_tcencoding}\"" >>confdefs.h - - else - -printf "%s\n" "#define TCL_CFGVAL_ENCODING \"utf-8\"" >>confdefs.h - - fi - - -#-------------------------------------------------------------------- -# Look for libraries that we will need when compiling the Tcl shell -#-------------------------------------------------------------------- - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 -printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } -if test ${ac_cv_c_undeclared_builtin_options+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_save_CFLAGS=$CFLAGS - ac_cv_c_undeclared_builtin_options='cannot detect' - for ac_arg in '' -fno-builtin; do - CFLAGS="$ac_save_CFLAGS $ac_arg" - # This test program should *not* compile successfully. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ -(void) strchr; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - -else $as_nop - # This test program should compile successfully. - # No library function is consistently available on - # freestanding implementations, so test against a dummy - # declaration. Include always-available headers on the - # off chance that they somehow elicit warnings. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include -extern void ac_decl (int, char *); - -int -main (void) -{ -(void) ac_decl (0, (char *) 0); - (void) ac_decl; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - if test x"$ac_arg" = x -then : - ac_cv_c_undeclared_builtin_options='none needed' -else $as_nop - ac_cv_c_undeclared_builtin_options=$ac_arg -fi - break -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - done - CFLAGS=$ac_save_CFLAGS - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 -printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } - case $ac_cv_c_undeclared_builtin_options in #( - 'cannot detect') : - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot make $CC report undeclared builtins -See \`config.log' for more details" "$LINENO" 5; } ;; #( - 'none needed') : - ac_c_undeclared_builtin_options='' ;; #( - *) : - ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; -esac - - - #-------------------------------------------------------------------- - # On a few very rare systems, all of the libm.a stuff is - # already in libc.a. Set compiler flags accordingly. - #-------------------------------------------------------------------- - - ac_fn_c_check_func "$LINENO" "sin" "ac_cv_func_sin" -if test "x$ac_cv_func_sin" = xyes -then : - MATH_LIBS="" -else $as_nop - MATH_LIBS="-lm" -fi - - - #-------------------------------------------------------------------- - # Interactive UNIX requires -linet instead of -lsocket, plus it - # needs net/errno.h to define the socket-related error codes. - #-------------------------------------------------------------------- - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -linet" >&5 -printf %s "checking for main in -linet... " >&6; } -if test ${ac_cv_lib_inet_main+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-linet $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - -int -main (void) -{ -return main (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_inet_main=yes -else $as_nop - ac_cv_lib_inet_main=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_main" >&5 -printf "%s\n" "$ac_cv_lib_inet_main" >&6; } -if test "x$ac_cv_lib_inet_main" = xyes -then : - LIBS="$LIBS -linet" -fi - - ac_fn_c_check_header_compile "$LINENO" "net/errno.h" "ac_cv_header_net_errno_h" "$ac_includes_default" -if test "x$ac_cv_header_net_errno_h" = xyes -then : - - -printf "%s\n" "#define HAVE_NET_ERRNO_H 1" >>confdefs.h - -fi - - - #-------------------------------------------------------------------- - # Check for the existence of the -lsocket and -lnsl libraries. - # The order here is important, so that they end up in the right - # order in the command line generated by make. Here are some - # special considerations: - # 1. Use "connect" and "accept" to check for -lsocket, and - # "gethostbyname" to check for -lnsl. - # 2. Use each function name only once: can't redo a check because - # autoconf caches the results of the last check and won't redo it. - # 3. Use -lnsl and -lsocket only if they supply procedures that - # aren't already present in the normal libraries. This is because - # IRIX 5.2 has libraries, but they aren't needed and they're - # bogus: they goof up name resolution if used. - # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. - # To get around this problem, check for both libraries together - # if -lsocket doesn't work by itself. - #-------------------------------------------------------------------- - - tcl_checkBoth=0 - ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" -if test "x$ac_cv_func_connect" = xyes -then : - tcl_checkSocket=0 -else $as_nop - tcl_checkSocket=1 -fi - - if test "$tcl_checkSocket" = 1; then - ac_fn_c_check_func "$LINENO" "setsockopt" "ac_cv_func_setsockopt" -if test "x$ac_cv_func_setsockopt" = xyes -then : - -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for setsockopt in -lsocket" >&5 -printf %s "checking for setsockopt in -lsocket... " >&6; } -if test ${ac_cv_lib_socket_setsockopt+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsocket $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char setsockopt (); -int -main (void) -{ -return setsockopt (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_socket_setsockopt=yes -else $as_nop - ac_cv_lib_socket_setsockopt=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_setsockopt" >&5 -printf "%s\n" "$ac_cv_lib_socket_setsockopt" >&6; } -if test "x$ac_cv_lib_socket_setsockopt" = xyes -then : - LIBS="$LIBS -lsocket" -else $as_nop - tcl_checkBoth=1 -fi - -fi - - fi - if test "$tcl_checkBoth" = 1; then - tk_oldLibs=$LIBS - LIBS="$LIBS -lsocket -lnsl" - ac_fn_c_check_func "$LINENO" "accept" "ac_cv_func_accept" -if test "x$ac_cv_func_accept" = xyes -then : - tcl_checkNsl=0 -else $as_nop - LIBS=$tk_oldLibs -fi - - fi - ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" -if test "x$ac_cv_func_gethostbyname" = xyes -then : - -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 -printf %s "checking for gethostbyname in -lnsl... " >&6; } -if test ${ac_cv_lib_nsl_gethostbyname+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnsl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char gethostbyname (); -int -main (void) -{ -return gethostbyname (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_nsl_gethostbyname=yes -else $as_nop - ac_cv_lib_nsl_gethostbyname=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 -printf "%s\n" "$ac_cv_lib_nsl_gethostbyname" >&6; } -if test "x$ac_cv_lib_nsl_gethostbyname" = xyes -then : - LIBS="$LIBS -lnsl" -fi - -fi - - - -printf "%s\n" "#define _REENTRANT 1" >>confdefs.h - - -printf "%s\n" "#define _THREAD_SAFE 1" >>confdefs.h - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lpthread" >&5 -printf %s "checking for pthread_mutex_init in -lpthread... " >&6; } -if test ${ac_cv_lib_pthread_pthread_mutex_init+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpthread $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char pthread_mutex_init (); -int -main (void) -{ -return pthread_mutex_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_pthread_pthread_mutex_init=yes -else $as_nop - ac_cv_lib_pthread_pthread_mutex_init=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_mutex_init" >&5 -printf "%s\n" "$ac_cv_lib_pthread_pthread_mutex_init" >&6; } -if test "x$ac_cv_lib_pthread_pthread_mutex_init" = xyes -then : - tcl_ok=yes -else $as_nop - tcl_ok=no -fi - - if test "$tcl_ok" = "no"; then - # Check a little harder for __pthread_mutex_init in the same - # library, as some systems hide it there until pthread.h is - # defined. We could alternatively do an AC_TRY_COMPILE with - # pthread.h, but that will work with libpthread really doesn't - # exist, like AIX 4.2. [Bug: 4359] - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __pthread_mutex_init in -lpthread" >&5 -printf %s "checking for __pthread_mutex_init in -lpthread... " >&6; } -if test ${ac_cv_lib_pthread___pthread_mutex_init+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpthread $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char __pthread_mutex_init (); -int -main (void) -{ -return __pthread_mutex_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_pthread___pthread_mutex_init=yes -else $as_nop - ac_cv_lib_pthread___pthread_mutex_init=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread___pthread_mutex_init" >&5 -printf "%s\n" "$ac_cv_lib_pthread___pthread_mutex_init" >&6; } -if test "x$ac_cv_lib_pthread___pthread_mutex_init" = xyes -then : - tcl_ok=yes -else $as_nop - tcl_ok=no -fi - - fi - - if test "$tcl_ok" = "yes"; then - # The space is needed - THREADS_LIBS=" -lpthread" - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lpthreads" >&5 -printf %s "checking for pthread_mutex_init in -lpthreads... " >&6; } -if test ${ac_cv_lib_pthreads_pthread_mutex_init+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lpthreads $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char pthread_mutex_init (); -int -main (void) -{ -return pthread_mutex_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_pthreads_pthread_mutex_init=yes -else $as_nop - ac_cv_lib_pthreads_pthread_mutex_init=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthreads_pthread_mutex_init" >&5 -printf "%s\n" "$ac_cv_lib_pthreads_pthread_mutex_init" >&6; } -if test "x$ac_cv_lib_pthreads_pthread_mutex_init" = xyes -then : - _ok=yes -else $as_nop - tcl_ok=no -fi - - if test "$tcl_ok" = "yes"; then - # The space is needed - THREADS_LIBS=" -lpthreads" - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lc" >&5 -printf %s "checking for pthread_mutex_init in -lc... " >&6; } -if test ${ac_cv_lib_c_pthread_mutex_init+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lc $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char pthread_mutex_init (); -int -main (void) -{ -return pthread_mutex_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_c_pthread_mutex_init=yes -else $as_nop - ac_cv_lib_c_pthread_mutex_init=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_pthread_mutex_init" >&5 -printf "%s\n" "$ac_cv_lib_c_pthread_mutex_init" >&6; } -if test "x$ac_cv_lib_c_pthread_mutex_init" = xyes -then : - tcl_ok=yes -else $as_nop - tcl_ok=no -fi - - if test "$tcl_ok" = "no"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_init in -lc_r" >&5 -printf %s "checking for pthread_mutex_init in -lc_r... " >&6; } -if test ${ac_cv_lib_c_r_pthread_mutex_init+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lc_r $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char pthread_mutex_init (); -int -main (void) -{ -return pthread_mutex_init (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_c_r_pthread_mutex_init=yes -else $as_nop - ac_cv_lib_c_r_pthread_mutex_init=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_mutex_init" >&5 -printf "%s\n" "$ac_cv_lib_c_r_pthread_mutex_init" >&6; } -if test "x$ac_cv_lib_c_r_pthread_mutex_init" = xyes -then : - tcl_ok=yes -else $as_nop - tcl_ok=no -fi - - if test "$tcl_ok" = "yes"; then - # The space is needed - THREADS_LIBS=" -pthread" - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Don't know how to find pthread lib on your system - you must edit the LIBS in the Makefile..." >&5 -printf "%s\n" "$as_me: WARNING: Don't know how to find pthread lib on your system - you must edit the LIBS in the Makefile..." >&2;} - fi - fi - fi - fi - - # Does the pthread-implementation provide - # 'pthread_attr_setstacksize' ? - - ac_saved_libs=$LIBS - LIBS="$LIBS $THREADS_LIBS" - ac_fn_c_check_func "$LINENO" "pthread_attr_setstacksize" "ac_cv_func_pthread_attr_setstacksize" -if test "x$ac_cv_func_pthread_attr_setstacksize" = xyes -then : - printf "%s\n" "#define HAVE_PTHREAD_ATTR_SETSTACKSIZE 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "pthread_atfork" "ac_cv_func_pthread_atfork" -if test "x$ac_cv_func_pthread_atfork" = xyes -then : - printf "%s\n" "#define HAVE_PTHREAD_ATFORK 1" >>confdefs.h - -fi - - LIBS=$ac_saved_libs - - # TIP #509 - ac_fn_check_decl "$LINENO" "PTHREAD_MUTEX_RECURSIVE" "ac_cv_have_decl_PTHREAD_MUTEX_RECURSIVE" "#include -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_PTHREAD_MUTEX_RECURSIVE" = xyes -then : - ac_have_decl=1 -else $as_nop - ac_have_decl=0 -fi -printf "%s\n" "#define HAVE_DECL_PTHREAD_MUTEX_RECURSIVE $ac_have_decl" >>confdefs.h -if test $ac_have_decl = 1 -then : - tcl_ok=yes -else $as_nop - tcl_ok=no -fi - - - -# Add the threads support libraries -LIBS="$LIBS$THREADS_LIBS" - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to build libraries" >&5 -printf %s "checking how to build libraries... " >&6; } - # Check whether --enable-shared was given. -if test ${enable_shared+y} -then : - enableval=$enable_shared; tcl_ok=$enableval -else $as_nop - tcl_ok=yes -fi - - if test "$tcl_ok" = "yes" ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: shared" >&5 -printf "%s\n" "shared" >&6; } - SHARED_BUILD=1 - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: static" >&5 -printf "%s\n" "static" >&6; } - SHARED_BUILD=0 - -printf "%s\n" "#define STATIC_BUILD 1" >>confdefs.h - - fi - - - -#-------------------------------------------------------------------- -# Look for a native installed tclsh binary (if available) -# If one cannot be found then use the binary we build (fails for -# cross compiling). This is used for NATIVE_TCLSH in Makefile. -#-------------------------------------------------------------------- - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tclsh" >&5 -printf %s "checking for tclsh... " >&6; } - if test ${ac_cv_path_tclsh+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - search_path=`echo ${PATH} | sed -e 's/:/ /g'` - for dir in $search_path ; do - for j in `ls -r $dir/tclsh[8-9]* 2> /dev/null` \ - `ls -r $dir/tclsh* 2> /dev/null` ; do - if test x"$ac_cv_path_tclsh" = x ; then - if test -f "$j" ; then - ac_cv_path_tclsh=$j - break - fi - fi - done - done - -fi - - - if test -f "$ac_cv_path_tclsh" ; then - TCLSH_PROG="$ac_cv_path_tclsh" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $TCLSH_PROG" >&5 -printf "%s\n" "$TCLSH_PROG" >&6; } - else - # It is not an error if an installed version of Tcl can't be located. - TCLSH_PROG="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: No tclsh found on PATH" >&5 -printf "%s\n" "No tclsh found on PATH" >&6; } - fi - - -if test "$TCLSH_PROG" = ""; then - TCLSH_PROG='./${TCL_EXE}' -fi - -#------------------------------------------------------------------------ -# Add stuff for zlib -#------------------------------------------------------------------------ - -zlib_ok=yes -ac_fn_c_check_header_compile "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" -if test "x$ac_cv_header_zlib_h" = xyes -then : - - ac_fn_c_check_type "$LINENO" "gz_header" "ac_cv_type_gz_header" "#include -" -if test "x$ac_cv_type_gz_header" = xyes -then : - -else $as_nop - zlib_ok=no -fi - -else $as_nop - - zlib_ok=no -fi - -if test $zlib_ok = yes -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing deflateSetHeader" >&5 -printf %s "checking for library containing deflateSetHeader... " >&6; } -if test ${ac_cv_search_deflateSetHeader+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char deflateSetHeader (); -int -main (void) -{ -return deflateSetHeader (); - ; - return 0; -} -_ACEOF -for ac_lib in '' z -do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO" -then : - ac_cv_search_deflateSetHeader=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext - if test ${ac_cv_search_deflateSetHeader+y} -then : - break -fi -done -if test ${ac_cv_search_deflateSetHeader+y} -then : - -else $as_nop - ac_cv_search_deflateSetHeader=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_deflateSetHeader" >&5 -printf "%s\n" "$ac_cv_search_deflateSetHeader" >&6; } -ac_res=$ac_cv_search_deflateSetHeader -if test "$ac_res" != no -then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -else $as_nop - - zlib_ok=no - -fi - -fi -if test $zlib_ok = no -then : - - ZLIB_OBJS=\${ZLIB_OBJS} - - ZLIB_SRCS=\${ZLIB_SRCS} - - ZLIB_INCLUDE=-I\${ZLIB_DIR} - - -fi - -printf "%s\n" "#define HAVE_ZLIB 1" >>confdefs.h - - -#------------------------------------------------------------------------ -# Add stuff for libtommath - -libtommath_ok=yes - -# Check whether --with-system-libtommath was given. -if test ${with_system_libtommath+y} -then : - withval=$with_system_libtommath; libtommath_ok=${withval} -fi - -if test x"${libtommath_ok}" = x -o x"${libtommath_ok}" != xno; then - ac_fn_c_check_header_compile "$LINENO" "tommath.h" "ac_cv_header_tommath_h" "$ac_includes_default" -if test "x$ac_cv_header_tommath_h" = xyes -then : - - ac_fn_c_check_type "$LINENO" "mp_int" "ac_cv_type_mp_int" "#include -" -if test "x$ac_cv_type_mp_int" = xyes -then : - -else $as_nop - libtommath_ok=no -fi - -else $as_nop - - libtommath_ok=no -fi - - if test $libtommath_ok = yes -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mp_log_u32 in -ltommath" >&5 -printf %s "checking for mp_log_u32 in -ltommath... " >&6; } -if test ${ac_cv_lib_tommath_mp_log_u32+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-ltommath $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char mp_log_u32 (); -int -main (void) -{ -return mp_log_u32 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_tommath_mp_log_u32=yes -else $as_nop - ac_cv_lib_tommath_mp_log_u32=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tommath_mp_log_u32" >&5 -printf "%s\n" "$ac_cv_lib_tommath_mp_log_u32" >&6; } -if test "x$ac_cv_lib_tommath_mp_log_u32" = xyes -then : - MATH_LIBS="$MATH_LIBS -ltommath" -else $as_nop - - libtommath_ok=no -fi - -fi -fi -if test $libtommath_ok = yes -then : - - TCL_PC_REQUIRES_PRIVATE='libtommath >= 1.2.0,' - - TCL_PC_CFLAGS='-DTCL_WITH_EXTERNAL_TOMMATH' - - -printf "%s\n" "#define TCL_WITH_EXTERNAL_TOMMATH 1" >>confdefs.h - - -else $as_nop - - TOMMATH_OBJS=\${TOMMATH_OBJS} - - TOMMATH_SRCS=\${TOMMATH_SRCS} - - TOMMATH_INCLUDE=-I\${TOMMATH_DIR} - - -fi - -#-------------------------------------------------------------------- -# The statements below define a collection of compile flags. This -# macro depends on the value of SHARED_BUILD, and should be called -# after SC_ENABLE_SHARED checks the configure switches. -#-------------------------------------------------------------------- - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_RANLIB+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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_RANLIB="${ac_tool_prefix}ranlib" - printf "%s\n" "$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 -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -printf "%s\n" "$RANLIB" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_RANLIB+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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_RANLIB="ranlib" - printf "%s\n" "$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_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -printf "%s\n" "$ac_ct_RANLIB" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - - - - # Step 0.a: Enable 64 bit support? - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if 64bit support is requested" >&5 -printf %s "checking if 64bit support is requested... " >&6; } - # Check whether --enable-64bit was given. -if test ${enable_64bit+y} -then : - enableval=$enable_64bit; do64bit=$enableval -else $as_nop - do64bit=no -fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $do64bit" >&5 -printf "%s\n" "$do64bit" >&6; } - - # Step 0.b: Enable Solaris 64 bit VIS support? - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if 64bit Sparc VIS support is requested" >&5 -printf %s "checking if 64bit Sparc VIS support is requested... " >&6; } - # Check whether --enable-64bit-vis was given. -if test ${enable_64bit_vis+y} -then : - enableval=$enable_64bit_vis; do64bitVIS=$enableval -else $as_nop - do64bitVIS=no -fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $do64bitVIS" >&5 -printf "%s\n" "$do64bitVIS" >&6; } - # Force 64bit on with VIS - if test "$do64bitVIS" = "yes" -then : - do64bit=yes -fi - - # Step 0.c: Check if visibility support is available. Do this here so - # that platform specific alternatives can be used below if this fails. - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler supports visibility \"hidden\"" >&5 -printf %s "checking if compiler supports visibility \"hidden\"... " >&6; } -if test ${tcl_cv_cc_visibility_hidden+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - extern __attribute__((__visibility__("hidden"))) void f(void); - void f(void) {} -int -main (void) -{ -f(); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - tcl_cv_cc_visibility_hidden=yes -else $as_nop - tcl_cv_cc_visibility_hidden=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - CFLAGS=$hold_cflags -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_visibility_hidden" >&5 -printf "%s\n" "$tcl_cv_cc_visibility_hidden" >&6; } - if test $tcl_cv_cc_visibility_hidden = yes -then : - - -printf "%s\n" "#define MODULE_SCOPE extern __attribute__((__visibility__(\"hidden\")))" >>confdefs.h - - -printf "%s\n" "#define HAVE_HIDDEN 1" >>confdefs.h - - -fi - - # Step 0.d: Disable -rpath support? - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if rpath support is requested" >&5 -printf %s "checking if rpath support is requested... " >&6; } - # Check whether --enable-rpath was given. -if test ${enable_rpath+y} -then : - enableval=$enable_rpath; doRpath=$enableval -else $as_nop - doRpath=yes -fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $doRpath" >&5 -printf "%s\n" "$doRpath" >&6; } - - # Step 1: set the variable "system" to hold the name and version number - # for the system. - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking system version" >&5 -printf %s "checking system version... " >&6; } -if test ${tcl_cv_sys_version+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - if test "${TEA_PLATFORM}" = "windows" ; then - tcl_cv_sys_version=windows - else - tcl_cv_sys_version=`uname -s`-`uname -r` - if test "$?" -ne 0 ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: can't find uname command" >&5 -printf "%s\n" "$as_me: WARNING: can't find uname command" >&2;} - tcl_cv_sys_version=unknown - else - if test "`uname -s`" = "AIX" ; then - tcl_cv_sys_version=AIX-`uname -v`.`uname -r` - fi - if test "`uname -s`" = "NetBSD" -a -f /etc/debian_version ; then - tcl_cv_sys_version=NetBSD-Debian - fi - fi - fi - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_sys_version" >&5 -printf "%s\n" "$tcl_cv_sys_version" >&6; } - system=$tcl_cv_sys_version - - - # Step 2: check for existence of -ldl library. This is needed because - # Linux can use either -ldl or -ldld for dynamic loading. - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -printf %s "checking for dlopen in -ldl... " >&6; } -if test ${ac_cv_lib_dl_dlopen+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char dlopen (); -int -main (void) -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_dl_dlopen=yes -else $as_nop - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes -then : - have_dl=yes -else $as_nop - have_dl=no -fi - - - # Require ranlib early so we can override it in special cases below. - - - - # Step 3: set configuration options based on system name and version. - - do64bit_ok=no - # default to '{$LIBS}' and set to "" on per-platform necessary basis - SHLIB_LD_LIBS='${LIBS}' - LDFLAGS_ORIG="$LDFLAGS" - # When ld needs options to work in 64-bit mode, put them in - # LDFLAGS_ARCH so they eventually end up in LDFLAGS even if [load] - # is disabled by the user. [Bug 1016796] - LDFLAGS_ARCH="" - UNSHARED_LIB_SUFFIX="" - TCL_TRIM_DOTS='`echo ${VERSION} | tr -d .`' - ECHO_VERSION='`echo ${VERSION}`' - TCL_LIB_VERSIONS_OK=ok - CFLAGS_DEBUG=-g - if test "$GCC" = yes -then : - - CFLAGS_OPTIMIZE=-O2 - CFLAGS_WARNING="-Wall -Wextra -Wshadow -Wundef -Wwrite-strings -Wpointer-arith" - case "${CC}" in - *++|*++-*) - ;; - *) - CFLAGS_WARNING="${CFLAGS_WARNING} -Wc++-compat -fextended-identifiers" - ;; - esac - - -else $as_nop - - CFLAGS_OPTIMIZE=-O - CFLAGS_WARNING="" - -fi - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_AR+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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_AR="${ac_tool_prefix}ar" - printf "%s\n" "$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 -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -printf "%s\n" "$AR" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_AR+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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_AR="ar" - printf "%s\n" "$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_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -printf "%s\n" "$ac_ct_AR" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - - STLIB_LD='${AR} cr' - LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" - PLAT_OBJS="" - PLAT_SRCS="" - LDAIX_SRC="" - if test "x${SHLIB_VERSION}" = x -then : - SHLIB_VERSION="1.0" -fi - case $system in - AIX-*) - if test "$GCC" != "yes" -then : - - # AIX requires the _r compiler when gcc isn't being used - case "${CC}" in - *_r|*_r\ *) - # ok ... - ;; - *) - # Make sure only first arg gets _r - CC=`echo "$CC" | sed -e 's/^\([^ ]*\)/\1_r/'` - ;; - esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Using $CC for compiling with threads" >&5 -printf "%s\n" "Using $CC for compiling with threads" >&6; } - -fi - LIBS="$LIBS -lc" - SHLIB_CFLAGS="" - SHLIB_SUFFIX=".so" - - DL_OBJS="tclLoadDl.o" - LD_LIBRARY_PATH_VAR="LIBPATH" - - # ldAix No longer needed with use of -bexpall/-brtl - # but some extensions may still reference it - LDAIX_SRC='$(UNIX_DIR)/ldAix' - - # Check to enable 64-bit flags for compiler/linker - if test "$do64bit" = yes -then : - - if test "$GCC" = yes -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 -printf "%s\n" "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;} - -else $as_nop - - do64bit_ok=yes - CFLAGS="$CFLAGS -q64" - LDFLAGS_ARCH="-q64" - RANLIB="${RANLIB} -X64" - AR="${AR} -X64" - SHLIB_LD_FLAGS="-b64" - -fi - -fi - - if test "`uname -m`" = ia64 -then : - - # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC - SHLIB_LD="/usr/ccs/bin/ld -G -z text" - # AIX-5 has dl* in libc.so - DL_LIBS="" - if test "$GCC" = yes -then : - - CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' - -else $as_nop - - CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' - -fi - LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' - -else $as_nop - - if test "$GCC" = yes -then : - - SHLIB_LD='${CC} -shared -Wl,-bexpall' - -else $as_nop - - SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bexpall -H512 -T512 -bnoentry" - LDFLAGS="$LDFLAGS -brtl" - -fi - SHLIB_LD="${SHLIB_LD} ${SHLIB_LD_FLAGS}" - DL_LIBS="-ldl" - CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' - LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} - -fi - ;; - BeOS*) - SHLIB_CFLAGS="-fPIC" - SHLIB_LD='${CC} -nostart' - SHLIB_SUFFIX=".so" - DL_OBJS="tclLoadDl.o" - DL_LIBS="-ldl" - - #----------------------------------------------------------- - # Check for inet_ntoa in -lbind, for BeOS (which also needs - # -lsocket, even if the network functions are in -lnet which - # is always linked to, for compatibility. - #----------------------------------------------------------- - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lbind" >&5 -printf %s "checking for inet_ntoa in -lbind... " >&6; } -if test ${ac_cv_lib_bind_inet_ntoa+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lbind $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char inet_ntoa (); -int -main (void) -{ -return inet_ntoa (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_bind_inet_ntoa=yes -else $as_nop - ac_cv_lib_bind_inet_ntoa=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bind_inet_ntoa" >&5 -printf "%s\n" "$ac_cv_lib_bind_inet_ntoa" >&6; } -if test "x$ac_cv_lib_bind_inet_ntoa" = xyes -then : - LIBS="$LIBS -lbind -lsocket" -fi - - ;; - BSD/OS-2.1*|BSD/OS-3*) - SHLIB_CFLAGS="" - SHLIB_LD="shlicc -r" - SHLIB_SUFFIX=".so" - DL_OBJS="tclLoadDl.o" - DL_LIBS="-ldl" - CC_SEARCH_FLAGS="" - LD_SEARCH_FLAGS="" - ;; - BSD/OS-4.*) - SHLIB_CFLAGS="-export-dynamic -fPIC" - SHLIB_LD='${CC} -shared' - SHLIB_SUFFIX=".so" - DL_OBJS="tclLoadDl.o" - DL_LIBS="-ldl" - LDFLAGS="$LDFLAGS -export-dynamic" - CC_SEARCH_FLAGS="" - LD_SEARCH_FLAGS="" - ;; - CYGWIN_*|MINGW32_*|MSYS_*) - SHLIB_CFLAGS="-fno-common" - SHLIB_LD='${CC} -shared' - SHLIB_SUFFIX=".dll" - DL_OBJS="tclLoadDl.o" - PLAT_OBJS='${CYGWIN_OBJS}' - PLAT_SRCS='${CYGWIN_SRCS}' - DL_LIBS="-ldl" - CC_SEARCH_FLAGS="" - LD_SEARCH_FLAGS="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Cygwin version of gcc" >&5 -printf %s "checking for Cygwin version of gcc... " >&6; } -if test ${ac_cv_cygwin+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #ifdef __CYGWIN__ - #error cygwin - #endif - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_cygwin=no -else $as_nop - ac_cv_cygwin=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cygwin" >&5 -printf "%s\n" "$ac_cv_cygwin" >&6; } - if test "$ac_cv_cygwin" = "no"; then - as_fn_error $? "${CC} is not a cygwin compiler." "$LINENO" 5 - fi - do64bit_ok=yes - if test "x${SHARED_BUILD}" = "x1"; then - echo "running cd ../win; ${CONFIG_SHELL-/bin/sh} ./configure $ac_configure_args --enable-64bit --host=x86_64-w64-mingw32" - # The eval makes quoting arguments work. - if cd ../win; eval ${CONFIG_SHELL-/bin/sh} ./configure $ac_configure_args --enable-64bit --host=x86_64-w64-mingw32; cd ../unix - then : - else - { echo "configure: error: configure failed for ../win" 1>&2; exit 1; } - fi - fi - ;; - dgux*) - SHLIB_CFLAGS="-K PIC" - SHLIB_LD='${CC} -G' - SHLIB_LD_LIBS="" - SHLIB_SUFFIX=".so" - DL_OBJS="tclLoadDl.o" - DL_LIBS="-ldl" - CC_SEARCH_FLAGS="" - LD_SEARCH_FLAGS="" - ;; - Haiku*) - LDFLAGS="$LDFLAGS -Wl,--export-dynamic" - SHLIB_CFLAGS="-fPIC" - SHLIB_SUFFIX=".so" - SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared' - DL_OBJS="tclLoadDl.o" - DL_LIBS="-lroot" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inet_ntoa in -lnetwork" >&5 -printf %s "checking for inet_ntoa in -lnetwork... " >&6; } -if test ${ac_cv_lib_network_inet_ntoa+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnetwork $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char inet_ntoa (); -int -main (void) -{ -return inet_ntoa (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_network_inet_ntoa=yes -else $as_nop - ac_cv_lib_network_inet_ntoa=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_network_inet_ntoa" >&5 -printf "%s\n" "$ac_cv_lib_network_inet_ntoa" >&6; } -if test "x$ac_cv_lib_network_inet_ntoa" = xyes -then : - LIBS="$LIBS -lnetwork" -fi - - ;; - HP-UX-*.11.*) - # Use updated header definitions where possible - -printf "%s\n" "#define _XOPEN_SOURCE_EXTENDED 1" >>confdefs.h - - -printf "%s\n" "#define _XOPEN_SOURCE 1" >>confdefs.h - - LIBS="$LIBS -lxnet" # Use the XOPEN network library - - if test "`uname -m`" = ia64 -then : - - SHLIB_SUFFIX=".so" - -else $as_nop - - SHLIB_SUFFIX=".sl" - -fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -printf %s "checking for shl_load in -ldld... " >&6; } -if test ${ac_cv_lib_dld_shl_load+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char shl_load (); -int -main (void) -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_dld_shl_load=yes -else $as_nop - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes -then : - tcl_ok=yes -else $as_nop - tcl_ok=no -fi - - if test "$tcl_ok" = yes -then : - - SHLIB_CFLAGS="+z" - SHLIB_LD="ld -b" - DL_OBJS="tclLoadShl.o" - DL_LIBS="-ldld" - LDFLAGS="$LDFLAGS -Wl,-E" - CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' - LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' - LD_LIBRARY_PATH_VAR="SHLIB_PATH" - -fi - if test "$GCC" = yes -then : - - SHLIB_LD='${CC} -shared' - LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} - -else $as_nop - - CFLAGS="$CFLAGS -z" - -fi - - # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc - #CFLAGS="$CFLAGS +DAportable" - - # Check to enable 64-bit flags for compiler/linker - if test "$do64bit" = "yes" -then : - - if test "$GCC" = yes -then : - - case `${CC} -dumpmachine` in - hppa64*) - # 64-bit gcc in use. Fix flags for GNU ld. - do64bit_ok=yes - SHLIB_LD='${CC} -shared' - if test $doRpath = yes -then : - - CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"' -fi - LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} - ;; - *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 -printf "%s\n" "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;} - ;; - esac - -else $as_nop - - do64bit_ok=yes - CFLAGS="$CFLAGS +DD64" - LDFLAGS_ARCH="+DD64" - -fi - -fi ;; - HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*) - SHLIB_SUFFIX=".sl" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -printf %s "checking for shl_load in -ldld... " >&6; } -if test ${ac_cv_lib_dld_shl_load+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char shl_load (); -int -main (void) -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_dld_shl_load=yes -else $as_nop - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes -then : - tcl_ok=yes -else $as_nop - tcl_ok=no -fi - - if test "$tcl_ok" = yes -then : - - SHLIB_CFLAGS="+z" - SHLIB_LD="ld -b" - SHLIB_LD_LIBS="" - DL_OBJS="tclLoadShl.o" - DL_LIBS="-ldld" - LDFLAGS="$LDFLAGS -Wl,-E" - CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' - LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' - LD_LIBRARY_PATH_VAR="SHLIB_PATH" - -fi ;; - IRIX-5.*) - SHLIB_CFLAGS="" - SHLIB_LD="ld -shared -rdata_shared" - SHLIB_SUFFIX=".so" - DL_OBJS="tclLoadDl.o" - DL_LIBS="" - case " $LIBOBJS " in - *" mkstemp.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS mkstemp.$ac_objext" - ;; -esac - - if test $doRpath = yes -then : - - CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"' - LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' -fi - ;; - IRIX-6.*) - SHLIB_CFLAGS="" - SHLIB_LD="ld -n32 -shared -rdata_shared" - SHLIB_SUFFIX=".so" - DL_OBJS="tclLoadDl.o" - DL_LIBS="" - case " $LIBOBJS " in - *" mkstemp.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS mkstemp.$ac_objext" - ;; -esac - - if test $doRpath = yes -then : - - CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"' - LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' -fi - if test "$GCC" = yes -then : - - CFLAGS="$CFLAGS -mabi=n32" - LDFLAGS="$LDFLAGS -mabi=n32" - -else $as_nop - - case $system in - IRIX-6.3) - # Use to build 6.2 compatible binaries on 6.3. - CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" - ;; - *) - CFLAGS="$CFLAGS -n32" - ;; - esac - LDFLAGS="$LDFLAGS -n32" - -fi - ;; - IRIX64-6.*) - SHLIB_CFLAGS="" - SHLIB_LD="ld -n32 -shared -rdata_shared" - SHLIB_SUFFIX=".so" - DL_OBJS="tclLoadDl.o" - DL_LIBS="" - case " $LIBOBJS " in - *" mkstemp.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS mkstemp.$ac_objext" - ;; -esac - - if test $doRpath = yes -then : - - CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"' - LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' -fi - - # Check to enable 64-bit flags for compiler/linker - - if test "$do64bit" = yes -then : - - if test "$GCC" = yes -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported by gcc" >&5 -printf "%s\n" "$as_me: WARNING: 64bit mode not supported by gcc" >&2;} - -else $as_nop - - do64bit_ok=yes - SHLIB_LD="ld -64 -shared -rdata_shared" - CFLAGS="$CFLAGS -64" - LDFLAGS_ARCH="-64" - -fi - -fi - ;; - Linux*|GNU*|NetBSD-Debian|DragonFly-*|FreeBSD-*) - SHLIB_CFLAGS="-fPIC -fno-common" - SHLIB_SUFFIX=".so" - - CFLAGS_OPTIMIZE="-O2" - # egcs-2.91.66 on Redhat Linux 6.0 generates lots of warnings - # when you inline the string and math operations. Turn this off to - # get rid of the warnings. - #CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES" - - SHLIB_LD='${CC} ${CFLAGS} ${LDFLAGS} -shared' - DL_OBJS="tclLoadDl.o" - DL_LIBS="-ldl" - LDFLAGS="$LDFLAGS -Wl,--export-dynamic" - - case $system in - DragonFly-*|FreeBSD-*) - if test "${TCL_THREADS}" = "1" -then : - - # The -pthread needs to go in the LDFLAGS, not LIBS - LIBS=`echo $LIBS | sed s/-pthread//` - CFLAGS="$CFLAGS $PTHREAD_CFLAGS" - LDFLAGS="$LDFLAGS $PTHREAD_LIBS" -fi - ;; - esac - - if test $doRpath = yes -then : - - CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"' -fi - LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} - if test "`uname -m`" = "alpha" -then : - CFLAGS="$CFLAGS -mieee" -fi - if test $do64bit = yes -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -m64 flag" >&5 -printf %s "checking if compiler accepts -m64 flag... " >&6; } -if test ${tcl_cv_cc_m64+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - hold_cflags=$CFLAGS - CFLAGS="$CFLAGS -m64" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - tcl_cv_cc_m64=yes -else $as_nop - tcl_cv_cc_m64=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - CFLAGS=$hold_cflags -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_m64" >&5 -printf "%s\n" "$tcl_cv_cc_m64" >&6; } - if test $tcl_cv_cc_m64 = yes -then : - - CFLAGS="$CFLAGS -m64" - do64bit_ok=yes - -fi - -fi - - # The combo of gcc + glibc has a bug related to inlining of - # functions like strtol()/strtoul(). The -fno-builtin flag should address - # this problem but it does not work. The -fno-inline flag is kind - # of overkill but it works. Disable inlining only when one of the - # files in compat/*.c is being linked in. - - if test x"${USE_COMPAT}" != x -then : - CFLAGS="$CFLAGS -fno-inline" -fi - ;; - Lynx*) - SHLIB_CFLAGS="-fPIC" - SHLIB_SUFFIX=".so" - CFLAGS_OPTIMIZE=-02 - SHLIB_LD='${CC} -shared' - DL_OBJS="tclLoadDl.o" - DL_LIBS="-mshared -ldl" - LD_FLAGS="-Wl,--export-dynamic" - if test $doRpath = yes -then : - - CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"' - LD_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"' -fi - ;; - OpenBSD-*) - arch=`arch -s` - case "$arch" in - alpha|sparc64) - SHLIB_CFLAGS="-fPIC" - ;; - *) - SHLIB_CFLAGS="-fpic" - ;; - esac - SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared' - SHLIB_SUFFIX=".so" - DL_OBJS="tclLoadDl.o" - DL_LIBS="" - if test $doRpath = yes -then : - - CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"' -fi - LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} - SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.so.${SHLIB_VERSION}' - LDFLAGS="-Wl,-export-dynamic" - CFLAGS_OPTIMIZE="-O2" - # On OpenBSD: Compile with -pthread - # Don't link with -lpthread - LIBS=`echo $LIBS | sed s/-lpthread//` - CFLAGS="$CFLAGS -pthread" - # OpenBSD doesn't do version numbers with dots. - UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}.a' - TCL_LIB_VERSIONS_OK=nodots - ;; - NetBSD-*) - # NetBSD has ELF and can use 'cc -shared' to build shared libs - SHLIB_CFLAGS="-fPIC" - SHLIB_LD='${CC} ${SHLIB_CFLAGS} -shared' - SHLIB_SUFFIX=".so" - DL_OBJS="tclLoadDl.o" - DL_LIBS="" - LDFLAGS="$LDFLAGS -export-dynamic" - if test $doRpath = yes -then : - - CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"' -fi - LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} - # The -pthread needs to go in the CFLAGS, not LIBS - LIBS=`echo $LIBS | sed s/-pthread//` - CFLAGS="$CFLAGS -pthread" - LDFLAGS="$LDFLAGS -pthread" - ;; - Darwin-*) - CFLAGS_OPTIMIZE="-O2" - SHLIB_CFLAGS="-fno-common" - # To avoid discrepancies between what headers configure sees during - # preprocessing tests and compiling tests, move any -isysroot and - # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: - CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \ - awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ - if ($i~/^(isysroot|mmacosx-version-min)/) print "-"$i}'`" - CFLAGS="`echo " ${CFLAGS}" | \ - awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ - if (!($i~/^(isysroot|mmacosx-version-min)/)) print "-"$i}'`" - if test $do64bit = yes -then : - - case `arch` in - ppc) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -arch ppc64 flag" >&5 -printf %s "checking if compiler accepts -arch ppc64 flag... " >&6; } -if test ${tcl_cv_cc_arch_ppc64+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - hold_cflags=$CFLAGS - CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - tcl_cv_cc_arch_ppc64=yes -else $as_nop - tcl_cv_cc_arch_ppc64=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - CFLAGS=$hold_cflags -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_arch_ppc64" >&5 -printf "%s\n" "$tcl_cv_cc_arch_ppc64" >&6; } - if test $tcl_cv_cc_arch_ppc64 = yes -then : - - CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" - do64bit_ok=yes - -fi;; - i386|x86_64) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -arch x86_64 flag" >&5 -printf %s "checking if compiler accepts -arch x86_64 flag... " >&6; } -if test ${tcl_cv_cc_arch_x86_64+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - hold_cflags=$CFLAGS - CFLAGS="$CFLAGS -arch x86_64" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - tcl_cv_cc_arch_x86_64=yes -else $as_nop - tcl_cv_cc_arch_x86_64=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - CFLAGS=$hold_cflags -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_arch_x86_64" >&5 -printf "%s\n" "$tcl_cv_cc_arch_x86_64" >&6; } - if test $tcl_cv_cc_arch_x86_64 = yes -then : - - CFLAGS="$CFLAGS -arch x86_64" - do64bit_ok=yes - -fi;; - arm64) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler accepts -arch arm64 flag" >&5 -printf %s "checking if compiler accepts -arch arm64 flag... " >&6; } -if test ${tcl_cv_cc_arch_arm64+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - hold_cflags=$CFLAGS - CFLAGS="$CFLAGS -arch arm64" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - tcl_cv_cc_arch_arm64=yes -else $as_nop - tcl_cv_cc_arch_arm64=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - CFLAGS=$hold_cflags -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_arch_arm64" >&5 -printf "%s\n" "$tcl_cv_cc_arch_arm64" >&6; } - if test $tcl_cv_cc_arch_arm64 = yes -then : - - CFLAGS="$CFLAGS -arch arm64" - do64bit_ok=yes - -fi;; - *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Don't know how enable 64-bit on architecture \`arch\`" >&5 -printf "%s\n" "$as_me: WARNING: Don't know how enable 64-bit on architecture \`arch\`" >&2;};; - esac - -else $as_nop - - # Check for combined 32-bit and 64-bit fat build - if echo "$CFLAGS " |grep -E -q -- '-arch (ppc64|x86_64|arm64) ' \ - && echo "$CFLAGS " |grep -E -q -- '-arch (ppc|i386) ' -then : - - fat_32_64=yes -fi - -fi - SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS}' - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ld accepts -single_module flag" >&5 -printf %s "checking if ld accepts -single_module flag... " >&6; } -if test ${tcl_cv_ld_single_module+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - hold_ldflags=$LDFLAGS - LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ -int i; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - tcl_cv_ld_single_module=yes -else $as_nop - tcl_cv_ld_single_module=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$hold_ldflags -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_single_module" >&5 -printf "%s\n" "$tcl_cv_ld_single_module" >&6; } - if test $tcl_cv_ld_single_module = yes -then : - - SHLIB_LD="${SHLIB_LD} -Wl,-single_module" - -fi - SHLIB_SUFFIX=".dylib" - DL_OBJS="tclLoadDyld.o" - DL_LIBS="" - LDFLAGS="$LDFLAGS -headerpad_max_install_names" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if ld accepts -search_paths_first flag" >&5 -printf %s "checking if ld accepts -search_paths_first flag... " >&6; } -if test ${tcl_cv_ld_search_paths_first+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - hold_ldflags=$LDFLAGS - LDFLAGS="$LDFLAGS -Wl,-search_paths_first" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ -int i; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - tcl_cv_ld_search_paths_first=yes -else $as_nop - tcl_cv_ld_search_paths_first=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$hold_ldflags -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_search_paths_first" >&5 -printf "%s\n" "$tcl_cv_ld_search_paths_first" >&6; } - if test $tcl_cv_ld_search_paths_first = yes -then : - - LDFLAGS="$LDFLAGS -Wl,-search_paths_first" - -fi - if test "$tcl_cv_cc_visibility_hidden" != yes -then : - - -printf "%s\n" "#define MODULE_SCOPE __private_extern__" >>confdefs.h - - tcl_cv_cc_visibility_hidden=yes - -fi - CC_SEARCH_FLAGS="" - LD_SEARCH_FLAGS="" - LD_LIBRARY_PATH_VAR="DYLD_FALLBACK_LIBRARY_PATH" - -printf "%s\n" "#define MAC_OSX_TCL 1" >>confdefs.h - - PLAT_OBJS='${MAC_OSX_OBJS}' - PLAT_SRCS='${MAC_OSX_SRCS}' - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use CoreFoundation" >&5 -printf %s "checking whether to use CoreFoundation... " >&6; } - # Check whether --enable-corefoundation was given. -if test ${enable_corefoundation+y} -then : - enableval=$enable_corefoundation; tcl_corefoundation=$enableval -else $as_nop - tcl_corefoundation=yes -fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_corefoundation" >&5 -printf "%s\n" "$tcl_corefoundation" >&6; } - if test $tcl_corefoundation = yes -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CoreFoundation.framework" >&5 -printf %s "checking for CoreFoundation.framework... " >&6; } -if test ${tcl_cv_lib_corefoundation+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - hold_libs=$LIBS - if test "$fat_32_64" = yes -then : - - for v in CFLAGS CPPFLAGS LDFLAGS; do - # On Tiger there is no 64-bit CF, so remove 64-bit - # archs from CFLAGS et al. while testing for - # presence of CF. 64-bit CF is disabled in - # tclUnixPort.h if necessary. - eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' - done -fi - LIBS="$LIBS -framework CoreFoundation" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -CFBundleRef b = CFBundleGetMainBundle(); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - tcl_cv_lib_corefoundation=yes -else $as_nop - tcl_cv_lib_corefoundation=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - if test "$fat_32_64" = yes -then : - - for v in CFLAGS CPPFLAGS LDFLAGS; do - eval $v'="$hold_'$v'"' - done -fi - LIBS=$hold_libs -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_lib_corefoundation" >&5 -printf "%s\n" "$tcl_cv_lib_corefoundation" >&6; } - if test $tcl_cv_lib_corefoundation = yes -then : - - LIBS="$LIBS -framework CoreFoundation" - -printf "%s\n" "#define HAVE_COREFOUNDATION 1" >>confdefs.h - - -else $as_nop - tcl_corefoundation=no -fi - if test "$fat_32_64" = yes -a $tcl_corefoundation = yes -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit CoreFoundation" >&5 -printf %s "checking for 64-bit CoreFoundation... " >&6; } -if test ${tcl_cv_lib_corefoundation_64+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - for v in CFLAGS CPPFLAGS LDFLAGS; do - eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' - done - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -CFBundleRef b = CFBundleGetMainBundle(); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - tcl_cv_lib_corefoundation_64=yes -else $as_nop - tcl_cv_lib_corefoundation_64=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - for v in CFLAGS CPPFLAGS LDFLAGS; do - eval $v'="$hold_'$v'"' - done -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_lib_corefoundation_64" >&5 -printf "%s\n" "$tcl_cv_lib_corefoundation_64" >&6; } - if test $tcl_cv_lib_corefoundation_64 = no -then : - - -printf "%s\n" "#define NO_COREFOUNDATION_64 1" >>confdefs.h - - LDFLAGS="$LDFLAGS -Wl,-no_arch_warnings" - -fi - -fi - -fi - ;; - OS/390-*) - SHLIB_LD_LIBS="" - CFLAGS_OPTIMIZE="" # Optimizer is buggy - -printf "%s\n" "#define _OE_SOCKETS 1" >>confdefs.h - - ;; - OSF1-V*) - # Digital OSF/1 - SHLIB_CFLAGS="" - if test "$SHARED_BUILD" = 1 -then : - - SHLIB_LD='${CC} -shared' - -else $as_nop - - SHLIB_LD='${CC} -non_shared' - -fi - SHLIB_SUFFIX=".so" - DL_OBJS="tclLoadDl.o" - DL_LIBS="" - if test $doRpath = yes -then : - - CC_SEARCH_FLAGS='"-Wl,-rpath,${LIB_RUNTIME_DIR}"' - LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' -fi - if test "$GCC" = yes -then : - CFLAGS="$CFLAGS -mieee" -else $as_nop - - CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee" -fi - # see pthread_intro(3) for pthread support on osf1, k.furukawa - CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" - CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" - LIBS=`echo $LIBS | sed s/-lpthreads//` - if test "$GCC" = yes -then : - - LIBS="$LIBS -lpthread -lmach -lexc" - -else $as_nop - - CFLAGS="$CFLAGS -pthread" - LDFLAGS="$LDFLAGS -pthread" - -fi - ;; - QNX-6*) - # QNX RTP - # This may work for all QNX, but it was only reported for v6. - SHLIB_LD="ld -Bshareable -x" - SHLIB_LD_LIBS="" - SHLIB_SUFFIX=".so" - DL_OBJS="tclLoadDl.o" - # dlopen is in -lc on QNX - DL_LIBS="" - CC_SEARCH_FLAGS="" - LD_SEARCH_FLAGS="" - ;; - SCO_SV-3.2*) - # Note, dlopen is available only on SCO 3.2.5 and greater. However, - # this test works, since "uname -s" was non-standard in 3.2.4 and - # below. - if test "$GCC" = yes -then : - - SHLIB_CFLAGS="-fPIC -melf" - LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" - -else $as_nop - - SHLIB_CFLAGS="-Kpic -belf" - LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" - -fi - SHLIB_LD="ld -G" - SHLIB_LD_LIBS="" - SHLIB_SUFFIX=".so" - DL_OBJS="tclLoadDl.o" - DL_LIBS="" - CC_SEARCH_FLAGS="" - LD_SEARCH_FLAGS="" - ;; - SunOS-5.[0-6]) - # Careful to not let 5.10+ fall into this case - - # Note: If _REENTRANT isn't defined, then Solaris - # won't define thread-safe library routines. - - -printf "%s\n" "#define _REENTRANT 1" >>confdefs.h - - -printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h - - - SHLIB_CFLAGS="-KPIC" - SHLIB_SUFFIX=".so" - DL_OBJS="tclLoadDl.o" - DL_LIBS="-ldl" - if test "$GCC" = yes -then : - - SHLIB_LD='${CC} -shared' - CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' - LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} - -else $as_nop - - SHLIB_LD="/usr/ccs/bin/ld -G -z text" - CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' - LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} - -fi - ;; - SunOS-5*) - # Note: If _REENTRANT isn't defined, then Solaris - # won't define thread-safe library routines. - - -printf "%s\n" "#define _REENTRANT 1" >>confdefs.h - - -printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h - - - SHLIB_CFLAGS="-KPIC" - - # Check to enable 64-bit flags for compiler/linker - if test "$do64bit" = yes -then : - - arch=`isainfo` - if test "$arch" = "sparcv9 sparc" -then : - - if test "$GCC" = yes -then : - - if test "`${CC} -dumpversion | awk -F. '{print $1}'`" -lt 3 -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&5 -printf "%s\n" "$as_me: WARNING: 64bit mode not supported with GCC < 3.2 on $system" >&2;} - -else $as_nop - - do64bit_ok=yes - CFLAGS="$CFLAGS -m64 -mcpu=v9" - LDFLAGS="$LDFLAGS -m64 -mcpu=v9" - SHLIB_CFLAGS="-fPIC" - -fi - -else $as_nop - - do64bit_ok=yes - if test "$do64bitVIS" = yes -then : - - CFLAGS="$CFLAGS -xarch=v9a" - LDFLAGS_ARCH="-xarch=v9a" - -else $as_nop - - CFLAGS="$CFLAGS -xarch=v9" - LDFLAGS_ARCH="-xarch=v9" - -fi - # Solaris 64 uses this as well - #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64" - -fi - -else $as_nop - if test "$arch" = "amd64 i386" -then : - - if test "$GCC" = yes -then : - - case $system in - SunOS-5.1[1-9]*|SunOS-5.[2-9][0-9]*) - do64bit_ok=yes - CFLAGS="$CFLAGS -m64" - LDFLAGS="$LDFLAGS -m64";; - *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported with GCC on $system" >&5 -printf "%s\n" "$as_me: WARNING: 64bit mode not supported with GCC on $system" >&2;};; - esac - -else $as_nop - - do64bit_ok=yes - case $system in - SunOS-5.1[1-9]*|SunOS-5.[2-9][0-9]*) - CFLAGS="$CFLAGS -m64" - LDFLAGS="$LDFLAGS -m64";; - *) - CFLAGS="$CFLAGS -xarch=amd64" - LDFLAGS="$LDFLAGS -xarch=amd64";; - esac - -fi - -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 64bit mode not supported for $arch" >&5 -printf "%s\n" "$as_me: WARNING: 64bit mode not supported for $arch" >&2;} -fi -fi - -fi - - #-------------------------------------------------------------------- - # On Solaris 5.x i386 with the sunpro compiler we need to link - # with sunmath to get floating point rounding control - #-------------------------------------------------------------------- - if test "$GCC" = yes -then : - use_sunmath=no -else $as_nop - - arch=`isainfo` - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use -lsunmath for fp rounding control" >&5 -printf %s "checking whether to use -lsunmath for fp rounding control... " >&6; } - if test "$arch" = "amd64 i386" -o "$arch" = "i386" -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - MATH_LIBS="-lsunmath $MATH_LIBS" - ac_fn_c_check_header_compile "$LINENO" "sunmath.h" "ac_cv_header_sunmath_h" "$ac_includes_default" -if test "x$ac_cv_header_sunmath_h" = xyes -then : - -fi - - use_sunmath=yes - -else $as_nop - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - use_sunmath=no - -fi - -fi - SHLIB_SUFFIX=".so" - DL_OBJS="tclLoadDl.o" - DL_LIBS="-ldl" - if test "$GCC" = yes -then : - - SHLIB_LD='${CC} -shared' - CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' - LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} - if test "$do64bit_ok" = yes -then : - - if test "$arch" = "sparcv9 sparc" -then : - - # We need to specify -static-libgcc or we need to - # add the path to the sparv9 libgcc. - SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" - # for finding sparcv9 libgcc, get the regular libgcc - # path, remove so name and append 'sparcv9' - #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." - #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir" - -else $as_nop - if test "$arch" = "amd64 i386" -then : - - SHLIB_LD="$SHLIB_LD -m64 -static-libgcc" - -fi -fi - -fi - -else $as_nop - - if test "$use_sunmath" = yes -then : - textmode=textoff -else $as_nop - textmode=text -fi - case $system in - SunOS-5.[1-9][0-9]*|SunOS-5.[7-9]) - SHLIB_LD="\${CC} -G -z $textmode \${LDFLAGS}";; - *) - SHLIB_LD="/usr/ccs/bin/ld -G -z $textmode";; - esac - CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' - LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' - -fi - ;; - UNIX_SV* | UnixWare-5*) - SHLIB_CFLAGS="-KPIC" - SHLIB_LD='${CC} -G' - SHLIB_LD_LIBS="" - SHLIB_SUFFIX=".so" - DL_OBJS="tclLoadDl.o" - DL_LIBS="-ldl" - # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers - # that don't grok the -Bexport option. Test that it does. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld accepts -Bexport flag" >&5 -printf %s "checking for ld accepts -Bexport flag... " >&6; } -if test ${tcl_cv_ld_Bexport+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - hold_ldflags=$LDFLAGS - LDFLAGS="$LDFLAGS -Wl,-Bexport" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ -int i; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - tcl_cv_ld_Bexport=yes -else $as_nop - tcl_cv_ld_Bexport=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$hold_ldflags -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_Bexport" >&5 -printf "%s\n" "$tcl_cv_ld_Bexport" >&6; } - if test $tcl_cv_ld_Bexport = yes -then : - - LDFLAGS="$LDFLAGS -Wl,-Bexport" - -fi - CC_SEARCH_FLAGS="" - LD_SEARCH_FLAGS="" - ;; - esac - - if test "$do64bit" = yes -a "$do64bit_ok" = no -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 64bit support being disabled -- don't know magic for this platform" >&5 -printf "%s\n" "$as_me: WARNING: 64bit support being disabled -- don't know magic for this platform" >&2;} - -fi - - if test "$do64bit" = yes -a "$do64bit_ok" = yes -then : - - -printf "%s\n" "#define TCL_CFG_DO64BIT 1" >>confdefs.h - - -fi - - - - # Step 4: disable dynamic loading if requested via a command-line switch. - - # Check whether --enable-load was given. -if test ${enable_load+y} -then : - enableval=$enable_load; tcl_ok=$enableval -else $as_nop - tcl_ok=yes -fi - - if test "$tcl_ok" = no -then : - DL_OBJS="" -fi - - if test "x$DL_OBJS" != x -then : - BUILD_DLTEST="\$(DLTEST_TARGETS)" -else $as_nop - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Can't figure out how to do dynamic loading or shared libraries on this system." >&5 -printf "%s\n" "$as_me: WARNING: Can't figure out how to do dynamic loading or shared libraries on this system." >&2;} - SHLIB_CFLAGS="" - SHLIB_LD="" - SHLIB_SUFFIX="" - DL_OBJS="tclLoadNone.o" - DL_LIBS="" - LDFLAGS="$LDFLAGS_ORIG" - CC_SEARCH_FLAGS="" - LD_SEARCH_FLAGS="" - BUILD_DLTEST="" - -fi - LDFLAGS="$LDFLAGS $LDFLAGS_ARCH" - - # If we're running gcc, then change the C flags for compiling shared - # libraries to the right flags for gcc, instead of those for the - # standard manufacturer compiler. - - if test "$DL_OBJS" != "tclLoadNone.o" -a "$GCC" = yes -then : - - case $system in - AIX-*) ;; - BSD/OS*) ;; - CYGWIN_*|MINGW32_*|MSYS_*) ;; - HP-UX*) ;; - Darwin-*) ;; - IRIX*) ;; - Linux*|GNU*) ;; - NetBSD-*|OpenBSD-*) ;; - OSF1-*) ;; - SCO_SV-3.2*) ;; - *) SHLIB_CFLAGS="-fPIC" ;; - esac -fi - - if test "$tcl_cv_cc_visibility_hidden" != yes -then : - - -printf "%s\n" "#define MODULE_SCOPE extern" >>confdefs.h - - -fi - - if test "$SHARED_LIB_SUFFIX" = "" -then : - - SHARED_LIB_SUFFIX='${VERSION}${SHLIB_SUFFIX}' -fi - if test "$UNSHARED_LIB_SUFFIX" = "" -then : - - UNSHARED_LIB_SUFFIX='${VERSION}.a' -fi - DLL_INSTALL_DIR="\$(LIB_INSTALL_DIR)" - - if test "${SHARED_BUILD}" = 1 -a "${SHLIB_SUFFIX}" != "" -then : - - LIB_SUFFIX=${SHARED_LIB_SUFFIX} - MAKE_LIB='${SHLIB_LD} -o $@ ${OBJS} ${LDFLAGS} ${SHLIB_LD_LIBS} ${TCL_SHLIB_LD_EXTRAS} ${TK_SHLIB_LD_EXTRAS} ${LD_SEARCH_FLAGS}' - if test "${SHLIB_SUFFIX}" = ".dll" -then : - - INSTALL_LIB='$(INSTALL_LIBRARY) $(LIB_FILE) "$(BIN_INSTALL_DIR)/$(LIB_FILE)"' - DLL_INSTALL_DIR="\$(BIN_INSTALL_DIR)" - -else $as_nop - - INSTALL_LIB='$(INSTALL_LIBRARY) $(LIB_FILE) "$(LIB_INSTALL_DIR)/$(LIB_FILE)"' - -fi - -else $as_nop - - LIB_SUFFIX=${UNSHARED_LIB_SUFFIX} - - if test "$RANLIB" = "" -then : - - MAKE_LIB='$(STLIB_LD) $@ ${OBJS}' - -else $as_nop - - MAKE_LIB='${STLIB_LD} $@ ${OBJS} ; ${RANLIB} $@' - -fi - INSTALL_LIB='$(INSTALL_LIBRARY) $(LIB_FILE) "$(LIB_INSTALL_DIR)/$(LIB_FILE)"' - -fi - - # Stub lib does not depend on shared/static configuration - if test "$RANLIB" = "" -then : - - MAKE_STUB_LIB='${STLIB_LD} $@ ${STUB_LIB_OBJS}' - -else $as_nop - - MAKE_STUB_LIB='${STLIB_LD} $@ ${STUB_LIB_OBJS} ; ${RANLIB} $@' - -fi - INSTALL_STUB_LIB='$(INSTALL_LIBRARY) $(STUB_LIB_FILE) "$(LIB_INSTALL_DIR)/$(STUB_LIB_FILE)"' - - # Define TCL_LIBS now that we know what DL_LIBS is. - # The trick here is that we don't want to change the value of TCL_LIBS if - # it is already set when tclConfig.sh had been loaded by Tk. - if test "x${TCL_LIBS}" = x -then : - - TCL_LIBS="${DL_LIBS} ${LIBS} ${MATH_LIBS}" -fi - - - # See if the compiler supports casting to a union type. - # This is used to stop gcc from printing a compiler - # warning when initializing a union member. - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cast to union support" >&5 -printf %s "checking for cast to union support... " >&6; } -if test ${tcl_cv_cast_to_union+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - union foo { int i; double d; }; - union foo f = (union foo) (int) 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_cast_to_union=yes -else $as_nop - tcl_cv_cast_to_union=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cast_to_union" >&5 -printf "%s\n" "$tcl_cv_cast_to_union" >&6; } - if test "$tcl_cv_cast_to_union" = "yes"; then - -printf "%s\n" "#define HAVE_CAST_TO_UNION 1" >>confdefs.h - - fi - hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -fno-lto" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working -fno-lto" >&5 -printf %s "checking for working -fno-lto... " >&6; } -if test ${ac_cv_nolto+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_nolto=yes -else $as_nop - ac_cv_nolto=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_nolto" >&5 -printf "%s\n" "$ac_cv_nolto" >&6; } - CFLAGS=$hold_cflags - if test "$ac_cv_nolto" = "yes" ; then - CFLAGS_NOLTO="-fno-lto" - else - CFLAGS_NOLTO="" - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the compiler understands -finput-charset" >&5 -printf %s "checking if the compiler understands -finput-charset... " >&6; } -if test ${tcl_cv_cc_input_charset+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -finput-charset=UTF-8" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_cc_input_charset=yes -else $as_nop - tcl_cv_cc_input_charset=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CFLAGS=$hold_cflags -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_input_charset" >&5 -printf "%s\n" "$tcl_cv_cc_input_charset" >&6; } - if test $tcl_cv_cc_input_charset = yes; then - CFLAGS="$CFLAGS -finput-charset=UTF-8" - fi - - ac_fn_c_check_header_compile "$LINENO" "stdbool.h" "ac_cv_header_stdbool_h" "$ac_includes_default" -if test "x$ac_cv_header_stdbool_h" = xyes -then : - -printf "%s\n" "#define HAVE_STDBOOL_H 1" >>confdefs.h - -fi - - - # Check for vfork, posix_spawnp() and friends unconditionally - ac_fn_c_check_func "$LINENO" "vfork" "ac_cv_func_vfork" -if test "x$ac_cv_func_vfork" = xyes -then : - printf "%s\n" "#define HAVE_VFORK 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "posix_spawnp" "ac_cv_func_posix_spawnp" -if test "x$ac_cv_func_posix_spawnp" = xyes -then : - printf "%s\n" "#define HAVE_POSIX_SPAWNP 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "posix_spawn_file_actions_adddup2" "ac_cv_func_posix_spawn_file_actions_adddup2" -if test "x$ac_cv_func_posix_spawn_file_actions_adddup2" = xyes -then : - printf "%s\n" "#define HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "posix_spawnattr_setflags" "ac_cv_func_posix_spawnattr_setflags" -if test "x$ac_cv_func_posix_spawnattr_setflags" = xyes -then : - printf "%s\n" "#define HAVE_POSIX_SPAWNATTR_SETFLAGS 1" >>confdefs.h - -fi - - - # FIXME: This subst was left in only because the TCL_DL_LIBS - # entry in tclConfig.sh uses it. It is not clear why someone - # would use TCL_DL_LIBS instead of TCL_LIBS. - - - - - - - - - - - - - - - - - - - - - - - - - - -printf "%s\n" "#define TCL_SHLIB_EXT \"${SHLIB_SUFFIX}\"" >>confdefs.h - - - - - - - - - - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for build with symbols" >&5 -printf %s "checking for build with symbols... " >&6; } - # Check whether --enable-symbols was given. -if test ${enable_symbols+y} -then : - enableval=$enable_symbols; tcl_ok=$enableval -else $as_nop - tcl_ok=no -fi - -# FIXME: Currently, LDFLAGS_DEFAULT is not used, it should work like CFLAGS_DEFAULT. - if test "$tcl_ok" = "no"; then - CFLAGS_DEFAULT='$(CFLAGS_OPTIMIZE)' - LDFLAGS_DEFAULT='$(LDFLAGS_OPTIMIZE)' - -printf "%s\n" "#define NDEBUG 1" >>confdefs.h - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - -printf "%s\n" "#define TCL_CFG_OPTIMIZED 1" >>confdefs.h - - else - CFLAGS_DEFAULT='$(CFLAGS_DEBUG)' - LDFLAGS_DEFAULT='$(LDFLAGS_DEBUG)' - if test "$tcl_ok" = "yes"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes (standard debugging)" >&5 -printf "%s\n" "yes (standard debugging)" >&6; } - fi - fi - - - - if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then - -printf "%s\n" "#define TCL_MEM_DEBUG 1" >>confdefs.h - - fi - - if test "$tcl_ok" = "compile" -o "$tcl_ok" = "all"; then - -printf "%s\n" "#define TCL_COMPILE_DEBUG 1" >>confdefs.h - - -printf "%s\n" "#define TCL_COMPILE_STATS 1" >>confdefs.h - - fi - - if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then - if test "$tcl_ok" = "all"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: enabled symbols mem compile debugging" >&5 -printf "%s\n" "enabled symbols mem compile debugging" >&6; } - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: enabled $tcl_ok debugging" >&5 -printf "%s\n" "enabled $tcl_ok debugging" >&6; } - fi - fi - - - -printf "%s\n" "#define MP_PREC 4" >>confdefs.h - - -#-------------------------------------------------------------------- -# Detect what compiler flags to set for 64-bit support. -#-------------------------------------------------------------------- - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for required early compiler flags" >&5 -printf %s "checking for required early compiler flags... " >&6; } - tcl_flags="" - - if test ${tcl_cv_flag__isoc99_source+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -char *p = (char *)strtoll; char *q = (char *)strtoull; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_flag__isoc99_source=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _ISOC99_SOURCE 1 -#include -int -main (void) -{ -char *p = (char *)strtoll; char *q = (char *)strtoull; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_flag__isoc99_source=yes -else $as_nop - tcl_cv_flag__isoc99_source=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - if test "x${tcl_cv_flag__isoc99_source}" = "xyes" ; then - -printf "%s\n" "#define _ISOC99_SOURCE 1" >>confdefs.h - - tcl_flags="$tcl_flags _ISOC99_SOURCE" - fi - - - if test ${tcl_cv_flag__file_offset_bits+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -switch (0) { case 0: case (sizeof(off_t)==sizeof(long long)): ; } - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_flag__file_offset_bits=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _FILE_OFFSET_BITS 64 -#include -int -main (void) -{ -switch (0) { case 0: case (sizeof(off_t)==sizeof(long long)): ; } - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_flag__file_offset_bits=yes -else $as_nop - tcl_cv_flag__file_offset_bits=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - if test "x${tcl_cv_flag__file_offset_bits}" = "xyes" ; then - -printf "%s\n" "#define _FILE_OFFSET_BITS 64" >>confdefs.h - - tcl_flags="$tcl_flags _FILE_OFFSET_BITS" - fi - - - if test ${tcl_cv_flag__largefile64_source+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -struct stat64 buf; int i = stat64("/", &buf); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_flag__largefile64_source=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _LARGEFILE64_SOURCE 1 -#include -int -main (void) -{ -struct stat64 buf; int i = stat64("/", &buf); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_flag__largefile64_source=yes -else $as_nop - tcl_cv_flag__largefile64_source=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - if test "x${tcl_cv_flag__largefile64_source}" = "xyes" ; then - -printf "%s\n" "#define _LARGEFILE64_SOURCE 1" >>confdefs.h - - tcl_flags="$tcl_flags _LARGEFILE64_SOURCE" - fi - - if test "x${tcl_flags}" = "x" ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 -printf "%s\n" "none" >&6; } - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${tcl_flags}" >&5 -printf "%s\n" "${tcl_flags}" >&6; } - fi - - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if 'long' and 'long long' have the same size (64-bit)?" >&5 -printf %s "checking if 'long' and 'long long' have the same size (64-bit)?... " >&6; } - if test ${tcl_cv_type_64bit+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - tcl_cv_type_64bit=none - # See if we could use long anyway Note that we substitute in the - # type that is our current guess for a 64-bit type inside this check - # program, so it should be modified only carefully... - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ -switch (0) { - case 1: case (sizeof(long long)==sizeof(long)): ; - } - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_type_64bit="long long" -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - if test "${tcl_cv_type_64bit}" = none ; then - -printf "%s\n" "#define TCL_WIDE_INT_IS_LONG 1" >>confdefs.h - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - # Now check for auxiliary declarations - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit time_t" >&5 -printf %s "checking for 64-bit time_t... " >&6; } -if test ${tcl_cv_time_t_64+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -switch (0) {case 0: case (sizeof(time_t)==sizeof(long long)): ;} - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_time_t_64=yes -else $as_nop - tcl_cv_time_t_64=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_time_t_64" >&5 -printf "%s\n" "$tcl_cv_time_t_64" >&6; } - if test "x${tcl_cv_time_t_64}" = "xno" ; then - # Note that _TIME_BITS=64 requires _FILE_OFFSET_BITS=64 - # which SC_TCL_EARLY_FLAGS has defined if necessary. - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if _TIME_BITS=64 enables 64-bit time_t" >&5 -printf %s "checking if _TIME_BITS=64 enables 64-bit time_t... " >&6; } -if test ${tcl_cv__time_bits+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#define _TIME_BITS 64 -#include -int -main (void) -{ -switch (0) {case 0: case (sizeof(time_t)==sizeof(long long)): ;} - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv__time_bits=yes -else $as_nop - tcl_cv__time_bits=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv__time_bits" >&5 -printf "%s\n" "$tcl_cv__time_bits" >&6; } - if test "x${tcl_cv__time_bits}" = "xyes" ; then - -printf "%s\n" "#define _TIME_BITS 64" >>confdefs.h - - fi - fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct dirent64" >&5 -printf %s "checking for struct dirent64... " >&6; } -if test ${tcl_cv_struct_dirent64+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -int -main (void) -{ -struct dirent64 p; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_struct_dirent64=yes -else $as_nop - tcl_cv_struct_dirent64=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_struct_dirent64" >&5 -printf "%s\n" "$tcl_cv_struct_dirent64" >&6; } - if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then - -printf "%s\n" "#define HAVE_STRUCT_DIRENT64 1" >>confdefs.h - - fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for DIR64" >&5 -printf %s "checking for DIR64... " >&6; } -if test ${tcl_cv_DIR64+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -int -main (void) -{ -struct dirent64 *p; DIR64 d = opendir64("."); - p = readdir64(d); rewinddir64(d); closedir64(d); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_DIR64=yes -else $as_nop - tcl_cv_DIR64=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_DIR64" >&5 -printf "%s\n" "$tcl_cv_DIR64" >&6; } - if test "x${tcl_cv_DIR64}" = "xyes" ; then - -printf "%s\n" "#define HAVE_DIR64 1" >>confdefs.h - - fi - - ac_fn_c_check_func "$LINENO" "open64" "ac_cv_func_open64" -if test "x$ac_cv_func_open64" = xyes -then : - printf "%s\n" "#define HAVE_OPEN64 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "lseek64" "ac_cv_func_lseek64" -if test "x$ac_cv_func_lseek64" = xyes -then : - printf "%s\n" "#define HAVE_LSEEK64 1" >>confdefs.h - -fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for off64_t" >&5 -printf %s "checking for off64_t... " >&6; } - if test ${tcl_cv_type_off64_t+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -off64_t offset; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_type_off64_t=yes -else $as_nop - tcl_cv_type_off64_t=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - if test "x${tcl_cv_type_off64_t}" = "xyes" && \ - test "x${ac_cv_func_lseek64}" = "xyes" && \ - test "x${ac_cv_func_open64}" = "xyes" ; then - -printf "%s\n" "#define HAVE_TYPE_OFF64_T 1" >>confdefs.h - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - fi - fi - - -#-------------------------------------------------------------------- -# Check endianness because we can optimize comparisons of -# Tcl_UniChar strings to memcmp on big-endian systems. -#-------------------------------------------------------------------- - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 -printf %s "checking whether byte ordering is bigendian... " >&6; } -if test ${ac_cv_c_bigendian+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_bigendian=unknown - # See if we're dealing with a universal compiler. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __APPLE_CC__ - not a universal capable compiler - #endif - typedef int dummy; - -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - - # Check for potential -arch flags. It is not universal unless - # there are at least two -arch flags with different values. - ac_arch= - ac_prev= - for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do - if test -n "$ac_prev"; then - case $ac_word in - i?86 | x86_64 | ppc | ppc64) - if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then - ac_arch=$ac_word - else - ac_cv_c_bigendian=universal - break - fi - ;; - esac - ac_prev= - elif test "x$ac_word" = "x-arch"; then - ac_prev=arch - fi - done -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - if test $ac_cv_c_bigendian = unknown; then - # See if sys/param.h defines the BYTE_ORDER macro. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main (void) -{ -#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ - && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ - && LITTLE_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - # It does; now see whether it defined to BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - #include - -int -main (void) -{ -#if BYTE_ORDER != BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_c_bigendian=yes -else $as_nop - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main (void) -{ -#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) - bogus endian macros - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - # It does; now see whether it defined to _BIG_ENDIAN or not. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -int -main (void) -{ -#ifndef _BIG_ENDIAN - not big endian - #endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_c_bigendian=yes -else $as_nop - ac_cv_c_bigendian=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - fi - if test $ac_cv_c_bigendian = unknown; then - # Compile a test program. - if test "$cross_compiling" = yes -then : - # Try to guess by grepping values from an object file. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -unsigned short int ascii_mm[] = - { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; - unsigned short int ascii_ii[] = - { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; - int use_ascii (int i) { - return ascii_mm[i] + ascii_ii[i]; - } - unsigned short int ebcdic_ii[] = - { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; - unsigned short int ebcdic_mm[] = - { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; - int use_ebcdic (int i) { - return ebcdic_mm[i] + ebcdic_ii[i]; - } - extern int foo; - -int -main (void) -{ -return use_ascii (foo) == use_ebcdic (foo); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then - ac_cv_c_bigendian=yes - fi - if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi - fi -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main (void) -{ - - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long int l; - char c[sizeof (long int)]; - } u; - u.l = 1; - return u.c[sizeof (long int) - 1] == 1; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO" -then : - ac_cv_c_bigendian=no -else $as_nop - ac_cv_c_bigendian=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 -printf "%s\n" "$ac_cv_c_bigendian" >&6; } - case $ac_cv_c_bigendian in #( - yes) - printf "%s\n" "#define WORDS_BIGENDIAN 1" >>confdefs.h -;; #( - no) - ;; #( - universal) - # - ;; #( - *) - as_fn_error $? "unknown endianness - presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; - esac - - -#-------------------------------------------------------------------- -# Supply substitutes for missing POSIX library procedures, or -# set flags so Tcl uses alternate procedures. -#-------------------------------------------------------------------- - -# Check if Posix compliant getcwd exists, if not we'll use getwd. - - for ac_func in getcwd -do : - ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd" -if test "x$ac_cv_func_getcwd" = xyes -then : - printf "%s\n" "#define HAVE_GETCWD 1" >>confdefs.h - -else $as_nop - -printf "%s\n" "#define USEGETWD 1" >>confdefs.h - -fi - -done -# Nb: if getcwd uses popen and pwd(1) (like SunOS 4) we should really -# define USEGETWD even if the posix getcwd exists. Add a test ? - -ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp" -if test "x$ac_cv_func_mkstemp" = xyes -then : - printf "%s\n" "#define HAVE_MKSTEMP 1" >>confdefs.h - -else $as_nop - case " $LIBOBJS " in - *" mkstemp.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS mkstemp.$ac_objext" - ;; -esac - -fi -ac_fn_c_check_func "$LINENO" "waitpid" "ac_cv_func_waitpid" -if test "x$ac_cv_func_waitpid" = xyes -then : - printf "%s\n" "#define HAVE_WAITPID 1" >>confdefs.h - -else $as_nop - case " $LIBOBJS " in - *" waitpid.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS waitpid.$ac_objext" - ;; -esac - -fi - -ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror" -if test "x$ac_cv_func_strerror" = xyes -then : - -else $as_nop - -printf "%s\n" "#define NO_STRERROR 1" >>confdefs.h - -fi - -ac_fn_c_check_func "$LINENO" "getwd" "ac_cv_func_getwd" -if test "x$ac_cv_func_getwd" = xyes -then : - -else $as_nop - -printf "%s\n" "#define NO_GETWD 1" >>confdefs.h - -fi - -ac_fn_c_check_func "$LINENO" "wait3" "ac_cv_func_wait3" -if test "x$ac_cv_func_wait3" = xyes -then : - -else $as_nop - -printf "%s\n" "#define NO_WAIT3 1" >>confdefs.h - -fi - -ac_fn_c_check_func "$LINENO" "fork" "ac_cv_func_fork" -if test "x$ac_cv_func_fork" = xyes -then : - -else $as_nop - -printf "%s\n" "#define NO_FORK 1" >>confdefs.h - -fi - -ac_fn_c_check_func "$LINENO" "mknod" "ac_cv_func_mknod" -if test "x$ac_cv_func_mknod" = xyes -then : - -else $as_nop - -printf "%s\n" "#define NO_MKNOD 1" >>confdefs.h - -fi - -ac_fn_c_check_func "$LINENO" "tcdrain" "ac_cv_func_tcdrain" -if test "x$ac_cv_func_tcdrain" = xyes -then : - -else $as_nop - -printf "%s\n" "#define NO_TCDRAIN 1" >>confdefs.h - -fi - -ac_fn_c_check_func "$LINENO" "uname" "ac_cv_func_uname" -if test "x$ac_cv_func_uname" = xyes -then : - -else $as_nop - -printf "%s\n" "#define NO_UNAME 1" >>confdefs.h - -fi - - -if test "`uname -s`" = "Darwin" && \ - test "`uname -r | awk -F. '{print $1}'`" -lt 7; then - # prior to Darwin 7, realpath is not threadsafe, so don't - # use it when threads are enabled, c.f. bug # 711232 - ac_cv_func_realpath=no -fi -ac_fn_c_check_func "$LINENO" "realpath" "ac_cv_func_realpath" -if test "x$ac_cv_func_realpath" = xyes -then : - -else $as_nop - -printf "%s\n" "#define NO_REALPATH 1" >>confdefs.h - -fi - - - - NEED_FAKE_RFC2553=0 - - for ac_func in getnameinfo getaddrinfo freeaddrinfo gai_strerror -do : - as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes" -then : - cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -else $as_nop - NEED_FAKE_RFC2553=1 -fi - -done - ac_fn_c_check_type "$LINENO" "struct addrinfo" "ac_cv_type_struct_addrinfo" " -#include -#include -#include -#include - -" -if test "x$ac_cv_type_struct_addrinfo" = xyes -then : - -printf "%s\n" "#define HAVE_STRUCT_ADDRINFO 1" >>confdefs.h - - -else $as_nop - NEED_FAKE_RFC2553=1 -fi -ac_fn_c_check_type "$LINENO" "struct in6_addr" "ac_cv_type_struct_in6_addr" " -#include -#include -#include -#include - -" -if test "x$ac_cv_type_struct_in6_addr" = xyes -then : - -printf "%s\n" "#define HAVE_STRUCT_IN6_ADDR 1" >>confdefs.h - - -else $as_nop - NEED_FAKE_RFC2553=1 -fi -ac_fn_c_check_type "$LINENO" "struct sockaddr_in6" "ac_cv_type_struct_sockaddr_in6" " -#include -#include -#include -#include - -" -if test "x$ac_cv_type_struct_sockaddr_in6" = xyes -then : - -printf "%s\n" "#define HAVE_STRUCT_SOCKADDR_IN6 1" >>confdefs.h - - -else $as_nop - NEED_FAKE_RFC2553=1 -fi -ac_fn_c_check_type "$LINENO" "struct sockaddr_storage" "ac_cv_type_struct_sockaddr_storage" " -#include -#include -#include -#include - -" -if test "x$ac_cv_type_struct_sockaddr_storage" = xyes -then : - -printf "%s\n" "#define HAVE_STRUCT_SOCKADDR_STORAGE 1" >>confdefs.h - - -else $as_nop - NEED_FAKE_RFC2553=1 -fi - -if test "x$NEED_FAKE_RFC2553" = "x1"; then - -printf "%s\n" "#define NEED_FAKE_RFC2553 1" >>confdefs.h - - case " $LIBOBJS " in - *" fake-rfc2553.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS fake-rfc2553.$ac_objext" - ;; -esac - - ac_fn_c_check_func "$LINENO" "strlcpy" "ac_cv_func_strlcpy" -if test "x$ac_cv_func_strlcpy" = xyes -then : - -fi - -fi - - -#-------------------------------------------------------------------- -# Look for thread-safe variants of some library functions. -#-------------------------------------------------------------------- - -ac_fn_c_check_func "$LINENO" "getpwuid_r" "ac_cv_func_getpwuid_r" -if test "x$ac_cv_func_getpwuid_r" = xyes -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getpwuid_r with 5 args" >&5 -printf %s "checking for getpwuid_r with 5 args... " >&6; } -if test ${tcl_cv_api_getpwuid_r_5+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - -int -main (void) -{ - - uid_t uid; - struct passwd pw, *pwp; - char buf[512]; - int buflen = 512; - - (void) getpwuid_r(uid, &pw, buf, buflen, &pwp); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_api_getpwuid_r_5=yes -else $as_nop - tcl_cv_api_getpwuid_r_5=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_api_getpwuid_r_5" >&5 -printf "%s\n" "$tcl_cv_api_getpwuid_r_5" >&6; } - tcl_ok=$tcl_cv_api_getpwuid_r_5 - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETPWUID_R_5 1" >>confdefs.h - - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getpwuid_r with 4 args" >&5 -printf %s "checking for getpwuid_r with 4 args... " >&6; } -if test ${tcl_cv_api_getpwuid_r_4+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - -int -main (void) -{ - - uid_t uid; - struct passwd pw; - char buf[512]; - int buflen = 512; - - (void)getpwnam_r(uid, &pw, buf, buflen); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_api_getpwuid_r_4=yes -else $as_nop - tcl_cv_api_getpwuid_r_4=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_api_getpwuid_r_4" >&5 -printf "%s\n" "$tcl_cv_api_getpwuid_r_4" >&6; } - tcl_ok=$tcl_cv_api_getpwuid_r_4 - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETPWUID_R_4 1" >>confdefs.h - - fi - fi - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETPWUID_R 1" >>confdefs.h - - fi - -fi - -ac_fn_c_check_func "$LINENO" "getpwnam_r" "ac_cv_func_getpwnam_r" -if test "x$ac_cv_func_getpwnam_r" = xyes -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getpwnam_r with 5 args" >&5 -printf %s "checking for getpwnam_r with 5 args... " >&6; } -if test ${tcl_cv_api_getpwnam_r_5+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - -int -main (void) -{ - - char *name; - struct passwd pw, *pwp; - char buf[512]; - int buflen = 512; - - (void) getpwnam_r(name, &pw, buf, buflen, &pwp); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_api_getpwnam_r_5=yes -else $as_nop - tcl_cv_api_getpwnam_r_5=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_api_getpwnam_r_5" >&5 -printf "%s\n" "$tcl_cv_api_getpwnam_r_5" >&6; } - tcl_ok=$tcl_cv_api_getpwnam_r_5 - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETPWNAM_R_5 1" >>confdefs.h - - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getpwnam_r with 4 args" >&5 -printf %s "checking for getpwnam_r with 4 args... " >&6; } -if test ${tcl_cv_api_getpwnam_r_4+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - -int -main (void) -{ - - char *name; - struct passwd pw; - char buf[512]; - int buflen = 512; - - (void)getpwnam_r(name, &pw, buf, buflen); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_api_getpwnam_r_4=yes -else $as_nop - tcl_cv_api_getpwnam_r_4=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_api_getpwnam_r_4" >&5 -printf "%s\n" "$tcl_cv_api_getpwnam_r_4" >&6; } - tcl_ok=$tcl_cv_api_getpwnam_r_4 - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETPWNAM_R_4 1" >>confdefs.h - - fi - fi - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETPWNAM_R 1" >>confdefs.h - - fi - -fi - -ac_fn_c_check_func "$LINENO" "getgrgid_r" "ac_cv_func_getgrgid_r" -if test "x$ac_cv_func_getgrgid_r" = xyes -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getgrgid_r with 5 args" >&5 -printf %s "checking for getgrgid_r with 5 args... " >&6; } -if test ${tcl_cv_api_getgrgid_r_5+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - -int -main (void) -{ - - gid_t gid; - struct group gr, *grp; - char buf[512]; - int buflen = 512; - - (void) getgrgid_r(gid, &gr, buf, buflen, &grp); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_api_getgrgid_r_5=yes -else $as_nop - tcl_cv_api_getgrgid_r_5=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_api_getgrgid_r_5" >&5 -printf "%s\n" "$tcl_cv_api_getgrgid_r_5" >&6; } - tcl_ok=$tcl_cv_api_getgrgid_r_5 - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETGRGID_R_5 1" >>confdefs.h - - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getgrgid_r with 4 args" >&5 -printf %s "checking for getgrgid_r with 4 args... " >&6; } -if test ${tcl_cv_api_getgrgid_r_4+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - -int -main (void) -{ - - gid_t gid; - struct group gr; - char buf[512]; - int buflen = 512; - - (void)getgrgid_r(gid, &gr, buf, buflen); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_api_getgrgid_r_4=yes -else $as_nop - tcl_cv_api_getgrgid_r_4=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_api_getgrgid_r_4" >&5 -printf "%s\n" "$tcl_cv_api_getgrgid_r_4" >&6; } - tcl_ok=$tcl_cv_api_getgrgid_r_4 - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETGRGID_R_4 1" >>confdefs.h - - fi - fi - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETGRGID_R 1" >>confdefs.h - - fi - -fi - -ac_fn_c_check_func "$LINENO" "getgrnam_r" "ac_cv_func_getgrnam_r" -if test "x$ac_cv_func_getgrnam_r" = xyes -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getgrnam_r with 5 args" >&5 -printf %s "checking for getgrnam_r with 5 args... " >&6; } -if test ${tcl_cv_api_getgrnam_r_5+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - -int -main (void) -{ - - char *name; - struct group gr, *grp; - char buf[512]; - int buflen = 512; - - (void) getgrnam_r(name, &gr, buf, buflen, &grp); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_api_getgrnam_r_5=yes -else $as_nop - tcl_cv_api_getgrnam_r_5=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_api_getgrnam_r_5" >&5 -printf "%s\n" "$tcl_cv_api_getgrnam_r_5" >&6; } - tcl_ok=$tcl_cv_api_getgrnam_r_5 - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETGRNAM_R_5 1" >>confdefs.h - - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getgrnam_r with 4 args" >&5 -printf %s "checking for getgrnam_r with 4 args... " >&6; } -if test ${tcl_cv_api_getgrnam_r_4+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - -int -main (void) -{ - - char *name; - struct group gr; - char buf[512]; - int buflen = 512; - - (void)getgrnam_r(name, &gr, buf, buflen); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_api_getgrnam_r_4=yes -else $as_nop - tcl_cv_api_getgrnam_r_4=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_api_getgrnam_r_4" >&5 -printf "%s\n" "$tcl_cv_api_getgrnam_r_4" >&6; } - tcl_ok=$tcl_cv_api_getgrnam_r_4 - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETGRNAM_R_4 1" >>confdefs.h - - fi - fi - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETGRNAM_R 1" >>confdefs.h - - fi - -fi - -if test "`uname -s`" = "Darwin" && \ - test "`uname -r | awk -F. '{print $1}'`" -gt 5; then - # Starting with Darwin 6 (Mac OSX 10.2), gethostbyX - # are actually MT-safe as they always return pointers - # from TSD instead of static storage. - -printf "%s\n" "#define HAVE_MTSAFE_GETHOSTBYNAME 1" >>confdefs.h - - -printf "%s\n" "#define HAVE_MTSAFE_GETHOSTBYADDR 1" >>confdefs.h - - -elif test "`uname -s`" = "HP-UX" && \ - test "`uname -r|sed -e 's|B\.||' -e 's|\..*$||'`" -gt 10; then - # Starting with HPUX 11.00 (we believe), gethostbyX - # are actually MT-safe as they always return pointers - # from TSD instead of static storage. - -printf "%s\n" "#define HAVE_MTSAFE_GETHOSTBYNAME 1" >>confdefs.h - - -printf "%s\n" "#define HAVE_MTSAFE_GETHOSTBYADDR 1" >>confdefs.h - - -else - - # Avoids picking hidden internal symbol from libc - ac_fn_check_decl "$LINENO" "gethostbyname_r" "ac_cv_have_decl_gethostbyname_r" "#include -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_gethostbyname_r" = xyes -then : - ac_have_decl=1 -else $as_nop - ac_have_decl=0 -fi -printf "%s\n" "#define HAVE_DECL_GETHOSTBYNAME_R $ac_have_decl" >>confdefs.h -if test $ac_have_decl = 1 -then : - - tcl_cv_api_gethostbyname_r=yes -else $as_nop - tcl_cv_api_gethostbyname_r=no -fi - - - - if test "$tcl_cv_api_gethostbyname_r" = yes; then - ac_fn_c_check_func "$LINENO" "gethostbyname_r" "ac_cv_func_gethostbyname_r" -if test "x$ac_cv_func_gethostbyname_r" = xyes -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname_r with 6 args" >&5 -printf %s "checking for gethostbyname_r with 6 args... " >&6; } -if test ${tcl_cv_api_gethostbyname_r_6+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - -int -main (void) -{ - - char *name; - struct hostent *he, *res; - char buffer[2048]; - int buflen = 2048; - int h_errnop; - - (void) gethostbyname_r(name, he, buffer, buflen, &res, &h_errnop); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_api_gethostbyname_r_6=yes -else $as_nop - tcl_cv_api_gethostbyname_r_6=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_api_gethostbyname_r_6" >&5 -printf "%s\n" "$tcl_cv_api_gethostbyname_r_6" >&6; } - tcl_ok=$tcl_cv_api_gethostbyname_r_6 - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETHOSTBYNAME_R_6 1" >>confdefs.h - - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname_r with 5 args" >&5 -printf %s "checking for gethostbyname_r with 5 args... " >&6; } -if test ${tcl_cv_api_gethostbyname_r_5+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - -int -main (void) -{ - - char *name; - struct hostent *he; - char buffer[2048]; - int buflen = 2048; - int h_errnop; - - (void) gethostbyname_r(name, he, buffer, buflen, &h_errnop); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_api_gethostbyname_r_5=yes -else $as_nop - tcl_cv_api_gethostbyname_r_5=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_api_gethostbyname_r_5" >&5 -printf "%s\n" "$tcl_cv_api_gethostbyname_r_5" >&6; } - tcl_ok=$tcl_cv_api_gethostbyname_r_5 - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETHOSTBYNAME_R_5 1" >>confdefs.h - - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname_r with 3 args" >&5 -printf %s "checking for gethostbyname_r with 3 args... " >&6; } -if test ${tcl_cv_api_gethostbyname_r_3+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - -int -main (void) -{ - - char *name; - struct hostent *he; - struct hostent_data data; - - (void) gethostbyname_r(name, he, &data); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_api_gethostbyname_r_3=yes -else $as_nop - tcl_cv_api_gethostbyname_r_3=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_api_gethostbyname_r_3" >&5 -printf "%s\n" "$tcl_cv_api_gethostbyname_r_3" >&6; } - tcl_ok=$tcl_cv_api_gethostbyname_r_3 - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETHOSTBYNAME_R_3 1" >>confdefs.h - - fi - fi - fi - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETHOSTBYNAME_R 1" >>confdefs.h - - fi - -fi - - fi - - - # Avoids picking hidden internal symbol from libc - ac_fn_check_decl "$LINENO" "gethostbyaddr_r" "ac_cv_have_decl_gethostbyaddr_r" "#include -" "$ac_c_undeclared_builtin_options" "CFLAGS" -if test "x$ac_cv_have_decl_gethostbyaddr_r" = xyes -then : - ac_have_decl=1 -else $as_nop - ac_have_decl=0 -fi -printf "%s\n" "#define HAVE_DECL_GETHOSTBYADDR_R $ac_have_decl" >>confdefs.h -if test $ac_have_decl = 1 -then : - - tcl_cv_api_gethostbyaddr_r=yes -else $as_nop - tcl_cv_api_gethostbyaddr_r=no -fi - - - - if test "$tcl_cv_api_gethostbyaddr_r" = yes; then - ac_fn_c_check_func "$LINENO" "gethostbyaddr_r" "ac_cv_func_gethostbyaddr_r" -if test "x$ac_cv_func_gethostbyaddr_r" = xyes -then : - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyaddr_r with 7 args" >&5 -printf %s "checking for gethostbyaddr_r with 7 args... " >&6; } -if test ${tcl_cv_api_gethostbyaddr_r_7+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - -int -main (void) -{ - - char *addr; - int length; - int type; - struct hostent *result; - char buffer[2048]; - int buflen = 2048; - int h_errnop; - - (void) gethostbyaddr_r(addr, length, type, result, buffer, buflen, - &h_errnop); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_api_gethostbyaddr_r_7=yes -else $as_nop - tcl_cv_api_gethostbyaddr_r_7=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_api_gethostbyaddr_r_7" >&5 -printf "%s\n" "$tcl_cv_api_gethostbyaddr_r_7" >&6; } - tcl_ok=$tcl_cv_api_gethostbyaddr_r_7 - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETHOSTBYADDR_R_7 1" >>confdefs.h - - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyaddr_r with 8 args" >&5 -printf %s "checking for gethostbyaddr_r with 8 args... " >&6; } -if test ${tcl_cv_api_gethostbyaddr_r_8+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - -int -main (void) -{ - - char *addr; - int length; - int type; - struct hostent *result, *resultp; - char buffer[2048]; - int buflen = 2048; - int h_errnop; - - (void) gethostbyaddr_r(addr, length, type, result, buffer, buflen, - &resultp, &h_errnop); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_api_gethostbyaddr_r_8=yes -else $as_nop - tcl_cv_api_gethostbyaddr_r_8=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_api_gethostbyaddr_r_8" >&5 -printf "%s\n" "$tcl_cv_api_gethostbyaddr_r_8" >&6; } - tcl_ok=$tcl_cv_api_gethostbyaddr_r_8 - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETHOSTBYADDR_R_8 1" >>confdefs.h - - fi - fi - if test "$tcl_ok" = yes; then - -printf "%s\n" "#define HAVE_GETHOSTBYADDR_R 1" >>confdefs.h - - fi - -fi - - fi - -fi - -#--------------------------------------------------------------------------- -# Check for serial port interface. -# -# termios.h is present on all POSIX systems. -# sys/ioctl.h is almost always present, though what it contains -# is system-specific. -# sys/modem.h is needed on HP-UX. -#--------------------------------------------------------------------------- - -ac_fn_c_check_header_compile "$LINENO" "termios.h" "ac_cv_header_termios_h" "$ac_includes_default" -if test "x$ac_cv_header_termios_h" = xyes -then : - printf "%s\n" "#define HAVE_TERMIOS_H 1" >>confdefs.h - -fi - -ac_fn_c_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_ioctl_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h - -fi - -ac_fn_c_check_header_compile "$LINENO" "sys/modem.h" "ac_cv_header_sys_modem_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_modem_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_MODEM_H 1" >>confdefs.h - -fi - - -#-------------------------------------------------------------------- -# Include sys/select.h if it exists and if it supplies things -# that appear to be useful and aren't already in sys/types.h. -# This appears to be true only on the RS/6000 under AIX. Some -# systems like OSF/1 have a sys/select.h that's of no use, and -# other systems like SCO UNIX have a sys/select.h that's -# pernicious. If "fd_set" isn't defined anywhere then set a -# special flag. -#-------------------------------------------------------------------- - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fd_set in sys/types" >&5 -printf %s "checking for fd_set in sys/types... " >&6; } -if test ${tcl_cv_type_fd_set+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -fd_set readMask, writeMask; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_type_fd_set=yes -else $as_nop - tcl_cv_type_fd_set=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_type_fd_set" >&5 -printf "%s\n" "$tcl_cv_type_fd_set" >&6; } -tcl_ok=$tcl_cv_type_fd_set -if test $tcl_ok = no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fd_mask in sys/select" >&5 -printf %s "checking for fd_mask in sys/select... " >&6; } -if test ${tcl_cv_grep_fd_mask+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "fd_mask" >/dev/null 2>&1 -then : - tcl_cv_grep_fd_mask=present -else $as_nop - tcl_cv_grep_fd_mask=missing -fi -rm -rf conftest* - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_grep_fd_mask" >&5 -printf "%s\n" "$tcl_cv_grep_fd_mask" >&6; } - if test $tcl_cv_grep_fd_mask = present; then - -printf "%s\n" "#define HAVE_SYS_SELECT_H 1" >>confdefs.h - - tcl_ok=yes - fi -fi -if test $tcl_ok = no; then - -printf "%s\n" "#define NO_FD_SET 1" >>confdefs.h - -fi - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pselect" >&5 -printf %s "checking for pselect... " >&6; } -if test ${tcl_cv_func_pselect+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -void *func = pselect; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_func_pselect=yes -else $as_nop - tcl_cv_func_pselect=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_func_pselect" >&5 -printf "%s\n" "$tcl_cv_func_pselect" >&6; } -tcl_ok=$tcl_cv_func_pselect -if test $tcl_ok = yes; then - -printf "%s\n" "#define HAVE_PSELECT 1" >>confdefs.h - -fi - -#------------------------------------------------------------------------ -# Options for the notifier. Checks for epoll(7) on Linux, and -# kqueue(2) on {DragonFly,Free,Net,Open}BSD -#------------------------------------------------------------------------ - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for advanced notifier support" >&5 -printf %s "checking for advanced notifier support... " >&6; } -case x`uname -s` in - xLinux) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: epoll(7)" >&5 -printf "%s\n" "epoll(7)" >&6; } - for ac_header in sys/epoll.h -do : - ac_fn_c_check_header_compile "$LINENO" "sys/epoll.h" "ac_cv_header_sys_epoll_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_epoll_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_EPOLL_H 1" >>confdefs.h - -printf "%s\n" "#define NOTIFIER_EPOLL 1" >>confdefs.h - -fi - -done - for ac_header in sys/eventfd.h -do : - ac_fn_c_check_header_compile "$LINENO" "sys/eventfd.h" "ac_cv_header_sys_eventfd_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_eventfd_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_EVENTFD_H 1" >>confdefs.h - -printf "%s\n" "#define HAVE_EVENTFD 1" >>confdefs.h - -fi - -done;; - xDragonFlyBSD|xFreeBSD|xNetBSD|xOpenBSD) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: kqueue(2)" >&5 -printf "%s\n" "kqueue(2)" >&6; } - # Messy because we want to check if *all* the headers are present, and not - # just *any* - tcl_kqueue_headers=x - for ac_header in sys/types.h sys/event.h sys/time.h -do : - as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes" -then : - cat >>confdefs.h <<_ACEOF -#define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - tcl_kqueue_headers=${tcl_kqueue_headers}y -fi - -done - if test $tcl_kqueue_headers = xyyy -then : - - -printf "%s\n" "#define NOTIFIER_KQUEUE 1" >>confdefs.h - -fi;; - xDarwin) - # Assume that we've got CoreFoundation present (checked elsewhere because - # of wider impact). - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: OSX" >&5 -printf "%s\n" "OSX" >&6; };; - *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 -printf "%s\n" "none" >&6; };; -esac - -#------------------------------------------------------------------------------ -# Find out all about time handling differences. -#------------------------------------------------------------------------------ - - - - ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_time_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h - -fi - - - - ac_fn_c_check_func "$LINENO" "gmtime_r" "ac_cv_func_gmtime_r" -if test "x$ac_cv_func_gmtime_r" = xyes -then : - printf "%s\n" "#define HAVE_GMTIME_R 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "localtime_r" "ac_cv_func_localtime_r" -if test "x$ac_cv_func_localtime_r" = xyes -then : - printf "%s\n" "#define HAVE_LOCALTIME_R 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "mktime" "ac_cv_func_mktime" -if test "x$ac_cv_func_mktime" = xyes -then : - printf "%s\n" "#define HAVE_MKTIME 1" >>confdefs.h - -fi - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking tm_tzadj in struct tm" >&5 -printf %s "checking tm_tzadj in struct tm... " >&6; } -if test ${tcl_cv_member_tm_tzadj+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -struct tm tm; (void)tm.tm_tzadj; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_member_tm_tzadj=yes -else $as_nop - tcl_cv_member_tm_tzadj=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_member_tm_tzadj" >&5 -printf "%s\n" "$tcl_cv_member_tm_tzadj" >&6; } - if test $tcl_cv_member_tm_tzadj = yes ; then - -printf "%s\n" "#define HAVE_TM_TZADJ 1" >>confdefs.h - - fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking tm_gmtoff in struct tm" >&5 -printf %s "checking tm_gmtoff in struct tm... " >&6; } -if test ${tcl_cv_member_tm_gmtoff+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -struct tm tm; (void)tm.tm_gmtoff; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_member_tm_gmtoff=yes -else $as_nop - tcl_cv_member_tm_gmtoff=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_member_tm_gmtoff" >&5 -printf "%s\n" "$tcl_cv_member_tm_gmtoff" >&6; } - if test $tcl_cv_member_tm_gmtoff = yes ; then - -printf "%s\n" "#define HAVE_TM_GMTOFF 1" >>confdefs.h - - fi - - # - # Its important to include time.h in this check, as some systems - # (like convex) have timezone functions, etc. - # - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking long timezone variable" >&5 -printf %s "checking long timezone variable... " >&6; } -if test ${tcl_cv_timezone_long+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -int -main (void) -{ -extern long timezone; - timezone += 1; - exit (0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_timezone_long=yes -else $as_nop - tcl_cv_timezone_long=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_timezone_long" >&5 -printf "%s\n" "$tcl_cv_timezone_long" >&6; } - if test $tcl_cv_timezone_long = yes ; then - -printf "%s\n" "#define HAVE_TIMEZONE_VAR 1" >>confdefs.h - - else - # - # On some systems (eg IRIX 6.2), timezone is a time_t and not a long. - # - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking time_t timezone variable" >&5 -printf %s "checking time_t timezone variable... " >&6; } -if test ${tcl_cv_timezone_time+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -int -main (void) -{ -extern time_t timezone; - timezone += 1; - exit (0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_timezone_time=yes -else $as_nop - tcl_cv_timezone_time=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_timezone_time" >&5 -printf "%s\n" "$tcl_cv_timezone_time" >&6; } - if test $tcl_cv_timezone_time = yes ; then - -printf "%s\n" "#define HAVE_TIMEZONE_VAR 1" >>confdefs.h - - fi - fi - - -#-------------------------------------------------------------------- -# Some systems (e.g., IRIX 4.0.5) lack some fields in struct stat. But -# we might be able to use fstatfs instead. Some systems (OpenBSD?) also -# lack blkcnt_t. -#-------------------------------------------------------------------- - -if test "$ac_cv_cygwin" != "yes"; then - ac_fn_c_check_member "$LINENO" "struct stat" "st_blocks" "ac_cv_member_struct_stat_st_blocks" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_blocks" = xyes -then : - -printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BLOCKS 1" >>confdefs.h - - -fi -ac_fn_c_check_member "$LINENO" "struct stat" "st_blksize" "ac_cv_member_struct_stat_st_blksize" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_blksize" = xyes -then : - -printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BLKSIZE 1" >>confdefs.h - - -fi -ac_fn_c_check_member "$LINENO" "struct stat" "st_rdev" "ac_cv_member_struct_stat_st_rdev" "$ac_includes_default" -if test "x$ac_cv_member_struct_stat_st_rdev" = xyes -then : - -printf "%s\n" "#define HAVE_STRUCT_STAT_ST_RDEV 1" >>confdefs.h - - -fi - -fi -ac_fn_c_check_type "$LINENO" "blkcnt_t" "ac_cv_type_blkcnt_t" "$ac_includes_default" -if test "x$ac_cv_type_blkcnt_t" = xyes -then : - -printf "%s\n" "#define HAVE_BLKCNT_T 1" >>confdefs.h - - -fi - -ac_fn_c_check_func "$LINENO" "fstatfs" "ac_cv_func_fstatfs" -if test "x$ac_cv_func_fstatfs" = xyes -then : - -else $as_nop - -printf "%s\n" "#define NO_FSTATFS 1" >>confdefs.h - -fi - - -#-------------------------------------------------------------------- -# Some system like SunOS 4 and other BSD like systems have no memmove -# (we assume they have bcopy instead). {The replacement define is in -# compat/string.h} -#-------------------------------------------------------------------- - -ac_fn_c_check_func "$LINENO" "memmove" "ac_cv_func_memmove" -if test "x$ac_cv_func_memmove" = xyes -then : - -else $as_nop - - -printf "%s\n" "#define NO_MEMMOVE 1" >>confdefs.h - - -printf "%s\n" "#define NO_STRING_H 1" >>confdefs.h - -fi - - -#-------------------------------------------------------------------- -# Check for various typedefs and provide substitutes if -# they don't exist. -#-------------------------------------------------------------------- - -ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" -if test "x$ac_cv_type_mode_t" = xyes -then : - -else $as_nop - -printf "%s\n" "#define mode_t int" >>confdefs.h - -fi - - - ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default -" -if test "x$ac_cv_type_pid_t" = xyes -then : - -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #if defined _WIN64 && !defined __CYGWIN__ - LLP64 - #endif - -int -main (void) -{ - - ; - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_pid_type='int' -else $as_nop - ac_pid_type='__int64' -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h - - -fi - - -ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = xyes -then : - -else $as_nop - -printf "%s\n" "#define size_t unsigned int" >>confdefs.h - -fi - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 -printf %s "checking for uid_t in sys/types.h... " >&6; } -if test ${ac_cv_type_uid_t+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "uid_t" >/dev/null 2>&1 -then : - ac_cv_type_uid_t=yes -else $as_nop - ac_cv_type_uid_t=no -fi -rm -rf conftest* - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 -printf "%s\n" "$ac_cv_type_uid_t" >&6; } -if test $ac_cv_type_uid_t = no; then - -printf "%s\n" "#define uid_t int" >>confdefs.h - - -printf "%s\n" "#define gid_t int" >>confdefs.h - -fi - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socklen_t" >&5 -printf %s "checking for socklen_t... " >&6; } -if test ${tcl_cv_type_socklen_t+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - -int -main (void) -{ - - socklen_t foo; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_type_socklen_t=yes -else $as_nop - tcl_cv_type_socklen_t=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_type_socklen_t" >&5 -printf "%s\n" "$tcl_cv_type_socklen_t" >&6; } -if test $tcl_cv_type_socklen_t = no; then - -printf "%s\n" "#define socklen_t int" >>confdefs.h - -fi - -ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" " -#include - -" -if test "x$ac_cv_type_intptr_t" = xyes -then : - -printf "%s\n" "#define HAVE_INTPTR_T 1" >>confdefs.h - - -fi -ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" " -#include - -" -if test "x$ac_cv_type_uintptr_t" = xyes -then : - -printf "%s\n" "#define HAVE_UINTPTR_T 1" >>confdefs.h - - -fi - - -#-------------------------------------------------------------------- -# The check below checks whether defines the type -# "union wait" correctly. It's needed because of weirdness in -# HP-UX where "union wait" is defined in both the BSD and SYS-V -# environments. Checking the usability of WIFEXITED seems to do -# the trick. -#-------------------------------------------------------------------- - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking union wait" >&5 -printf %s "checking union wait... " >&6; } -if test ${tcl_cv_union_wait+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -int -main (void) -{ - -union wait x; -WIFEXITED(x); /* Generates compiler error if WIFEXITED - * uses an int. */ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - tcl_cv_union_wait=yes -else $as_nop - tcl_cv_union_wait=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_union_wait" >&5 -printf "%s\n" "$tcl_cv_union_wait" >&6; } -if test $tcl_cv_union_wait = no; then - -printf "%s\n" "#define NO_UNION_WAIT 1" >>confdefs.h - -fi - -#-------------------------------------------------------------------- -# Check whether there is an strncasecmp function on this system. -# This is a bit tricky because under SCO it's in -lsocket and -# under Sequent Dynix it's in -linet. -#-------------------------------------------------------------------- - -ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp" -if test "x$ac_cv_func_strncasecmp" = xyes -then : - tcl_ok=1 -else $as_nop - tcl_ok=0 -fi - -if test "$tcl_ok" = 0; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for strncasecmp in -lsocket" >&5 -printf %s "checking for strncasecmp in -lsocket... " >&6; } -if test ${ac_cv_lib_socket_strncasecmp+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsocket $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char strncasecmp (); -int -main (void) -{ -return strncasecmp (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_socket_strncasecmp=yes -else $as_nop - ac_cv_lib_socket_strncasecmp=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_strncasecmp" >&5 -printf "%s\n" "$ac_cv_lib_socket_strncasecmp" >&6; } -if test "x$ac_cv_lib_socket_strncasecmp" = xyes -then : - tcl_ok=1 -else $as_nop - tcl_ok=0 -fi - -fi -if test "$tcl_ok" = 0; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for strncasecmp in -linet" >&5 -printf %s "checking for strncasecmp in -linet... " >&6; } -if test ${ac_cv_lib_inet_strncasecmp+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_check_lib_save_LIBS=$LIBS -LIBS="-linet $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -char strncasecmp (); -int -main (void) -{ -return strncasecmp (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_lib_inet_strncasecmp=yes -else $as_nop - ac_cv_lib_inet_strncasecmp=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet_strncasecmp" >&5 -printf "%s\n" "$ac_cv_lib_inet_strncasecmp" >&6; } -if test "x$ac_cv_lib_inet_strncasecmp" = xyes -then : - tcl_ok=1 -else $as_nop - tcl_ok=0 -fi - -fi -if test "$tcl_ok" = 0; then - case " $LIBOBJS " in - *" strncasecmp.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS strncasecmp.$ac_objext" - ;; -esac - - USE_COMPAT=1 -fi - -#-------------------------------------------------------------------- -# The code below deals with several issues related to gettimeofday: -# 1. Some systems don't provide a gettimeofday function at all -# (set NO_GETTOD if this is the case). -# 2. See if gettimeofday is declared in the header file. -# if not, set the GETTOD_NOT_DECLARED flag so that tclPort.h can -# declare it. -#-------------------------------------------------------------------- - -ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday" -if test "x$ac_cv_func_gettimeofday" = xyes -then : - -else $as_nop - - -printf "%s\n" "#define NO_GETTOD 1" >>confdefs.h - - -fi - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gettimeofday declaration" >&5 -printf %s "checking for gettimeofday declaration... " >&6; } -if test ${tcl_cv_grep_gettimeofday+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "gettimeofday" >/dev/null 2>&1 -then : - tcl_cv_grep_gettimeofday=present -else $as_nop - tcl_cv_grep_gettimeofday=missing -fi -rm -rf conftest* - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_grep_gettimeofday" >&5 -printf "%s\n" "$tcl_cv_grep_gettimeofday" >&6; } -if test $tcl_cv_grep_gettimeofday = missing ; then - -printf "%s\n" "#define GETTOD_NOT_DECLARED 1" >>confdefs.h - -fi - -#-------------------------------------------------------------------- -# The following code checks to see whether it is possible to get -# signed chars on this platform. This is needed in order to -# properly generate sign-extended ints from character values. -#-------------------------------------------------------------------- - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether char is unsigned" >&5 -printf %s "checking whether char is unsigned... " >&6; } -if test ${ac_cv_c_char_unsigned+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -int -main (void) -{ -static int test_array [1 - 2 * !(((char) -1) < 0)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_c_char_unsigned=no -else $as_nop - ac_cv_c_char_unsigned=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_char_unsigned" >&5 -printf "%s\n" "$ac_cv_c_char_unsigned" >&6; } -if test $ac_cv_c_char_unsigned = yes; then - printf "%s\n" "#define __CHAR_UNSIGNED__ 1" >>confdefs.h - -fi - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking signed char declarations" >&5 -printf %s "checking signed char declarations... " >&6; } -if test ${tcl_cv_char_signed+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - signed char *p; - p = 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_char_signed=yes -else $as_nop - tcl_cv_char_signed=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_char_signed" >&5 -printf "%s\n" "$tcl_cv_char_signed" >&6; } -if test $tcl_cv_char_signed = yes; then - -printf "%s\n" "#define HAVE_SIGNED_CHAR 1" >>confdefs.h - -fi - -#-------------------------------------------------------------------- -# Does putenv() copy or not? We need to know to avoid memory leaks. -#-------------------------------------------------------------------- - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a putenv() that copies the buffer" >&5 -printf %s "checking for a putenv() that copies the buffer... " >&6; } -if test ${tcl_cv_putenv_copy+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - if test "$cross_compiling" = yes -then : - tcl_cv_putenv_copy=no -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - #define OURVAR "havecopy=yes" - int main (int argc, char *argv[]) - { - char *foo, *bar; - foo = (char *)strdup(OURVAR); - putenv(foo); - strcpy((char *)(strchr(foo, '=') + 1), "no"); - bar = getenv("havecopy"); - if (!strcmp(bar, "no")) { - /* doesnt copy */ - return 0; - } else { - /* does copy */ - return 1; - } - } - -_ACEOF -if ac_fn_c_try_run "$LINENO" -then : - tcl_cv_putenv_copy=no -else $as_nop - tcl_cv_putenv_copy=yes -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_putenv_copy" >&5 -printf "%s\n" "$tcl_cv_putenv_copy" >&6; } -if test $tcl_cv_putenv_copy = yes; then - -printf "%s\n" "#define HAVE_PUTENV_THAT_COPIES 1" >>confdefs.h - -fi - -#-------------------------------------------------------------------- -# Check for support of nl_langinfo function -#-------------------------------------------------------------------- - - - # Check whether --enable-langinfo was given. -if test ${enable_langinfo+y} -then : - enableval=$enable_langinfo; langinfo_ok=$enableval -else $as_nop - langinfo_ok=yes -fi - - - HAVE_LANGINFO=0 - if test "$langinfo_ok" = "yes"; then - ac_fn_c_check_header_compile "$LINENO" "langinfo.h" "ac_cv_header_langinfo_h" "$ac_includes_default" -if test "x$ac_cv_header_langinfo_h" = xyes -then : - langinfo_ok=yes -else $as_nop - langinfo_ok=no -fi - - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use nl_langinfo" >&5 -printf %s "checking whether to use nl_langinfo... " >&6; } - if test "$langinfo_ok" = "yes"; then - if test ${tcl_cv_langinfo_h+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main (void) -{ -nl_langinfo(CODESET); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_langinfo_h=yes -else $as_nop - tcl_cv_langinfo_h=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_langinfo_h" >&5 -printf "%s\n" "$tcl_cv_langinfo_h" >&6; } - if test $tcl_cv_langinfo_h = yes; then - -printf "%s\n" "#define HAVE_LANGINFO 1" >>confdefs.h - - fi - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $langinfo_ok" >&5 -printf "%s\n" "$langinfo_ok" >&6; } - fi - - -#-------------------------------------------------------------------- -# Check for support of cfmakeraw, chflags and mkstemps functions -#-------------------------------------------------------------------- - -ac_fn_c_check_func "$LINENO" "cfmakeraw" "ac_cv_func_cfmakeraw" -if test "x$ac_cv_func_cfmakeraw" = xyes -then : - printf "%s\n" "#define HAVE_CFMAKERAW 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "chflags" "ac_cv_func_chflags" -if test "x$ac_cv_func_chflags" = xyes -then : - printf "%s\n" "#define HAVE_CHFLAGS 1" >>confdefs.h - -fi -ac_fn_c_check_func "$LINENO" "mkstemps" "ac_cv_func_mkstemps" -if test "x$ac_cv_func_mkstemps" = xyes -then : - printf "%s\n" "#define HAVE_MKSTEMPS 1" >>confdefs.h - -fi - - -#-------------------------------------------------------------------- -# Darwin specific API checks and defines -#-------------------------------------------------------------------- - -if test "`uname -s`" = "Darwin" ; then - ac_fn_c_check_func "$LINENO" "getattrlist" "ac_cv_func_getattrlist" -if test "x$ac_cv_func_getattrlist" = xyes -then : - printf "%s\n" "#define HAVE_GETATTRLIST 1" >>confdefs.h - -fi - - ac_fn_c_check_header_compile "$LINENO" "copyfile.h" "ac_cv_header_copyfile_h" "$ac_includes_default" -if test "x$ac_cv_header_copyfile_h" = xyes -then : - printf "%s\n" "#define HAVE_COPYFILE_H 1" >>confdefs.h - -fi - - ac_fn_c_check_func "$LINENO" "copyfile" "ac_cv_func_copyfile" -if test "x$ac_cv_func_copyfile" = xyes -then : - printf "%s\n" "#define HAVE_COPYFILE 1" >>confdefs.h - -fi - - if test $tcl_corefoundation = yes; then - ac_fn_c_check_header_compile "$LINENO" "libkern/OSAtomic.h" "ac_cv_header_libkern_OSAtomic_h" "$ac_includes_default" -if test "x$ac_cv_header_libkern_OSAtomic_h" = xyes -then : - printf "%s\n" "#define HAVE_LIBKERN_OSATOMIC_H 1" >>confdefs.h - -fi - - ac_fn_c_check_func "$LINENO" "OSSpinLockLock" "ac_cv_func_OSSpinLockLock" -if test "x$ac_cv_func_OSSpinLockLock" = xyes -then : - printf "%s\n" "#define HAVE_OSSPINLOCKLOCK 1" >>confdefs.h - -fi - - fi - -printf "%s\n" "#define TCL_LOAD_FROM_MEMORY 1" >>confdefs.h - - -printf "%s\n" "#define TCL_WIDE_CLICKS 1" >>confdefs.h - - ac_fn_c_check_header_compile "$LINENO" "AvailabilityMacros.h" "ac_cv_header_AvailabilityMacros_h" "$ac_includes_default" -if test "x$ac_cv_header_AvailabilityMacros_h" = xyes -then : - printf "%s\n" "#define HAVE_AVAILABILITYMACROS_H 1" >>confdefs.h - -fi - - if test "$ac_cv_header_AvailabilityMacros_h" = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if weak import is available" >&5 -printf %s "checking if weak import is available... " >&6; } -if test ${tcl_cv_cc_weak_import+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ - #if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1020 - #error __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1020 - #endif - #elif MAC_OS_X_VERSION_MIN_REQUIRED < 1020 - #error MAC_OS_X_VERSION_MIN_REQUIRED < 1020 - #endif - int rand(void) __attribute__((weak_import)); - -int -main (void) -{ -rand(); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - tcl_cv_cc_weak_import=yes -else $as_nop - tcl_cv_cc_weak_import=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - CFLAGS=$hold_cflags -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_weak_import" >&5 -printf "%s\n" "$tcl_cv_cc_weak_import" >&6; } - if test $tcl_cv_cc_weak_import = yes; then - -printf "%s\n" "#define HAVE_WEAK_IMPORT 1" >>confdefs.h - - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if Darwin SUSv3 extensions are available" >&5 -printf %s "checking if Darwin SUSv3 extensions are available... " >&6; } -if test ${tcl_cv_cc_darwin_c_source+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Werror" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ - #if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1050 - #error __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1050 - #endif - #elif MAC_OS_X_VERSION_MIN_REQUIRED < 1050 - #error MAC_OS_X_VERSION_MIN_REQUIRED < 1050 - #endif - #define _DARWIN_C_SOURCE 1 - #include - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_cc_darwin_c_source=yes -else $as_nop - tcl_cv_cc_darwin_c_source=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CFLAGS=$hold_cflags -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_darwin_c_source" >&5 -printf "%s\n" "$tcl_cv_cc_darwin_c_source" >&6; } - if test $tcl_cv_cc_darwin_c_source = yes; then - -printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h - - fi - fi - # Build .bundle dltest binaries in addition to .dylib - DLTEST_LD='${CC} -bundle -Wl,-w ${CFLAGS} ${LDFLAGS}' - DLTEST_SUFFIX=".bundle" -else - DLTEST_LD='${SHLIB_LD}' - DLTEST_SUFFIX="" -fi - -#-------------------------------------------------------------------- -# Check for support of fts functions (readdir replacement) -#-------------------------------------------------------------------- - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fts" >&5 -printf %s "checking for fts... " >&6; } -if test ${tcl_cv_api_fts+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - #include - #include - -int -main (void) -{ - - char*const p[2] = {"/", NULL}; - FTS *f = fts_open(p, FTS_PHYSICAL|FTS_NOCHDIR|FTS_NOSTAT, NULL); - FTSENT *e = fts_read(f); fts_close(f); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - tcl_cv_api_fts=yes -else $as_nop - tcl_cv_api_fts=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_api_fts" >&5 -printf "%s\n" "$tcl_cv_api_fts" >&6; } -if test $tcl_cv_api_fts = yes; then - -printf "%s\n" "#define HAVE_FTS 1" >>confdefs.h - -fi - -#-------------------------------------------------------------------- -# The statements below check for systems where POSIX-style non-blocking -# I/O (O_NONBLOCK) doesn't work or is unimplemented. On these systems -# (mostly older ones), use the old BSD-style FIONBIO approach instead. -#-------------------------------------------------------------------- - - - ac_fn_c_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_ioctl_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h - -fi - - ac_fn_c_check_header_compile "$LINENO" "sys/filio.h" "ac_cv_header_sys_filio_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_filio_h" = xyes -then : - printf "%s\n" "#define HAVE_SYS_FILIO_H 1" >>confdefs.h - -fi - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking system version" >&5 -printf %s "checking system version... " >&6; } -if test ${tcl_cv_sys_version+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - if test "${TEA_PLATFORM}" = "windows" ; then - tcl_cv_sys_version=windows - else - tcl_cv_sys_version=`uname -s`-`uname -r` - if test "$?" -ne 0 ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: can't find uname command" >&5 -printf "%s\n" "$as_me: WARNING: can't find uname command" >&2;} - tcl_cv_sys_version=unknown - else - if test "`uname -s`" = "AIX" ; then - tcl_cv_sys_version=AIX-`uname -v`.`uname -r` - fi - if test "`uname -s`" = "NetBSD" -a -f /etc/debian_version ; then - tcl_cv_sys_version=NetBSD-Debian - fi - fi - fi - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_sys_version" >&5 -printf "%s\n" "$tcl_cv_sys_version" >&6; } - system=$tcl_cv_sys_version - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking FIONBIO vs. O_NONBLOCK for nonblocking I/O" >&5 -printf %s "checking FIONBIO vs. O_NONBLOCK for nonblocking I/O... " >&6; } - case $system in - OSF*) - -printf "%s\n" "#define USE_FIONBIO 1" >>confdefs.h - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: FIONBIO" >&5 -printf "%s\n" "FIONBIO" >&6; } - ;; - *) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: O_NONBLOCK" >&5 -printf "%s\n" "O_NONBLOCK" >&6; } - ;; - esac - - -#------------------------------------------------------------------------ - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use dll unloading" >&5 -printf %s "checking whether to use dll unloading... " >&6; } -# Check whether --enable-dll-unloading was given. -if test ${enable_dll_unloading+y} -then : - enableval=$enable_dll_unloading; tcl_ok=$enableval -else $as_nop - tcl_ok=yes -fi - -if test $tcl_ok = yes; then - -printf "%s\n" "#define TCL_UNLOAD_DLLS 1" >>confdefs.h - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_ok" >&5 -printf "%s\n" "$tcl_ok" >&6; } - -#------------------------------------------------------------------------ -# Check whether the timezone data is supplied by the OS or has -# to be installed by Tcl. The default is autodetection, but can -# be overridden on the configure command line either way. -#------------------------------------------------------------------------ - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for timezone data" >&5 -printf %s "checking for timezone data... " >&6; } - -# Check whether --with-tzdata was given. -if test ${with_tzdata+y} -then : - withval=$with_tzdata; tcl_ok=$withval -else $as_nop - tcl_ok=auto -fi - -# -# Any directories that get added here must also be added to the -# search path in ::tcl::clock::Initialize (library/clock.tcl). -# -case $tcl_ok in - no) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: supplied by OS vendor" >&5 -printf "%s\n" "supplied by OS vendor" >&6; } - ;; - yes) - # nothing to do here - ;; - auto*) - if test ${tcl_cv_dir_zoneinfo+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - for dir in /usr/share/zoneinfo \ - /usr/share/lib/zoneinfo \ - /usr/lib/zoneinfo - do - if test -f $dir/UTC -o -f $dir/GMT - then - tcl_cv_dir_zoneinfo="$dir" - break - fi - done -fi - - if test -n "$tcl_cv_dir_zoneinfo"; then - tcl_ok=no - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dir" >&5 -printf "%s\n" "$dir" >&6; } - else - tcl_ok=yes - fi - ;; - *) - as_fn_error $? "invalid argument: $tcl_ok" "$LINENO" 5 - ;; -esac -if test $tcl_ok = yes -then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: supplied by Tcl" >&5 -printf "%s\n" "supplied by Tcl" >&6; } - INSTALL_TZDATA=install-tzdata -fi - -#-------------------------------------------------------------------- -# DTrace support -#-------------------------------------------------------------------- - -# Check whether --enable-dtrace was given. -if test ${enable_dtrace+y} -then : - enableval=$enable_dtrace; tcl_ok=$enableval -else $as_nop - tcl_ok=no -fi - -if test $tcl_ok = yes; then - ac_fn_c_check_header_compile "$LINENO" "sys/sdt.h" "ac_cv_header_sys_sdt_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_sdt_h" = xyes -then : - tcl_ok=yes -else $as_nop - tcl_ok=no -fi - -fi -if test $tcl_ok = yes; then - # Extract the first word of "dtrace", so it can be a program name with args. -set dummy dtrace; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_path_DTRACE+y} -then : - printf %s "(cached) " >&6 -else $as_nop - case $DTRACE in - [\\/]* | ?:[\\/]*) - ac_cv_path_DTRACE="$DTRACE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_dummy="$PATH:/usr/sbin" -for as_dir in $as_dummy -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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_DTRACE="$as_dir$ac_word$ac_exec_ext" - printf "%s\n" "$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 -DTRACE=$ac_cv_path_DTRACE -if test -n "$DTRACE"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DTRACE" >&5 -printf "%s\n" "$DTRACE" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - - test -z "$ac_cv_path_DTRACE" && tcl_ok=no -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable DTrace support" >&5 -printf %s "checking whether to enable DTrace support... " >&6; } -MAKEFILE_SHELL='/bin/sh' -if test $tcl_ok = yes; then - -printf "%s\n" "#define USE_DTRACE 1" >>confdefs.h - - DTRACE_SRC="\${DTRACE_SRC}" - DTRACE_HDR="\${DTRACE_HDR}" - if test "`uname -s`" != "Darwin" ; then - DTRACE_OBJ="\${DTRACE_OBJ}" - if test "`uname -s`" = "SunOS" -a "$SHARED_BUILD" = "0" ; then - # Need to create an intermediate object file to ensure tclDTrace.o - # gets included when linking against the static tcl library. - STLIB_LD='stlib_ld () { /usr/ccs/bin/ld -r -o $${1%.a}.o "$${@:2}" && '"${STLIB_LD}"' $${1} $${1%.a}.o ; } && stlib_ld' - MAKEFILE_SHELL='/bin/bash' - # Force use of Sun ar and ranlib, the GNU versions choke on - # tclDTrace.o and the combined object file above. - AR='/usr/ccs/bin/ar' - RANLIB='/usr/ccs/bin/ranlib' - fi - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_ok" >&5 -printf "%s\n" "$tcl_ok" >&6; } - -#-------------------------------------------------------------------- -# The check below checks whether the cpuid instruction is usable. -#-------------------------------------------------------------------- - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the cpuid instruction is usable" >&5 -printf %s "checking whether the cpuid instruction is usable... " >&6; } -if test ${tcl_cv_cpuid+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - int index,regsPtr[4]; - __asm__ __volatile__("mov %%ebx, %%edi \n\t" - "cpuid \n\t" - "mov %%ebx, %%esi \n\t" - "mov %%edi, %%ebx \n\t" - : "=a"(regsPtr[0]), "=S"(regsPtr[1]), "=c"(regsPtr[2]), "=d"(regsPtr[3]) - : "a"(index) : "edi"); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - tcl_cv_cpuid=yes -else $as_nop - tcl_cv_cpuid=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cpuid" >&5 -printf "%s\n" "$tcl_cv_cpuid" >&6; } -if test $tcl_cv_cpuid = yes; then - -printf "%s\n" "#define HAVE_CPUID 1" >>confdefs.h - -fi - -#-------------------------------------------------------------------- -# The statements below define a collection of symbols related to -# building libtcl as a shared library instead of a static library. -#-------------------------------------------------------------------- - -TCL_UNSHARED_LIB_SUFFIX=${UNSHARED_LIB_SUFFIX} -TCL_SHARED_LIB_SUFFIX=${SHARED_LIB_SUFFIX} -eval "TCL_LIB_FILE=libtcl${LIB_SUFFIX}" - -# tclConfig.sh needs a version of the _LIB_SUFFIX that has been eval'ed -# since on some platforms TCL_LIB_FILE contains shell escapes. -# (See also: TCL_TRIM_DOTS). - -eval "TCL_LIB_FILE=${TCL_LIB_FILE}" - -test -z "$TCL_LIBRARY" && TCL_LIBRARY='$(prefix)/lib/tcl$(VERSION)' -PRIVATE_INCLUDE_DIR='$(includedir)' -HTML_DIR='$(DISTDIR)/html' - -# Note: in the following variable, it's important to use the absolute -# path name of the Tcl directory rather than "..": this is because -# AIX remembers this path and will attempt to use it at run-time to look -# up the Tcl library. - -if test "`uname -s`" = "Darwin" ; then - - if test "`uname -s`" = "Darwin" ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to package libraries" >&5 -printf %s "checking how to package libraries... " >&6; } - # Check whether --enable-framework was given. -if test ${enable_framework+y} -then : - enableval=$enable_framework; enable_framework=$enableval -else $as_nop - enable_framework=no -fi - - if test $enable_framework = yes; then - if test $SHARED_BUILD = 0; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Frameworks can only be built if --enable-shared is yes" >&5 -printf "%s\n" "$as_me: WARNING: Frameworks can only be built if --enable-shared is yes" >&2;} - enable_framework=no - fi - if test $tcl_corefoundation = no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Frameworks can only be used when CoreFoundation is available" >&5 -printf "%s\n" "$as_me: WARNING: Frameworks can only be used when CoreFoundation is available" >&2;} - enable_framework=no - fi - fi - if test $enable_framework = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: framework" >&5 -printf "%s\n" "framework" >&6; } - FRAMEWORK_BUILD=1 - else - if test $SHARED_BUILD = 1; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: shared library" >&5 -printf "%s\n" "shared library" >&6; } - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: static library" >&5 -printf "%s\n" "static library" >&6; } - fi - FRAMEWORK_BUILD=0 - fi - fi - - TCL_SHLIB_LD_EXTRAS="-compatibility_version ${TCL_VERSION} -current_version ${TCL_VERSION}`echo ${TCL_PATCH_LEVEL} | awk '{match($0, "\\\.[0-9]+"); print substr($0,RSTART,RLENGTH)}'`" - TCL_SHLIB_LD_EXTRAS="${TCL_SHLIB_LD_EXTRAS}"' -install_name "${DYLIB_INSTALL_DIR}"/${TCL_LIB_FILE}' - echo "$LDFLAGS " | grep -q -- '-prebind ' && TCL_SHLIB_LD_EXTRAS="${TCL_SHLIB_LD_EXTRAS}"' -seg1addr 0xA000000' - TCL_SHLIB_LD_EXTRAS="${TCL_SHLIB_LD_EXTRAS}"' -sectcreate __TEXT __info_plist Tcl-Info.plist' - EXTRA_TCLSH_LIBS='-sectcreate __TEXT __info_plist Tclsh-Info.plist' - ac_config_files="$ac_config_files Tcl-Info.plist:../macosx/Tcl-Info.plist.in Tclsh-Info.plist:../macosx/Tclsh-Info.plist.in" - - TCL_YEAR="`date +%Y`" -fi - -if test "$FRAMEWORK_BUILD" = "1" ; then - -printf "%s\n" "#define TCL_FRAMEWORK 1" >>confdefs.h - - # Construct a fake local framework structure to make linking with - # '-framework Tcl' and running of tcltest work - ac_config_commands="$ac_config_commands Tcl.framework" - - LD_LIBRARY_PATH_VAR="DYLD_FRAMEWORK_PATH" - # default install directory for bundled packages - if test "${libdir}" = '${exec_prefix}/lib' -o "`basename ${libdir}`" = 'Frameworks'; then - PACKAGE_DIR="/Library/Tcl" - else - PACKAGE_DIR="$libdir" - fi - if test "${libdir}" = '${exec_prefix}/lib'; then - # override libdir default - libdir="/Library/Frameworks" - fi - TCL_LIB_FILE="Tcl" - TCL_LIB_FLAG="-framework Tcl" - TCL_BUILD_LIB_SPEC="-F`pwd | sed -e 's/ /\\\\ /g'` -framework Tcl" - TCL_LIB_SPEC="-F${libdir} -framework Tcl" - libdir="${libdir}/Tcl.framework/Versions/\${VERSION}" - TCL_LIBRARY="${libdir}/Resources/Scripts" - includedir="${libdir}/Headers" - PRIVATE_INCLUDE_DIR="${libdir}/PrivateHeaders" - HTML_DIR="${libdir}/Resources/Documentation/Reference/Tcl" - EXTRA_INSTALL="install-private-headers html-tcl" - EXTRA_BUILD_HTML='@ln -fs contents.htm "$(HTML_INSTALL_DIR)/TclTOC.html"' - EXTRA_INSTALL_BINARIES='@echo "Installing Info.plist to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA_DIR) "$(LIB_INSTALL_DIR)/Resources" && $(INSTALL_DATA) Tcl-Info.plist "$(LIB_INSTALL_DIR)/Resources/Info.plist"' - EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Installing license.terms to $(LIB_INSTALL_DIR)/Resources/" && $(INSTALL_DATA) "$(TOP_DIR)/license.terms" "$(LIB_INSTALL_DIR)/Resources"' - EXTRA_INSTALL_BINARIES="$EXTRA_INSTALL_BINARIES"' && echo "Finalizing Tcl.framework" && rm -f "$(LIB_INSTALL_DIR)/../Current" && ln -s "$(VERSION)" "$(LIB_INSTALL_DIR)/../Current" && for f in "$(LIB_FILE)" tclConfig.sh Resources Headers PrivateHeaders; do rm -f "$(LIB_INSTALL_DIR)/../../$$f" && ln -s "Versions/Current/$$f" "$(LIB_INSTALL_DIR)/../.."; done && f="$(STUB_LIB_FILE)" && rm -f "$(LIB_INSTALL_DIR)/../../$$f" && ln -s "Versions/$(VERSION)/$$f" "$(LIB_INSTALL_DIR)/../.."' - # Don't use AC_DEFINE for the following as the framework version define - # needs to go into the Makefile even when using autoheader, so that we - # can pick up a potential make override of VERSION. Also, don't put this - # into CFLAGS as it should not go into tclConfig.sh - EXTRA_CC_SWITCHES='-DTCL_FRAMEWORK_VERSION=\"$(VERSION)\"' -else - # libdir must be a fully qualified path and not ${exec_prefix}/lib - eval libdir="$libdir" - # default install directory for bundled packages - PACKAGE_DIR="$libdir" - if test "${TCL_LIB_VERSIONS_OK}" = "ok"; then - TCL_LIB_FLAG="-ltcl${TCL_VERSION}" - else - TCL_LIB_FLAG="-ltcl`echo ${TCL_VERSION} | tr -d .`" - fi - TCL_BUILD_LIB_SPEC="-L`pwd | sed -e 's/ /\\\\ /g'` ${TCL_LIB_FLAG}" - TCL_LIB_SPEC="-L${libdir} ${TCL_LIB_FLAG}" -fi -VERSION='${VERSION}' -eval "CFG_TCL_SHARED_LIB_SUFFIX=${TCL_SHARED_LIB_SUFFIX}" -eval "CFG_TCL_UNSHARED_LIB_SUFFIX=${TCL_UNSHARED_LIB_SUFFIX}" -VERSION=${TCL_VERSION} - -#-------------------------------------------------------------------- -# Zipfs support - Tip 430 -#-------------------------------------------------------------------- -# Check whether --enable-zipfs was given. -if test ${enable_zipfs+y} -then : - enableval=$enable_zipfs; tcl_ok=$enableval -else $as_nop - tcl_ok=yes -fi - -if test "$tcl_ok" = "yes" -a "x$enable_framework" != "xyes"; then - # - # Find a native compiler - # - # Put a plausible default for CC_FOR_BUILD in Makefile. - if test -z "$CC_FOR_BUILD"; then - if test "x$cross_compiling" = "xno"; then - CC_FOR_BUILD='$(CC)' - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gcc" >&5 -printf %s "checking for gcc... " >&6; } - if test ${ac_cv_path_cc+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - search_path=`echo ${PATH} | sed -e 's/:/ /g'` - for dir in $search_path ; do - for j in `ls -r $dir/gcc 2> /dev/null` \ - `ls -r $dir/gcc 2> /dev/null` ; do - if test x"$ac_cv_path_cc" = x ; then - if test -f "$j" ; then - ac_cv_path_cc=$j - break - fi - fi - done - done - -fi - - fi - fi - - # Also set EXEEXT_FOR_BUILD. - if test "x$cross_compiling" = "xno"; then - EXEEXT_FOR_BUILD='$(EXEEXT)' - OBJEXT_FOR_BUILD='$(OBJEXT)' - else - OBJEXT_FOR_BUILD='.no' - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for build system executable suffix" >&5 -printf %s "checking for build system executable suffix... " >&6; } -if test ${bfd_cv_build_exeext+y} -then : - printf %s "(cached) " >&6 -else $as_nop - rm -f conftest* - echo 'int main () { return 0; }' > conftest.c - bfd_cv_build_exeext= - ${CC_FOR_BUILD} -o conftest conftest.c 1>&5 2>&5 - for file in conftest.*; do - case $file in - *.c | *.o | *.obj | *.ilk | *.pdb) ;; - *) bfd_cv_build_exeext=`echo $file | sed -e s/conftest//` ;; - esac - done - rm -f conftest* - test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_build_exeext" >&5 -printf "%s\n" "$bfd_cv_build_exeext" >&6; } - EXEEXT_FOR_BUILD="" - test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext} - fi - - # - # Find a native zip implementation - # - - MACHER_PROG="" - ZIP_PROG="" - ZIP_PROG_OPTIONS="" - ZIP_PROG_VFSSEARCH="" - ZIP_INSTALL_OBJS="" - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for macher" >&5 -printf %s "checking for macher... " >&6; } - if test ${ac_cv_path_macher+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - search_path=`echo ${PATH} | sed -e 's/:/ /g'` - for dir in $search_path ; do - for j in `ls -r $dir/macher 2> /dev/null` \ - `ls -r $dir/macher 2> /dev/null` ; do - if test x"$ac_cv_path_macher" = x ; then - if test -f "$j" ; then - ac_cv_path_macher=$j - break - fi - fi - done - done - -fi - - if test -f "$ac_cv_path_macher" ; then - MACHER_PROG="$ac_cv_path_macher" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MACHER_PROG" >&5 -printf "%s\n" "$MACHER_PROG" >&6; } - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Found macher in environment" >&5 -printf "%s\n" "Found macher in environment" >&6; } - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for zip" >&5 -printf %s "checking for zip... " >&6; } - if test ${ac_cv_path_zip+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - search_path=`echo ${PATH} | sed -e 's/:/ /g'` - for dir in $search_path ; do - for j in `ls -r $dir/zip 2> /dev/null` \ - `ls -r $dir/zip 2> /dev/null` ; do - if test x"$ac_cv_path_zip" = x ; then - if test -f "$j" ; then - ac_cv_path_zip=$j - break - fi - fi - done - done - -fi - - if test -f "$ac_cv_path_zip" ; then - ZIP_PROG="$ac_cv_path_zip" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ZIP_PROG" >&5 -printf "%s\n" "$ZIP_PROG" >&6; } - ZIP_PROG_OPTIONS="-rq" - ZIP_PROG_VFSSEARCH="*" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Found INFO Zip in environment" >&5 -printf "%s\n" "Found INFO Zip in environment" >&6; } - # Use standard arguments for zip - else - # It is not an error if an installed version of Zip can't be located. - # We can use the locally distributed minizip instead - ZIP_PROG="./minizip${EXEEXT_FOR_BUILD}" - ZIP_PROG_OPTIONS="-o -r" - ZIP_PROG_VFSSEARCH="*" - ZIP_INSTALL_OBJS="minizip${EXEEXT_FOR_BUILD}" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: No zip found on PATH. Building minizip" >&5 -printf "%s\n" "No zip found on PATH. Building minizip" >&6; } - fi - - - - - - - ZIPFS_BUILD=1 - TCL_ZIP_FILE=libtcl${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_PATCH_LEVEL}.zip -else - ZIPFS_BUILD=0 - TCL_ZIP_FILE= -fi -# Do checking message here to not mess up interleaved configure output -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for building with zipfs" >&5 -printf %s "checking for building with zipfs... " >&6; } -if test "${ZIPFS_BUILD}" = 1; then - if test "${SHARED_BUILD}" = 0; then - ZIPFS_BUILD=2; - -printf "%s\n" "#define ZIPFS_BUILD 2" >>confdefs.h - - else - -printf "%s\n" "#define ZIPFS_BUILD 1" >>confdefs.h -\ - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -INSTALL_LIBRARIES=install-libraries -INSTALL_MSGS=install-msgs -fi - -# Point to tcl script library if we are not embedding it. -if test "${ZIPFS_BUILD}" = 0; then -TCL_BUILDTIME_LIBRARY=${TCL_SRC_DIR}/library -fi - - - - - - - -#-------------------------------------------------------------------- -# The statements below define the symbol TCL_PACKAGE_PATH, which -# gives a list of directories that may contain packages. The list -# consists of one directory for machine-dependent binaries and -# another for platform-independent scripts. -#-------------------------------------------------------------------- - -if test "$FRAMEWORK_BUILD" = "1" ; then - test -z "$TCL_PACKAGE_PATH" && \ - TCL_PACKAGE_PATH="~/Library/Tcl /Library/Tcl ~/Library/Frameworks /Library/Frameworks" - test -z "$TCL_MODULE_PATH" && \ - TCL_MODULE_PATH="~/Library/Tcl /Library/Tcl" -elif test "$prefix/lib" != "$libdir"; then - test -z "$TCL_PACKAGE_PATH" && TCL_PACKAGE_PATH="{${libdir}} {${prefix}/lib} ${TCL_PACKAGE_PATH}" -else - test -z "$TCL_PACKAGE_PATH" && TCL_PACKAGE_PATH="{${prefix}/lib} ${TCL_PACKAGE_PATH}" -fi - -#-------------------------------------------------------------------- -# The statements below define various symbols relating to Tcl -# stub support. -#-------------------------------------------------------------------- - -# Replace ${VERSION} with contents of ${TCL_VERSION} -# double-eval to account for TCL_TRIM_DOTS. -# -eval "TCL_STUB_LIB_FILE=libtclstub.a" -eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" -eval "TCL_STUB_LIB_DIR=\"${libdir}\"" - -TCL_STUB_LIB_FLAG="-ltclstub" - -TCL_BUILD_STUB_LIB_SPEC="-L`pwd | sed -e 's/ /\\\\ /g'` ${TCL_STUB_LIB_FLAG}" -TCL_STUB_LIB_SPEC="-L${TCL_STUB_LIB_DIR} ${TCL_STUB_LIB_FLAG}" -TCL_BUILD_STUB_LIB_PATH="`pwd`/${TCL_STUB_LIB_FILE}" -TCL_STUB_LIB_PATH="${TCL_STUB_LIB_DIR}/${TCL_STUB_LIB_FILE}" - -# Install time header dir can be set via --includedir -eval "TCL_INCLUDE_SPEC=\"-I${includedir}\"" - -#------------------------------------------------------------------------ -# tclConfig.sh refers to this by a different name -#------------------------------------------------------------------------ - -TCL_SHARED_BUILD=${SHARED_BUILD} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ac_config_files="$ac_config_files Makefile:../unix/Makefile.in dltest/Makefile:../unix/dltest/Makefile.in tclConfig.sh:../unix/tclConfig.sh.in tcl.pc:../unix/tcl.pc.in" - -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_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -printf "%s\n" "$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+y} || &/ - 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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -printf "%s\n" "$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` - - - -CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS="" - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -printf "%s\n" "$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 -as_nop=: -if test ${ZSH_VERSION+y} && (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 $as_nop - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - - -# Reset variables that may have inherited troublesome values from -# the environment. - -# IFS needs to be set, to space, tab, and newline, in precisely that order. -# (If _AS_PATH_WALK were called with IFS unset, it would have the -# side effect of setting IFS to empty, thus disabling word splitting.) -# Quoting is to prevent editors from complaining about space-tab. -as_nl=' -' -export as_nl -IFS=" "" $as_nl" - -PS1='$ ' -PS2='> ' -PS4='+ ' - -# Ensure predictable behavior from utilities with locale-dependent output. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# We cannot yet rely on "unset" to work, but we need these variables -# to be unset--not just set to an empty or harmless value--now, to -# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct -# also avoids known problems related to "unset" and subshell syntax -# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). -for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH -do eval test \${$as_var+y} \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done - -# Ensure that fds 0, 1, and 2 are open. -if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi -if (exec 3>&2) ; then :; else exec 2>/dev/null; fi - -# The user is always right. -if ${PATH_SEPARATOR+false} :; 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 - - -# 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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 - printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - - - -# 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 - printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - printf "%s\n" "$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_nop - 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_nop - 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 || -printf "%s\n" 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 - - -# Determine whether it's possible to make 'echo' print without a newline. -# These variables are no longer used directly by Autoconf, but are AC_SUBSTed -# for compatibility with existing Makefiles. -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 - -# For backward compatibility with old third-party macros, we provide -# the shell variables $as_echo and $as_echo_n. New code should use -# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. -as_echo='printf %s\n' -as_echo_n='printf %s' - -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=`printf "%s\n" "$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 || -printf "%s\n" 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 tcl $as_me 9.0, which was -generated by GNU Autoconf 2.71. 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 the package provider." - -_ACEOF -ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` -ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config='$ac_cs_config_escaped' -ac_cs_version="\\ -tcl config.status 9.0 -configured by $0, generated by GNU Autoconf 2.71, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2021 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' -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 ) - printf "%s\n" "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - printf "%s\n" "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`printf "%s\n" "$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 ) - printf "%s\n" "$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 - \printf "%s\n" "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 - printf "%s\n" "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -VERSION=${TCL_VERSION} - -_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 - "Tcl-Info.plist") CONFIG_FILES="$CONFIG_FILES Tcl-Info.plist:../macosx/Tcl-Info.plist.in" ;; - "Tclsh-Info.plist") CONFIG_FILES="$CONFIG_FILES Tclsh-Info.plist:../macosx/Tclsh-Info.plist.in" ;; - "Tcl.framework") CONFIG_COMMANDS="$CONFIG_COMMANDS Tcl.framework" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile:../unix/Makefile.in" ;; - "dltest/Makefile") CONFIG_FILES="$CONFIG_FILES dltest/Makefile:../unix/dltest/Makefile.in" ;; - "tclConfig.sh") CONFIG_FILES="$CONFIG_FILES tclConfig.sh:../unix/tclConfig.sh.in" ;; - "tcl.pc") CONFIG_FILES="$CONFIG_FILES tcl.pc:../unix/tcl.pc.in" ;; - - *) 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+y} || CONFIG_FILES=$config_files - test ${CONFIG_COMMANDS+y} || 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=`printf "%s\n" "$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 '` - printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -printf "%s\n" "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`printf "%s\n" "$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 || -printf "%s\n" 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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`printf "%s\n" "$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 - # - -_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@*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -printf "%s\n" "$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 -$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"; } && - { printf "%s\n" "$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 -printf "%s\n" "$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) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -printf "%s\n" "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "Tcl.framework":C) n=Tcl && - f=$n.framework && v=Versions/$VERSION && - rm -rf $f && mkdir -p $f/$v/Resources && - ln -s $v/$n $v/Resources $f && ln -s ../../../$n $f/$v && - ln -s ../../../../$n-Info.plist $f/$v/Resources/Info.plist && - unset n f v - ;; - - 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 -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - - Index: unix/configure.ac ================================================================== --- unix/configure.ac +++ unix/configure.ac @@ -1,6 +1,14 @@ #! /bin/bash -norc + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + dnl This file is an input file used by the GNU "autoconf" program to dnl generate the file "configure", which is run during Tcl installation dnl to configure the system for the local environment. AC_INIT([tcl],[9.0]) Index: unix/dltest/Makefile.in ================================================================== --- unix/dltest/Makefile.in +++ unix/dltest/Makefile.in @@ -15,27 +15,27 @@ BUILD_DIR = @builddir@ TCL_VERSION= @TCL_VERSION@ CFLAGS_DEBUG = @CFLAGS_DEBUG@ CFLAGS_OPTIMIZE = @CFLAGS_OPTIMIZE@ -CFLAGS = @CFLAGS_DEFAULT@ @CFLAGS@ -DTCL_NO_DEPRECATED=1 -Wall -Wextra -Wc++-compat -Wconversion -Werror +CFLAGS = @CFLAGS_DEFAULT@ @CFLAGS@ -Wall -Wextra -Wc++-compat -Wconversion -Werror LDFLAGS_DEBUG = @LDFLAGS_DEBUG@ LDFLAGS_OPTIMIZE = @LDFLAGS_OPTIMIZE@ LDFLAGS = @LDFLAGS_DEFAULT@ @LDFLAGS@ CC_SWITCHES = $(CFLAGS) -I${SRC_DIR}/../../generic \ ${SHLIB_CFLAGS} -DUSE_TCL_STUBS ${AC_FLAGS} all: embtest tcl9pkga${SHLIB_SUFFIX} tcl9pkgb${SHLIB_SUFFIX} tcl9pkgc${SHLIB_SUFFIX} \ tcl9pkgd${SHLIB_SUFFIX} tcl9pkge${SHLIB_SUFFIX} tcl9pkgt${SHLIB_SUFFIX} tcl9pkgua${SHLIB_SUFFIX} \ - tcl9pkgooa${SHLIB_SUFFIX} pkga${SHLIB_SUFFIX} pkgb${SHLIB_SUFFIX} pkgc${SHLIB_SUFFIX} pkgt${SHLIB_SUFFIX} + tcl9pkgooa${SHLIB_SUFFIX} @if test -n "$(DLTEST_SUFFIX)"; then $(MAKE) dltest_suffix; fi @touch ../dltest.marker dltest_suffix: tcl9pkga${DLTEST_SUFFIX} tcl9pkgb${DLTEST_SUFFIX} tcl9pkgc${DLTEST_SUFFIX} \ tcl9pkgd${DLTEST_SUFFIX} tcl9pkge${DLTEST_SUFFIX} tcl9pkgt${DLTEST_SUFFIX} tcl9pkgua${DLTEST_SUFFIX} \ - tcl9pkgooa${DLTEST_SUFFIX} pkga${DLTEST_SUFFIX} pkgb${DLTEST_SUFFIX} pkgc${DLTEST_SUFFIX} pkgt${DLTEST_SUFFIX} + tcl9pkgooa${DLTEST_SUFFIX} @touch ../dltest.marker embtest.o: $(SRC_DIR)/embtest.c $(CC) -c $(CC_SWITCHES) $(SRC_DIR)/embtest.c @@ -52,22 +52,10 @@ $(CC) -c $(CC_SWITCHES) $(SRC_DIR)/pkgc.c pkgt.o: $(SRC_DIR)/pkgt.c $(CC) -c $(CC_SWITCHES) $(SRC_DIR)/pkgt.c -tcl8pkga.o: $(SRC_DIR)/pkga.c - $(CC) -o $@ -c $(CC_SWITCHES) -DTCL_MAJOR_VERSION=8 $(SRC_DIR)/pkga.c - -tcl8pkgb.o: $(SRC_DIR)/pkgb.c - $(CC) -o $@ -c $(CC_SWITCHES) -DTCL_MAJOR_VERSION=8 $(SRC_DIR)/pkgb.c - -tcl8pkgc.o: $(SRC_DIR)/pkgc.c - $(CC) -o $@ -c $(CC_SWITCHES) -DTCL_MAJOR_VERSION=8 $(SRC_DIR)/pkgc.c - -tcl8pkgt.o: $(SRC_DIR)/pkgt.c - $(CC) -o $@ -c $(CC_SWITCHES) -DTCL_MAJOR_VERSION=8 $(SRC_DIR)/pkgt.c - pkgd.o: $(SRC_DIR)/pkgd.c $(CC) -c $(CC_SWITCHES) $(SRC_DIR)/pkgd.c pkge.o: $(SRC_DIR)/pkge.c $(CC) -c $(CC_SWITCHES) $(SRC_DIR)/pkge.c @@ -94,22 +82,10 @@ ${SHLIB_LD} -o $@ pkgc.o ${SHLIB_LD_LIBS} tcl9pkgt${SHLIB_SUFFIX}: pkgt.o ${SHLIB_LD} -o $@ pkgt.o ${SHLIB_LD_LIBS} -pkga${SHLIB_SUFFIX}: tcl8pkga.o - ${SHLIB_LD} -o $@ tcl8pkga.o ${SHLIB_LD_LIBS} - -pkgb${SHLIB_SUFFIX}: tcl8pkgb.o - ${SHLIB_LD} -o $@ tcl8pkgb.o ${SHLIB_LD_LIBS} - -pkgc${SHLIB_SUFFIX}: tcl8pkgc.o - ${SHLIB_LD} -o $@ tcl8pkgc.o ${SHLIB_LD_LIBS} - -pkgt${SHLIB_SUFFIX}: tcl8pkgt.o - ${SHLIB_LD} -o $@ tcl8pkgt.o ${SHLIB_LD_LIBS} - tcl9pkgd${SHLIB_SUFFIX}: pkgd.o ${SHLIB_LD} -o $@ pkgd.o ${SHLIB_LD_LIBS} tcl9pkge${SHLIB_SUFFIX}: pkge.o ${SHLIB_LD} -o $@ pkge.o ${SHLIB_LD_LIBS} @@ -133,22 +109,10 @@ ${DLTEST_LD} -o $@ pkgc.o ${SHLIB_LD_LIBS} tcl9pkgt${DLTEST_SUFFIX}: pkgt.o ${DLTEST_LD} -o $@ pkgt.o ${SHLIB_LD_LIBS} -pkga${DLTEST_SUFFIX}: tcl8pkga.o - ${DLTEST_LD} -o $@ tcl8pkga.o ${SHLIB_LD_LIBS} - -pkgb${DLTEST_SUFFIX}: tcl8pkgb.o - ${DLTEST_LD} -o $@ tcl8pkgb.o ${SHLIB_LD_LIBS} - -pkgc${DLTEST_SUFFIX}: tcl8pkgc.o - ${DLTEST_LD} -o $@ tcl8pkgc.o ${SHLIB_LD_LIBS} - -pkgt${DLTEST_SUFFIX}: tcl8pkgt.o - ${DLTEST_LD} -o $@ tcl8pkgt.o ${SHLIB_LD_LIBS} - tcl9pkgd${DLTEST_SUFFIX}: pkgd.o ${DLTEST_LD} -o $@ pkgd.o ${SHLIB_LD_LIBS} tcl9pkge${DLTEST_SUFFIX}: pkge.o ${DLTEST_LD} -o $@ pkge.o ${SHLIB_LD_LIBS} Index: unix/installManPage ================================================================== --- unix/installManPage +++ unix/installManPage @@ -1,6 +1,13 @@ #!/bin/sh + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. ######################################################################## ### Parse Options ### Index: unix/ldAix ================================================================== --- unix/ldAix +++ unix/ldAix @@ -1,7 +1,14 @@ #!/bin/sh + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. # +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # ldAix ldCmd ldArg ldArg ... # # This shell script provides a wrapper for ld under AIX in order to # create the .exp file required for linking. Its arguments consist # of the name and arguments that would normally be provided to the Index: unix/tcl.m4 ================================================================== --- unix/tcl.m4 +++ unix/tcl.m4 @@ -1,5 +1,12 @@ +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + #------------------------------------------------------------------------ # SC_PATH_TCLCONFIG -- # # Locate the tclConfig.sh file and perform a sanity check on # the Tcl compile flags Index: unix/tcl.spec ================================================================== --- unix/tcl.spec +++ unix/tcl.spec @@ -1,16 +1,16 @@ # This file is the basis for a binary Tcl RPM for Linux. %{!?directory:%define directory /usr/local} -Name: tcl -Summary: Tcl scripting language development environment +Name: tclunchained +Summary: TclUnchained scripting language development environment Version: 9.0a4 Release: 2 -License: BSD +License: GNU Affero General Public License Group: Development/Languages -Source: http://prdownloads.sourceforge.net/tcl/tcl%{version}-src.tar.gz +Source: http://prdownloads.sourceforge.net/tcl/tclunchained%{version}-src.tar.gz URL: https://www.tcl-lang.org/ Buildroot: /var/tmp/%{name}%{version} %description The Tcl (Tool Command Language) provides a powerful platform for Index: unix/tclAppInit.c ================================================================== --- unix/tclAppInit.c +++ unix/tclAppInit.c @@ -1,29 +1,31 @@ /* - * tclAppInit.c -- - * - * Provides a default version of the main program and Tcl_AppInit - * procedure for tclsh and other Tcl-based applications (without Tk). - * * Copyright (c) 1993 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998-1999 Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclAppInit.c -- + * + * Provides a default version of the main program and Tcl_AppInit + * procedure for tclsh and other Tcl-based applications (without Tk). + */ + #include "tcl.h" -#if TCL_MAJOR_VERSION < 9 -# if defined(USE_TCL_STUBS) -# error "Don't build with USE_TCL_STUBS!" -# endif -# if TCL_MINOR_VERSION < 7 -# define Tcl_LibraryInitProc Tcl_PackageInitProc -# define Tcl_StaticLibrary Tcl_StaticPackage -# endif -#endif #ifdef TCL_TEST extern Tcl_LibraryInitProc Tcltest_Init; extern Tcl_LibraryInitProc Tcltest_SafeInit; #endif /* TCL_TEST */ @@ -84,11 +86,11 @@ XtToolkitInitialize(); #endif #ifdef TCL_LOCAL_MAIN_HOOK TCL_LOCAL_MAIN_HOOK(&argc, &argv); -#elif (TCL_MAJOR_VERSION > 8 || TCL_MINOR_VERSION > 6) && (!defined(_WIN32) || defined(UNICODE)) +#elif !defined(_WIN32) || defined(UNICODE) /* New in Tcl 8.7. This doesn't work on Windows without UNICODE */ TclZipfs_AppHook(&argc, &argv); #endif Tcl_Main(argc, argv, TCL_LOCAL_APPINIT); Index: unix/tclEpollNotfy.c ================================================================== --- unix/tclEpollNotfy.c +++ unix/tclEpollNotfy.c @@ -1,19 +1,30 @@ /* - * tclEpollNotfy.c -- - * - * This file contains the implementation of the epoll()-based - * Linux-specific notifier, which is the lowest-level part of the Tcl - * event loop. This file works together with generic/tclNotify.c. - * * Copyright © 1995-1997 Sun Microsystems, Inc. * Copyright © 2016 Lucio Andrés Illanes Albornoz * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclEpollNotfy.c -- + * + * This file contains the implementation of the epoll()-based + * Linux-specific notifier, which is the lowest-level part of the Tcl + * event loop. This file works together with generic/tclNotify.c. + */ + #include "tclInt.h" #ifndef HAVE_COREFOUNDATION /* Darwin/Mac OS X CoreFoundation notifier is * in tclMacOSXNotify.c */ #if defined(NOTIFIER_EPOLL) && TCL_THREADS #ifndef _GNU_SOURCE Index: unix/tclKqueueNotfy.c ================================================================== --- unix/tclKqueueNotfy.c +++ unix/tclKqueueNotfy.c @@ -1,18 +1,29 @@ +/* + * Copyright © 1995-1997 Sun Microsystems, Inc. + * Copyright © 2016 Lucio Andrés Illanes Albornoz + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + /* * tclKqueueNotfy.c -- * * This file contains the implementation of the kqueue()-based * DragonFly/Free/Net/OpenBSD-specific notifier, which is the lowest- * level part of the Tcl event loop. This file works together with * generic/tclNotify.c. - * - * Copyright © 1995-1997 Sun Microsystems, Inc. - * Copyright © 2016 Lucio Andrés Illanes Albornoz - * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" #ifndef HAVE_COREFOUNDATION /* Darwin/Mac OS X CoreFoundation notifier is * in tclMacOSXNotify.c */ Index: unix/tclLoadAix.c ================================================================== --- unix/tclLoadAix.c +++ unix/tclLoadAix.c @@ -1,5 +1,20 @@ +/* + * @(#)dlfcn.c 1.7 revision of 95/08/14 19:08:38 + * This is an unpublished work copyright © 1992 HELIOS Software GmbH + * 30159 Hannover, Germany + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + /* * tclLoadAix.c -- * * This file implements the dlopen and dlsym APIs under the AIX operating * system, to enable the Tcl "load" command to work. This code was @@ -19,16 +34,10 @@ * * Note: this file has been altered from the original in a few ways in order * to work properly with Tcl. */ -/* - * @(#)dlfcn.c 1.7 revision of 95/08/14 19:08:38 - * This is an unpublished work copyright © 1992 HELIOS Software GmbH - * 30159 Hannover, Germany - */ - #include #include #include #include #include Index: unix/tclLoadDl.c ================================================================== --- unix/tclLoadDl.c +++ unix/tclLoadDl.c @@ -1,17 +1,28 @@ /* - * tclLoadDl.c -- - * - * This procedure provides a version of the TclLoadFile that works with - * the "dlopen" and "dlsym" library procedures for dynamic loading. - * * Copyright © 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclLoadDl.c -- + * + * This procedure provides a version of the TclLoadFile that works with + * the "dlopen" and "dlsym" library procedures for dynamic loading. + */ + #include "tclInt.h" #ifdef NO_DLFCN_H # include "../compat/dlfcn.h" #else # include Index: unix/tclLoadDyld.c ================================================================== --- unix/tclLoadDyld.c +++ unix/tclLoadDyld.c @@ -1,18 +1,29 @@ +/* + * Copyright © 1995 Apple Computer, Inc. + * Copyright © 2001-2007 Daniel A. Steffen + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + /* * tclLoadDyld.c -- * * This procedure provides a version of the TclLoadFile that works with * Apple's dyld dynamic loading. * Original version of his file (superseded long ago) provided by * Wilfredo Sanchez (wsanchez@apple.com). - * - * Copyright © 1995 Apple Computer, Inc. - * Copyright © 2001-2007 Daniel A. Steffen - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" #ifndef MODULE_SCOPE Index: unix/tclLoadNext.c ================================================================== --- unix/tclLoadNext.c +++ unix/tclLoadNext.c @@ -1,17 +1,28 @@ /* - * tclLoadNext.c -- - * - * This procedure provides a version of the TclLoadFile that works with - * NeXTs rld_* dynamic loading. This file provided by Pedja Bogdanovich. - * * Copyright © 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclLoadNext.c -- + * + * This procedure provides a version of the TclLoadFile that works with + * NeXTs rld_* dynamic loading. This file provided by Pedja Bogdanovich. + */ + #include "tclInt.h" #include #include Index: unix/tclLoadOSF.c ================================================================== --- unix/tclLoadOSF.c +++ unix/tclLoadOSF.c @@ -1,5 +1,21 @@ +/* + * Copyright © 1995-1997 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + /* * tclLoadOSF.c -- * * This function provides a version of the TclLoadFile that works under * OSF/1 1.0/1.1/1.2 and related systems, utilizing the old OSF/1 @@ -23,15 +39,10 @@ * * This approach to things was utter @&^#; thankfully, OSF/1 eventually * supported dlopen(). * * John Robert LoVerso - * - * Copyright © 1995-1997 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" #include #include Index: unix/tclLoadShl.c ================================================================== --- unix/tclLoadShl.c +++ unix/tclLoadShl.c @@ -1,16 +1,27 @@ +/* + * Copyright © 1995-1997 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + /* * tclLoadShl.c -- * * This procedure provides a version of the TclLoadFile that works with * the "shl_load" and "shl_findsym" library procedures for dynamic * loading (e.g. for HP machines). - * - * Copyright © 1995-1997 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include #include "tclInt.h" Index: unix/tclSelectNotfy.c ================================================================== --- unix/tclSelectNotfy.c +++ unix/tclSelectNotfy.c @@ -1,16 +1,27 @@ +/* + * Copyright © 1995-1997 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + /* * tclSelectNotfy.c -- * * This file contains the implementation of the select()-based generic * Unix notifier, which is the lowest-level part of the Tcl event loop. * This file works together with generic/tclNotify.c. - * - * Copyright © 1995-1997 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" #ifndef HAVE_COREFOUNDATION /* Darwin/Mac OS X CoreFoundation notifier is * in tclMacOSXNotify.c */ Index: unix/tclUnixChan.c ================================================================== --- unix/tclUnixChan.c +++ unix/tclUnixChan.c @@ -1,18 +1,29 @@ /* - * tclUnixChan.c - * - * Common channel driver for Unix channels based on files, command pipes - * and TCP sockets. - * * Copyright © 1995-1997 Sun Microsystems, Inc. * Copyright © 1998-1999 Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclUnixChan.c + * + * Common channel driver for Unix channels based on files, command pipes + * and TCP sockets. + */ + #include "tclInt.h" /* Internal definitions for Tcl. */ #include "tclIO.h" /* To get Channel type declaration. */ #undef SUPPORTS_TTY #if defined(HAVE_TERMIOS_H) Index: unix/tclUnixCompat.c ================================================================== --- unix/tclUnixCompat.c +++ unix/tclUnixCompat.c @@ -1,14 +1,25 @@ /* - * tclUnixCompat.c - * * Written by: Zoran Vasiljevic (vasiljevic@users.sourceforge.net). * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclUnixCompat.c + */ + #include "tclInt.h" #include #include /* Index: unix/tclUnixEvent.c ================================================================== --- unix/tclUnixEvent.c +++ unix/tclUnixEvent.c @@ -1,16 +1,27 @@ /* - * tclUnixEvent.c -- - * - * This file implements Unix specific event related routines. - * * Copyright © 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclUnixEvent.c -- + * + * This file implements Unix specific event related routines. + */ + #include "tclInt.h" #ifndef HAVE_COREFOUNDATION /* Darwin/Mac OS X CoreFoundation notifier is * in tclMacOSXNotify.c */ /* Index: unix/tclUnixFCmd.c ================================================================== --- unix/tclUnixFCmd.c +++ unix/tclUnixFCmd.c @@ -1,20 +1,6 @@ /* - * tclUnixFCmd.c - * - * This file implements the Unix specific portion of file manipulation - * subcommands of the "file" command. All filename arguments should - * already be translated to native format. - * - * Copyright © 1996-1998 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - * Portions of this code were derived from NetBSD source code which has the - * following copyright notice: - * * Copyright © 1988, 1993, 1994 * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: @@ -38,10 +24,37 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. */ +/* + * Copyright © 1996-1998 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + * + * Portions of this code were derived from NetBSD source code which has the + * following copyright notice: + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclUnixFCmd.c + * + * This file implements the Unix specific portion of file manipulation + * subcommands of the "file" command. All filename arguments should + * already be translated to native format. + */ + #include "tclInt.h" #ifndef HAVE_STRUCT_STAT_ST_BLKSIZE #ifndef NO_FSTATFS #include #endif Index: unix/tclUnixFile.c ================================================================== --- unix/tclUnixFile.c +++ unix/tclUnixFile.c @@ -1,17 +1,28 @@ /* - * tclUnixFile.c -- - * - * This file contains wrappers around UNIX file handling functions. - * These wrappers mask differences between Windows and UNIX. - * * Copyright © 1995-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclUnixFile.c -- + * + * This file contains wrappers around UNIX file handling functions. + * These wrappers mask differences between Windows and UNIX. + */ + #include "tclInt.h" #include "tclFileSystem.h" static int NativeMatchType(Tcl_Interp *interp, const char* nativeEntry, const char* nativeName, Tcl_GlobTypeData *types); Index: unix/tclUnixInit.c ================================================================== --- unix/tclUnixInit.c +++ unix/tclUnixInit.c @@ -1,15 +1,26 @@ /* - * tclUnixInit.c -- - * - * Contains the Unix-specific interpreter initialization functions. - * * Copyright © 1995-1997 Sun Microsystems, Inc. * Copyright © 1999 Scriptics Corporation. * All rights reserved. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclUnixInit.c -- + * + * Contains the Unix-specific interpreter initialization functions. + */ + #include "tclInt.h" #ifdef HAVE_LANGINFO # include # ifdef __APPLE__ # if defined(HAVE_WEAK_IMPORT) && MAC_OS_X_VERSION_MIN_REQUIRED < 1030 Index: unix/tclUnixNotfy.c ================================================================== --- unix/tclUnixNotfy.c +++ unix/tclUnixNotfy.c @@ -1,20 +1,31 @@ /* - * tclUnixNotfy.c -- - * - * This file contains subroutines shared by all notifier backend - * implementations on *nix platforms. It is *included* by the epoll, - * kqueue and select notifier implementation files. - * * Copyright © 1995-1997 Sun Microsystems, Inc. * Copyright © 2016 Lucio Andrés Illanes Albornoz * Copyright © 2021 Donal K. Fellows * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclUnixNotfy.c -- + * + * This file contains subroutines shared by all notifier backend + * implementations on *nix platforms. It is *included* by the epoll, + * kqueue and select notifier implementation files. + */ + #include #include "tclInt.h" /* * Static routines defined in this file. Index: unix/tclUnixPipe.c ================================================================== --- unix/tclUnixPipe.c +++ unix/tclUnixPipe.c @@ -1,18 +1,29 @@ /* - * tclUnixPipe.c -- - * - * This file implements the UNIX-specific exec pipeline functions, the - * "pipe" channel driver, and the "pid" Tcl command. - * * Copyright © 1991-1994 The Regents of the University of California. * Copyright © 1994-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclUnixPipe.c -- + * + * This file implements the UNIX-specific exec pipeline functions, the + * "pipe" channel driver, and the "pid" Tcl command. + */ + #include "tclInt.h" #ifdef HAVE_POSIX_SPAWNP # if defined(HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2) \ && defined(HAVE_POSIX_SPAWNATTR_SETFLAGS) \ @@ -1100,12 +1111,10 @@ if (pipePtr->errorFile) { errChan = Tcl_MakeFileChannel( INT2PTR(GetFd(pipePtr->errorFile)), TCL_READABLE); - /* Error channels should not raise encoding errors */ - Tcl_SetChannelOption(NULL, errChan, "-profile", "replace"); } else { errChan = NULL; } result = TclCleanupChildren(interp, pipePtr->numPids, pipePtr->pidPtr, errChan); Index: unix/tclUnixPort.h ================================================================== --- unix/tclUnixPort.h +++ unix/tclUnixPort.h @@ -1,5 +1,22 @@ +/* + * Copyright (c) 1991-1994 The Regents of the University of California. + * Copyright (c) 1994-1997 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + /* * tclUnixPort.h -- * * This header file handles porting issues that occur because of * differences between systems. It reads in UNIX-related header files and @@ -9,16 +26,10 @@ * Tcl core files. This file depends on configuration #defines such as * HAVE_SYS_PARAM_H that are set up by the "configure" script. * * Much of the material in this file was originally contributed by Karl * Lehenbauer, Mark Diekhans and Peter da Silva. - * - * Copyright (c) 1991-1994 The Regents of the University of California. - * Copyright (c) 1994-1997 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #ifndef _TCLUNIXPORT #define _TCLUNIXPORT Index: unix/tclUnixSock.c ================================================================== --- unix/tclUnixSock.c +++ unix/tclUnixSock.c @@ -1,16 +1,27 @@ /* - * tclUnixSock.c -- - * - * This file contains Unix-specific socket related code. - * * Copyright © 1995 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclUnixSock.c -- + * + * This file contains Unix-specific socket related code. + */ + #include "tclInt.h" #include /* * Helper macros to make parts of this file clearer. The macros do exactly Index: unix/tclUnixTest.c ================================================================== --- unix/tclUnixTest.c +++ unix/tclUnixTest.c @@ -1,20 +1,31 @@ /* - * tclUnixTest.c -- - * - * Contains platform specific test commands for the Unix platform. - * * Copyright © 1996-1997 Sun Microsystems, Inc. * Copyright © 1998 Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ -#undef BUILD_tcl -#undef STATIC_BUILD +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclUnixTest.c -- + * + * Contains platform specific test commands for the Unix platform. + */ + #ifndef USE_TCL_STUBS +# undef BUILD_tcl +# undef STATIC_BUILD # define USE_TCL_STUBS #endif #include "tclInt.h" /* Index: unix/tclUnixThrd.c ================================================================== --- unix/tclUnixThrd.c +++ unix/tclUnixThrd.c @@ -1,18 +1,29 @@ /* - * tclUnixThrd.c -- - * - * This file implements the UNIX-specific thread support. - * * Copyright © 1991-1994 The Regents of the University of California. * Copyright © 1994-1997 Sun Microsystems, Inc. * Copyright © 2008 George Peter Staplin * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclUnixThrd.c -- + * + * This file implements the UNIX-specific thread support. + */ + #include "tclInt.h" #if TCL_THREADS /* Index: unix/tclUnixTime.c ================================================================== --- unix/tclUnixTime.c +++ unix/tclUnixTime.c @@ -1,17 +1,28 @@ /* - * tclUnixTime.c -- - * - * Contains Unix specific versions of Tcl functions that obtain time - * values from the operating system. - * * Copyright © 1995 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclUnixTime.c -- + * + * Contains Unix specific versions of Tcl functions that obtain time + * values from the operating system. + */ + #include "tclInt.h" #if defined(TCL_WIDE_CLICKS) && defined(MAC_OSX_TCL) #include #endif Index: unix/tclXtNotify.c ================================================================== --- unix/tclXtNotify.c +++ unix/tclXtNotify.c @@ -1,17 +1,28 @@ /* - * tclXtNotify.c -- - * - * This file contains the notifier driver implementation for the Xt - * intrinsics. - * * Copyright © 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclXtNotify.c -- + * + * This file contains the notifier driver implementation for the Xt + * intrinsics. + */ + #ifndef USE_TCL_STUBS # define USE_TCL_STUBS #endif #include #include "tclInt.h" Index: unix/tclXtTest.c ================================================================== --- unix/tclXtTest.c +++ unix/tclXtTest.c @@ -1,16 +1,27 @@ /* - * tclXtTest.c -- - * - * Contains commands for Xt notifier specific tests on Unix. - * * Copyright © 1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclXtTest.c -- + * + * Contains commands for Xt notifier specific tests on Unix. + */ + #ifndef USE_TCL_STUBS # define USE_TCL_STUBS #endif #include #include "tcl.h" Index: win/Makefile.in ================================================================== --- win/Makefile.in +++ win/Makefile.in @@ -1,6 +1,12 @@ +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. # +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file is a Makefile for Tcl. If it has the name "Makefile.in" then it # is a template for a Makefile; to generate the actual Makefile, run # "./configure", which is a configuration script generated by the "autoconf" # program (constructs like "@foo@" will get replaced in the actual Makefile. @@ -82,15 +88,10 @@ #CFLAGS = $(CFLAGS_DEBUG) #CFLAGS = $(CFLAGS_OPTIMIZE) #CFLAGS = $(CFLAGS_DEBUG) $(CFLAGS_OPTIMIZE) CFLAGS = @CFLAGS@ @CFLAGS_DEFAULT@ -DMP_FIXED_CUTOFFS -D__USE_MINGW_ANSI_STDIO=0 -# To compile without backward compatibility and deprecated code uncomment the -# following -NO_DEPRECATED_FLAGS = -#NO_DEPRECATED_FLAGS = -DTCL_NO_DEPRECATED - # To enable compilation debugging reverse the comment characters on one of the # following lines. COMPILE_DEBUG_FLAGS = #COMPILE_DEBUG_FLAGS = -DTCL_COMPILE_DEBUG #COMPILE_DEBUG_FLAGS = -DTCL_COMPILE_DEBUG -DTCL_COMPILE_STATS @@ -144,14 +145,12 @@ TCL_STUB_LIB_FILE = @TCL_STUB_LIB_FILE@ TCL_DLL_FILE = @TCL_DLL_FILE@ TCL_LIB_FILE = @TCL_LIB_FILE@ DDE_DLL_FILE = tcl9dde$(DDEVER)${DLLSUFFIX} -DDE_DLL_FILE8 = tcldde$(DDEVER)${DLLSUFFIX} DDE_LIB_FILE = @LIBPREFIX@tcldde$(DDEVER)${DLLSUFFIX}${LIBSUFFIX} REG_DLL_FILE = tcl9registry$(REGVER)${DLLSUFFIX} -REG_DLL_FILE8 = tclregistry$(REGVER)${DLLSUFFIX} REG_LIB_FILE = @LIBPREFIX@tclregistry$(REGVER)${DLLSUFFIX}${LIBSUFFIX} TEST_DLL_FILE = tcltest$(VER)${DLLSUFFIX} TEST_EXE_FILE = tcltest${EXESUFFIX} TEST_LIB_FILE = @LIBPREFIX@tcltest$(VER)${DLLSUFFIX}${LIBSUFFIX} TEST_LOAD_PRMS = lappend ::auto_path {$(ROOT_DIR_WIN_NATIVE)/tests};\ @@ -273,10 +272,11 @@ TCLTEST_OBJS = \ tclTest.$(OBJEXT) \ tclTestABSList.$(OBJEXT) \ tclTestObj.$(OBJEXT) \ + tclTestObjInterface.$(OBJEXT) \ tclTestProcBodyObj.$(OBJEXT) \ tclThreadTest.$(OBJEXT) \ tclWinTest.$(OBJEXT) GENERIC_OBJS = \ @@ -522,11 +522,11 @@ tcltest: binaries $(TEST_EXE_FILE) $(TEST_DLL_FILE) $(CAT32) tcltest.cmd binaries: $(TCL_STUB_LIB_FILE) @LIBRARIES@ winextensions ${TCL_ZIP_FILE} $(TCLSH) -winextensions: ${DDE_DLL_FILE} ${REG_DLL_FILE} ${DDE_DLL_FILE8} ${REG_DLL_FILE8} +winextensions: ${DDE_DLL_FILE} ${REG_DLL_FILE} libraries: doc: @@ -596,18 +596,10 @@ ${REG_DLL_FILE}: ${TCL_STUB_LIB_FILE} ${REG_OBJS} @MAKE_DLL@ ${REG_OBJS} $(TCL_STUB_LIB_FILE) $(SHLIB_LD_LIBS) $(COPY) tclsh.exe.manifest ${REG_DLL_FILE}.manifest -${DDE_DLL_FILE8}: ${TCL_STUB_LIB_FILE} tcl8WinDde.$(OBJEXT) - @MAKE_DLL@ tcl8WinDde.$(OBJEXT) $(TCL_STUB_LIB_FILE) $(SHLIB_LD_LIBS) - $(COPY) tclsh.exe.manifest ${DDE_DLL_FILE8}.manifest - -${REG_DLL_FILE8}: ${TCL_STUB_LIB_FILE} tcl8WinReg.$(OBJEXT) - @MAKE_DLL@ -DTCL_MAJOR_VERSION=8 tcl8WinReg.$(OBJEXT) $(TCL_STUB_LIB_FILE) $(SHLIB_LD_LIBS) - $(COPY) tclsh.exe.manifest ${REG_DLL_FILE8}.manifest - ${TEST_DLL_FILE}: ${TCL_STUB_LIB_FILE} ${TCLTEST_OBJS} @$(RM) ${TEST_DLL_FILE} ${TEST_LIB_FILE} @MAKE_DLL@ ${TCLTEST_OBJS} $(TCL_STUB_LIB_FILE) $(SHLIB_LD_LIBS) $(COPY) tclsh.exe.manifest ${TEST_DLL_FILE}.manifest @@ -660,19 +652,13 @@ $(CC) -c $(CC_SWITCHES) -DBUILD_tcl $(EXTFLAGS) @DEPARG@ $(CC_OBJNAME) tclWinReg.${OBJEXT}: tclWinReg.c $(CC) -c $(CC_SWITCHES) $(EXTFLAGS) @DEPARG@ $(CC_OBJNAME) -tcl8WinReg.${OBJEXT}: tclWinReg.c - $(CC) -o $@ -c $(CC_SWITCHES) -DTCL_MAJOR_VERSION=8 $(EXTFLAGS) @DEPARG@ $(CC_OBJNAME) - tclWinDde.${OBJEXT}: tclWinDde.c $(CC) -c $(CC_SWITCHES) $(EXTFLAGS) @DEPARG@ $(CC_OBJNAME) -tcl8WinDde.${OBJEXT}: tclWinDde.c - $(CC) -o $@ -c $(CC_SWITCHES) -DTCL_MAJOR_VERSION=8 $(EXTFLAGS) @DEPARG@ $(CC_OBJNAME) - tclAppInit.${OBJEXT}: tclAppInit.c $(CC) -c $(CC_SWITCHES) $(EXTFLAGS) -DUNICODE -D_UNICODE @DEPARG@ $(CC_OBJNAME) tclMainW.${OBJEXT}: tclMain.c $(CC) -c $(CC_SWITCHES) -DBUILD_tcl -DUNICODE -D_UNICODE @DEPARG@ $(CC_OBJNAME) @@ -867,14 +853,10 @@ echo Installing $(DDE_DLL_FILE); \ $(COPY) $(DDE_DLL_FILE) "$(LIB_INSTALL_DIR)/dde${DDEDOTVER}"; \ $(COPY) $(ROOT_DIR)/library/dde/pkgIndex.tcl \ "$(LIB_INSTALL_DIR)/dde${DDEDOTVER}"; \ fi - @if [ -f $(DDE_DLL_FILE8) ]; then \ - echo Installing $(DDE_DLL_FILE8); \ - $(COPY) $(DDE_DLL_FILE8) "$(LIB_INSTALL_DIR)/dde${DDEDOTVER}"; \ - fi @if [ -f $(DDE_LIB_FILE) ]; then \ echo Installing $(DDE_LIB_FILE); \ $(COPY) $(DDE_LIB_FILE) "$(LIB_INSTALL_DIR)/dde${DDEDOTVER}"; \ fi @if [ -f $(REG_DLL_FILE) ]; then \ @@ -881,14 +863,10 @@ echo Installing $(REG_DLL_FILE); \ $(COPY) $(REG_DLL_FILE) "$(LIB_INSTALL_DIR)/registry${REGDOTVER}"; \ $(COPY) $(ROOT_DIR)/library/registry/pkgIndex.tcl \ "$(LIB_INSTALL_DIR)/registry${REGDOTVER}"; \ fi - @if [ -f $(REG_DLL_FILE8) ]; then \ - echo Installing $(REG_DLL_FILE8); \ - $(COPY) $(REG_DLL_FILE8) "$(LIB_INSTALL_DIR)/registry${REGDOTVER}"; \ - fi @if [ -f $(REG_LIB_FILE) ]; then \ echo Installing $(REG_LIB_FILE); \ $(COPY) $(REG_LIB_FILE) "$(LIB_INSTALL_DIR)/registry${REGDOTVER}"; \ fi @@ -1144,11 +1122,11 @@ "$(GENERIC_DIR_NATIVE)/tclOO.decls" # # This target creates the HTML folder for Tcl & Tk and places it in # DISTDIR/html. It uses the tcltk-man2html.tcl tool from the Tcl group's tool -# workspace. It depends on the Tcl & Tk being in directories called tcl9.* & +# workspace. It depends on the Tcl & Tk being in directories called tcl9.* # tk8.* up two directories from the TOOL_DIR. # TOOL_DIR=$(ROOT_DIR)/tools HTML_INSTALL_DIR=$(ROOT_DIR)/html Index: win/cat.c ================================================================== --- win/cat.c +++ win/cat.c @@ -1,16 +1,27 @@ /* - * cat.c -- - * - * Program used when testing tclWinPipe.c - * * Copyright (c) 1996 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * cat.c -- + * + * Program used when testing tclWinPipe.c + */ + #ifdef TCL_BROKEN_MAINARGS /* On mingw32 and cygwin this doesn't work */ # undef UNICODE # undef _UNICODE #endif DELETED win/configure Index: win/configure ================================================================== --- win/configure +++ /dev/null @@ -1,7067 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for tcl 9.0. -# -# -# Copyright (C) 1992-1996, 1998-2017, 2020-2021 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 -as_nop=: -if test ${ZSH_VERSION+y} && (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 $as_nop - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - - -# Reset variables that may have inherited troublesome values from -# the environment. - -# IFS needs to be set, to space, tab, and newline, in precisely that order. -# (If _AS_PATH_WALK were called with IFS unset, it would have the -# side effect of setting IFS to empty, thus disabling word splitting.) -# Quoting is to prevent editors from complaining about space-tab. -as_nl=' -' -export as_nl -IFS=" "" $as_nl" - -PS1='$ ' -PS2='> ' -PS4='+ ' - -# Ensure predictable behavior from utilities with locale-dependent output. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# We cannot yet rely on "unset" to work, but we need these variables -# to be unset--not just set to an empty or harmless value--now, to -# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct -# also avoids known problems related to "unset" and subshell syntax -# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). -for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH -do eval test \${$as_var+y} \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done - -# Ensure that fds 0, 1, and 2 are open. -if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi -if (exec 3>&2) ; then :; else exec 2>/dev/null; fi - -# The user is always right. -if ${PATH_SEPARATOR+false} :; 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 - - -# 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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 - printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - - -# 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'. -printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 -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="as_nop=: -if test \${ZSH_VERSION+y} && (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 \$as_nop - 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 \$as_nop - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1 -blah=\$(echo \$(echo blah)) -test x\"\$blah\" = xblah || 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 -test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null -then : - as_have_required=yes -else $as_nop - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null -then : - -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null -then : - CONFIG_SHELL=$as_shell as_have_required=yes - if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null -then : - break 2 -fi -fi - done;; - esac - as_found=false -done -IFS=$as_save_IFS -if $as_found -then : - -else $as_nop - if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null -then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi -fi - - - 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'. -printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno -then : - printf "%s\n" "$0: This script requires a shell more modern than all" - printf "%s\n" "$0: the shells that I found on your system." - if test ${ZSH_VERSION+y} ; then - printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" - printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." - else - printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a 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_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop - -# 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=`printf "%s\n" "$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 || -printf "%s\n" 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_nop - 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_nop - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - -# as_fn_nop -# --------- -# Do nothing but, unlike ":", preserve the value of $?. -as_fn_nop () -{ - return $? -} -as_nop=as_fn_nop - -# 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 - printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - printf "%s\n" "$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 || -printf "%s\n" 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" || - { printf "%s\n" "$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 -} - - -# Determine whether it's possible to make 'echo' print without a newline. -# These variables are no longer used directly by Autoconf, but are AC_SUBSTed -# for compatibility with existing Makefiles. -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 - -# For backward compatibility with old third-party macros, we provide -# the shell variables $as_echo and $as_echo_n. New code should use -# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. -as_echo='printf %s\n' -as_echo_n='printf %s' - - -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='tcl' -PACKAGE_TARNAME='tcl' -PACKAGE_VERSION='9.0' -PACKAGE_STRING='tcl 9.0' -PACKAGE_BUGREPORT='' -PACKAGE_URL='' - -ac_unique_file="../generic/tcl.h" -# Factoring default headers for most tests. -ac_includes_default="\ -#include -#ifdef HAVE_STDIO_H -# include -#endif -#ifdef HAVE_STDLIB_H -# include -#endif -#ifdef HAVE_STRING_H -# include -#endif -#ifdef HAVE_INTTYPES_H -# include -#endif -#ifdef HAVE_STDINT_H -# include -#endif -#ifdef HAVE_STRINGS_H -# include -#endif -#ifdef HAVE_SYS_TYPES_H -# include -#endif -#ifdef HAVE_SYS_STAT_H -# include -#endif -#ifdef HAVE_UNISTD_H -# include -#endif" - -ac_header_c_list= -ac_subst_vars='LTLIBOBJS -LIBOBJS -RES -RC_DEFINES -RC_DEFINE -RC_INCLUDE -RC_TYPE -RC_OUT -TCL_REG_MINOR_VERSION -TCL_REG_MAJOR_VERSION -TCL_REG_VERSION -TCL_DDE_MINOR_VERSION -TCL_DDE_MAJOR_VERSION -TCL_DDE_VERSION -TCL_PACKAGE_PATH -TCL_BUILD_LIB_SPEC -MAKE_EXE -MAKE_DLL -POST_MAKE_LIB -MAKE_STUB_LIB -MAKE_LIB -LIBRARIES -EXESUFFIX -LIBSUFFIX -LIBPREFIX -DLLSUFFIX -LIBS_GUI -TCL_SHARED_BUILD -SHLIB_SUFFIX -SHLIB_CFLAGS -SHLIB_LD_LIBS -SHLIB_LD -STLIB_LD -LDFLAGS_WINDOW -LDFLAGS_CONSOLE -LDFLAGS_OPTIMIZE -LDFLAGS_DEBUG -CC_EXENAME -CC_OBJNAME -DEPARG -EXTRA_CFLAGS -CFG_TCL_UNSHARED_LIB_SUFFIX -CFG_TCL_SHARED_LIB_SUFFIX -TCL_BIN_DIR -TCL_SRC_DIR -TCL_DLL_FILE -TCL_BUILD_STUB_LIB_PATH -TCL_BUILD_STUB_LIB_SPEC -TCL_INCLUDE_SPEC -TCL_STUB_LIB_PATH -TCL_STUB_LIB_SPEC -TCL_STUB_LIB_FLAG -TCL_STUB_LIB_FILE -TCL_LIB_SPEC -TCL_IMPORT_LIB_FLAG -TCL_IMPORT_LIB_FILE -TCL_STATIC_LIB_FLAG -TCL_STATIC_LIB_FILE -TCL_LIB_FLAG -TCL_LIB_FILE -TCL_EXE -PKG_CFG_ARGS -TCL_PATCH_LEVEL -TCL_MINOR_VERSION -TCL_MAJOR_VERSION -TCL_VERSION -MACHINE -TCL_WIN_VERSION -VC_MANIFEST_EMBED_EXE -VC_MANIFEST_EMBED_DLL -EGREP -GREP -CPP -LDFLAGS_DEFAULT -CFLAGS_DEFAULT -INSTALL_MSGS -INSTALL_LIBRARIES -TCL_ZIP_FILE -ZIPFS_BUILD -ZIP_INSTALL_OBJS -ZIP_PROG_VFSSEARCH -ZIP_PROG_OPTIONS -ZIP_PROG -TCLSH_PROG -EXEEXT_FOR_BUILD -CC_FOR_BUILD -TCL_TOMMATH_LIB_NAME -TCL_ZLIB_LIB_NAME -TOMMATH_OBJS -ZLIB_OBJS -TOMMATH_LIBS -ZLIB_LIBS -TOMMATH_DLL_FILE -ZLIB_DLL_FILE -CFLAGS_NOLTO -CFLAGS_WARNING -CFLAGS_OPTIMIZE -CFLAGS_DEBUG -DL_LIBS -WINE -CYGPATH -SHARED_BUILD -SET_MAKE -RC -RANLIB -AR -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -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 -runstatedir -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 -OBJEXT_FOR_BUILD' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -with_encoding -enable_shared -enable_64bit -enable_zipfs -enable_symbols -enable_embedded_manifest -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CPP' - - -# 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' -runstatedir='${localstatedir}/run' -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 - - 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=`printf "%s\n" "$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=`printf "%s\n" "$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 ;; - - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - - -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=`printf "%s\n" "$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=`printf "%s\n" "$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. - printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - printf "%s\n" "$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" ;; - *) printf "%s\n" "$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 runstatedir -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 || -printf "%s\n" 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 tcl 9.0 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] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] - --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/tcl] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of tcl 9.0:";; - 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-shared build and link with shared libraries (default: on) - --enable-64bit enable 64bit support (where applicable) - --enable-zipfs build with Zipfs support (default: on) - --enable-symbols build with debugging symbols (default: off) - --enable-embedded-manifest - embed manifest if possible (default: yes) - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-encoding encoding for configuration values - -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 - CPP C preprocessor - -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 the package provider. -_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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`printf "%s\n" "$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 configure.gnu first; this name is used for a wrapper for - # Metaconfig's "Configure" on case-insensitive file systems. - 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 - printf "%s\n" "$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 -tcl configure 9.0 -generated by GNU Autoconf 2.71 - -Copyright (C) 2021 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 conftest.beam - 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\"" -printf "%s\n" "$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 - printf "%s\n" "$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_nop - printf "%s\n" "$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_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - eval "$3=yes" -else $as_nop - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - -# ac_fn_c_check_type LINENO TYPE VAR INCLUDES -# ------------------------------------------- -# Tests whether TYPE exists after having included INCLUDES, setting cache -# variable VAR accordingly. -ac_fn_c_check_type () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -printf %s "checking for $2... " >&6; } -if eval test \${$3+y} -then : - printf %s "(cached) " >&6 -else $as_nop - eval "$3=no" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main (void) -{ -if (sizeof ($2)) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main (void) -{ -if (sizeof (($2))) - return 0; - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - -else $as_nop - eval "$3=yes" -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -eval ac_res=\$$3 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -printf "%s\n" "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_type - -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 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 - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - } -then : - ac_retval=0 -else $as_nop - printf "%s\n" "$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_cpp -ac_configure_args_raw= -for ac_arg -do - case $ac_arg in - *\'*) - ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append ac_configure_args_raw " '$ac_arg'" -done - -case $ac_configure_args_raw in - *$as_nl*) - ac_safe_unquote= ;; - *) - ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. - ac_unsafe_a="$ac_unsafe_z#~" - ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" - ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; -esac - -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 tcl $as_me 9.0, which was -generated by GNU Autoconf 2.71. Invocation command line was - - $ $0$ac_configure_args_raw - -_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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - printf "%s\n" "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=`printf "%s\n" "$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=$? - # Sanitize IFS. - IFS=" "" $as_nl" - # Save into config.log some information that might help in debugging. - { - echo - - printf "%s\n" "## ---------------- ## -## 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_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -printf "%s\n" "$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 - - printf "%s\n" "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - printf "%s\n" "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - printf "%s\n" "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - printf "%s\n" "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - printf "%s\n" "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - printf "%s\n" "$as_me: caught signal $ac_signal" - printf "%s\n" "$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 - -printf "%s\n" "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h - -printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h - -printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h - -printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h - -printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h - -printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -if test -n "$CONFIG_SITE"; then - ac_site_files="$CONFIG_SITE" -elif test "x$prefix" != xNONE; then - ac_site_files="$prefix/share/config.site $prefix/etc/config.site" -else - ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" -fi - -for ac_site_file in $ac_site_files -do - case $ac_site_file in #( - */*) : - ;; #( - *) : - ac_site_file=./$ac_site_file ;; -esac - if test -f "$ac_site_file" && test -r "$ac_site_file"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -printf "%s\n" "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -printf "%s\n" "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Test code for whether the C compiler supports C89 (global declarations) -ac_c_conftest_c89_globals=' -/* Does the compiler advertise C89 conformance? - Do not test the value of __STDC__, because some compilers set it to 0 - while being otherwise adequately conformant. */ -#if !defined __STDC__ -# error "Compiler does not advertise C89 conformance" -#endif - -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ -struct buf { int x; }; -struct buf * (*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 do not provoke an error unfortunately, instead are silently treated - as an "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 is necessary to write \x00 == 0 to get something - that is 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 **, int *(*)(struct buf *, struct stat *, int), - int, int);' - -# Test code for whether the C compiler supports C89 (body of main). -ac_c_conftest_c89_main=' -ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); -' - -# Test code for whether the C compiler supports C99 (global declarations) -ac_c_conftest_c99_globals=' -// Does the compiler advertise C99 conformance? -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L -# error "Compiler does not advertise C99 conformance" -#endif - -#include -extern int puts (const char *); -extern int printf (const char *, ...); -extern int dprintf (int, const char *, ...); -extern void *malloc (size_t); - -// Check varargs macros. These examples are taken from C99 6.10.3.5. -// dprintf is used instead of fprintf to avoid needing to declare -// FILE and stderr. -#define debug(...) dprintf (2, __VA_ARGS__) -#define showlist(...) puts (#__VA_ARGS__) -#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) -static void -test_varargs_macros (void) -{ - int x = 1234; - int y = 5678; - debug ("Flag"); - debug ("X = %d\n", x); - showlist (The first, second, and third items.); - report (x>y, "x is %d but y is %d", x, y); -} - -// Check long long types. -#define BIG64 18446744073709551615ull -#define BIG32 4294967295ul -#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) -#if !BIG_OK - #error "your preprocessor is broken" -#endif -#if BIG_OK -#else - #error "your preprocessor is broken" -#endif -static long long int bignum = -9223372036854775807LL; -static unsigned long long int ubignum = BIG64; - -struct incomplete_array -{ - int datasize; - double data[]; -}; - -struct named_init { - int number; - const wchar_t *name; - double average; -}; - -typedef const char *ccp; - -static inline int -test_restrict (ccp restrict text) -{ - // See if C++-style comments work. - // Iterate through items via the restricted pointer. - // Also check for declarations in for loops. - for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) - continue; - return 0; -} - -// Check varargs and va_copy. -static bool -test_varargs (const char *format, ...) -{ - va_list args; - va_start (args, format); - va_list args_copy; - va_copy (args_copy, args); - - const char *str = ""; - int number = 0; - float fnumber = 0; - - while (*format) - { - switch (*format++) - { - case '\''s'\'': // string - str = va_arg (args_copy, const char *); - break; - case '\''d'\'': // int - number = va_arg (args_copy, int); - break; - case '\''f'\'': // float - fnumber = va_arg (args_copy, double); - break; - default: - break; - } - } - va_end (args_copy); - va_end (args); - - return *str && number && fnumber; -} -' - -# Test code for whether the C compiler supports C99 (body of main). -ac_c_conftest_c99_main=' - // Check bool. - _Bool success = false; - success |= (argc != 0); - - // Check restrict. - if (test_restrict ("String literal") == 0) - success = true; - char *restrict newvar = "Another string"; - - // Check varargs. - success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); - test_varargs_macros (); - - // Check flexible array members. - struct incomplete_array *ia = - malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); - ia->datasize = 10; - for (int i = 0; i < ia->datasize; ++i) - ia->data[i] = i * 1.234; - - // Check named initializers. - struct named_init ni = { - .number = 34, - .name = L"Test wide string", - .average = 543.34343, - }; - - ni.number = 58; - - int dynamic_array[ni.number]; - dynamic_array[0] = argv[0][0]; - dynamic_array[ni.number - 1] = 543; - - // work around unused variable warnings - ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' - || dynamic_array[ni.number - 1] != 543); -' - -# Test code for whether the C compiler supports C11 (global declarations) -ac_c_conftest_c11_globals=' -// Does the compiler advertise C11 conformance? -#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L -# error "Compiler does not advertise C11 conformance" -#endif - -// Check _Alignas. -char _Alignas (double) aligned_as_double; -char _Alignas (0) no_special_alignment; -extern char aligned_as_int; -char _Alignas (0) _Alignas (int) aligned_as_int; - -// Check _Alignof. -enum -{ - int_alignment = _Alignof (int), - int_array_alignment = _Alignof (int[100]), - char_alignment = _Alignof (char) -}; -_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); - -// Check _Noreturn. -int _Noreturn does_not_return (void) { for (;;) continue; } - -// Check _Static_assert. -struct test_static_assert -{ - int x; - _Static_assert (sizeof (int) <= sizeof (long int), - "_Static_assert does not work in struct"); - long int y; -}; - -// Check UTF-8 literals. -#define u8 syntax error! -char const utf8_literal[] = u8"happens to be ASCII" "another string"; - -// Check duplicate typedefs. -typedef long *long_ptr; -typedef long int *long_ptr; -typedef long_ptr long_ptr; - -// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. -struct anonymous -{ - union { - struct { int i; int j; }; - struct { int k; long int l; } w; - }; - int m; -} v1; -' - -# Test code for whether the C compiler supports C11 (body of main). -ac_c_conftest_c11_main=' - _Static_assert ((offsetof (struct anonymous, i) - == offsetof (struct anonymous, w.k)), - "Anonymous union alignment botch"); - v1.i = 2; - v1.w.k = 5; - ok |= v1.i != 5; -' - -# Test code for whether the C compiler supports C11 (complete). -ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} -${ac_c_conftest_c99_globals} -${ac_c_conftest_c11_globals} - -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - ${ac_c_conftest_c99_main} - ${ac_c_conftest_c11_main} - return ok; -} -" - -# Test code for whether the C compiler supports C99 (complete). -ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} -${ac_c_conftest_c99_globals} - -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - ${ac_c_conftest_c99_main} - return ok; -} -" - -# Test code for whether the C compiler supports C89 (complete). -ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} - -int -main (int argc, char **argv) -{ - int ok = 0; - ${ac_c_conftest_c89_main} - return ok; -} -" - -as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" -as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" -as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" -as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" -as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" -as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" -as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" -as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" -as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" -# 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,) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -printf "%s\n" "$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=`printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`${MAKE-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 - - - - - -# The following define is needed when building with Cygwin since newer -# versions of autoconf incorrectly set SHELL to /bin/bash instead of -# /bin/sh. The bash shell seems to suffer from some strange failures. -SHELL=/bin/sh - -TCL_VERSION=9.0 -TCL_MAJOR_VERSION=9 -TCL_MINOR_VERSION=0 -TCL_PATCH_LEVEL="a4" -VER=$TCL_MAJOR_VERSION$TCL_MINOR_VERSION - -TCL_DDE_VERSION=1.4 -TCL_DDE_MAJOR_VERSION=1 -TCL_DDE_MINOR_VERSION=4 -DDEVER=$TCL_DDE_MAJOR_VERSION$TCL_DDE_MINOR_VERSION - -TCL_REG_VERSION=1.3 -TCL_REG_MAJOR_VERSION=1 -TCL_REG_MINOR_VERSION=3 -REGVER=$TCL_REG_MAJOR_VERSION$TCL_REG_MINOR_VERSION - -PKG_CFG_ARGS=$@ - -#------------------------------------------------------------------------ -# Empty slate for bundled packages, to avoid stale configuration -#------------------------------------------------------------------------ -rm -Rf pkgs - -#------------------------------------------------------------------------ -# Handle the --prefix=... option -#------------------------------------------------------------------------ - -if test "${prefix}" = "NONE"; then - prefix=/usr/local -fi -if test "${exec_prefix}" = "NONE"; then - exec_prefix=$prefix -fi -# libdir must be a fully qualified path (not ${exec_prefix}/lib) -eval libdir="$libdir" - -#------------------------------------------------------------------------ -# Standard compiler checks -#------------------------------------------------------------------------ - -# If the user did not set CFLAGS, set it now to keep -# the AC_PROG_CC macro from adding "-g -O2". -if test "${CFLAGS+set}" != "set" ; then - CFLAGS="" -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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "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:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. -set dummy ${ac_tool_prefix}clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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}clang" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -printf "%s\n" "$CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "clang", so it can be a program name with args. -set dummy clang; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_CC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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="clang" - printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -printf "%s\n" "$ac_ct_CC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$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 - -fi - - -test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$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. -printf "%s\n" "$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 -version; 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\"" -printf "%s\n" "$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 - printf "%s\n" "$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 (void) -{ - - ; - 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. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -printf %s "checking whether the C compiler works... " >&6; } -ac_link_default=`printf "%s\n" "$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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - printf "%s\n" "$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+y} && 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 $as_nop - ac_file='' -fi -if test -z "$ac_file" -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$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_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -printf %s "checking for C compiler default output file name... " >&6; } -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -printf "%s\n" "$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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -printf %s "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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - printf "%s\n" "$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_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -printf "%s\n" "$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 (void) -{ -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. -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -printf %s "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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - printf "%s\n" "$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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - printf "%s\n" "$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 - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -printf "%s\n" "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -printf %s "checking for suffix of object files... " >&6; } -if test ${ac_cv_objext+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - ; - 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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - printf "%s\n" "$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_nop - printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -printf "%s\n" "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 -printf %s "checking whether the compiler supports GNU C... " >&6; } -if test ${ac_cv_c_compiler_gnu+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_compiler_gnu=yes -else $as_nop - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+y} -ac_save_CFLAGS=$CFLAGS -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -printf %s "checking whether $CC accepts -g... " >&6; } -if test ${ac_cv_prog_cc_g+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_g=yes -else $as_nop - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - -else $as_nop - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - ; - 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.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -printf "%s\n" "$ac_cv_prog_cc_g" >&6; } -if test $ac_test_CFLAGS; 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 -ac_prog_cc_stdc=no -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 -printf %s "checking for $CC option to enable C11 features... " >&6; } -if test ${ac_cv_prog_cc_c11+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c11=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c11_program -_ACEOF -for ac_arg in '' -std=gnu11 -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c11=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c11" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi - -if test "x$ac_cv_prog_cc_c11" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c11" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 -printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } - CC="$CC $ac_cv_prog_cc_c11" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 - ac_prog_cc_stdc=c11 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 -printf %s "checking for $CC option to enable C99 features... " >&6; } -if test ${ac_cv_prog_cc_c99+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c99=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c99_program -_ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_prog_cc_c99=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam - test "x$ac_cv_prog_cc_c99" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi - -if test "x$ac_cv_prog_cc_c99" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c99" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } - CC="$CC $ac_cv_prog_cc_c99" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 - ac_prog_cc_stdc=c99 -fi -fi -if test x$ac_prog_cc_stdc = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 -printf %s "checking for $CC option to enable C89 features... " >&6; } -if test ${ac_cv_prog_cc_c89+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_c_conftest_c89_program -_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 conftest.beam - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC -fi - -if test "x$ac_cv_prog_cc_c89" = xno -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -printf "%s\n" "unsupported" >&6; } -else $as_nop - if test "x$ac_cv_prog_cc_c89" = x -then : - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -printf "%s\n" "none needed" >&6; } -else $as_nop - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } - CC="$CC $ac_cv_prog_cc_c89" -fi - ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 - ac_prog_cc_stdc=c89 -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 - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 -printf %s "checking for inline... " >&6; } -if test ${ac_cv_c_inline+y} -then : - printf %s "(cached) " >&6 -else $as_nop - ac_cv_c_inline=no -for ac_kw in inline __inline__ __inline; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifndef __cplusplus -typedef int foo_t; -static $ac_kw foo_t static_foo (void) {return 0; } -$ac_kw foo_t foo (void) {return 0; } -#endif - -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_c_inline=$ac_kw -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - test "$ac_cv_c_inline" != no && break -done - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 -printf "%s\n" "$ac_cv_c_inline" >&6; } - -case $ac_cv_c_inline in - inline | yes) ;; - *) - case $ac_cv_c_inline in - no) ac_val=;; - *) ac_val=$ac_cv_c_inline;; - esac - cat >>confdefs.h <<_ACEOF -#ifndef __cplusplus -#define inline $ac_val -#endif -_ACEOF - ;; -esac - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_AR+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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_AR="${ac_tool_prefix}ar" - printf "%s\n" "$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 -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -printf "%s\n" "$AR" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_AR+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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_AR="ar" - printf "%s\n" "$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_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -printf "%s\n" "$ac_ct_AR" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_AR" = x; then - AR="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -else - AR="$ac_cv_prog_AR" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_RANLIB+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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_RANLIB="${ac_tool_prefix}ranlib" - printf "%s\n" "$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 -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -printf "%s\n" "$RANLIB" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_RANLIB+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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_RANLIB="ranlib" - printf "%s\n" "$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_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -printf "%s\n" "$ac_ct_RANLIB" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. -set dummy ${ac_tool_prefix}windres; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_RC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$RC"; then - ac_cv_prog_RC="$RC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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_RC="${ac_tool_prefix}windres" - printf "%s\n" "$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 -RC=$ac_cv_prog_RC -if test -n "$RC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 -printf "%s\n" "$RC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RC"; then - ac_ct_RC=$RC - # Extract the first word of "windres", so it can be a program name with args. -set dummy windres; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_ac_ct_RC+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$ac_ct_RC"; then - ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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_RC="windres" - printf "%s\n" "$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_RC=$ac_cv_prog_ac_ct_RC -if test -n "$ac_ct_RC"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 -printf "%s\n" "$ac_ct_RC" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - if test "x$ac_ct_RC" = x; then - RC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RC=$ac_ct_RC - fi -else - RC="$ac_cv_prog_RC" -fi - - -#-------------------------------------------------------------------- -# Checks to see if the make program sets the $MAKE variable. -#-------------------------------------------------------------------- - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } -set x ${MAKE-make} -ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval test \${ac_cv_prog_make_${ac_make}_set+y} -then : - printf %s "(cached) " >&6 -else $as_nop - 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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - SET_MAKE= -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - SET_MAKE="MAKE=${MAKE-make}" -fi - - -#-------------------------------------------------------------------- -# Determines the correct binary file extension (.o, .obj, .exe etc.) -#-------------------------------------------------------------------- - - - - -#------------------------------------------------------------------------ -# Embedded configuration information, encoding to use for the values, TIP #59 -#------------------------------------------------------------------------ - - - -# Check whether --with-encoding was given. -if test ${with_encoding+y} -then : - withval=$with_encoding; with_tcencoding=${withval} -fi - - - if test x"${with_tcencoding}" != x ; then - printf "%s\n" "#define TCL_CFGVAL_ENCODING \"${with_tcencoding}\"" >>confdefs.h - - else - printf "%s\n" "#define TCL_CFGVAL_ENCODING \"utf-8\"" >>confdefs.h - - fi - - -#-------------------------------------------------------------------- -# The statements below define a collection of symbols related to -# building libtcl as a shared library instead of a static library. -#-------------------------------------------------------------------- - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to build libraries" >&5 -printf %s "checking how to build libraries... " >&6; } - # Check whether --enable-shared was given. -if test ${enable_shared+y} -then : - enableval=$enable_shared; tcl_ok=$enableval -else $as_nop - tcl_ok=yes -fi - - if test "$tcl_ok" = "yes" ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: shared" >&5 -printf "%s\n" "shared" >&6; } - SHARED_BUILD=1 - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: static" >&5 -printf "%s\n" "static" >&6; } - SHARED_BUILD=0 - -printf "%s\n" "#define STATIC_BUILD 1" >>confdefs.h - - fi - - - -#-------------------------------------------------------------------- -# The statements below define a collection of compile flags. This -# macro depends on the value of SHARED_BUILD, and should be called -# after SC_ENABLE_SHARED checks the configure switches. -#-------------------------------------------------------------------- - -ac_header= ac_cache= -for ac_item in $ac_header_c_list -do - if test $ac_cache; then - ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" - if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then - printf "%s\n" "#define $ac_item 1" >> confdefs.h - fi - ac_header= ac_cache= - elif test $ac_header; then - ac_cache=$ac_item - else - ac_header=$ac_item - fi -done - - - - - - - - -if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes -then : - -printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h - -fi - - - # Step 0: Enable 64 bit support? - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if 64bit support is requested" >&5 -printf %s "checking if 64bit support is requested... " >&6; } - # Check whether --enable-64bit was given. -if test ${enable_64bit+y} -then : - enableval=$enable_64bit; do64bit=$enableval -else $as_nop - do64bit=no -fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $do64bit" >&5 -printf "%s\n" "$do64bit" >&6; } - - # Set some defaults (may get changed below) - EXTRA_CFLAGS="" - -printf "%s\n" "#define MODULE_SCOPE extern" >>confdefs.h - - - # Extract the first word of "cygpath", so it can be a program name with args. -set dummy cygpath; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_CYGPATH+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$CYGPATH"; then - ac_cv_prog_CYGPATH="$CYGPATH" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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_CYGPATH="cygpath -m" - printf "%s\n" "$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_prog_CYGPATH" && ac_cv_prog_CYGPATH="echo" -fi -fi -CYGPATH=$ac_cv_prog_CYGPATH -if test -n "$CYGPATH"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 -printf "%s\n" "$CYGPATH" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - - # Extract the first word of "wine", so it can be a program name with args. -set dummy wine; ac_word=$2 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -printf %s "checking for $ac_word... " >&6; } -if test ${ac_cv_prog_WINE+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -n "$WINE"; then - ac_cv_prog_WINE="$WINE" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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_WINE="wine" - printf "%s\n" "$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 -WINE=$ac_cv_prog_WINE -if test -n "$WINE"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WINE" >&5 -printf "%s\n" "$WINE" >&6; } -else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -fi - - - - SHLIB_SUFFIX=".dll" - - # MACHINE is IX86 for LINK, but this is used by the manifest, - # which requires x86|amd64|arm64|ia64. - MACHINE="X86" - - if test "$GCC" = "yes"; then - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cross-compile version of gcc" >&5 -printf %s "checking for cross-compile version of gcc... " >&6; } -if test ${ac_cv_cross+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #ifndef _WIN32 - #error cross-compiler - #endif - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_cross=no -else $as_nop - ac_cv_cross=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cross" >&5 -printf "%s\n" "$ac_cv_cross" >&6; } - - if test "$ac_cv_cross" = "yes"; then - case "$do64bit" in - amd64|x64|yes) - CC="x86_64-w64-mingw32-${CC}" - LD="x86_64-w64-mingw32-ld" - AR="x86_64-w64-mingw32-ar" - RANLIB="x86_64-w64-mingw32-ranlib" - RC="x86_64-w64-mingw32-windres" - ;; - arm64|aarch64) - CC="aarch64-w64-mingw32-${CC}" - LD="aarch64-w64-mingw32-ld" - AR="aarch64-w64-mingw32-ar" - RANLIB="aarch64-w64-mingw32-ranlib" - RC="aarch64-w64-mingw32-windres" - ;; - *) - CC="i686-w64-mingw32-${CC}" - LD="i686-w64-mingw32-ld" - AR="i686-w64-mingw32-ar" - RANLIB="i686-w64-mingw32-ranlib" - RC="i686-w64-mingw32-windres" - ;; - esac - fi - fi - - # Check for a bug in gcc's windres that causes the - # compile to fail when a Windows native path is - # passed into windres. The mingw toolchain requires - # Windows native paths while Cygwin should work - # with both. Avoid the bug by passing a POSIX - # path when using the Cygwin toolchain. - - if test "$GCC" = "yes" && test "$CYGPATH" != "echo" ; then - conftest=/tmp/conftest.rc - echo "STRINGTABLE BEGIN" > $conftest - echo "101 \"name\"" >> $conftest - echo "END" >> $conftest - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Windows native path bug in windres" >&5 -printf %s "checking for Windows native path bug in windres... " >&6; } - cyg_conftest=`$CYGPATH $conftest` - if { ac_try='$RC -o conftest.res.o $cyg_conftest' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } - CYGPATH=echo - fi - conftest= - cyg_conftest= - fi - - if test "$CYGPATH" = "echo"; then - DEPARG='"$<"' - else - DEPARG='"$(shell $(CYGPATH) $<)"' - fi - - # set various compiler flags depending on whether we are using gcc or cl - - if test "${GCC}" = "yes" ; then - extra_cflags="-pipe" - extra_ldflags="-pipe -static-libgcc" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mingw32 version of gcc" >&5 -printf %s "checking for mingw32 version of gcc... " >&6; } -if test ${ac_cv_win32+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #ifdef _WIN32 - #error win32 - #endif - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_win32=no -else $as_nop - ac_cv_win32=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_win32" >&5 -printf "%s\n" "$ac_cv_win32" >&6; } - if test "$ac_cv_win32" != "yes"; then - as_fn_error $? "${CC} cannot produce win32 executables." "$LINENO" 5 - fi - if test "$do64bit" != "arm64"; then - extra_cflags="$extra_cflags -DHAVE_CPUID=1" - fi - - hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -mwindows -municode -Dmain=xxmain" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working -municode linker flag" >&5 -printf %s "checking for working -municode linker flag... " >&6; } -if test ${ac_cv_municode+y} -then : - printf %s "(cached) " >&6 -else $as_nop - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext - 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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link") 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 - printf "%s\n" "$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_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - } -then : - ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #include - int APIENTRY wWinMain(HINSTANCE a, HINSTANCE b, LPWSTR c, int d) {return 0;} - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - ac_cv_municode=yes -else $as_nop - ac_cv_municode=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_municode" >&5 -printf "%s\n" "$ac_cv_municode" >&6; } - CFLAGS=$hold_cflags - if test "$ac_cv_municode" = "yes" ; then - extra_ldflags="$extra_ldflags -municode" - else - extra_cflags="$extra_cflags -DTCL_BROKEN_MAINARGS" - fi - hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -fno-lto" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working -fno-lto" >&5 -printf %s "checking for working -fno-lto... " >&6; } -if test ${ac_cv_nolto+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_nolto=yes -else $as_nop - ac_cv_nolto=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_nolto" >&5 -printf "%s\n" "$ac_cv_nolto" >&6; } - CFLAGS=$hold_cflags - if test "$ac_cv_nolto" = "yes" ; then - CFLAGS_NOLTO="-fno-lto" - else - CFLAGS_NOLTO="" - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the compiler understands -finput-charset" >&5 -printf %s "checking if the compiler understands -finput-charset... " >&6; } -if test ${tcl_cv_cc_input_charset+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -finput-charset=UTF-8" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_cc_input_charset=yes -else $as_nop - tcl_cv_cc_input_charset=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - CFLAGS=$hold_cflags -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cc_input_charset" >&5 -printf "%s\n" "$tcl_cv_cc_input_charset" >&6; } - if test $tcl_cv_cc_input_charset = yes; then - extra_cflags="$extra_cflags -finput-charset=UTF-8" - fi - fi - - hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Wl,--enable-auto-image-base" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working --enable-auto-image-base" >&5 -printf %s "checking for working --enable-auto-image-base... " >&6; } -if test ${ac_cv_enable_auto_image_base+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - ac_cv_enable_auto_image_base=yes -else $as_nop - ac_cv_enable_auto_image_base=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_auto_image_base" >&5 -printf "%s\n" "$ac_cv_enable_auto_image_base" >&6; } - CFLAGS=$hold_cflags - if test "$ac_cv_enable_auto_image_base" == "yes" ; then - extra_ldflags="$extra_ldflags -Wl,--enable-auto-image-base" - fi - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking compiler flags" >&5 -printf %s "checking compiler flags... " >&6; } - if test "${GCC}" = "yes" ; then - SHLIB_LD="" - SHLIB_LD_LIBS='${LIBS}' - LIBS="-lnetapi32 -lkernel32 -luser32 -ladvapi32 -luserenv -lws2_32" - # mingw needs to link ole32 and oleaut32 for [send], but MSVC doesn't - LIBS_GUI="-lgdi32 -lcomdlg32 -limm32 -lcomctl32 -lshell32 -luuid -lole32 -loleaut32 -lwinspool" - STLIB_LD='${AR} cr' - RC_OUT=-o - RC_TYPE= - RC_INCLUDE=--include - RC_DEFINE=--define - RES=res.o - MAKE_LIB="\${STLIB_LD} \$@" - MAKE_STUB_LIB="\${STLIB_LD} \$@" - POST_MAKE_LIB="\${RANLIB} \$@" - MAKE_EXE="\${CC} -o \$@" - LIBPREFIX="lib" - - if test "${SHARED_BUILD}" = "0" ; then - # static - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: using static flags" >&5 -printf "%s\n" "using static flags" >&6; } - runtime= - LIBRARIES="\${STATIC_LIBRARIES}" - EXESUFFIX="s.exe" - else - # dynamic - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: using shared flags" >&5 -printf "%s\n" "using shared flags" >&6; } - - # ad-hoc check to see if CC supports -shared. - if "${CC}" -shared 2>&1 | egrep ': -shared not supported' >/dev/null; then - as_fn_error $? "${CC} does not support the -shared option. - You will need to upgrade to a newer version of the toolchain." "$LINENO" 5 - fi - - runtime= - # Add SHLIB_LD_LIBS to the Make rule, not here. - - EXESUFFIX=".exe" - LIBRARIES="\${SHARED_LIBRARIES}" - fi - # Link with gcc since ld does not link to default libs like - # -luser32 and -lmsvcrt by default. - SHLIB_LD='${CC} -shared' - SHLIB_LD_LIBS='${LIBS}' - MAKE_DLL="\${SHLIB_LD} \$(LDFLAGS) -o \$@ ${extra_ldflags} \ - -Wl,--out-implib,\$(patsubst %.dll,lib%.dll.a,\$@)" - # DLLSUFFIX is separate because it is the building block for - # users of tclConfig.sh that may build shared or static. - DLLSUFFIX=".dll" - LIBSUFFIX=".a" - LIBFLAGSUFFIX="" - SHLIB_SUFFIX=.dll - - EXTRA_CFLAGS="${extra_cflags}" - - CFLAGS_DEBUG=-g - CFLAGS_OPTIMIZE="-O2 -fomit-frame-pointer" - CFLAGS_WARNING="-Wall -Wextra -Wshadow -Wundef -Wwrite-strings -Wpointer-arith" - LDFLAGS_DEBUG= - LDFLAGS_OPTIMIZE= - - case "${CC}" in - *++) - CFLAGS_WARNING="${CFLAGS_WARNING} -Wno-format" - ;; - *) - CFLAGS_WARNING="${CFLAGS_WARNING} -Wc++-compat -fextended-identifiers" - ;; - esac - - # Specify the CC output file names based on the target name - CC_OBJNAME="-o \$@" - CC_EXENAME="-o \$@" - - # Specify linker flags depending on the type of app being - # built -- Console vs. Window. - # - # ORIGINAL COMMENT: - # We need to pass -e _WinMain@16 so that ld will use - # WinMain() instead of main() as the entry point. We can't - # use autoconf to check for this case since it would need - # to run an executable and that does not work when - # cross compiling. Remove this -e workaround once we - # require a gcc that does not have this bug. - # - # MK NOTE: Tk should use a different mechanism. This causes - # interesting problems, such as wish dying at startup. - #LDFLAGS_WINDOW="-mwindows -e _WinMain@16 ${extra_ldflags}" - LDFLAGS_CONSOLE="-mconsole ${extra_ldflags}" - LDFLAGS_WINDOW="-mwindows ${extra_ldflags}" - - case "$do64bit" in - amd64|x64|yes) - MACHINE="AMD64" ; # assume AMD64 as default 64-bit build - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Using 64-bit $MACHINE mode" >&5 -printf "%s\n" " Using 64-bit $MACHINE mode" >&6; } - ;; - arm64|aarch64) - MACHINE="ARM64" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Using ARM64 $MACHINE mode" >&5 -printf "%s\n" " Using ARM64 $MACHINE mode" >&6; } - ;; - ia64) - MACHINE="IA64" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Using IA64 $MACHINE mode" >&5 -printf "%s\n" " Using IA64 $MACHINE mode" >&6; } - ;; - *) - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #ifndef _WIN64 - #error 32-bit - #endif - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_win_64bit=yes -else $as_nop - tcl_win_64bit=no - -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - if test "$tcl_win_64bit" = "yes" ; then - do64bit=amd64 - MACHINE="AMD64" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Using 64-bit $MACHINE mode" >&5 -printf "%s\n" " Using 64-bit $MACHINE mode" >&6; } - fi - ;; - esac - else - if test "${SHARED_BUILD}" = "0" ; then - # static - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: using static flags" >&5 -printf "%s\n" "using static flags" >&6; } - runtime=-MT - LIBRARIES="\${STATIC_LIBRARIES}" - EXESUFFIX="s.exe" - else - # dynamic - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: using shared flags" >&5 -printf "%s\n" "using shared flags" >&6; } - runtime=-MD - # Add SHLIB_LD_LIBS to the Make rule, not here. - LIBRARIES="\${SHARED_LIBRARIES}" - EXESUFFIX=".exe" - case "x`echo \${VisualStudioVersion}`" in - x1[4-9]*) - lflags="${lflags} -nodefaultlib:libucrt.lib" - ;; - *) - ;; - esac - fi - MAKE_DLL="\${SHLIB_LD} \$(LDFLAGS) -out:\$@" - # DLLSUFFIX is separate because it is the building block for - # users of tclConfig.sh that may build shared or static. - DLLSUFFIX=".dll" - LIBSUFFIX=".lib" - LIBFLAGSUFFIX="" - - if test "$do64bit" != "no" ; then - case "$do64bit" in - amd64|x64|yes) - MACHINE="AMD64" ; # assume AMD64 as default 64-bit build - ;; - arm64|aarch64) - MACHINE="ARM64" - ;; - ia64) - MACHINE="IA64" - ;; - esac - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Using 64-bit $MACHINE mode" >&5 -printf "%s\n" " Using 64-bit $MACHINE mode" >&6; } - fi - - LIBS="netapi32.lib kernel32.lib user32.lib advapi32.lib userenv.lib ws2_32.lib" - - case "x`echo \${VisualStudioVersion}`" in - x1[4-9]*) - LIBS="$LIBS ucrt.lib" - ;; - *) - ;; - esac - - if test "$do64bit" != "no" ; then - RC="rc" - CFLAGS_DEBUG="-nologo -Zi -Od ${runtime}d" - CFLAGS_OPTIMIZE="-nologo -O2 ${runtime}" - lflags="${lflags} -nologo -MACHINE:${MACHINE}" - LINKBIN="link" - # Avoid 'unresolved external symbol __security_cookie' errors. - # c.f. http://support.microsoft.com/?id=894573 - LIBS="$LIBS bufferoverflowU.lib" - else - RC="rc" - # -Od - no optimization - # -WX - warnings as errors - CFLAGS_DEBUG="-nologo -Z7 -Od -WX ${runtime}d" - # -O2 - create fast code (/Og /Oi /Ot /Oy /Ob2 /Gs /GF /Gy) - CFLAGS_OPTIMIZE="-nologo -O2 ${runtime}" - lflags="${lflags} -nologo" - LINKBIN="link" - fi - - LIBS_GUI="gdi32.lib comdlg32.lib imm32.lib comctl32.lib shell32.lib uuid.lib winspool.lib" - - SHLIB_LD="${LINKBIN} -dll -incremental:no ${lflags}" - SHLIB_LD_LIBS='${LIBS}' - # link -lib only works when -lib is the first arg - STLIB_LD="${LINKBIN} -lib ${lflags}" - RC_OUT=-fo - RC_TYPE=-r - RC_INCLUDE=-i - RC_DEFINE=-d - RES=res - MAKE_LIB="\${STLIB_LD} -out:\$@" - MAKE_STUB_LIB="\${STLIB_LD} -nodefaultlib -out:\$@" - POST_MAKE_LIB= - MAKE_EXE="\${CC} -Fe\$@" - LIBPREFIX="" - - CFLAGS_DEBUG="${CFLAGS_DEBUG} -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE" - CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE" - - EXTRA_CFLAGS="" - CFLAGS_WARNING="-W3" - LDFLAGS_DEBUG="-debug" - LDFLAGS_OPTIMIZE="-release" - - # Specify the CC output file names based on the target name - CC_OBJNAME="-Fo\$@" - CC_EXENAME="-Fe\"\$(shell \$(CYGPATH) '\$@')\"" - - # Specify linker flags depending on the type of app being - # built -- Console vs. Window. - if test "${TARGETCPU}" != "X86"; then - LDFLAGS_CONSOLE="-link ${lflags}" - LDFLAGS_WINDOW=${LDFLAGS_CONSOLE} - else - LDFLAGS_CONSOLE="-link -subsystem:console ${lflags}" - LDFLAGS_WINDOW="-link -subsystem:windows ${lflags}" - fi - fi - - if test "$do64bit" != "no" ; then - printf "%s\n" "#define TCL_CFG_DO64BIT 1" >>confdefs.h - - fi - - if test "${GCC}" = "yes" ; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SEH support in compiler" >&5 -printf %s "checking for SEH support in compiler... " >&6; } -if test ${tcl_cv_seh+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test "$cross_compiling" = yes -then : - tcl_cv_seh=no -else $as_nop - -# ac_fn_c_try_run LINENO -# ---------------------- -# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that -# executables *can* be run. -ac_fn_c_try_run () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - 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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { ac_try='./conftest$ac_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\"" -printf "%s\n" "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } -then : - ac_retval=0 -else $as_nop - printf "%s\n" "$as_me: program exited with status $ac_status" >&5 - printf "%s\n" "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=$ac_status -fi - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_run -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - - #define WIN32_LEAN_AND_MEAN - #include - #undef WIN32_LEAN_AND_MEAN - - int main(int argc, char** argv) { - int a, b = 0; - __try { - a = 666 / b; - } - __except (EXCEPTION_EXECUTE_HANDLER) { - return 0; - } - return 1; - } - -_ACEOF -if ac_fn_c_try_run "$LINENO" -then : - tcl_cv_seh=yes -else $as_nop - tcl_cv_seh=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_seh" >&5 -printf "%s\n" "$tcl_cv_seh" >&6; } - if test "$tcl_cv_seh" = "no" ; then - -printf "%s\n" "#define HAVE_NO_SEH 1" >>confdefs.h - - fi - - # - # Check to see if the excpt.h include file provided contains the - # definition for EXCEPTION_DISPOSITION; if not, which is the case - # with Cygwin's version as of 2002-04-10, define it to be int, - # sufficient for getting the current code to work. - # - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for EXCEPTION_DISPOSITION support in include files" >&5 -printf %s "checking for EXCEPTION_DISPOSITION support in include files... " >&6; } -if test ${tcl_cv_eh_disposition+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -# define WIN32_LEAN_AND_MEAN -# include -# undef WIN32_LEAN_AND_MEAN - -int -main (void) -{ - - EXCEPTION_DISPOSITION x; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_eh_disposition=yes -else $as_nop - tcl_cv_eh_disposition=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_eh_disposition" >&5 -printf "%s\n" "$tcl_cv_eh_disposition" >&6; } - if test "$tcl_cv_eh_disposition" = "no" ; then - -printf "%s\n" "#define EXCEPTION_DISPOSITION int" >>confdefs.h - - fi - - ac_fn_c_check_header_compile "$LINENO" "stdbool.h" "ac_cv_header_stdbool_h" "$ac_includes_default" -if test "x$ac_cv_header_stdbool_h" = xyes -then : - -printf "%s\n" "#define HAVE_STDBOOL_H 1" >>confdefs.h - -fi - - - # See if the compiler supports casting to a union type. - # This is used to stop gcc from printing a compiler - # warning when initializing a union member. - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cast to union support" >&5 -printf %s "checking for cast to union support... " >&6; } -if test ${tcl_cv_cast_to_union+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main (void) -{ - - union foo { int i; double d; }; - union foo f = (union foo) (int) 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_cast_to_union=yes -else $as_nop - tcl_cv_cast_to_union=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_cast_to_union" >&5 -printf "%s\n" "$tcl_cv_cast_to_union" >&6; } - if test "$tcl_cv_cast_to_union" = "yes"; then - -printf "%s\n" "#define HAVE_CAST_TO_UNION 1" >>confdefs.h - - fi - fi - - # DL_LIBS is empty, but then we match the Unix version - - - - - - - -# Cross-compiling -case ${host_alias} in -*mingw32*) - TCL_EXE="tclsh" - ;; -*) - TCL_EXE="TCL_LIBRARY=\"\${LIBRARY_DIR}\"; export TCL_LIBRARY; ./\${TCLSH}" - ;; -esac - -#------------------------------------------------------------------------ -# Add stuff for zlib/libtommath; note that this is mostly done in the -# makefile now as we just assume that the platform hasn't got usable -# z.lib/tommath.lib -#------------------------------------------------------------------------ - -if test "${enable_shared+set}" = "set" -then : - - enableval="$enable_shared" - tcl_ok=$enableval - -else $as_nop - - tcl_ok=yes - -fi -zlib_lib_name=zdll.lib -tommath_lib_name=tommath.lib -if test "$tcl_ok" = "yes" -then : - - ZLIB_DLL_FILE=\${ZLIB_DLL_FILE} - - TOMMATH_DLL_FILE=\${TOMMATH_DLL_FILE} - - -printf "%s\n" "#define TCL_WITH_EXTERNAL_TOMMATH 1" >>confdefs.h - - if test "$do64bit" != "no" -then : - - -printf "%s\n" "#define MP_64BIT 1" >>confdefs.h - - if test "$do64bit" = "arm64" -then : - - if test "$GCC" == "yes" -then : - - ZLIB_LIBS=\${ZLIB_DIR_NATIVE}/win64-arm/libz.dll.a - - TOMMATH_LIBS=\${TOMMATH_DIR_NATIVE}/win64-arm/libtommath.dll.a - - zlib_lib_name=libz.dll.a - tommath_lib_name=libtommath.dll.a - -else $as_nop - - ZLIB_LIBS=\${ZLIB_DIR_NATIVE}/win64-arm/zdll.lib - - TOMMATH_LIBS=\${TOMMATH_DIR_NATIVE}/win64-arm/tommath.lib - - -fi - -else $as_nop - - if test "$GCC" == "yes" -then : - - ZLIB_LIBS=\${ZLIB_DIR_NATIVE}/win64/libz.dll.a - - TOMMATH_LIBS=\${TOMMATH_DIR_NATIVE}/win64/libtommath.dll.a - - zlib_lib_name=libz.dll.a - tommath_lib_name=libtommath.dll.a - -else $as_nop - - ZLIB_LIBS=\${ZLIB_DIR_NATIVE}/win64/zdll.lib - - TOMMATH_LIBS=\${TOMMATH_DIR_NATIVE}/win64/tommath.lib - - -fi - -fi - -else $as_nop - - ZLIB_LIBS=\${ZLIB_DIR_NATIVE}/win32/zdll.lib - - TOMMATH_LIBS=\${TOMMATH_DIR_NATIVE}/win32/tommath.lib - - -fi - -else $as_nop - - ZLIB_OBJS=\${ZLIB_OBJS} - - TOMMATH_OBJS=\${TOMMATH_OBJS} - - -fi - -printf "%s\n" "#define HAVE_ZLIB 1" >>confdefs.h - -TCL_ZLIB_LIB_NAME=$zlib_lib_name - -TCL_TOMMATH_LIB_NAME=$tommath_lib_name - -ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" " -#include - -" -if test "x$ac_cv_type_intptr_t" = xyes -then : - -printf "%s\n" "#define HAVE_INTPTR_T 1" >>confdefs.h - - -fi -ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" " -#include - -" -if test "x$ac_cv_type_uintptr_t" = xyes -then : - -printf "%s\n" "#define HAVE_UINTPTR_T 1" >>confdefs.h - - -fi - - -#-------------------------------------------------------------------- -# Zipfs support - Tip 430 -#-------------------------------------------------------------------- -# Check whether --enable-zipfs was given. -if test ${enable_zipfs+y} -then : - enableval=$enable_zipfs; tcl_ok=$enableval -else $as_nop - tcl_ok=yes -fi - -if test "$tcl_ok" = "yes" ; then - # - # Find a native compiler - # - # Put a plausible default for CC_FOR_BUILD in Makefile. -if test -z "$CC_FOR_BUILD"; then - if test "x$cross_compiling" = "xno"; then - CC_FOR_BUILD='$(CC)' - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gcc" >&5 -printf %s "checking for gcc... " >&6; } - if test ${ac_cv_path_cc+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - search_path=`echo ${PATH} | sed -e 's/:/ /g'` - for dir in $search_path ; do - for j in `ls -r $dir/gcc 2> /dev/null` \ - `ls -r $dir/gcc 2> /dev/null` ; do - if test x"$ac_cv_path_cc" = x ; then - if test -f "$j" ; then - ac_cv_path_cc=$j - break - fi - fi - done - done - -fi - - fi -fi - -# Also set EXEEXT_FOR_BUILD. -if test "x$cross_compiling" = "xno"; then - EXEEXT_FOR_BUILD='$(EXEEXT)' - OBJEXT_FOR_BUILD='$(OBJEXT)' -else - OBJEXT_FOR_BUILD='.no' - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for build system executable suffix" >&5 -printf %s "checking for build system executable suffix... " >&6; } -if test ${bfd_cv_build_exeext+y} -then : - printf %s "(cached) " >&6 -else $as_nop - rm -f conftest* - echo 'int main () { return 0; }' > conftest.c - bfd_cv_build_exeext= - ${CC_FOR_BUILD} -o conftest conftest.c 1>&5 2>&5 - for file in conftest.*; do - case $file in - *.c | *.o | *.obj | *.ilk | *.pdb) ;; - *) bfd_cv_build_exeext=`echo $file | sed -e s/conftest//` ;; - esac - done - rm -f conftest* - test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_build_exeext" >&5 -printf "%s\n" "$bfd_cv_build_exeext" >&6; } - EXEEXT_FOR_BUILD="" - test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext} -fi - - # - # Find a native zip implementation - # - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tclsh" >&5 -printf %s "checking for tclsh... " >&6; } - - if test ${ac_cv_path_tclsh+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - search_path=`echo ${PATH} | sed -e 's/:/ /g'` - for dir in $search_path ; do - for j in `ls -r $dir/tclsh[8-9]*.exe 2> /dev/null` \ - `ls -r $dir/tclsh* 2> /dev/null` ; do - if test x"$ac_cv_path_tclsh" = x ; then - if test -f "$j" ; then - ac_cv_path_tclsh=$j - break - fi - fi - done - done - -fi - - - if test -f "$ac_cv_path_tclsh" ; then - TCLSH_PROG="$ac_cv_path_tclsh" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $TCLSH_PROG" >&5 -printf "%s\n" "$TCLSH_PROG" >&6; } - else - # It is not an error if an installed version of Tcl can't be located. - TCLSH_PROG="" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: No tclsh found on PATH" >&5 -printf "%s\n" "No tclsh found on PATH" >&6; } - fi - - - - ZIP_PROG="" - ZIP_PROG_OPTIONS="" - ZIP_PROG_VFSSEARCH="" - ZIP_INSTALL_OBJS="" - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for zip" >&5 -printf %s "checking for zip... " >&6; } - if test ${ac_cv_path_zip+y} -then : - printf %s "(cached) " >&6 -else $as_nop - - search_path=`echo ${PATH} | sed -e 's/:/ /g'` - for dir in $search_path ; do - for j in `ls -r $dir/zip 2> /dev/null` \ - `ls -r $dir/zip 2> /dev/null` ; do - if test x"$ac_cv_path_zip" = x ; then - if test -f "$j" ; then - ac_cv_path_zip=$j - break - fi - fi - done - done - -fi - - if test -f "$ac_cv_path_zip" ; then - ZIP_PROG="$ac_cv_path_zip" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ZIP_PROG" >&5 -printf "%s\n" "$ZIP_PROG" >&6; } - ZIP_PROG_OPTIONS="-rq" - ZIP_PROG_VFSSEARCH="*" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Found INFO Zip in environment" >&5 -printf "%s\n" "Found INFO Zip in environment" >&6; } - # Use standard arguments for zip - else - # It is not an error if an installed version of Zip can't be located. - # We can use the locally distributed minizip instead - ZIP_PROG="./minizip${EXEEXT_FOR_BUILD}" - ZIP_PROG_OPTIONS="-o -r" - ZIP_PROG_VFSSEARCH="*" - ZIP_INSTALL_OBJS="minizip${EXEEXT_FOR_BUILD}" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: No zip found on PATH building minizip" >&5 -printf "%s\n" "No zip found on PATH building minizip" >&6; } - fi - - - - - - ZIPFS_BUILD=1 - TCL_ZIP_FILE=libtcl${TCL_MAJOR_VERSION}.${TCL_MINOR_VERSION}${TCL_PATCH_LEVEL}.zip -else - ZIPFS_BUILD=0 - TCL_ZIP_FILE= -fi -# Do checking message here to not mess up interleaved configure output -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for building with zipfs" >&5 -printf %s "checking for building with zipfs... " >&6; } -if test "${ZIPFS_BUILD}" = 1; then - if test "${SHARED_BUILD}" = 0; then - ZIPFS_BUILD=2; - -printf "%s\n" "#define ZIPFS_BUILD 2" >>confdefs.h - - else - -printf "%s\n" "#define ZIPFS_BUILD 1" >>confdefs.h -\ - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -printf "%s\n" "yes" >&6; } -else -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } -INSTALL_LIBRARIES=install-libraries -INSTALL_MSGS=install-msgs -fi - - - - - - -#-------------------------------------------------------------------- -# Perform additinal compiler tests. -#-------------------------------------------------------------------- - -# See if declarations like FINDEX_INFO_LEVELS are -# missing from winbase.h. This is known to be -# a problem with VC++ 5.2. - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for FINDEX_INFO_LEVELS in winbase.h" >&5 -printf %s "checking for FINDEX_INFO_LEVELS in winbase.h... " >&6; } -if test ${tcl_cv_findex_enums+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#define WIN32_LEAN_AND_MEAN -#include -#undef WIN32_LEAN_AND_MEAN - -int -main (void) -{ - - FINDEX_INFO_LEVELS i; - FINDEX_SEARCH_OPS j; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_findex_enums=yes -else $as_nop - tcl_cv_findex_enums=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_findex_enums" >&5 -printf "%s\n" "$tcl_cv_findex_enums" >&6; } -if test "$tcl_cv_findex_enums" = "no"; then - -printf "%s\n" "#define HAVE_NO_FINDEX_ENUMS 1" >>confdefs.h - -fi - -# See if the compiler supports intrinsics. - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for intrinsics support in compiler" >&5 -printf %s "checking for intrinsics support in compiler... " >&6; } -if test ${tcl_cv_intrinsics+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#define WIN32_LEAN_AND_MEAN -#include -#undef WIN32_LEAN_AND_MEAN -#include - -int -main (void) -{ - - __cpuidex(0,0,0); - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO" -then : - tcl_cv_intrinsics=yes -else $as_nop - tcl_cv_intrinsics=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam \ - conftest$ac_exeext conftest.$ac_ext - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_intrinsics" >&5 -printf "%s\n" "$tcl_cv_intrinsics" >&6; } -if test "$tcl_cv_intrinsics" = "yes"; then - -printf "%s\n" "#define HAVE_INTRIN_H 1" >>confdefs.h - -fi - -# See if the header file is present - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wspiapi.h" >&5 -printf %s "checking for wspiapi.h... " >&6; } -if test ${tcl_cv_wspiapi_h+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include - -int -main (void) -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_wspiapi_h=yes -else $as_nop - tcl_cv_wspiapi_h=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_wspiapi_h" >&5 -printf "%s\n" "$tcl_cv_wspiapi_h" >&6; } -if test "$tcl_cv_wspiapi_h" = "yes"; then - -printf "%s\n" "#define HAVE_WSPIAPI_H 1" >>confdefs.h - -fi - -# See if declarations like FINDEX_INFO_LEVELS are -# missing from winbase.h. This is known to be -# a problem with VC++ 5.2. - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for FINDEX_INFO_LEVELS in winbase.h" >&5 -printf %s "checking for FINDEX_INFO_LEVELS in winbase.h... " >&6; } -if test ${tcl_cv_findex_enums+y} -then : - printf %s "(cached) " >&6 -else $as_nop - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#define WIN32_LEAN_AND_MEAN -#include -#undef WIN32_LEAN_AND_MEAN - -int -main (void) -{ - - FINDEX_INFO_LEVELS i; - FINDEX_SEARCH_OPS j; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO" -then : - tcl_cv_findex_enums=yes -else $as_nop - tcl_cv_findex_enums=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_findex_enums" >&5 -printf "%s\n" "$tcl_cv_findex_enums" >&6; } -if test "$tcl_cv_findex_enums" = "no"; then - -printf "%s\n" "#define HAVE_NO_FINDEX_ENUMS 1" >>confdefs.h - -fi - -#-------------------------------------------------------------------- -# Set the default compiler switches based on the --enable-symbols -# option. This macro depends on C flags, and should be called -# after SC_CONFIG_CFLAGS macro is called. -#-------------------------------------------------------------------- - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for build with symbols" >&5 -printf %s "checking for build with symbols... " >&6; } - # Check whether --enable-symbols was given. -if test ${enable_symbols+y} -then : - enableval=$enable_symbols; tcl_ok=$enableval -else $as_nop - tcl_ok=no -fi - -# FIXME: Currently, LDFLAGS_DEFAULT is not used, it should work like CFLAGS_DEFAULT. - if test "$tcl_ok" = "no"; then - CFLAGS_DEFAULT='$(CFLAGS_OPTIMIZE)' - LDFLAGS_DEFAULT='$(LDFLAGS_OPTIMIZE)' - -printf "%s\n" "#define NDEBUG 1" >>confdefs.h - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 -printf "%s\n" "no" >&6; } - - printf "%s\n" "#define TCL_CFG_OPTIMIZED 1" >>confdefs.h - - else - CFLAGS_DEFAULT='$(CFLAGS_DEBUG)' - LDFLAGS_DEFAULT='$(LDFLAGS_DEBUG)' - if test "$tcl_ok" = "yes"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes (standard debugging)" >&5 -printf "%s\n" "yes (standard debugging)" >&6; } - fi - fi - - - - if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then - -printf "%s\n" "#define TCL_MEM_DEBUG 1" >>confdefs.h - - fi - - if test "$tcl_ok" = "compile" -o "$tcl_ok" = "all"; then - -printf "%s\n" "#define TCL_COMPILE_DEBUG 1" >>confdefs.h - - -printf "%s\n" "#define TCL_COMPILE_STATS 1" >>confdefs.h - - fi - - if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then - if test "$tcl_ok" = "all"; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: enabled symbols mem compile debugging" >&5 -printf "%s\n" "enabled symbols mem compile debugging" >&6; } - else - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: enabled $tcl_ok debugging" >&5 -printf "%s\n" "enabled $tcl_ok debugging" >&6; } - fi - fi - - -#-------------------------------------------------------------------- -# Embed the manifest if we can determine how -#-------------------------------------------------------------------- - -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 -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -printf %s "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if test ${ac_cv_prog_CPP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - # Double quotes because $CC needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : - -else $as_nop - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : - # Broken: success on invalid input. -continue -else $as_nop - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok -then : - break -fi - - done - ac_cv_prog_CPP=$CPP - -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -printf "%s\n" "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : - -else $as_nop - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -_ACEOF -if ac_fn_c_try_cpp "$LINENO" -then : - # Broken: success on invalid input. -continue -else $as_nop - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok -then : - -else $as_nop - { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -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 - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -printf %s "checking for grep that handles long lines and -e... " >&6; } -if test ${ac_cv_path_GREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in grep ggrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -printf "%s\n" "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -printf %s "checking for egrep... " >&6; } -if test ${ac_cv_path_EGREP+y} -then : - printf %s "(cached) " >&6 -else $as_nop - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - for ac_prog in egrep - do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - printf %s 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - printf "%s\n" 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi - - fi -fi -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -printf "%s\n" "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - - - - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to embed manifest" >&5 -printf %s "checking whether to embed manifest... " >&6; } - # Check whether --enable-embedded-manifest was given. -if test ${enable_embedded_manifest+y} -then : - enableval=$enable_embedded_manifest; embed_ok=$enableval -else $as_nop - embed_ok=yes -fi - - - VC_MANIFEST_EMBED_DLL= - VC_MANIFEST_EMBED_EXE= - result=no - if test "$embed_ok" = "yes" -a "${SHARED_BUILD}" = "1" \ - -a "$GCC" != "yes" ; then - # Add the magic to embed the manifest into the dll/exe - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#if defined(_MSC_VER) && _MSC_VER >= 1400 -print("manifest needed") -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "manifest needed" >/dev/null 2>&1 -then : - - # Could do a CHECK_PROG for mt, but should always be with MSVC8+ - # Could add 'if test -f' check, but manifest should be created - # in this compiler case - # Add in a manifest argument that may be specified - # XXX Needs improvement so that the test for existence accounts - # XXX for a provided (known) manifest - VC_MANIFEST_EMBED_DLL="if test -f \$@.manifest ; then mt.exe -nologo -manifest \$@.manifest -outputresource:\$@\;2 ; fi" - VC_MANIFEST_EMBED_EXE="if test -f \$@.manifest ; then mt.exe -nologo -manifest \$@.manifest -outputresource:\$@\;1 ; fi" - result=yes - if test "x" != x ; then - result="yes ()" - fi - -fi -rm -rf conftest* - - fi - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $result" >&5 -printf "%s\n" "$result" >&6; } - - - - -#------------------------------------------------------------------------ -# tclConfig.sh refers to this by a different name -#------------------------------------------------------------------------ - -TCL_SHARED_BUILD=${SHARED_BUILD} - -#-------------------------------------------------------------------- -# Perform final evaluations of variables with possible substitutions. -#-------------------------------------------------------------------- - -eval "TCL_SRC_DIR=\"`cd $srcdir/..; $CYGPATH $(pwd)`\"" - -eval "TCL_DLL_FILE=tcl${VER}${DLLSUFFIX}" - -eval "TCL_STUB_LIB_FILE=\"${LIBPREFIX}tclstub${LIBSUFFIX}\"" -eval "TCL_STUB_LIB_FLAG=\"-ltclstub${LIBFLAGSUFFIX}\"" -eval "TCL_BUILD_STUB_LIB_SPEC=\"-L`$CYGPATH $(pwd)` ${TCL_STUB_LIB_FLAG}\"" -eval "TCL_STUB_LIB_SPEC=\"-L${libdir} ${TCL_STUB_LIB_FLAG}\"" -eval "TCL_BUILD_STUB_LIB_PATH=\"`$CYGPATH $(pwd)`/${TCL_STUB_LIB_FILE}\"" -eval "TCL_STUB_LIB_PATH=\"${libdir}/${TCL_STUB_LIB_FILE}\"" - -if test ${SHARED_BUILD} = 0 -o "$GCC" != "yes" ; then - eval "TCL_LIB_FLAG=\"${LIBPREFIX}tcl${VER}${LIBSUFFIX}\"" - eval "TCL_LIB_FILE=\"${LIBPREFIX}tcl${VER}${LIBSUFFIX}\"" -else - eval "TCL_LIB_FLAG=\"-ltcl${VER}${FLAGSUFFIX}\"" - eval "TCL_LIB_FILE=\"${LIBPREFIX}tcl${VER}${DLLSUFFIX}.a\"" -fi -eval "TCL_BUILD_LIB_SPEC=\"-L`$CYGPATH $(pwd)` ${TCL_LIB_FLAG}\"" -eval "TCL_LIB_SPEC=\"-L${libdir} ${TCL_LIB_FLAG}\"" - -# Install time header dir can be set via --includedir -eval "TCL_INCLUDE_SPEC=\"-I${includedir}\"" - -TCL_SHARED_LIB_SUFFIX="\${NODOT_VERSION}${DLLSUFFIX}" -TCL_UNSHARED_LIB_SUFFIX="\${NODOT_VERSION}${LIBSUFFIX}" - -CFG_TCL_SHARED_LIB_SUFFIX=${TCL_SHARED_LIB_SUFFIX} -CFG_TCL_UNSHARED_LIB_SUFFIX=${TCL_UNSHARED_LIB_SUFFIX} - -#-------------------------------------------------------------------- -# Adjust the defines for how the resources are built depending -# on symbols and static vs. shared. -#-------------------------------------------------------------------- - -if test ${SHARED_BUILD} = 0 ; then - RC_DEFINES="${RC_DEFINE} STATIC_BUILD" -else - RC_DEFINES="" -fi - -#-------------------------------------------------------------------- -# The statements below define the symbol TCL_PACKAGE_PATH, which -# gives a list of directories that may contain packages. The list -# consists of one directory for machine-dependent binaries and -# another for platform-independent scripts. -#-------------------------------------------------------------------- - -if test "$prefix/lib" != "$libdir"; then - TCL_PACKAGE_PATH="{${libdir}} {${prefix}/lib}" -else - TCL_PACKAGE_PATH="{${prefix}/lib}" -fi - -# The tclsh.exe.manifest requires these -# TCL_WIN_VERSION is the 4 dotted pair Windows version format which needs -# the release level, and must account for interim release versioning -case "$TCL_PATCH_LEVEL" in - *a*) TCL_RELEASE_LEVEL=0 ;; - *b*) TCL_RELEASE_LEVEL=1 ;; - *) TCL_RELEASE_LEVEL=2 ;; -esac -TCL_WIN_VERSION="$TCL_VERSION.$TCL_RELEASE_LEVEL.`echo $TCL_PATCH_LEVEL | tr -d ab.`" - -# X86|AMD64|ARM64|IA64 for manifest - - - - - - - - - - - - - - - -# empty on win - - - - - - - - - - - - - - - -# win/tcl.m4 doesn't set (CFLAGS) - - - - - - - -# win/tcl.m4 doesn't set (LDFLAGS) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# win only - - - - - - - - - - - - - - - -ac_config_files="$ac_config_files Makefile tclConfig.sh tclsh.exe.manifest" - -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_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -printf "%s\n" "$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+y} || &/ - 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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -printf "%s\n" "$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 - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -printf "%s\n" "$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=`printf "%s\n" "$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 - - - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -printf "%s\n" "$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 -as_nop=: -if test ${ZSH_VERSION+y} && (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 $as_nop - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - - -# Reset variables that may have inherited troublesome values from -# the environment. - -# IFS needs to be set, to space, tab, and newline, in precisely that order. -# (If _AS_PATH_WALK were called with IFS unset, it would have the -# side effect of setting IFS to empty, thus disabling word splitting.) -# Quoting is to prevent editors from complaining about space-tab. -as_nl=' -' -export as_nl -IFS=" "" $as_nl" - -PS1='$ ' -PS2='> ' -PS4='+ ' - -# Ensure predictable behavior from utilities with locale-dependent output. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# We cannot yet rely on "unset" to work, but we need these variables -# to be unset--not just set to an empty or harmless value--now, to -# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct -# also avoids known problems related to "unset" and subshell syntax -# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). -for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH -do eval test \${$as_var+y} \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done - -# Ensure that fds 0, 1, and 2 are open. -if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi -if (exec 3>&2) ; then :; else exec 2>/dev/null; fi - -# The user is always right. -if ${PATH_SEPARATOR+false} :; 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 - - -# 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 - case $as_dir in #((( - '') as_dir=./ ;; - */) ;; - *) as_dir=$as_dir/ ;; - esac - 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 - printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - - - -# 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 - printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - printf "%s\n" "$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_nop - 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_nop - 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 || -printf "%s\n" 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 - - -# Determine whether it's possible to make 'echo' print without a newline. -# These variables are no longer used directly by Autoconf, but are AC_SUBSTed -# for compatibility with existing Makefiles. -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 - -# For backward compatibility with old third-party macros, we provide -# the shell variables $as_echo and $as_echo_n. New code should use -# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. -as_echo='printf %s\n' -as_echo_n='printf %s' - -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=`printf "%s\n" "$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 || -printf "%s\n" 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 tcl $as_me 9.0, which was -generated by GNU Autoconf 2.71. 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" - -_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 - -Report bugs to the package provider." - -_ACEOF -ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` -ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config='$ac_cs_config_escaped' -ac_cs_version="\\ -tcl config.status 9.0 -configured by $0, generated by GNU Autoconf 2.71, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2021 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' -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 ) - printf "%s\n" "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - printf "%s\n" "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`printf "%s\n" "$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 ) - printf "%s\n" "$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 - \printf "%s\n" "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 - printf "%s\n" "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_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 - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "tclConfig.sh") CONFIG_FILES="$CONFIG_FILES tclConfig.sh" ;; - "tclsh.exe.manifest") CONFIG_FILES="$CONFIG_FILES tclsh.exe.manifest" ;; - - *) 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+y} || CONFIG_FILES=$config_files -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 " -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=`printf "%s\n" "$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 '` - printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -printf "%s\n" "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`printf "%s\n" "$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 || -printf "%s\n" 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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`printf "%s\n" "$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 - # - -_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@*) - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -printf "%s\n" "$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 -$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"; } && - { printf "%s\n" "$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 -printf "%s\n" "$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 - ;; - - - - 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 -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - - - Index: win/configure.ac ================================================================== --- win/configure.ac +++ win/configure.ac @@ -1,6 +1,14 @@ #! /bin/bash -norc + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + # This file is an input file used by the GNU "autoconf" program to # generate the file "configure", which is run during Tcl installation # to configure the system for the local environment. AC_INIT([tcl],[9.0]) Index: win/makefile.vc ================================================================== --- win/makefile.vc +++ win/makefile.vc @@ -1,19 +1,28 @@ +# Copyright (c) 1995-1996 Sun Microsystems, Inc. +# Copyright (c) 1998-2000 Ajuba Solutions. +# Copyright (c) 2001-2005 ActiveState Corporation. +# Copyright (c) 2001-2004 David Gravereaux. +# Copyright (c) 2003-2008 Pat Thoyts. +# Copyright (c) 2017 Ashok P. Nadkarni + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + #------------------------------------------------------------- -*- makefile -*- # # Microsoft Visual C++ makefile for building Tcl with nmake # # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # -# Copyright (c) 1995-1996 Sun Microsystems, Inc. -# Copyright (c) 1998-2000 Ajuba Solutions. -# Copyright (c) 2001-2005 ActiveState Corporation. -# Copyright (c) 2001-2004 David Gravereaux. -# Copyright (c) 2003-2008 Pat Thoyts. -# Copyright (c) 2017 Ashok P. Nadkarni #------------------------------------------------------------------------------ + # General usage: # nmake [-nologo] -f makefile.vc [TARGET|MACRODEF [TARGET|MACRODEF] [...]] # # For MACRODEF, see TIP 477 (https://core.tcl-lang.org/tips/doc/main/tip/477.md) @@ -229,10 +238,11 @@ $(TMP_DIR)\tclsh.res TCLTESTOBJS = \ $(TMP_DIR)\tclTest.obj \ $(TMP_DIR)\tclTestObj.obj \ + $(TMP_DIR)\tclTestObjInterface.obj \ $(TMP_DIR)\tclTestProcBodyObj.obj \ $(TMP_DIR)\tclThreadTest.obj \ $(TMP_DIR)\tclWinTest.obj \ $(TMP_DIR)\tclTestABSList.obj \ !if !$(STATIC_BUILD) Index: win/nmakehlp.c ================================================================== --- win/nmakehlp.c +++ win/nmakehlp.c @@ -1,16 +1,28 @@ /* - * ---------------------------------------------------------------------------- - * nmakehlp.c -- - * - * This is used to fix limitations within nmake and the environment. - * * Copyright (c) 2002 David Gravereaux. * Copyright (c) 2006 Pat Thoyts * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * ---------------------------------------------------------------------------- + * nmakehlp.c -- + * + * This is used to fix limitations within nmake and the environment. + * * ---------------------------------------------------------------------------- */ #define _CRT_SECURE_NO_DEPRECATE #include Index: win/rules.vc ================================================================== --- win/rules.vc +++ win/rules.vc @@ -1,5 +1,19 @@ +# Copyright (c) 2001-2003 David Gravereaux. +# Copyright (c) 2003-2008 Patrick Thoyts +# Copyright (c) 2017 Ashok P. Nadkarni +# +# See the file "license.terms" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + #------------------------------------------------------------- -*- makefile -*- # rules.vc -- # # Part of the nmake based build system for Tcl and its extensions. # This file does all the hard work in terms of parsing build options, @@ -7,17 +21,12 @@ # directly includes this. Extensions include it via "rules-ext.vc". # # See TIP 477 (https://core.tcl-lang.org/tips/doc/main/tip/477.md) for # detailed documentation. # -# See the file "license.terms" for information on usage and redistribution -# of this file, and for a DISCLAIMER OF ALL WARRANTIES. -# -# Copyright (c) 2001-2003 David Gravereaux. -# Copyright (c) 2003-2008 Patrick Thoyts -# Copyright (c) 2017 Ashok P. Nadkarni #------------------------------------------------------------------------------ + !ifndef _RULES_VC _RULES_VC = 1 # The following macros define the version of the rules.vc nmake build system @@ -857,13 +866,10 @@ MSVCRT = 0 !else !if [nmakehlp -f $(OPTS) "msvcrt"] !message *** Doing msvcrt !else -!if $(TCL_MAJOR_VERSION) == 8 && $(TCL_MINOR_VERSION) < 7 && $(STATIC_BUILD) -MSVCRT = 0 -!endif !endif !endif # [nmakehlp -f $(OPTS) "nomsvcrt"] !if [nmakehlp -f $(OPTS) "staticpkg"] && $(STATIC_BUILD) !message *** Doing staticpkg @@ -872,22 +878,10 @@ !if [nmakehlp -f $(OPTS) "nothreads"] !message *** Compile explicitly for non-threaded tcl TCL_THREADS = 0 USE_THREAD_ALLOC= 0 -!endif - -!if [nmakehlp -f $(OPTS) "tcl8"] -!message *** Build for Tcl8 -TCL_BUILD_FOR = 8 -!endif - -!if $(TCL_MAJOR_VERSION) == 8 -!if [nmakehlp -f $(OPTS) "time64bit"] -!message *** Force 64-bit time_t -_USE_64BIT_TIME_T = 1 -!endif !endif # Yes, it's weird that the "symbols" option controls DEBUG and # the "pdbs" option controls SYMBOLS. That's historical. !if [nmakehlp -f $(OPTS) "symbols"] @@ -1002,22 +996,17 @@ #################################################################### # 9. Parse the CHECKS macro to configure additional compiler checks # The following macros are set by this section: # WARNINGS - compiler switches that control the warnings level -# TCL_NO_DEPRECATED - 1 -> disable support for deprecated functions -# 0 -> enable deprecated functions - # Defaults - Permit deprecated functions and warning level 3 -TCL_NO_DEPRECATED = 0 WARNINGS = -W3 !if "$(CHECKS)" != "" && ![nmakehlp -f "$(CHECKS)" "none"] !if [nmakehlp -f $(CHECKS) "nodep"] !message *** Doing nodep check -TCL_NO_DEPRECATED = 1 !endif !if [nmakehlp -f $(CHECKS) "fullwarn"] !message *** Doing full warnings check WARNINGS = -W4 @@ -1143,15 +1132,11 @@ TCLIMPLIB = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib TCLLIBNAME = $(PROJECT)$(VERSION)$(SUFX).$(EXT) TCLLIB = $(OUT_DIR)\$(TCLLIBNAME) TCLSCRIPTZIP = $(OUT_DIR)\$(TCLSCRIPTZIPNAME) -!if $(TCL_MAJOR_VERSION) == 8 -TCLSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib -!else TCLSTUBLIBNAME = $(STUBPREFIX).lib -!endif TCLSTUBLIB = $(OUT_DIR)\$(TCLSTUBLIBNAME) TCL_INCLUDES = -I"$(WIN_DIR)" -I"$(GENERICDIR)" !else # !$(DOING_TCL) @@ -1163,15 +1148,11 @@ TCLSH = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)$(SUFX:t=).exe !if !exist("$(TCLSH)") TCLSH = $(_TCLDIR)\bin\tclsh$(TCL_VERSION)t$(SUFX:t=).exe !endif -!if $(TCL_MAJOR_VERSION) == 8 -TCLSTUBLIB = $(_TCLDIR)\lib\tclstub$(TCL_VERSION).lib -!else TCLSTUBLIB = $(_TCLDIR)\lib\tclstub.lib -!endif TCLIMPLIB = $(_TCLDIR)\lib\tcl$(TCL_VERSION)$(SUFX:t=).lib # When building extensions, may be linking against Tcl that does not add # "t" suffix (e.g. 8.5 or 8.7). If lib not found check for that possibility. !if !exist("$(TCLIMPLIB)") TCLIMPLIB = $(_TCLDIR)\lib\tcl$(TCL_VERSION)t$(SUFX:t=).lib @@ -1187,15 +1168,11 @@ TCLSH = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)$(SUFX:t=).exe !if !exist($(TCLSH)) TCLSH = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclsh$(TCL_VERSION)t$(SUFX:t=).exe !endif -!if $(TCL_MAJOR_VERSION) == 8 -TCLSTUBLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub$(TCL_VERSION).lib -!else TCLSTUBLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tclstub.lib -!endif TCLIMPLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)$(SUFX:t=).lib # When building extensions, may be linking against Tcl that does not add # "t" suffix (e.g. 8.5 or 8.7). If lib not found check for that possibility. !if !exist("$(TCLIMPLIB)") TCLIMPLIB = $(_TCLDIR)\win\$(BUILDDIRTOP)\tcl$(TCL_VERSION)t$(SUFX:t=).lib @@ -1207,15 +1184,11 @@ TCLTOOLSDIR = $(_TCLDIR)\tools TCL_INCLUDES = -I"$(_TCLDIR)\generic" -I"$(_TCLDIR)\win" !endif # TCLINSTALL -!if !$(STATIC_BUILD) && "$(TCL_BUILD_FOR)" == "8" -tcllibs = "$(TCLSTUBLIB)" -!else tcllibs = "$(TCLSTUBLIB)" "$(TCLIMPLIB)" -!endif !endif # $(DOING_TCL) # We need a tclsh that will run on the host machine as part of the build. # IX86 runs on all architectures. @@ -1231,17 +1204,12 @@ !if $(DOING_TK) || $(NEED_TK) WISHNAMEPREFIX = wish WISHNAME = $(WISHNAMEPREFIX)$(TK_VERSION)$(SUFX).exe TKLIBNAME8 = tk$(TK_VERSION)$(SUFX).$(EXT) TKLIBNAME9 = tcl9tk$(TK_VERSION)$(SUFX).$(EXT) -!if $(TCL_MAJOR_VERSION) == 8 || "$(TCL_BUILD_FOR)" == "8" -TKLIBNAME = tk$(TK_VERSION)$(SUFX).$(EXT) -TKIMPLIBNAME = tk$(TK_VERSION)$(SUFX).lib -!else TKLIBNAME = tcl9tk$(TK_VERSION)$(SUFX).$(EXT) TKIMPLIBNAME = tcl9tk$(TK_VERSION)$(SUFX).lib -!endif !if $(TK_MAJOR_VERSION) == 8 TKSTUBLIBNAME = tkstub$(TK_VERSION).lib !else TKSTUBLIBNAME = tkstub.lib !endif @@ -1292,22 +1260,14 @@ # Various output paths PRJIMPLIB = $(OUT_DIR)\$(PROJECT)$(VERSION)$(SUFX).lib PRJLIBNAME8 = $(PROJECT)$(VERSION)$(SUFX).$(EXT) PRJLIBNAME9 = tcl9$(PROJECT)$(VERSION)$(SUFX).$(EXT) -!if $(TCL_MAJOR_VERSION) == 8 || "$(TCL_BUILD_FOR)" == "8" -PRJLIBNAME = $(PRJLIBNAME8) -!else PRJLIBNAME = $(PRJLIBNAME9) -!endif PRJLIB = $(OUT_DIR)\$(PRJLIBNAME) -!if $(TCL_MAJOR_VERSION) == 8 -PRJSTUBLIBNAME = $(STUBPREFIX)$(VERSION).lib -!else PRJSTUBLIBNAME = $(STUBPREFIX).lib -!endif PRJSTUBLIB = $(OUT_DIR)\$(PRJSTUBLIBNAME) # If extension parent makefile has not defined a resource definition file, # we will generate one from standard template. !if !$(DOING_TCL) && !$(DOING_TK) && !$(STATIC_BUILD) @@ -1408,13 +1368,11 @@ OPTDEFINES = $(OPTDEFINES) /DTCL_WITH_EXTERNAL_TOMMATH !if "$(MACHINE)" == "AMD64" || "$(MACHINE)" == "ARM64" OPTDEFINES = $(OPTDEFINES) /DMP_64BIT !endif !endif -!if $(TCL_NO_DEPRECATED) -OPTDEFINES = $(OPTDEFINES) /DTCL_NO_DEPRECATED -!endif +OPTDEFINES = $(OPTDEFINES) !if $(USE_STUBS) # Note we do not define USE_TCL_STUBS even when building tk since some # test targets in tk do not use stubs !if !$(DOING_TCL) @@ -1439,22 +1397,10 @@ !endif !if $(VCVERSION) < 1300 OPTDEFINES = $(OPTDEFINES) /DNO_STRTOI64=1 !endif -!if $(TCL_MAJOR_VERSION) == 8 -!if "$(_USE_64BIT_TIME_T)" == "1" -OPTDEFINES = $(OPTDEFINES) /D_USE_64BIT_TIME_T=1 -!endif - -# _ATL_XP_TARGETING - Newer SDK's need this to build for XP -COMPILERFLAGS = /D_ATL_XP_TARGETING -!endif -!if "$(TCL_BUILD_FOR)" == "8" -OPTDEFINES = $(OPTDEFINES) /DTCL_MAJOR_VERSION=8 -!endif - # Like the TEA system only set this non empty for non-Tk extensions # Note: some extensions use PACKAGE_NAME and others use PACKAGE_TCLNAME # so we pass both !if !$(DOING_TCL) && !$(DOING_TK) PKGNAMEFLAGS = /DPACKAGE_NAME="\"$(PRJ_PACKAGE_TCLNAME)\"" \ Index: win/tcl.m4 ================================================================== --- win/tcl.m4 +++ win/tcl.m4 @@ -1,5 +1,12 @@ +# You may distribute and/or modify this program under the terms of the GNU +# Affero General Public License as published by the Free Software Foundation, +# either version 3 of the License, or (at your option) any later version. +# +# See the file "COPYING" for information on usage and redistribution +# of this file, and for a DISCLAIMER OF ALL WARRANTIES. + #------------------------------------------------------------------------ # SC_PATH_TCLCONFIG -- # # Locate the tclConfig.sh file and perform a sanity check on # the Tcl compile flags Index: win/tclAppInit.c ================================================================== --- win/tclAppInit.c +++ win/tclAppInit.c @@ -1,31 +1,33 @@ /* - * tclAppInit.c -- - * - * Provides a default version of the main program and Tcl_AppInit - * procedure for tclsh and other Tcl-based applications (without Tk). - * Note that this program must be built in Win32 console mode to work - * properly. - * * Copyright (c) 1993 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * Copyright (c) 1998-1999 Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclAppInit.c -- + * + * Provides a default version of the main program and Tcl_AppInit + * procedure for tclsh and other Tcl-based applications (without Tk). + * Note that this program must be built in Win32 console mode to work + * properly. + */ + #include "tcl.h" -#if TCL_MAJOR_VERSION < 9 -# if defined(USE_TCL_STUBS) -# error "Don't build with USE_TCL_STUBS!" -# endif -# if TCL_MINOR_VERSION < 7 -# define Tcl_LibraryInitProc Tcl_PackageInitProc -# define Tcl_StaticLibrary Tcl_StaticPackage -# endif -#endif #ifdef TCL_TEST extern Tcl_LibraryInitProc Tcltest_Init; extern Tcl_LibraryInitProc Tcltest_SafeInit; #endif /* TCL_TEST */ @@ -134,11 +136,11 @@ } } #ifdef TCL_LOCAL_MAIN_HOOK TCL_LOCAL_MAIN_HOOK(&argc, &argv); -#elif (TCL_MAJOR_VERSION > 8 || TCL_MINOR_VERSION > 6) && (!defined(_WIN32) || defined(UNICODE)) +#elif (!defined(_WIN32) || defined(UNICODE)) /* New in Tcl 8.7. This doesn't work on Windows without UNICODE */ TclZipfs_AppHook(&argc, &argv); #endif Tcl_Main(argc, argv, TCL_LOCAL_APPINIT); Index: win/tclWin32Dll.c ================================================================== --- win/tclWin32Dll.c +++ win/tclWin32Dll.c @@ -1,18 +1,29 @@ /* - * tclWin32Dll.c -- - * - * This file contains the DLL entry point and other low-level bit bashing - * code that needs inline assembly. - * * Copyright © 1995-1996 Sun Microsystems, Inc. * Copyright © 1998-2000 Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclWin32Dll.c -- + * + * This file contains the DLL entry point and other low-level bit bashing + * code that needs inline assembly. + */ + #include "tclWinInt.h" #if defined(HAVE_INTRIN_H) # include #endif Index: win/tclWinChan.c ================================================================== --- win/tclWinChan.c +++ win/tclWinChan.c @@ -1,17 +1,28 @@ /* - * tclWinChan.c - * - * Channel drivers for Windows channels based on files, command pipes and - * TCP sockets. - * * Copyright © 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclWinChan.c + * + * Channel drivers for Windows channels based on files, command pipes and + * TCP sockets. + */ + #include "tclWinInt.h" #include "tclIO.h" /* * State flags used in the info structures below. @@ -78,11 +89,11 @@ static int FileCloseProc(void *instanceData, Tcl_Interp *interp, int flags); static int FileEventProc(Tcl_Event *evPtr, int flags); static int FileGetHandleProc(void *instanceData, int direction, void **handlePtr); -static int FileGetOptionProc(void *instanceData, +static int FileGetOptionProc(ClientData instanceData, Tcl_Interp *interp, const char *optionName, Tcl_DString *dsPtr); static ThreadSpecificData *FileInit(void); static int FileInputProc(void *instanceData, char *buf, int toRead, int *errorCode); @@ -892,11 +903,11 @@ return dictObj; } static int FileGetOptionProc( - void *instanceData, /* The file state. */ + ClientData instanceData, /* The file state. */ Tcl_Interp *interp, /* For error reporting. */ const char *optionName, /* What option to read, or NULL for all. */ Tcl_DString *dsPtr) /* Where to write the value read. */ { FileInfo *infoPtr = (FileInfo *)instanceData; Index: win/tclWinConsole.c ================================================================== --- win/tclWinConsole.c +++ win/tclWinConsole.c @@ -1,17 +1,28 @@ /* - * tclWinConsole.c -- - * - * This file implements the Windows-specific console functions, and the - * "console" channel driver. Windows 7 or later required. - * * Copyright © 2022 Ashok P. Nadkarni * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclWinConsole.c -- + * + * This file implements the Windows-specific console functions, and the + * "console" channel driver. Windows 7 or later required. + */ + #ifdef TCL_CONSOLE_DEBUG #undef NDEBUG /* Enable asserts */ #endif #include "tclWinInt.h" Index: win/tclWinDde.c ================================================================== --- win/tclWinDde.c +++ win/tclWinDde.c @@ -1,17 +1,28 @@ /* - * tclWinDde.c -- - * - * This file provides functions that implement the "send" command, - * allowing commands to be passed from interpreter to interpreter. - * * Copyright (c) 1997 by Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclWinDde.c -- + * + * This file provides functions that implement the "send" command, + * allowing commands to be passed from interpreter to interpreter. + */ + #undef STATIC_BUILD #ifndef USE_TCL_STUBS # define USE_TCL_STUBS #endif #include "tclInt.h" @@ -136,15 +147,10 @@ #ifdef __cplusplus extern "C" { #endif DLLEXPORT int Dde_Init(Tcl_Interp *interp); DLLEXPORT int Dde_SafeInit(Tcl_Interp *interp); -#if TCL_MAJOR_VERSION < 9 -/* With those additional entries, "load tcldde14.dll" works without 3th argument */ -DLLEXPORT int Tcldde_Init(Tcl_Interp *interp); -DLLEXPORT int Tcldde_SafeInit(Tcl_Interp *interp); -#endif #ifdef __cplusplus } #endif /* @@ -173,18 +179,10 @@ Tcl_CreateObjCommand2(interp, "dde", DdeObjCmd, NULL, NULL); Tcl_CreateExitHandler(DdeExitProc, NULL); return Tcl_PkgProvideEx(interp, TCL_DDE_PACKAGE_NAME, TCL_DDE_VERSION, NULL); } -#if TCL_MAJOR_VERSION < 9 -int -Tcldde_Init( - Tcl_Interp *interp) -{ - return Dde_Init(interp); -} -#endif /* *---------------------------------------------------------------------- * * Dde_SafeInit -- @@ -208,18 +206,10 @@ if (result == TCL_OK) { Tcl_HideCommand(interp, "dde", "dde"); } return result; } -#if TCL_MAJOR_VERSION < 9 -int -Tcldde_SafeInit( - Tcl_Interp *interp) -{ - return Dde_SafeInit(interp); -} -#endif /* *---------------------------------------------------------------------- * * Initialize -- Index: win/tclWinError.c ================================================================== --- win/tclWinError.c +++ win/tclWinError.c @@ -1,17 +1,28 @@ /* - * tclWinError.c -- - * - * This file contains code for converting from Win32 errors to errno - * errors. - * * Copyright © 1995-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclWinError.c -- + * + * This file contains code for converting from Win32 errors to errno + * errors. + */ + #include "tclInt.h" /* * The following table contains the mapping from Win32 errors to errno errors. */ Index: win/tclWinFCmd.c ================================================================== --- win/tclWinFCmd.c +++ win/tclWinFCmd.c @@ -1,17 +1,28 @@ /* - * tclWinFCmd.c - * - * This file implements the Windows specific portion of file manipulation - * subcommands of the "file" command. - * * Copyright © 1996-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclWinFCmd.c + * + * This file implements the Windows specific portion of file manipulation + * subcommands of the "file" command. + */ + #include "tclWinInt.h" /* * The following constants specify the type of callback when * TraverseWinTree() calls the traverseProc() Index: win/tclWinFile.c ================================================================== --- win/tclWinFile.c +++ win/tclWinFile.c @@ -1,17 +1,28 @@ +/* + * Copyright © 1995-1998 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + /* * tclWinFile.c -- * * This file contains temporary wrappers around UNIX file handling * functions. These wrappers map the UNIX functions to Win32 HANDLE-style * files, which can be manipulated through the Win32 console redirection * interfaces. - * - * Copyright © 1995-1998 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclWinInt.h" #include "tclFileSystem.h" #include Index: win/tclWinInit.c ================================================================== --- win/tclWinInit.c +++ win/tclWinInit.c @@ -1,18 +1,29 @@ /* - * tclWinInit.c -- - * - * Contains the Windows-specific interpreter initialization functions. - * * Copyright © 1994-1997 Sun Microsystems, Inc. * Copyright © 1998-1999 Scriptics Corporation. * All rights reserved. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclWinInit.c -- + * + * Contains the Windows-specific interpreter initialization functions. + */ + #include "tclWinInt.h" #include #include #include Index: win/tclWinInt.h ================================================================== --- win/tclWinInt.h +++ win/tclWinInt.h @@ -1,16 +1,27 @@ /* - * tclWinInt.h -- - * - * Declarations of Windows-specific shared variables and procedures. - * * Copyright (c) 1994-1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclWinInt.h -- + * + * Declarations of Windows-specific shared variables and procedures. + */ + #ifndef _TCLWININT #define _TCLWININT #include "tclInt.h" Index: win/tclWinLoad.c ================================================================== --- win/tclWinLoad.c +++ win/tclWinLoad.c @@ -1,16 +1,27 @@ +/* + * Copyright © 1995-1997 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + /* * tclWinLoad.c -- * * This function provides a version of the TclLoadFile that works with * the Windows "LoadLibrary" and "GetProcAddress" API for dynamic * loading. - * - * Copyright © 1995-1997 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclWinInt.h" /* Index: win/tclWinNotify.c ================================================================== --- win/tclWinNotify.c +++ win/tclWinNotify.c @@ -1,16 +1,27 @@ +/* + * Copyright © 1995-1997 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + /* * tclWinNotify.c -- * * This file contains Windows-specific procedures for the notifier, which * is the lowest-level part of the Tcl event loop. This file works * together with ../generic/tclNotify.c. - * - * Copyright © 1995-1997 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclInt.h" /* Index: win/tclWinPanic.c ================================================================== --- win/tclWinPanic.c +++ win/tclWinPanic.c @@ -1,17 +1,28 @@ /* - * tclWinPanic.c -- - * - * Contains the Windows-specific command-line panic proc. - * * Copyright © 2013 Jan Nijtmans. * All rights reserved. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclWinPanic.c -- + * + * Contains the Windows-specific command-line panic proc. + */ + #include "tclInt.h" /* *---------------------------------------------------------------------- * * Tcl_ConsolePanic -- Index: win/tclWinPipe.c ================================================================== --- win/tclWinPipe.c +++ win/tclWinPipe.c @@ -1,17 +1,28 @@ /* - * tclWinPipe.c -- - * - * This file implements the Windows-specific exec pipeline functions, the - * "pipe" channel driver, and the "pid" Tcl command. - * * Copyright © 1996-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclWinPipe.c -- + * + * This file implements the Windows-specific exec pipeline functions, the + * "pipe" channel driver, and the "pid" Tcl command. + */ + #include "tclWinInt.h" /* * The following variable is used to tell whether this module has been * initialized. @@ -2121,13 +2132,11 @@ WinFile *filePtr = (WinFile *) pipePtr->errorFile; errChan = Tcl_MakeFileChannel((void *) filePtr->handle, TCL_READABLE); Tcl_Free(filePtr); - Tcl_SetChannelOption(NULL, errChan, "-profile", "replace"); - } - else { + } else { errChan = NULL; } result = TclCleanupChildren(interp, pipePtr->numPids, pipePtr->pidPtr, errChan); Index: win/tclWinPort.h ================================================================== --- win/tclWinPort.h +++ win/tclWinPort.h @@ -1,16 +1,27 @@ +/* + * Copyright (c) 1994-1997 Sun Microsystems, Inc. + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + /* * tclWinPort.h -- * * This header file handles porting issues that occur because of * differences between Windows and Unix. It should be the only * file that contains #ifdefs to handle different flavors of OS. - * - * Copyright (c) 1994-1997 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #ifndef _TCLWINPORT #define _TCLWINPORT Index: win/tclWinReg.c ================================================================== --- win/tclWinReg.c +++ win/tclWinReg.c @@ -1,19 +1,30 @@ /* - * tclWinReg.c -- - * - * This file contains the implementation of the "registry" Tcl built-in - * command. This command is built as a dynamically loadable extension in - * a separate DLL. - * * Copyright (c) 1997 by Sun Microsystems, Inc. * Copyright (c) 1998-1999 by Scriptics Corporation. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclWinReg.c -- + * + * This file contains the implementation of the "registry" Tcl built-in + * command. This command is built as a dynamically loadable extension in + * a separate DLL. + */ + #undef STATIC_BUILD #ifndef USE_TCL_STUBS # define USE_TCL_STUBS #endif #include "tclInt.h" @@ -143,15 +154,10 @@ #ifdef __cplusplus extern "C" { #endif DLLEXPORT int Registry_Init(Tcl_Interp *interp); DLLEXPORT int Registry_Unload(Tcl_Interp *interp, int flags); -#if TCL_MAJOR_VERSION < 9 -/* With those additional entries, "load tclregistry13.dll" works without 3th argument */ -DLLEXPORT int Tclregistry_Init(Tcl_Interp *interp); -DLLEXPORT int Tclregistry_Unload(Tcl_Interp *interp, int flags); -#endif #ifdef __cplusplus } #endif /* @@ -183,18 +189,10 @@ cmd = Tcl_CreateObjCommand2(interp, "registry", RegistryObjCmd, interp, DeleteCmd); Tcl_SetAssocData(interp, REGISTRY_ASSOC_KEY, NULL, cmd); return Tcl_PkgProvideEx(interp, "registry", "1.3.7", NULL); } -#if TCL_MAJOR_VERSION < 9 -int -Tclregistry_Init( - Tcl_Interp *interp) -{ - return Registry_Init(interp); -} -#endif /* *---------------------------------------------------------------------- * * Registry_Unload -- @@ -237,19 +235,10 @@ Tcl_DeleteCommandFromToken(interp, cmd); } return TCL_OK; } -#if TCL_MAJOR_VERSION < 9 -int -Tclregistry_Unload( - Tcl_Interp *interp, - int flags) -{ - return Registry_Unload(interp, flags); -} -#endif /* *---------------------------------------------------------------------- * * DeleteCmd -- Index: win/tclWinSerial.c ================================================================== --- win/tclWinSerial.c +++ win/tclWinSerial.c @@ -1,19 +1,30 @@ /* - * tclWinSerial.c -- - * - * This file implements the Windows-specific serial port functions, and - * the "serial" channel driver. - * * Copyright © 1999 Scriptics Corp. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * * Serial functionality implemented by Rolf.Schroedter@dlr.de */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclWinSerial.c -- + * + * This file implements the Windows-specific serial port functions, and + * the "serial" channel driver. + */ + #include "tclWinInt.h" /* * The following variable is used to tell whether this module has been * initialized. Index: win/tclWinSock.c ================================================================== --- win/tclWinSock.c +++ win/tclWinSock.c @@ -1,14 +1,26 @@ /* - * tclWinSock.c -- - * - * This file contains Windows-specific socket related code. - * * Copyright © 1995-1997 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * + * tclWinSock.c -- + * + * This file contains Windows-specific socket related code. * * ----------------------------------------------------------------------- * The order and naming of functions in this file should minimize * the file diff to tclUnixSock.c. * ----------------------------------------------------------------------- Index: win/tclWinTest.c ================================================================== --- win/tclWinTest.c +++ win/tclWinTest.c @@ -1,15 +1,27 @@ /* - * tclWinTest.c -- - * - * Contains commands for platform specific tests on Windows. - * * Copyright © 1996 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ + +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclWinTest.c -- + * + * Contains commands for platform specific tests on Windows. + */ + #undef BUILD_tcl #undef STATIC_BUILD #ifndef USE_TCL_STUBS # define USE_TCL_STUBS Index: win/tclWinThrd.c ================================================================== --- win/tclWinThrd.c +++ win/tclWinThrd.c @@ -1,18 +1,29 @@ /* - * tclWinThread.c -- - * - * This file implements the Windows-specific thread operations. - * * Copyright © 1998 Sun Microsystems, Inc. * Copyright © 1999 Scriptics Corporation * Copyright © 2008 George Peter Staplin * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclWinThread.c -- + * + * This file implements the Windows-specific thread operations. + */ + #include "tclWinInt.h" /* Workaround for mingw versions which don't provide this in float.h */ #ifndef _MCW_EM # define _MCW_EM 0x0008001F /* Error masks */ Index: win/tclWinTime.c ================================================================== --- win/tclWinTime.c +++ win/tclWinTime.c @@ -1,17 +1,28 @@ /* - * tclWinTime.c -- - * - * Contains Windows specific versions of Tcl functions that obtain time - * values from the operating system. - * * Copyright © 1995-1998 Sun Microsystems, Inc. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ +/* + * You may distribute and/or modify this program under the terms of the GNU + * Affero General Public License as published by the Free Software Foundation, + * either version 3 of the License, or (at your option) any later version. + + * See the file "COPYING" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +/* + * tclWinTime.c -- + * + * Contains Windows specific versions of Tcl functions that obtain time + * values from the operating system. + */ + #include "tclInt.h" /* * Number of samples over which to estimate the performance counter. */